190326 逆向-MFC逆向技巧
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逆向技巧相关推荐
- 【黑客免杀攻防】读书笔记14 - 面向对象逆向-虚函数、MFC逆向
虚函数存在是为了克服类型域解决方案的缺陷,以使程序员可以在基类里声明一些能够在各个派生类里重新定义的函数. 1 识别简单的虚函数 代码示例: #include "stdafx.h" ...
- 游戏逆向-CSGO逆向透视自瞄分析技巧
游戏逆向–CSGO逆向分析 分享一下个人所学,说实话自己也不是学的很透,首先我推荐使用Ce结合Old,因为可以看清汇编源码的同时通过ce查找突破口. 首先说一下,在弄清楚所谓的透视自瞄之前先弄清楚什么 ...
- 【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )
文章目录 一.应用结构分析 二.定位动态库位置 三.定位动态库中的修改点 四.修改动态库 五.重打包 一.应用结构分析 分析上一篇博客 [Android 逆向]逆向修改游戏应用 ( APK 解析工具 ...
- 逆向-360逆向writeup
Crackme逆向分析 逆向第一题,很简单,分分钟能搞定.题目大致是说找一个key,提示success就行. Peid查一下没有任何壳,是vc写的程序,里面没有知名的算法.开始分析 错误的时候是这个样 ...
- 2021年巫妖易语言-js逆向-安卓逆向hook教程
链接:https://pan.baidu.com/s/1kdiAfXVNHgKT6BFdqzCYsw 提取码:jvw8 2021年最新巫妖易语言-js逆向-安卓逆向hook教程-10.12上课录像(这 ...
- 巫妖易语言+js逆向+安卓逆向
教程介绍 2021年最新巫妖易语言+js逆向+安卓逆向hook培训教程(修复画质声音不同步不加密版),课程主要讲解的内容是易语言+js逆向+安卓逆向hook,课程是2020年11月底刚培训结束的,也是 ...
- MFC小技巧系列——1、初始焦点设置
我们在使用mfc编写windows界面应用程序时,启动mfc程序后,mfc会自动分配初始的控件焦点,有时候这些焦点被分配置到编辑框.列表框时,就会造成误操作,那么该如何避免这种情况呢,这就需要我们在程 ...
- JavaScript 逆向调试常用技巧
1. 断点调试 接下来介绍一个非常重要的功能 -- 断点调试.在调试代码的时候,我们可以在需要的位置上打断点,当对应事件触发时,浏览器就会自动停在断点的位置等待调试,此时我们可以选择单步调试,在面板中 ...
- Python 爬虫逆向破解案例实战 (三):凡科网逆向之闭包技巧
目录 1. 凡科网逆向分析 2. 代码实现 3. 总结 1. 凡科网逆向分析 点击 此处 进入到 凡科网 的主页面,在键盘中按下 <Fl2> 快捷键或者是鼠标右键单击选择 检查(inspe ...
最新文章
- 用CocoaPods做iOS程序的依赖管理
- C语言的一些有趣的冷知识
- 知乎用户和龙鹏-言有三:计算机视觉应该怎样入门?
- Java数据结构和算法:二叉树
- Python入门100题 | 第030题
- 如何在dva的effects中实现回调
- [USACO1.5]数字金字塔 Number Triangles
- .NET CORE编写控制台程序应有的优雅姿势(转载)
- maven如何修改本地仓库与中央仓库
- P3302 SDOI2013森林
- 匿名函数-lambda
- html5,用或不用,它都在那里
- 74、shape 画圆 加 边框
- JQuery1.11版本对prop和attr接口的含义分离导致问题分析
- VS2010 自动关闭的问题解决方法
- sqlsever主库从库如何切换_面试最让你手足无措的一个问题:你的系统如何支撑高并发?...
- 双系统格式化Ubuntu分区后Windows 开机出现grub rescue问题
- java ee jaas_Java Web系列:JAAS认证和授权基础
- 初中计算机考试软件word,初中信息技术中考系统中操作题word部分.doc
- 金蝶K3cloud管理中心的管理员密码重置