FlareOn2 very success

32位无壳程序

拖进IDA查看

5

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

查看关键函数

3

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

需要查看V7的值是什么

4

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

1

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

2

只是获得了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

6