在网上下载,pyinstxtractor.py,对Reverse400.exe进行反汇编
得到其源代码为
$ cat Revesre03 data = "x1cx7ax16x77x10x2ax51x1fx4cx0fx5bx1dx42x2fx4bx7ex4ax7ax4ax7b" + "x49x7fx4ax7fx1ex78x4cx75x10x28x18x2bx48x7ex46x23x12x24x11x72" + "x4bx2ex1bx7ex4fx2bx12x76x0b" ''' char buf[] = "flag:{NSCTF_md5098f6bcd4621d373cade4e832627b4f6}"; int _tmain(int argc, _TCHAR* argv[]) { printf("%d ", 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。
于是写出解码脚本:
得到: