| 比起用Win32SDK写的程序,要分析MFC应用程序要麻烦不少。在前者,只要找到注册窗口类的地方就知道其WinProc的位置。那里是程序的控制中心,只要顺藤摸瓜就可以找到你感兴趣的地方。对于用MFC写的程序,这一切都变得复杂起来了。这时,所有的消息都是通过一套复杂的机制来完成分发的。他们是通过分发数据表来找到最终函数地址的. 详细请参阅MFC的源代码。 常见的消息分发数据是由以下的宏来生成的: ON_WM_SIZE() ON_NOTIFY(TCN_SELCHANGE, ID_TABBOARD, OnBoardSelchange) ON_WM_LBUTTONDBLCLK() ON_WM_LBUTTONDOWN() ON_WM_RBUTTONDOWN() ON_WM_TIMER() ON_COMMAND(ID_REDRAW_ALL, OnRedrawAll) 这里简单说一下如何找到二类消息的处理函数。一类是WM_XXX型消息,如WM_LBUTTONDOWN,另一类是WM_COMMAND型消息. 对于第一类,它的调用栈是: CMyView::OnLButtonDown <--最终目标 CWnd::OnWndMsg <--找到这个函数就接近最终目标了 CWnd::WindowProc AxfCallWndProc AxfWndProc AxfWndProcBase 以WM_LBUTTONDOWN为例 #define ON_WM_LBUTTONDOWN() / { WM_LBUTTONDOWN, 0, 0, 0, AfxSig_vwp, / (AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(UINT, CPoint))&OnLButtonDown }, AfxSig_vwp = 0x31 对于VC6.0 Release 版本,可搜索 C0 24 F0 83 C0 2F 48 83 F8 30 0F 87 C6 02 找到CWnd::OnWndMsg。 进入CWnd::OnWndMsg后,找到 case 0x30(IDA 中的case 0x30其实是 case 0x31)处的 call ebx 将进入你真正感兴趣的地方! 这里必须用条件断点Dword(ESP+0x0c) == 0x201, (注WM_LBUTTONDOWN == 0x201) 否则这个断点总会遇到. 找WM_COMMAND消息处理的地方 对于第二类,它的调用栈是: CMyDoc::OnCmdXXX <--最终目标 _AxfDispatchCmdMsg <--找到这个函数就接近最终目标了 CCmdTarget::OnCmdMsg CDocument::OnCmdMsg CView::OnCmdMsg CFrameWnd::OnCmdMsg CWnd::OnCommand CFrameWnd::OnCommand CWnd::OnWndMsg CWnd::WindowProc AxfCallWndProc AxfWndProc AxfWndProcBase ON_COMMAND定义如下 #define ON_COMMAND(id, memberFxn) / { WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)&memberFxn }, 其中的AfxSig_vv = 12 搜索 71 74 5C 48 48 74 53 83 E8 0A 74 46,将找到_AfxDispatchCmdMsg函数,在case 12 的地方设断点并运行,当程序需要处理OnCmdXXX的时候,控制就会跑到这里,单步进入就可以了。
| ||
|
相关推荐
逆向实战:用X32dbg条件断点精准定位MFC程序的窗口消息处理函数
本文详细介绍了如何使用X32dbg条件断点技术精准定位MFC程序的窗口消息处理函数。通过分析MFC消息处理机制、构建逆向分析环境和高级断点策略,帮助开发者在没有源码的情况下快速锁定目标函数,提升逆向分析效率。
PE文件-C++-MFC-IDA-逆向分析-x32dbg
按shift+enter返回。在IDA中查找对话框初始化函数。如下图所示: 在x32dbg中,对应的模块如下图所示: 在查找初始化函数时,可以先定位初始化函数。然后在虚函数中,有调用原始函数,所以原始函数返回,即为目标函数所在的位置。如下图所示: 如果在x32dbg中找到一个地址,可以在IDA中查看,这个函数的代码,如下图所示: 通过交叉参考(XREF)可以知道指令代码互相调用的关系.如下: .text:00401165 loc_401165: ;CODE XREF:sub_4011
MFC程序逆向分析实战:从黑盒到算法还原的完整路径
在软件安全、遗留系统维护与算法研究领域,逆向工程是一项关键技术,它通过对编译后二进制程序的分析,揭示其内部逻辑与实现原理。其核心价值在于理解闭源软件行为、进行安全审计、漏洞挖掘以及算法还原。尤其在Windows桌面应用场景中,大量遗留系统基于微软基础类库(MFC)开发,这些程序常因源码缺失而成为“黑盒”。本文聚焦于**MFC程序**的**逆向分析**,系统拆解其特有挑战,如庞大的框架代码(“噪音”)、面向对象与消息驱动机制带来的复杂性。通过结合静态分析(如使用IDA Pro的FLIRT签名库过滤框架函数)与
MFC程序反汇编之快速定位
目的:快数定位全局对象的构造函数 类的虚函数表 MessageMap表工具:IDA4.8 VC6SP61. Vc6迅速生成一个mfcdemo,基于dialog,整个程序由一个CWinApp子类和一个CDialog子类构成2. 编译得到release/mfcdemo.exe3. 给当前系统配置好symbol,用IDA4.80反汇编mfcdemo.exe4. 通过IDA names页可以迅速
ida_medigate:Medigate插件,用于C ++逆向工程和其他实用程序
ida_medigate IDA Pro的C ++插件 [目录] 动机和背景 对已编译的C ++代码进行反向工程并不好玩。 编译后的C ++代码的静态反向工程令人沮丧。 使其如此困难的主要原因是虚函数。 与已编译的C代码相反,没有清晰的代码流。 人们可能花太多时间试图理解下一个虚拟函数是什么,而不是像在已编译的C代码中那样仅看到函数。 当人们研究一种虚拟功能时,他或她为了找到其外部参照而需要付出的时间是不合理的。 在进行了太多的C ++ RE项目之后,我放弃了并决定为这种类型的研究需要一个灵活的(Python)且稳定(我可以轻松维护)的工具。 该插件大部分是在2018年1月编写的,最近我决定清理灰尘并添加对新IDA(7.2)类支持的支持。 这个插件并非总是能“开箱即用”地工作,而是成为反向器的另一个工具。 关于 该插件包括两个部分: C ++类的实现和IDA上的多态性 重建类层次结
Mind+掌控板实战:5分钟搞定Easy IoT的MQTT通讯(附完整代码)
本文详细介绍了如何利用掌控板和Mind+图形化编程软件,快速实现基于Easy IoT平台的MQTT通讯。通过清晰的步骤讲解和完整的代码示例,指导用户完成从云端配置、Wi-Fi连接到MQTT消息发布与订阅的全过程,帮助初学者轻松构建物联网设备间的双向对话系统。
使用IDA对MFC寻找按钮处理事件
由于我练习的都是MFC程序,在寻找按钮事件的时候,费了老鼻子劲了,当初说的,根据DispatchMessage,TranslateMessage,下条件断点神马的,笔者,试了又试,在里面消 息转了又转,就是出不来,放下了一段时间,但是不甘心,最后找到了一篇很好的文章点击打开链接,让我有了很好的启发,对于自己做的小程序而言,已经足够了,现在说下, 我自己写的这篇水平实在有些哇,高手不要见笑啊,好
UVM入门与进阶学习笔记17——寄存器模型(3)
目录寄存器模型的常规方法mirror、desired和actual valueprediction的分类自动预测显式预测uvm_reg的访问方法mem与reg的联系和差别内建(built-in)sequences寄存器模型内建序列存储模型内建序列寄存器健康检查寄存器应用场景寄存器检查功能覆盖率概述覆盖率自动收集模式覆盖率外部事件触发收集 寄存器模型的常规方法 mirror、desired和actual value 在应用寄存器模型时,除了利用它的寄存器信息,也会利用它跟踪寄存器的值。 寄存器模型中的每
使用IDA定位基于MFC的CrackMe的按钮函数-----实践篇(一)
针对上篇文章,我将分别使用三种方法来定位
使用RepeatModeler和RepeatMasker注释基因组重复序列
重复序列注释有两种常用策略,基于同源序列相似性和基于重复序列结构特征。RepeatMasker是基于同源序列相似性注释序列的常用工具, RepeatModeler可用来从头对基因组的重复序列家族进行建模注释,它的核心组件是RECON和RepatScout。 这篇教程介绍如何使用RepeatModeler从头鉴定基因组的重复序列,之后用RepeatMasker根据自...
自学ROS完成智能小车路径规划(一)--配置功能包
此系列文章记录本人学习ros的过程,将会尽可能详细以便自己能够看懂 参考系列:古月居老师,优快云,ROS tutorials,科大讯飞智能车竞赛线上赛 本文章的目标: 比较全局路径规划算法中A*算法与Dijkstra算法在该地图场景下的规划与运行时间 比较局部路径规划算法中DWA算法与TEB算法在该地图场景下的规划与运行时间 在同等参数条件下选择出各自适合的算法进行融合,经过比较,我将选择dijkstra算法作为全局路径规划算法,TEB算法为局部路径规划算法 第一步,按照科大讯飞的教程配置文件 科大讯
使用IDA定位基于MFC的CrackMe的按钮函数-----理论篇
MFC程序不同于普通的windows程序,由于使用了框架代码,我们很难
基于STM32设计的智能门锁(微信小程序+手机APP等多种方式开锁)(188)
当前智能门锁项目是基于STM32微控制器、ESP8266-WIFI模块、OLED显示屏、指纹模块、蓝牙模块、门禁刷卡模块、烟雾检测模块、火光检测模块、温湿度检测模块等硬件设备开发的一种智能门锁系统
c语言+去掉屯屯屯+链表,MFC逆向初级研究(1)(2)
12007-3-16 11:12【文章标题】: MFC逆向初级研究(2)【文章作者】: 北斗之摇光【作者邮箱】: hardlywhen@hotmail.com【下载地址】: 自己搜索下载【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!-------------------------------------------------------------------------...
什么是 SAP ABAP AMDP?
SAP HANA是SAP开发的一种内存数据库管理系统,它具有出色的性能和处理大规模数据的能力。为了充分利用SAP HANA的性能,SAP引入了AMDP技术,以便将数据库操作推送到数据库服务器执行,从而减少数据传输和处理时间。AMDP方法通常需要输入参数和输出参数。输入参数用于传递数据到SQLScript代码,而输出参数用于接收SQLScript代码的结果数据。ENDMETHOD.ENDCLASS.我们定义了一个输入参数来传递销售订单数据,以及一个输出参数来接收计算结果。ENDMETHOD.
使用 MediaPipe 身体跟踪构建不良身体姿势检测和警报系统
详细介绍如何使用 MediaPipe 身体跟踪构建不良身体姿势检测和警报系统,并附实现的源码下载链接
mfc 自定义消息处理_浅谈MFC类CrackMe中消息处理函数查找方法
最近一个学姐发给我了一份CrackMe希望我解一下,其中涉及到了MFC的消息函数查找的问题,就顺便以此为例谈一下自己使用的消息函数查找的方法。本人萌新,如果有任何错漏与解释不清的地方,欢迎各路大佬指正。这个CrackMe是一个典型的MFC类型的程序,其框体如下:一、目标以及方法首先我们确认我们的目标是找到两个"注册"按钮的对应消息处理函数,那么有什么手段可以达到我们的目标?在MFC中有一...
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
简单MFC程序开发-C++反编译肉鸡养成
为了更好的理解MFC(C++)程序的结构,拆解方法,需要首先创建一个MFC窗口程序,对于只了解一点C++的工程师来说,走一遍MFC程序开发的流程,是很有必有有一个指导的,无奈C++开发工具的版本太多,暴走了一段时间,终于摸索出来visual studio 2022版本的流程。
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
程序原理与逆向
然后等待各个UI程序的每个窗口线程,从这个大消息队列中取出自己窗口可以处理的消息后拿到自己的窗口回调消息队列里处理。这种InitInstance函数就是我们可控的窗口初始化代码,固定在CWinApp:Run上方,恶意软件可以藏在该窗口绑定逻辑类的初始化函数中。由此构建消息映射,可以看到该窗口是系统的help窗口,resourcehacker没有显示出该窗口的ID值。该ID可能是系统分配窗口。也就是主窗口类的虚表。点击任意一个向上滑动可以看到窗口类的虚表函数,因为MFC的消息映射绑定默认是跟在虚表后的。
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
MFC窗口和按钮事件-正向与逆向分析
模态窗口和非模态窗口是子窗体的两种类型。模态窗口有时会作为一种授权手段,总在最前挡住主窗体,需要注册才能使用软件,另外,通过窗体的监控,我们会更了解MFC程序的exe结构,所以走一遍看看。
MFC程序逆向 – 消息篇(上)
标 题: 【原创】MFC程序逆向 – 消息篇(上)+(下) 11楼作 者: szdbg时 间: 2007-10-31,06:26链 接: http://bbs.pediy.com/showthread.php?t=54150前言:记得前一段时间,我刚接触软件破解和逆向这一行时,对于一些软件不知从何处跟踪按钮消息,试了好多方法,就是断不下来,在系统模块中经常转得晕头转向,而一无所获。MFC程
两例MFC程序flag获取
先上图: MFC应用程序破解需要找到某个按钮对应的消息处理函数(不能单纯理解成Win32项目,去找自定义的消息处理函数),可以在关键函数处下断点,比如:GetDlgItem( ) GetDlgText( ) SetDlgText( ) GetWindowText( ) SetWindowText( ) RegisterClass( ) CreateWindow( ) Show...
171114 逆向-以CM为例学习MFC机制
1625-5 王子昂 总结《2017年11月14日》 【连续第410天总结】 A. 谜之CrackMe B. 来源就不说啦,总之是个MFC程序,运行界面如下 可以看到没有确认按钮,一般来说是由定时器消息或Text内容改变消息触发Check函数确认无壳后拖入IDA查找字符串,轻松定位到sub_401CD0 但是向上查找交叉引用却发现落入一个偏移中,无从下手了 对其下断,进行动态调
MFC菜单处理函数地址的确定
前言想作出一个cm的注册机, 找到比较是否为注册版的地方了. 但是没找到哪里动了这个类中的数据. 菜单上有个注册函数(打开网页注册),虽然失效了.但是想看看, 能否在注册函数中找到注册的线索. e.g. 可能是一个注册Key文件. 那就知道类中注册版标志数据在哪改变了.记录写了一个菜单点击的vc6_MFC_Release程序, 自己先测试一下,菜单ID处理函数应该怎么找.<<MFC
404



被折叠的 条评论
为什么被折叠?



