MFC

简介

微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
–百度百科

虽然由于实际应用中MFC似乎即将被淘汰,(据说微软放弃更新十几年,但从版本号和种种迹象来看似乎是还在不断更新的,VS2015中的MFC已经更新到了14.0版本),但偶尔还是会出现这一类的GUI的
而且由于相对于原生WindowsGUI程序的主函数被直接作为参数来说,MFC将各个触发函数放置在消息映射表里,所以相对有一些难度 因此CTF中有时会出现MFC类的题目、也需要做一些知识储备

基本机制

MFC的思想是所有类继承自基类CObject,每个类都拥有一个消息映射表和各自的成员
通常开发者自定义的窗口是继承自CDialog的,整个继承链为

MyDialog->CDialog->CWnd->CCmdTarget->CObject

当遇到消息时,会从本类的消息映射表中匹配处理对应消息的函数,如果没有找到则去父类的消息映射表中寻找,以此类推
如果直到CObject类的消息映射表寻找完都没有函数处理消息,则将消息放入默认处理函数中处理(与Windows32API的思想一致)

消息映射表是如下结构

struct AFX_MSGMAP
{const AFX_MSGMAP *(__stdcall *pfnGetBaseMap)();const AFX_MSGMAP_ENTRY *lpEntries;
};

第一个成员指向其父类的AFX_MSGMAP,从而实现路由
第二个成员指向的是本类的消息映射表数组,即如下结构

struct AFX_MSGMAP_ENTRY
{UINT nMessage;UINT nCode;UINT nID;UINT nLastID;UINT_PTR nSig;void (*pfn)(void);
};

其中nMessage表示消息号,nID表示触发消息的控件ID,最后一个成员就是消息处理函数了

逆向技巧

  • 字符串搜索
    通过消息处理函数中的字符串来寻找切入点
  • API下断
    通过消息处理函数中的API,例如MessageBox、GetWindowText等来寻找切入点
  • 资源节内获取控件ID后通过RTTI寻找消息映射表
    RTTI是MFC中用来识别对象所属类的机制,这个机制中要求类名以字符串形式存储,这就给了我们找到CDialog类的机会。然后通过AFX_MSG_MAP的交叉引用可以找到子类的消息映射表,再通过资源节内查找到的控件ID来锁定消息映射条目
  • 使用xspy、spy++等工具
    xspy是一个通过注入dll到目标进程,然后利用MFC特性来获取相关数据的自动化工具,非常方便

190326 逆向-MFC逆向技巧相关推荐

  1. 【黑客免杀攻防】读书笔记14 - 面向对象逆向-虚函数、MFC逆向

    虚函数存在是为了克服类型域解决方案的缺陷,以使程序员可以在基类里声明一些能够在各个派生类里重新定义的函数. 1 识别简单的虚函数 代码示例: #include "stdafx.h" ...

  2. 游戏逆向-CSGO逆向透视自瞄分析技巧

    游戏逆向–CSGO逆向分析 分享一下个人所学,说实话自己也不是学的很透,首先我推荐使用Ce结合Old,因为可以看清汇编源码的同时通过ce查找突破口. 首先说一下,在弄清楚所谓的透视自瞄之前先弄清楚什么 ...

  3. 【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )

    文章目录 一.应用结构分析 二.定位动态库位置 三.定位动态库中的修改点 四.修改动态库 五.重打包 一.应用结构分析 分析上一篇博客 [Android 逆向]逆向修改游戏应用 ( APK 解析工具 ...

  4. 逆向-360逆向writeup

    Crackme逆向分析 逆向第一题,很简单,分分钟能搞定.题目大致是说找一个key,提示success就行. Peid查一下没有任何壳,是vc写的程序,里面没有知名的算法.开始分析 错误的时候是这个样 ...

  5. 2021年巫妖易语言-js逆向-安卓逆向hook教程

    链接:https://pan.baidu.com/s/1kdiAfXVNHgKT6BFdqzCYsw 提取码:jvw8 2021年最新巫妖易语言-js逆向-安卓逆向hook教程-10.12上课录像(这 ...

  6. 巫妖易语言+js逆向+安卓逆向

    教程介绍 2021年最新巫妖易语言+js逆向+安卓逆向hook培训教程(修复画质声音不同步不加密版),课程主要讲解的内容是易语言+js逆向+安卓逆向hook,课程是2020年11月底刚培训结束的,也是 ...

  7. MFC小技巧系列——1、初始焦点设置

    我们在使用mfc编写windows界面应用程序时,启动mfc程序后,mfc会自动分配初始的控件焦点,有时候这些焦点被分配置到编辑框.列表框时,就会造成误操作,那么该如何避免这种情况呢,这就需要我们在程 ...

  8. JavaScript 逆向调试常用技巧

    1. 断点调试 接下来介绍一个非常重要的功能 -- 断点调试.在调试代码的时候,我们可以在需要的位置上打断点,当对应事件触发时,浏览器就会自动停在断点的位置等待调试,此时我们可以选择单步调试,在面板中 ...

  9. Python 爬虫逆向破解案例实战 (三):凡科网逆向之闭包技巧

    目录 1. 凡科网逆向分析 2. 代码实现 3. 总结 1. 凡科网逆向分析 点击 此处 进入到 凡科网 的主页面,在键盘中按下 <Fl2> 快捷键或者是鼠标右键单击选择 检查(inspe ...

最新文章

  1. 这可能是最全的机器学习工具手册!
  2. 根据Android架构分层推荐开发书籍
  3. ML之Anaconda:关于Anaconda集成平台简介、安装、使用方法的详细攻略
  4. GARFIELD@01-16-2005
  5. python搜索路径顺序_Python module之搜索路径
  6. 80%的Linux都不懂的内存问题
  7. npm时需要python
  8. windows oracle 宕机,windows上的oracle一次宕机恢复
  9. 如何隐藏地址栏中的真实地址_如何删除Chrome地址栏记录?
  10. _过程_函数_触发器_游标
  11. php yii应用运维,Windows运维之Windows下用cmd命令实例讲解yii2.0在php命令行中运行的步骤...
  12. linux sleeping进程多_你知道Linux进程的睡眠和唤醒操作?
  13. [教程] MPICH2 Win7 VS2008环境搭建
  14. ZedGraph类库之基本教程篇
  15. 电脑配置很高,为什么还会卡?
  16. ADSL上网全攻略——故障解决
  17. 对接支付宝 生成付款码功能
  18. ips入侵防御系统部署
  19. 关于最近网上谣言传的很凶的 “太吾绘卷” 游戏源代码的问题。
  20. vue 单页面背景图片设置

热门文章

  1. QQ又一功能即将停止运营,你还记得当年五颜六色的钻石特权吗
  2. 资源分享——最全的中文NLP资源库
  3. 特发性震颤是为什么 什么因素导致的
  4. 2022年政府工作报告解读精华版
  5. 【华为OD机试真题 python】积木最远距离【2022 Q4 | 100分】
  6. python:集合类型 --- set, frozenset
  7. JAVA5种字符串拼接
  8. 转换文件格式时怎么把ppt转换成word文档
  9. 一封搞搞笑的辞职信之流行歌曲篇
  10. 基金取名门道之后的准投