本次使用到的软件有:PEiD、IDA、X32dbg
刚学逆向不久,可能有些地方会有错误,欢迎各位大佬指导
执行
运行程序
点击About
点击确定,输入如图数据
点击try Now
点击确定,回到主界面
点击Exit,退出
查壳,使用PEiD打开
可以看到,这个程序使用MASM32/TASM32编程得到,没有加壳。使用PEiD中的插件Krypto ANALyzer,可以看到程序使用的MD5加密算法,并显示地址000004C3::004010C3
在IDA中打开程序,点击G键
在窗口中输入004010C3,点击确定,跳转到MD5算法的函数代码中
向上得到该地址位于函数sub_401000中,猜想由函数sub_401000执行MD5算法
点击sub_401000后点击X键
点击确定,在伪代码中看到sub_401000被调用的地方
点击tab键转到流程图
点击空格键
得到函数sub_401000被调用的地址
.text:00401B13 call sub_401000
在流程图中看到调用函数GetDlgItemTextA 后进行跳转,猜想GetDlgItemTextA为关键函数
空格键转到代码中,得到调用函数GetDlgItemTextA的地址
.text:00401AA3 call GetDlgItemTextA
空格键回到流程图,可以看到还有另外一个类似的函数lstrcmpA,在调用后进行判断并跳转
空格键转到代码中,可以看到函数lstrcmpA被调用的地址
.text:00401B27 call lstrcmpA
打开x32dbg进行动态调试,在刚才找到的三个关键地址处使用F2断点
开始执行程序,在地址004019E4处停下
F9继续运行,弹出程序窗口,输入如下数据
点击try now,程序继续运行,在断点00401AA3处停下
点击F8
右键在内存窗口中转到cm-2.403380,在内存窗口的内存1中显示为,是输入的数据name
F9,在第二个断点00401B13处停下,此处调用函数sub_401000
使用F7单步跟进
看到右侧隐藏FPU处如图所示,右键点击EDI,在内存窗口中转到窗口1,是输入的数据,存放在地址为00403380的内存中
右键点击ESI,在内存窗口中转到窗口2,地址为004056A8
右键点击EIP,在内存窗口中转到窗口3,地址为0019F89C
F9进入地址为00401B27断点处
此时内存窗口2为
在右侧窗口中看到有
右键点击2.esp+4转到内存窗口,地址为004079D0,可在内存窗口看到,猜测为Serial
点击F8
跳转到
可猜想地址 00401B2E处 指令jne cm-2.401B45是关键指令,判断是否登录成功的关键指令。
双击该指令,将jne改为je,点击确定
F9继续运行
Ctrl F2重新运行,输入和刚才一样的数据,F9运行
Good Serial成功
将输入的数据aaabbbccc通过加密器进行MD5加密得到
d1aaf4767a3c10a473407a4e47b02da6
而在刚才的内存窗口2显示为
是aaabbbccc经MD5加密后的数据,存在地址为004056A8的内存中
在内存窗口4中
猜测为aaabbbccc的Serial---AB96E4D27581103D06C16A7347B02DA6
测试,将X32dbg关闭,不保存更改,重新打开CM-2.exe,输入以下数据
点击try now
成功