FlareOn2 very success
32位无壳程序
拖进IDA查看

栈指针不平衡 看了别人的博客发现是00401001的地方改为-04,下载的程序已经修改好了。
查看关键函数

这个函数里面的v12 = (**ROL1**(1, v4 & 3) + v11 + v10);
语句是加密的关键函数,而v13 = *v7 == v12
是检查函数。可以看出要将加密后的字符串一个个加密一个个判断,然后跟倒置的a2做比对。
需要查看V7的值是什么

可以看到v7是DI寄存器,动态调试

通过DI的地址跟踪到数据的地址

只是获得了32个数据,但是后面的几个没有,题目提示是@flare-on.com
结尾,也没有关系
从上面这个异或AL可以得到异或的值是256``(C7)`
脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| sumv = 0 lenv = 37 rolv = 1 flag = 1 result = '' values = [0xa8,0x9a,0x90,0xb3,0xb6,0xbc,0xb4,0xab,0x9d,0xae,0xf9,0xb8,0x9d,0xb8,0xaf,0xba,0xa5,0xa5,0xba,0x9a,0xbc,0xb0,0xa7,0xc0,0x8a,0xaa,0xae,0xaf,0xba,0xa4,0xec,0xaa,0xae,0xeb,0xad,0xaa,0xaf,] for i in range(37): rolv = (1 << (sumv & 3)) % 256 code = (455 ^ (values[i] - rolv - flag)% 256) %256 result = result + chr(code) sumv = sumv + values[i] print result
|
