这是多年前的祖坟贴了吧 这还被挖出来了!? 算了,我之前分析过,简单记录过过程,就在评论里发一下了。
在分析MFC程序时,很难通过单步调试的方式,步入到事件的响应逻辑代码中。因为期间调用了太多dll中的代码,很难分的清楚哪一步需要stepin哪一步需要stepover,在什么地方下断点也很难抉择,所以今天就简单介绍一下在Windows平台分析mfc程序案件事件响应逻辑代码时该如何设置断点,定位逻辑代码。定位VC代码和VB代码按键响应事件的方法不太一样,其实,这里用实例介绍如何定位VB代码的按键响应代码,再简单说一下VC的不同:
1. 准备的内容,abex’2 crackme 小程序,和syp++。Spy++在下载visualstudio的目录下Tools文件夹里。如下图所示:
使用spy++的目的是快速获得该按键在系统中的句柄,当然也可以在OD窗口选项中找到,但这种方式更快捷。
2. 然后点击spy++的小望远镜图标,出现如下画面,并将准星移动到按键上,可得到handle的值为:00290F5C
3. 在OD中按ctl+g 找到CallWindowProcA()函数,会跳到User32.dll的module中,并下条件断点:
[esp+8]==xxxxxxxx && [esp+0c]==202
其中xxxxxxxx代表刚刚我们获得的handle数值,在这里是00290F5C
4. 输入Name和Serial,点击Check,可见到达设置断点处:
此时是在User32.dll段,我们此时需要跳出此段,到abex2crackme的text代码段。按ctl+m打开memory列表选项,在abex2crackme程序的text段设置断点:
5. 按F9继续运行程序,就会回到abexcm2程序段:
PS:可能需要多次进进出出,多次在text处设置断点,hit到就stepin到函数中,然后再设置text断点,反复以往,终归会登陆成功。
6. 持续单步执行,即可找到加密部分和弹出成功或者错误的msgbox的地方,即找到了按键发生时响应的逻辑代码部分:
VC程序大体只是在第三步有所不同:
在VC程序中查询的指令为:IsDialogMessageW,并在入口处设置条件断点:
[[esp+8]]==xxxxxxxx && [[esp+8]+4]==202
最后于 2018-7-17 14:52
被逆向实习生编辑
,原因: