[Off-topic] stephj:
Some of the UK daily press have let some of the cats out of the bag.

http://www.telegraph.co.uk/news/ukn...-GCHQ-code-directed-to-25000-job-vacancy.html

It would also appear that the hex digits are 32 bit 80386 or later machine code, so lets do this step at least.

The following 'C' code takes the file HEXCODE.TXT and converts it to the binary file HEXCODE.BIN

HEXCODE.ZIP contains HEXCODE.BIN

#include <stdio.h>

main()

{
char hex[16];
char buffer[100];

int i;
FILE *in,*out;

if((in=fopen("hexcode.txt","r"))==NULL)
{
printf("Can't open input HEXCODE.TXT\n");
return(1);
}

if((out=fopen("hexcode.bin","wb"))==NULL)
{
printf("Can't open output HEXCODE.BIN\n");
return(1);
}

while(fgets(buffer,100,in))
{
sscanf(buffer,"%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X

%02X %02X",
&hex[0],&hex[1],&hex[2],&hex[3],&hex[4],&hex[5],&hex[6],&hex[7],
&hex[8],&hex[9],&hex[10],&hex[11],&hex[12],&hex[13],&hex[14],&hex[15]);

fwrite(hex,1,16,out);
}
fclose(in);
fclose(out);

return(0);

}

This file can then be loaded into a dissassembler. The command line version of DEBUG.EXE has an inbuilt disassembler, but it can't cut it as it is only 16 bit. The freeware version of IDA being an excellent tool for the job. Once you have told it that the code is 32 bit and the code starts at offset 0, it reveals the following code. Time to brush up your 32 bit x86 assembler.

seg000:00000000 seg000 segment byte public 'CODE' use32
seg000:00000000 assume cs:seg000
seg000:00000000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
seg000:00000000 jmp short loc_6
seg000:00000000 ; ---------------------------------------------------------------------------
seg000:00000002 db 0AFh ; »
seg000:00000003 db 0C2h ; -
seg000:00000004 db 0BFh ; +
seg000:00000005 db 0A3h ; ú
seg000:00000006 ; ---------------------------------------------------------------------------
seg000:00000006
seg000:00000006 loc_6: ; CODE XREF: seg000:00000000j
seg000:00000006 sub esp, 100h
seg000:0000000C xor ecx, ecx
seg000:0000000E
seg000:0000000E loc_E: ; CODE XREF: seg000:00000013j
seg000:0000000E mov [esp+ecx], cl
seg000:00000011 inc cl
seg000:00000013 jnz short loc_E
seg000:00000015 xor eax, eax
seg000:00000017 mov edx, 0DEADBEEFh
seg000:0000001C
seg000:0000001C loc_1C: ; CODE XREF: seg000:00000032j
seg000:0000001C add al, [esp+ecx]
seg000:0000001F add al, dl
seg000:00000021 ror edx, 8
seg000:00000024 mov bl, [esp+ecx]
seg000:00000027 mov bh, [esp+eax]
seg000:0000002A mov [esp+eax], bl
seg000:0000002D mov [esp+ecx], bh
seg000:00000030 inc cl
seg000:00000032 jnz short loc_1C
seg000:00000034 jmp loc_95
seg000:00000039
seg000:00000039 ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
seg000:00000039
seg000:00000039
seg000:00000039 sub_39 proc near ; CODE XREF: sub_39+5Ep
seg000:00000039 mov ebx, esp
seg000:0000003B add ebx, 4
seg000:00000041 pop esp
seg000:00000042 pop eax
seg000:00000043 cmp eax, 41414141h
seg000:00000048 jnz short loc_8D
seg000:0000004A pop eax
seg000:0000004B cmp eax, 42424242h
seg000:00000050 jnz short loc_8D
seg000:00000052 pop edx
seg000:00000053 mov ecx, edx
seg000:00000055 mov esi, esp
seg000:00000057 mov edi, ebx
seg000:00000059 sub edi, ecx
seg000:0000005B rep movsb
seg000:0000005D mov esi, ebx
seg000:0000005F mov ecx, edx
seg000:00000061 mov edi, ebx
seg000:00000063 sub edi, ecx
seg000:00000065 xor eax, eax
seg000:00000067 xor ebx, ebx
seg000:00000069 xor edx, edx
seg000:0000006B
seg000:0000006B loc_6B: ; CODE XREF: sub_39+52j
seg000:0000006B inc al
seg000:0000006D add bl, [esi+eax]
seg000:00000070 mov dl, [esi+eax]
seg000:00000073 mov dh, [esi+ebx]
seg000:00000076 mov [esi+eax], dh
seg000:00000079 mov [esi+ebx], dl
seg000:0000007C add dl, dh
seg000:0000007E xor dh, dh
seg000:00000080 mov bl, [esi+edx]
seg000:00000083 mov dl, [edi]
seg000:00000085 xor dl, bl
seg000:00000087 mov [edi], dl
seg000:00000089 inc edi
seg000:0000008A dec ecx
seg000:0000008B jnz short loc_6B
seg000:0000008D
seg000:0000008D loc_8D: ; CODE XREF: sub_39+Fj
seg000:0000008D ; sub_39+17j
seg000:0000008D xor ebx, ebx ; status
seg000:0000008F mov eax, ebx
seg000:00000091 inc al
seg000:00000093 int 80h ; LINUX - sys_exit
seg000:00000095
seg000:00000095 loc_95: ; CODE XREF: seg000:00000034j
seg000:00000095 nop
seg000:00000096 nop
seg000:00000097 call sub_39
seg000:0000009C inc ecx
seg000:0000009D inc ecx
seg000:0000009E inc ecx
seg000:0000009F inc ecx
seg000:0000009F sub_39 endp
seg000:0000009F
seg000:0000009F seg000 ends
seg000:0000009F
seg000:0000009F
seg000:0000009F end

There are one or two things to note about this code. It appears to have been hand written, as it is does not carry the signature of a compiler. It has probably designed to run on a Linux OS distro, as there is no usual 'Windows' end/exit/return to the procedure, namely a RET instruction. Instead it uses an INT 80h interrupt. also note the DEADBEEF reference at 0x17

This code is used to decrypt a message hidden in the CYBER.PNG file itself, which is the image in the first post.

I'm off to hide under the bed now, there are two Men in Black peering through the window!