首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > VSTS >

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

2013-01-25 
IDA学习笔记--VS2008按钮事件捕捉IDA笔记--VS2008按钮事件捕捉用到工具:IDA ProcC32AsmRescopeVS2008LordP

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

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

用到工具:

IDA Proc

C32Asm

Rescope

VS2008

LordPE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

{ WM_COMMAND, (WORD)BN_CLICKED, (WORD)IDC_BUTTON1, (WORD)IDC_BUTTON1, AfxSigCmd_v, \

(static_cast< AFX_PMSG > (&CMFCDemoDlg::OnBnClickedButton1)) },

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

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

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

1101000000000000E8030000E8030000

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

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

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

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

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

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

这里要说明下,上面那串 

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

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

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

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

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


1楼liyoubaidu4天前 14:47
不懂。
Re: ccnyou4天前 15:01
回复liyoubaidun不懂可以提问,呵呵

热点排行