运行分析
- 需要破解Name和Serial
PE分析
- ASM程序,32位,无壳
静态分析&动态调试
- ida搜索字符串,找到关键字符串
- 先静态分析,结果如上
- 动调后发现,byte_403037为Name[-1]的地址
- *(_DWORD *)Serial表示取出Serial的32位bit,因为大小端存储,取值时为倒序,举例:01020304变为04030201
算法分析
import binascii
Name = 'A'
Serial = ''
v5 = 0
for i in range(len(Name)):
v5 = 2 *(ord(Name[i]) * ((ord(Name[i]) >> 1) + 3) - ord(Name[i]) + ord(Name[i]) * ord(Name[i])+ v5)
Serial = binascii.a2b_hex(hex(v5)[2:]).decode()[::-1]
print(Name + '的Serial为:\n' + Serial)
- 因为结果涉及不可见字符,不是所有Name都有可见字符的Serial,这里找了个Name='A’满足要求
- 验证成功(验证前要重启程序,否则可能因之前输入的数据导致结果不正确)
- 想找到更多Name和Serial组合可以进行爆破,这里就不写了