[ksnctf] Rights out

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;             
}

これで十分です。