【实验吧】Reverse400
在网上下载,pyinstxtractor.py,对Reverse400.exe进行反汇编
得到其源代码为
$ cat Revesre03 data = \ "\x1c\x7a\x16\x77\x10\x2a\x51\x1f\x4c\x0f\x5b\x1d\x42\x2f\x4b\x7e\x4a\x7a\x4a\x7b" +\ "\x49\x7f\x4a\x7f\x1e\x78\x4c\x75\x10\x28\x18\x2b\x48\x7e\x46\x23\x12\x24\x11\x72" +\ "\x4b\x2e\x1b\x7e\x4f\x2b\x12\x76\x0b" ''' char buf[] = "flag:{NSCTF_md5098f6bcd4621d373cade4e832627b4f6}"; int _tmain(int argc, _TCHAR* argv[]) { printf("%d\n", strlen(buf)); char key = '\x0b'; buf[47] ^= key; for (int i = 1; i < 48; i++) { buf[48 - i - 1] ^= buf[48 - i];
} return 0; } ''' print "Revese it?????????"
这是⼀段 Python 代码并嵌⼊了⼀段 C 的注释, buf ⾥的 flag 并不是真正的 flag。 将 C 语⾔提取出来编译运⾏发现 encode 之后的 buf 和上⾯的 data 很像,尤其 是⾸尾是完全⼀样的,既然 encode(buf) ≈ data ,那么 decode(data) ≈ buf ,所以猜测对 data 进⾏逆向解码就是真正的 flag。
于是写出解码脚本:
得到: