ksnctfにチャレンジ 第24問目です。
※ksnctfは常駐型のCTFサイトです。 ※問題のページはコチラです。
Rights out
.NETなアプリケーションが渡されます。 Windowsなら .Net Reflector か ildasm Linux/Mono なら ikdasm でデコンパイルできます。
ikdasmすると
.data cil I_00002338 = bytearray (
01 00 00 00 07 00 00 00 10 00 00 00 0B 00 00 00
0E 00 00 00 13 00 00 00 14 00 00 00 12 00 00 00)
.data cil I_00002358 = bytearray (
55 00 00 00 6F 00 00 00 75 00 00 00 2B 00 00 00 // U...o...u...+...
68 00 00 00 7F 00 00 00 75 00 00 00 75 00 00 00 // h.......u...u...
21 00 00 00 6E 00 00 00 63 00 00 00 2B 00 00 00 // !...n...c...+...
48 00 00 00 5F 00 00 00 55 00 00 00 55 00 00 00 // H..._...U...U...
5E 00 00 00 42 00 00 00 78 00 00 00 62 00 00 00 // ^...B...x...b...
4F 00 00 00 75 00 00 00 44 00 00 00 53 00 00 00 // O...u...D...S...
40 00 00 00 5E 00 00 00 27 00 00 00 41 00 00 00 // @...^...'...A...
49 00 00 00 20 00 00 00 41 00 00 00 48 00 00 00 // I... ...A...H...
33 00 00 00) // 3...
怪しぎるデータがあり
IL_0012: ldstr "Congratulations!"
付近以降を読めば
IL_007c: xor
XORしている部分見つかります。 もうちょっと複雑なら .Net Reflectorにかけるところですが これくらいなら
#include <stdio.h>
int main()
{
int i;
int key[] = { 0x01, 0x07 ,0x10, 0x0B, 0x0E, 0x13 , 0x14, 0x12 };
int flag[] = {
0x55, 0x6F, 0x75, 0x2B, 0x68, 0x7F, 0x75,
0x75, 0x21, 0x6E, 0x63, 0x2B, 0x48, 0x5F,
0x55, 0x55, 0x5E, 0x42, 0x78, 0x62, 0x4F,
0x75, 0x44, 0x53, 0x40, 0x5E, 0x27, 0x41,
0x49, 0x20, 0x41, 0x48, 0x33
};
for(i=0;i<33;i++)
{
putchar(flag[i]^key[i%8]);
}
putchar('\n');
return 0;
}
これで十分です。