ida逆向实战8.MFC程序原理与消息映射逆向还原

admin 2024年1月24日11:08:55评论30 views字数 1268阅读4分13秒阅读模式
本文章涉及到的内容:

1.预备知识

2.MFC逆向基础概念

3. IDA逆向查找

4.mfc消息映射定位

5.虚表函数定位

6.修复创建原始结构

7.定位分析用户函数代码

[关于消息和消息队列 - Win32 apps | Microsoft Learn](https://learn.microsoft.com/zh-cn/windows/win32/winmsg/about-messages-and-message-queues)

系统维护了一个大的消息队列,由驱动讲鼠标、键盘等硬件交互设备产生的信号包装成一个个数据结构,也就是常说的消息。系统维护了一个大的公共消息队列,每当键盘鼠标产生一个硬件消息后都会讲消息塞到这个大的消息队列中。然后等待各个UI程序的每个窗口线程,从这个大消息队列中取出自己窗口可以处理的消息后拿到自己的窗口回调消息队列里处理。

相关视频教程

新到了155节

ida逆向实战8.MFC程序原理与消息映射逆向还原

在开发早期没有各种UI框架的情况下,需要开发者自己注册窗口并设置窗口回调来处理自己想要的消息函数。后来微软推出MFC UI框架,可以使开发者高效的拖拽UI控件,为繁琐的UI代码设计节约了宝贵时间。但却为逆向工作者定位用户代码添加了负担。# MFC逆向基础概念

MFC的消息机制本质是将SDK中的消息与指定窗口ID的控件进行绑定。这种绑定关系由一种全局消息映射表(AFX_MSGMAP)管理存储。该映射表一般存储在.rdata资源节中,所以查找该表应该优先过滤其他节的干扰。

pBaseMessageMap参数存放GetMessageMap函数指针

struct AFX_MSGMAP{    AFX_MSGMAP * pBaseMessageMap;    AFX_MSGMAP_ENTRY * lpEntries;}



struct AFX_MSGMAP_ENTRY{    UINT nMessage;    //Windows Message    UINT nCode;       //Control code or WM_NOTIFY code    UINT nID;         //control ID (or 0 for windows messages)    UINT nLastID;     //used for entries specifying a range of control id's    UINT nSig;        //signature type(action) or pointer to message    AFX_PMSG pfn;     //routine to call (or specical value)}

AFX_MSGMAP结构中第一个字段是一个函数指针我们一般并不关注,第二个是我们关注的消息绑定项结构体数组指针。nMessage是窗口消息、nCode是消息附加信息、nID是窗口ID、pfn就是该控件用于处理指定类型消息的回调函数。

两个结构体在IDA内存布局如下,我们在静态逆向的过程就是找到对应的消息绑定结构然后直接定位到用户代码。

ida逆向实战8.MFC程序原理与消息映射逆向还原

# IDA逆向查找

可以优先查看ResourceHacker从资源节中获取感兴趣的控件ID。

原文始发于微信公众号(安全狗的自我修养):ida逆向实战8.MFC程序原理与消息映射逆向还原

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月24日11:08:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ida逆向实战8.MFC程序原理与消息映射逆向还原http://cn-sec.com/archives/2425381.html

发表评论

匿名网友 填写信息