IDA学习笔记--VS2008按钮事件捕捉

IDA笔记--VS2008按钮事件捕捉

用到工具:

IDA Proc

C32Asm

Rescope

VS2008

LordPE

实例程序:MFCDemo.exe(附下载链接),我们目标是找到Button1对应的函数的地址处

附件包含:博客文章原文文档,文章中用到的MFCDemo程序。

下载链接:http://download.csdn.net/detail/ccnyou/5012040


1,首先,IDA载入程序,在左侧Function Name中输入 CDialog::GetMessageMap(没有输入框,只是定位到这个函数而已,其实书一部分就出来了PS,如果能找到GetThisMessageMap优选选择GetThisMessageMap),如图


2,在XREF中右键,选择“跳到交叉参考”,如图:


点进去后第一个不是我们要找的,第二个开始才是我们目标,第二个如图:


3,此处,点击IDA上面的 Structures打开结构体窗口,按键盘Insert增加一个结构体


名字使用AFX_MSGMAP_ENTRY,然后依次按D增加几个成员并一一改名,最终如图



接下来,回到刚才汇编窗口,从第一个unk_4357B8开始,按Alt+Q,将此处转为结构体变量,在弹出来的窗口选择AFX_MSGMAP_ENTRY,转化之后如图:


4,到这里,其实已经可以发现一些信息,VS2008中的AFX_MSGMAP_ENTRY结构体,对于按钮消息都是这样子的

WM_COMMAND, (WORD)BN_CLICKED, (WORD)IDC_BUTTON1, (WORD)IDC_BUTTON1AfxSigCmd_v, \

(static_castAFX_PMSG > (&CMFCDemoDlg::OnBnClickedButton1)) },

我们用Rescope打开目标程序,打开Dialog窗口,找到目标按钮Button1,拿到按钮ID如图


这里ID = 1000 = 0x03E8,然后根据上面的信息,构造一串HEX常量

1101000000000000E8030000E8030000

其中,1101 就是 0x0111,对应WM_COMMAND, E803即是0x03E8,就是按钮ID

将程序载入C32Asm,搜索HEX,找到一个:


右键,选择【转到对应汇编模式编辑】,拿到指令地址00436FF8,减掉基址00400000得到036FF8,将程序载入LordPE,使用位置计算器,在偏移量中输入036FF8,点击转换,得到VA=00437DF8

4,在IDA中反汇编窗口,按G转到00437DF8,如图


这里要说明下,上面那串 

dd offset ?OnBnClickedOk@CMFCDemoDlg@@QAEXXZ ; CMFCDemoDlg::OnBnClickedOk(void)

估计是由于IDA找到了调试信息,但是一般逆向过程是没有调试信息的,这里忽略它。

我们对着db 11hAlt+Q,选择刚才的AFX_MSGMAP_ENTRY,目标出来,如图:


在没有调试信息的情况下,这里是一个函数偏移量,双击就能到达函数代码处。文章至此结束。有问题请给我留言^_^


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值