使用IDA定位基于MFC的CrackMe的按钮函数-----理论篇

第5章 IDA Pro 破解实战 第5章 IDA Pro 破解实战 1、工具IDA Pro 6.6版本   1、定位关键码   1)      搜索特殊字符串 首先按下快捷键CTRL+S 打开段选择对话框,双击STRINGS段跳转到字符串段,然后按下ALT+T,打开文本搜索对话框,在String旁边的文本框输入要搜索的字符串后点击OK按钮,稍等片刻就会定位到搜索结果。 2)      搜索关键API 首先按下快捷键 阅读详情

    逆向MFC程序不同于标准的windows程序,标准windows程序我们很容易找到窗口过程,并且窗口过程基本上都是用户自定义代码,通过跟踪对WM_COMMAND消息的处理我们很容易就能找到按钮对应的处理逻辑。(wParam保存了对应按钮的控件ID或者通过lParam保存对应按钮的句柄,以下所有理论来自《深入浅出MFC》一书)

    MFC对WM_COMMAND的处理进行的封装,这边我引用侯捷的《深入浅出MFC》一书中的图来像大家展示封装后的窗口过程函数的样子

    通过上图我们可以看到,我们原先窗口过程标准的消息处理变成了找消息映射表MessageMap中的消息条目,消息条目是一个数组,用来表示什么按钮(nID)用什么函数(pfn)来处理什么消息(nMessage),消息映射表对应的数据结构如下:

struct AFX_MSGMAP
{
	const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();
	const AFX_MSGMAP_ENTRY* lpEntries;
};
struct AFX_MSGMAP_ENTRY
{
    UINT nMessage;
    UINT nCode;
    UINT nID;
    UINT nLastID;
    UINT_PTR nSig;
    AFX_PMSG pfn;
};
    AFX_MSGMAP就是我们的消息映射表,它包含一个指向父类消息映射表的指针,以及一个指向消息映射条目数组的指针。如果我们知道了按钮的控件ID,而按钮触发的消息都是WM_COMMAND(0x111h),我们就能很容易找到对应的消息条目,这样我们就知道按钮被按下后会触发什么逻辑了。那么如何定位消息映射表呢?

  • 因为MFC还实现了运行时动态识别RTTI,而这个结构正好在我们的消息映射表结构前面,并且RTTI结构中保存了类名的常量字符串,所以我们可以通过找类名找到RTTI结构,然后往下找到我们的消息映射表
  • 如果控件ID比较特殊,我们可以直接使用IDA搜索立即数直接定位到对应的消息映射条目
  • 由于GetMessageMap函数是个虚函数,所以我们的消息映射表结构是在虚表中的,我们只要定位到了虚表那么我们就能很容易找到对应的消息映射函数

    具体怎么做呢?欢迎观看实践篇

160个CrackMe之108 mfc程序 寻找按钮事件,代码还原(下) ·分析该CrackMe按钮事件 这个check就是个按钮,现在用visual studio提供的工具看看这个按钮id ·选择自己的Spy++(不会用的话百度查一下) 找到check按钮id是1 ·那该程序的检查按钮事件就为 AFX_MSGMAP_ENTRY 按钮;按钮。nMessage = WM_COMMAND ; 按钮。nCode = BN_CLICKED ; 按钮。nID = 1 ; 按钮。nLastID = 1 ; 按钮。nSig = AfxSigCmd_v ; 阅读详情

相关推荐

MFC程序逆向分析实战:从黑盒到算法还原的完整路径

在软件安全、遗留系统维护与算法研究领域,逆向工程是一项关键技术,它通过对编译后二进制程序的分析,揭示其内部逻辑与实现原理。其核心价值在于理解闭源软件行为、进行安全审计、漏洞挖掘以及算法还原。尤其在Windows桌面应用场景中,大量遗留系统基于微软基础类库(MFC)开发,这些程序常因源码缺失而成为“黑盒”。本文聚焦于**MFC程序**的**逆向分析**,系统拆解其特有挑战,如庞大的框架代码(“噪音”)、面向对象与消息驱动机制带来的复杂性。通过结合静态分析(如使用IDA Pro的FLIRT签名库过滤框架函数)与

weixin_33743248的博客 340

PE文件-C++-MFC-IDA-逆向分析-x32dbg

  按shift+enter返回。在IDA中查找对话框初始化函数。如下图所示:   在x32dbg中,对应的模块如下图所示:   在查找初始化函数时,可以先定位初始化函数。然后在虚函数中,有调用原始函数,所以原始函数返回,即为目标函数所在的位置。如下图所示: 如果在x32dbg中找到一个地址,可以在IDA中查看,这个函数的代码,如下图所示:   通过交叉参考(XREF)可以知道指令代码互相调用的关系.如下:   .text:00401165 loc_401165: ;CODE XREF:sub_4011

插件开发 2520

从CrackMe到APK重打包:逆向工程核心思路与工具链实战

逆向工程是网络安全领域的基础能力,其核心在于从无源码的二进制程序中还原出可理解的逻辑。无论是恶意代码分析还是漏洞挖掘,第一步都需要回答“程序在做什么”。IDA Pro通过反汇编与反编译为Windows程序分析提供入口,而Android应用则借助jadx与apktool将dex字节码还原为Java源码或smali中间代码。理解异或自反性、字符串交叉引用等原理,能显著提升静态分析的效率。掌握这些技术,不仅适用于CTF竞赛中的CrackMe挑战,更是移动安全测试、外挂对抗与病毒分析的重要技能。本文以实际实验包为例

weixin_29325515的博客 248

使用IDA对MFC寻找按钮处理事件

由于我练习的都是MFC程序,在寻找按钮事件的时候,费了老鼻子劲了,当初说的,根据DispatchMessage,TranslateMessage,下条件断点神马的,笔者,试了又试,在里面消 息转了又转,就是出不来,放下了一段时间,但是不甘心,最后找到了一篇很好的文章点击打开链接,让我有了很好的启发,对于自己做的小程序而言,已经足够了,现在说下, 我自己写的这篇水平实在有些哇,高手不要见笑啊,好

dasgk的专栏 5683

【AWS】创建aws云服务器EC2实例

本文介绍了如何创建aws的EC2云服务器,并介绍了如何使用Xshell远程连接上云服务器

Marcos921的博客 2501

Electron多窗口开发避坑指南:Pinia状态同步的3种解决方案对比

本文深入探讨了在Electron多窗口应用中实现Pinia状态同步的三种核心方案。针对Electron多窗口架构下状态隔离的挑战,文章对比了基础事件通信、共享存储以及智能Pinia插件等方案的优劣与适用场景,并提供了生产级的实现指南与选型建议,帮助开发者构建健壮高效的桌面应用。

spice的博客 479

使用IDA定位基于MFC的CrackMe的按钮函数-----实践篇(一)

针对上篇文章,我将分别使用三种方法来定位

6175

QT编程之PCM音频播放与采集

Qt5/Qt6通用方案。

深之JohnChen的专栏 1171

MFC程序反汇编之快速定位

 目的:快数定位全局对象的构造函数 类的虚函数表 MessageMap表工具:IDA4.8 VC6SP61. Vc6迅速生成一个mfcdemo,基于dialog,整个程序由一个CWinApp子类和一个CDialog子类构成2. 编译得到release/mfcdemo.exe3. 给当前系统配置好symbol,用IDA4.80反汇编mfcdemo.exe4. 通过IDA names页可以迅速

6339

基于R语言 meta/metafor 包进行荟萃分析(一)

在此部分中,使用连续结果详细描述了通用逆方差方法及其在meta分析中的应用,还介绍了固定效应法和随机效应法。我们已经展示了如何分别将典型数据与metacont和metagen函数一起使用,以及如何print和绘制森林图。我们还讨论了估计研究间方差的各种方法,并将Hartung-Knapp平差描述为经典随机效应方法的替代方法。此外,我们还说明了byvar选项的使用,这使得亚组分析更加简单。关于亚组分析的更多细节见后续章节。

Dunaichuanyi的博客 1万+

LuaJit分析(十一)去除string.dump函数

因此即使我们的指令顺序被打乱,通过loadfile系统调用,再通过string.dump调用,可以得到字节码文件,再通过与标准的luajit生成的字节码文件比对,即可找出差异所在。Lua脚本中的string.dump函数用于生成字节码文件,根据对 luajit -b命令的分析可以得出,最终dump出字节码文件都是使用的string.dump函数。同时lj_libdef.h和lj_ffdef.h这两个文件都是自动生成的,在msvcbuild.bat中,使用如下命令生成。

a545958498的博客 1132

深入浅出MFC学习笔记:(第三章MFC六大关键技术之仿真:类型识别,动态创建) ....

第三章:MFC六大关键技术之仿真:类型识别 深入理解MFC的内部运行原理,是本次学习《深入浅出MFC》的主要目的。要模仿的六大技术包括: 1:MFC程序的初始化过程。 2:RTTI(Runtimetypeidentification)运行时类型识别。 3:Dynamiccreation动态创建 4:Persistence永久保存 5:消息映射 6:消息传递。 RTTI(运行时类...

tansitongba 307

Ansys Zemax与Speos协同设计:从HUD光学优化到驾驶环境可视化全流程解析

本文深入解析了如何利用Ansys Zemax与Speos进行协同设计,实现从HUD光学系统核心优化到驾驶环境可视化验证的全流程。文章强调了HUD设计是光学性能与视觉感知的深度耦合,通过Zemax进行精密光学设计,再利用Speos进行系统级仿真与感知模拟,最终完成从虚拟到现实的闭环验证,有效提升HUD产品的开发效率与可靠性。

weixin_29199873的博客 249

170916 逆向-WHCTF(BabyRe/CrackMe)

1625-5 王子昂 总结《2017年9月16日》 【连续第349天总结】 A. XCTF-Reverse B.CRACKME无壳,C++ 打开是一个简单的输入框和注册按钮 点击注册按钮会弹框“哎,注册码错了,你得换个新的哟!”IDA没有main函数,看起来是MFC写的 查找字符串、断GetDlgText等API都没有结果 说明字符串都被加密过了IDA逐个函数查找,发现有两个函数调用了

whklhhhh的博客 3928

【ATC/DTC方法第一期】经典平均/昼夜温度周期ATC/DTC方法介绍(含Python代码实现)

【ATC/DTC方法第一期】经典平均/昼夜温度周期ATC/DTC方法介绍(含Python代码实现)

WW、forever的博客 484

C#实现OPC客户端与S7-1200 PLC通信:工控场景稳定通信的实战指南(附完整代码)

标准化优先:OPC UA是工业通信的标准,相比直接通信,更适合多设备集成的工控场景;稳定性第一:必须封装断线重连、异常处理、资源释放逻辑,满足7×24小时运行需求;效率优化:高频采集场景优先用批量读写,避免单个变量频繁请求;细节把控:节点ID、变量类型、端口配置等细节是新手最容易踩坑的地方,建议先用UA Expert验证。这套代码和方案已在多个工业项目中落地,从单台S7-1200到多台S7-1200/1500集群,都能稳定运行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1036

使用IDA定位基于MFC的CrackMe的按钮函数-----实践篇(二)

接下来我将介绍另外两种方法来定位

2931

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

网络安全实验02:一个CrackMe

目录 01.基于MFC的简单CrackMe代码 代码: 界面: 效果: 02.IDA解析 03.后记 01.基于MFC的简单CrackMe代码 代码: // MFCApplication1Dlg.cpp: 实现文件 // #include "stdafx.h" #include "MFCApplication1.h" #include "MFCApplication1...

Krumitz的博客 988

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

mfc 自定义消息处理_浅谈MFC类CrackMe中消息处理函数查找方法

最近一个学姐发给我了一份CrackMe希望我解一下,其中涉及到了MFC的消息函数查找的问题,就顺便以此为例谈一下自己使用的消息函数查找的方法。本人萌新,如果有任何错漏与解释不清的地方,欢迎各路大佬指正。这个CrackMe是一个典型的MFC类型的程序,其框体如下:一、目标以及方法首先我们确认我们的目标是找到两个"注册"按钮的对应消息处理函数,那么有什么手段可以达到我们的目标?在MFC中有一...

weixin_29695125的博客 459

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

CrackMe练习136破解

160个CrackMe练习题第136题 Rith.1破解过程思路

游戏乐趣的博客 717

171114 逆向-以CM为例学习MFC机制

1625-5 王子昂 总结《2017年11月14日》 【连续第410天总结】 A. 谜之CrackMe B. 来源就不说啦,总之是个MFC程序,运行界面如下 可以看到没有确认按钮,一般来说是由定时器消息或Text内容改变消息触发Check函数确认无壳后拖入IDA查找字符串,轻松定位到sub_401CD0 但是向上查找交叉引用却发现落入一个偏移中,无从下手了 对其下断,进行动态调

whklhhhh的博客 645

MFC寻找按钮事件

[软件名称]: CRECKME 0 CRECKME 0 程序和分析源码.zip. [应用平台]:Win9X/NT/2000/XP [软件大小]:8K [破解声明]:为了检验自己的逆向破解能力,请求斑竹给个邀请码,鼓励我继续写下去。顺便感谢一下党,感谢国家,感谢我们家的曾曾。 [破解工具]:PEiD,IDA 5.5,PE Explore [备注] 破解软件来源于看雪论坛中的帖子 (本人

dasgk的专栏 2107

CrackMe逆向实战:从静态分析到注册机编写的完整流程

逆向工程是安全研究的基础能力,而CrackMe作为经典的逆向练习载体,能有效训练验证逻辑分析与代码理解能力。其核心原理在于通过调试器追踪程序对输入数据的处理流程,定位关键比较指令,进而实现爆破或算法还原。掌握静态分析工具(如IDA)与动态调试工具(如x64dbg)的配合使用,是提升逆向效率的关键,这种技能广泛应用于恶意代码分析、软件保护机制研究等场景。本文以MFC窗口类CrackMe为例,系统性梳理环境准备、查壳脱壳、字符串定位、交叉引用分析、API断点跟踪、注册机编写等环节,并总结了常见坑点与排查思路,帮

weixin_29315091的博客 307

TCTF 2016 PC First

在遇到复杂的算法时,要善于用动静态结合的方式分析,采取先总体后细节的战术对目标程序进行逆向。在总体分析时,重点在于弄清楚算法的框架,哪里对输入进行了处理,哪里进行了验证。在分析细节时,要“大胆猜想,小心求证”,可以采用逐个击破的方式,比如先还原一个循环,写出逆向的代码,用同一个输入对比程序和逆向代码的输出以检验正确性。如果ida反编译出来的代码较为混乱和抽象,可以参考反汇编,对这些代码进行手动还原,还原时注意反汇编代码是以什么大小对数据进行操作的,是否考虑了符号、溢出等等。

静下心来,做好每一件事 202

如何在IDA中找到MFC程序的消息处理函数

比起用Win32SDK写的程序,要分析MFC应用程序要麻烦不少。在前者,只要找到注册窗口类的地方就知道其WinProc的位置。那里是程序的控制中心,只要顺藤摸瓜就可以找到你感兴趣的地方。对于用MFC写的程序,这一切都变得复杂起来了。这时,所有的消息都是通过一套复杂的机制来完成分发的。他们是通过分发数据表来找到最终函数地址的. 详细请参阅M

老裴 2889

idapython解析mfc的AFX_MSGMAP_ENTRY结构体

idapython解析mfc的AFX_MSGMAP_ENTRY结构体

如鹿渴慕泉水的专栏 449
上一篇: 使用IDA定位基于MFC的CrackMe的按钮函数-----实践篇(一)
下一篇: 序列号型CrackMe逆向之OD技巧篇
银翼魔术师
博客等级 码龄17年 41粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值