= xor = == 問題 == 712249146f241d31651a504a1a7372384d173f7f790c2b115f47 Source Code: {{{#!highlight c #include #include int main() { char flag[] = "ADCTF_XXXXXXXXXXXXXXXXXXXX"; int len = strlen(flag); for (int i = 0; i < len; i++) { if (i > 0) flag[i] ^= flag[i-1]; flag[i] ^= flag[i] >> 4; flag[i] ^= flag[i] >> 3; flag[i] ^= flag[i] >> 2; flag[i] ^= flag[i] >> 1; printf("%02x", (unsigned char)flag[i]); } return 0; } }}} == メモ == == 解法 == {{{#!highlight c #include #include int main() { char ct[] = "\x71\x22\x49\x14\x6f\x24\x1d\x31\x65\x1a\x50\x4a\x1a\x73\x72\x38\x4d\x17\x3f\x7f\x79\x0c\x2b\x11\x5f\x47"; char flag[] = "ADCTF_XXXXXXXXXXXXXXXXXXXX"; char pt[256]; int len = strlen(flag); for (int i = 0; i < len; i++) { for (int c = 0; c < 256; c++) { flag[i] = c; if (i > 0) flag[i] ^= flag[i-1]; flag[i] ^= flag[i] >> 4; flag[i] ^= flag[i] >> 3; flag[i] ^= flag[i] >> 2; flag[i] ^= flag[i] >> 1; if (flag[i] == ct[i]) { pt[i] = c; break; } } } pt[len] = 0; printf("%s\n", pt); return 0; } }}} {{{ % ./solve ADCTF_51mpl3_X0R_R3v3r51n6 }}}