码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-09-25 21:47:13      阅读:707      评论:0      收藏:0      [点我收藏+]

标签:

http://blog.csdn.net/ccnyou/article/details/8521611

 

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_BUTTON1, AfxSigCmd_v, \

(static_cast< AFX_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 11h按Alt+Q,选择刚才的AFX_MSGMAP_ENTRY,目标出来,如图:

技术分享

 

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

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

标签:

原文地址:http://www.cnblogs.com/gamekk/p/4839522.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!