运行分析
- 需破解Name和Serial,点击Verify无反应
PE分析
- PEtite 2.x壳,32位
手动脱壳
- 因为是win7及之后的系统存在ASLR,将随机化进程的内存地址空间布局,所以这里使用windows xp虚拟机 + OD进行脱壳
- 用VMware打开windows xp虚拟机,将程序拖入OD
- ESP定律找OEP(程序入口点):按2下F8,发现寄存器仅ESP变红,根据ESP定律判断不变,在这里右键->HW break[ESP]下硬件断点
- 接下来按F9后观察,标题栏显示当前模块为ntdll系统模块,直接跳过
- 继续按2下F9跳过ntdll系统模块,来到AD_CM#8模块,观察无OEP特征,跳过
- 接下来又是ntdll系统模块,2下F9跳过
- 终于来到疑似OEP处,发现8BEC前面还有一个55,一般55是函数头,判断004584C0为OEP
- 右键 -> 用OllyDump脱壳调试进程 -> 修正为:584C0 -> 脱壳 -> 保存为1.exe
- 发现壳已去除,是Delphi程序
静态分析&动态调试
- ida搜索字符串,发现关键字符串
- 先静态分析,发现两个弹窗函数,但未知函数还是很多
- 发现aAdcm3 = “ADCM3-”
- 程序分析结果如下:
- 将Name每个字符的ascii值整除3,再转十进制字符串,拼接起来
- Serial 与 "“ADCM3-” + 上一步计算的值比较,相等则弹出成功
算法分析
Name = 'concealbear'
Serial = ''
aAdcm3 = "ADCM3-"
Serial = aAdcm3
for i in range(len(Name)):
Serial += str(ord(Name[i])//3)
print(Name + '的Serial为:\n' + Serial)
- 验证成功