【分享】必杀技公布——用特征码定位关键代码,秒杀MFC程序

160个CrackMe之108 mfc程序 寻找按钮事件,代码还原(上) ·前言 虽然网上已经有帖子写160个CrackMe,我个人还是以正向的思路来逆向一部分的crackme,还有一些 代码还原的小技巧,挑选出这160个CrackMe中由c,c++,汇编编写的程序来来写。vb,delphi现在用 的少些了就不拿来写了。 ·思路分析 先判断该程序是啥语言写的用工具查看一下 是vc6的mfc编写的现在先运行下程序 寻 找按钮Check的按钮事件 该程序是mfc编写的,我自己写个例子,来找按钮事件vs2019创建mfc工程后增加个按钮事件 双击B... 阅读详情

 

【文章标题】: 必杀技公布——用特征码定位关键代码,秒杀MFC程序
【文章作者】: 书呆彭
【下载地址】: 自己搜索下载
【使用工具】: VC与OllyICE
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  本文所讲的方法,其实是一个很古老的方法了。以前,考虑到此法的杀伤力巨大,不便于公布。
  
  随着软件开发者保护意识的提高和软件保护技术的发展,此法的杀伤力逐渐下降成为普通等级。
  
  我本人这学期的课程和任务十分多,打算暂时把程序调试这个业余爱好放一放,估计至少会有半年时间不常来看雪了。
  
  把这个方法写出来,算是给大家的告别礼物。
  
  
  
  对于直接使用SDK而不使用第三方库的程序,我们要定位到程序的“关键代码”并不困难。通常在CreateWindow函数或DialogBoxParam函数下断点,可以直接获得其主界面的窗口过程或对话框过程。但是对于使用了MFC的程序,我们找到的窗口过程或对话框过程是在MFC提供的程序框架的内部,经过层层的分发和筛选,消息才最终到达用户代码,直接分析起来比较繁琐。
  
  幸好,有一个Olly的脚本,可以直接帮助我们找到诸如OnOK()之类的函数。这个脚本用到的方法,是建立在对MFC内部机制充分理解的基础上,通过在消息分发的代码处下条件断点而完成的。
  
  然而,我马上要讲到的这个方法,在一定程度上,比这个脚本还好使,可以一下就定位到我们感兴趣的代码处。而且,可以举一反三,如果你看明白了其中的思路,可以自己扩展成为十分强大的“必杀技”,不仅对MFC,对其它的应用程序框架也有效果。
  
  
  我就不讲我如何想到的这个方法,只讲两个例子。如果你看懂了这个例子,其中的思路肯定会明白了。而且,十分简单。
  
  
  我以MFC42为例。先打开VC6,创建一个MFC的对话框程序,按默认设置。我们在“OK”按钮的处理函数OnOK()的开头,写上这样一句:
  
  __asm  int 3
  // 转帖者添加 
 // 或者
  //__asm
  //{
  //MOV  EDX,1
  //MOV  ECX,2
  //SUB  ECX,9  
  //} 
  然后,按Release编译。
  
  现在,用OD调试程序,不要忽略int3异常,F9运行,点击“OK”,OD马上断下。
  
  看堆栈:
  
  
代码:
  0012F80C   73EFE938  返回到 MFC42.73EFE938
  0012F810   00000000
  0012F814   004022E8  MFCDialo.004022E8
  
  
  
  我们到 MFC42.73EFE938这看一下:
  
  
代码:
  73EFE932    8B4D 08         MOV     ECX, DWORD PTR SS:[EBP+8]
  73EFE935    FF55 14         CALL    DWORD PTR SS:[EBP+14]            ; 这句就是调用用户函数的CALL
  73EFE938    5F              POP     EDI                              ; 这就是堆栈中的 MFC42.73EFE938
  73EFE939    8BC6            MOV     EAX, ESI
  ...
  
  
  我们看到,73EFE935处的CALL [EBP+14]的目标函数就是我们的OnOK()。记住这个地址。
  
  我们按ALT+E,打开模块列表,双击下面MFC42.dll这一行:
  
  
代码:
  Executable modules
  基址       大小       入口       名称       文件版本          路径
  00400000   00005000   00401780   MFCSigna   1, 0, 0, 1        F:/Documents/MY CODE/MFCDialog/Release/MFCDialog.exe
  00460000   0009B000   00486E23   ADVAPI32   5.2.3790.3959 (s  D:/WINDOWS/syswow64/ADVAPI32.dll
  00500000   0008B000   0050155C   OLEAUT32   5.2.3790.4202     D:/WINDOWS/syswow64/OLEAUT32.dll
  00590000   00052000   005A006D   SHLWAPI    6.00.3790.3959 (  D:/WINDOWS/syswow64/SHLWAPI.dll
  02160000   00017000              odbcint    3.526.1830.0 (sr  D:/WINDOWS/system32/odbcint.dll
  48890000   0003D000   488C5681   ODBC32     3.526.3959.0 (sr  D:/WINDOWS/system32/ODBC32.dll
  4B3C0000   00050000   4B3C1574   MSCTF      5.2.3790.3959 (s  D:/WINDOWS/SysWOW64/MSCTF.dll
  4DC30000   0002E000   4DC49F69   msctfime   5.2.3790.3959 (s  D:/WINDOWS/system32/msctfime.ime
  71BB0000   00009000   71BB1060   WSOCK32    5.2.3790.0 (srv0  D:/WINDOWS/system32/WSOCK32.dll
  71BF0000   00008000   71BF123D   WS2HELP    5.2.3790.1830 (s  D:/WINDOWS/system32/WS2HELP.dll
  71C00000   00017000   71C02560   WS2_32     5.2.3790.3959 (s  D:/WINDOWS/system32/WS2_32.dll
  73EB0000   00121000   73F84A8E   MFC42      6.06.8063.0       D:/WINDOWS/system32/MFC42.DLL
  75490000   00065000   754C93CA   USP10      1.0422.3790.3959  D:/WINDOWS/system32/USP10.dll
  75E60000   00027000   75E61239   apphelp    5.2.3790.3959 (s  D:/WINDOWS/system32/apphelp.dll
  76190000   00012000   76193341   MSASN1     5.2.3790.3959 (s  D:/WINDOWS/syswow64/MSASN1.dll
  761B0000   00093000   761B15FA   CRYPT32    5.131.3790.3959   D:/WINDOWS/syswow64/CRYPT32.dll
  762B0000   00049000   762B16A5   comdlg32   6.00.3790.3959 (  D:/WINDOWS/syswow64/comdlg32.dll
  77210000   000AB000   772115A2   WININET    6.00.3790.4392 (  D:/WINDOWS/syswow64/WININET.dll
  77530000   00097000   775948BA   COMCTL32   5.82 (srv03_sp2_  D:/WINDOWS/WinSxS/x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.3790.3959_x-ww_78FCF8D0/COMCTL32.dll
  77670000   00139000   776BC692   ole32      5.2.3790.3959 (s  D:/WINDOWS/syswow64/ole32.dll
  77BA0000   0005A000   77BAF78B   msvcrt     7.0.3790.3959 (s  D:/WINDOWS/syswow64/msvcrt.dll
  7C8D0000   007FF000   7C92BB2B   SHELL32    6.00.3790.4184 (  D:/WINDOWS/syswow64/SHELL32.dll
  7D4C0000   00130000   7D4DFD59   kernel32   5.2.3790.4062 (s  D:/WINDOWS/syswow64/kernel32.dll
  7D600000   000F0000              ntdll      5.2.3790.3959 (s  D:/WINDOWS/system32/ntdll.dll
  7D800000   00090000   7D82B710   GDI32      5.2.3790.4396 (s  D:/WINDOWS/syswow64/GDI32.dll
  7D8D0000   00050000   7D8E0E4B   Secur32    5.2.3790.3959 (s  D:/WINDOWS/syswow64/Secur32.dll
  7D930000   000D0000   7D969635   USER32     5.2.3790.4033 (s  D:/WINDOWS/syswow64/USER32.dll
  7DA20000   000E0000   7DA3049E   RPCRT4     5.2.3790.4115 (s  D:/WINDOWS/syswow64/RPCRT4.dll
  7DBC0000   00009000   7DBC12E2   LPK        5.2.3790.3959 (s  D:/WINDOWS/system32/LPK.DLL
  7DBD0000   00103000   7DC5A99E   comctl_1   6.0 (srv03_sp2_r  D:/WINDOWS/WinSxS/WOW64_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_5FA17F4E/comctl32.dll
  7DEE0000   00060000   7DEF02D0   IMM32      5.2.3790.3959 (s  D:/WINDOWS/system32/IMM32.DLL
  7DF50000   00070000   7DF637D7   uxtheme    6.00.3790.3959 (  D:/WINDOWS/system32/uxtheme.dll
  
  
  就来到了MFC42.DLL这个模块的.text节了。好,我们按Ctrl+F,输入CALL [EBP+0X14],回车。搜索到的第一个结果就是:
  
  
代码:
  73EFE935    FF55 14         CALL    DWORD PTR SS:[EBP+14]            ; 这句就是调用用户函数的CALL
  
  
  
  现在明白本文题目的意思了吧。。。
  
  
  下面来看看此法的应用。
  
  随便找一个MFC42的CM,用OD载入,有壳,不用管,直接F9,然后ALT+E,双击MFC42.DLL,CTRL+F,输入CALL [EBP+14],在第一个找到的地址处F2下断点。
  
  点CM的确定按钮,OD断下,F2删除断点,F7。
  
  这里就是按钮的处理函数。可以分析了。
  
  
--------------------------------------------------------------------------------
【经验总结】
  如果你看明白了我的过程,那么你也应该明白我的思路。
  
  MFC42.DLL的特征码就是指令CALL [EBP+14]
  
  顺便说一下,所有的按钮控件的处理函数OnXXXClick()都经过这里。并且,编辑框控件的OnChange()函数,以及其它很多控
  件的消息,比如CheckBox的消息,甚至OnClose()也都经过这里。什么原因呢?因为MFC框架的消息分发过程,是按参数类型
  模板分类的。如果不理解,就不用理解了,只要记住方法就行了。
  
  另外,对所有的MFC程序,如MFC71D,MFC90U等,这个方法都可以用,并且静态连接的也可以,并且Delphi的程序也可以,只
  要掌握了原理,方法大同小异。至于各自的“特征码”是什么,自己去找吧。
  
  
  祝同学们早日成为高手。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年02月23日 21:02:58
[系统安全] MyCCL免杀实验 文章目录MyCCL定位特征码原理MyCCL定位nc实验 MyCCL定位特征码原理 myccl采用遇到特征码就将其覆盖的原理,逐段暴露原文件数据内容的方式将一个待分析文件分成多个文件。 MyCCL定位nc实验 在MyCCL中打开nc文件,选择分块个数为100, 然后点击生成,会在目标文件夹下生成100个经过处理的文件,如下所示 第一段0000是文件的序号,第二段是文件开始的位置,第三段是单位长度。 然后用火绒进行查杀,并删掉报毒的文件,再点击二次处理 这个二次处理就是查看那个文件被删了,从而定位出特征码所 阅读详情

相关推荐

最新MyCCL复合特征码定位器

最新MyCCL复合特征码定位器,做免杀必不可少的软件

通过分析调用堆栈定位MFC按钮事件

1,逆向分析这个东西的前提是你得懂这个东西,例如,就像逆飞机一样,你连飞机是什么都不知道,当然你也就逆不出来,逆之前, 你得自己会造飞机,只是你没有别人造的好。分析过程中,不需要弄懂每个细节,只需关注重点部分和整体流程。学会根据经验猜测。 2,原理: 我们新建的MFC程序,界面上就放2个按钮,事件处理函数随便写。然后我们在按钮那里设置断点。 程序运行起来后,我们点击button1,程序就断下来了,然后我们就查看它的调用堆栈,谁调用了这个按钮处理函数,找到事件分发函数。 _AfxDispatchCmdMs

goat_2003的博客 964

MYCCL定位特征码 MYCCL定位特征码

MYCCL定位特征码之后如何免杀教程

教大家写特征码扫描工具来自动寻找CALL地址

快一年没接触外挂了。现在回来学习,哎,但师傅事情忙,又没空理我了。 闲着没事来发篇文章给各位新手,高手可以直接跳过了。 今天要说的是怎样制作自己的特征码扫描工具。 众所周知,游戏更新一般那些CALL(过程或函数)都是不改变的。 (除非有什么或需要变动什么功能才会去改吧,总之极少更改。) 那么在这种条件下,我们就来写一个根据特征码来找到内存中这函数的地址。 寻找特征码的方法有两种,一是根据看哪里调用...

c2unix的专栏 3548

ST-CNN实战:用Python实现交通流量预测(附完整代码)

本文详细介绍了如何利用时空卷积神经网络(ST-CNN)进行交通流量预测的实战过程。通过Python和PyTorch,从数据预处理、构建邻接矩阵,到ST-CNN核心模块的代码实现与模型训练,提供了完整的解决方案,帮助开发者掌握处理时空序列数据的核心算法。

rust6ferris的博客 925

Apache Paimon快照管理实战:如何避免Flink作业中的反压问题?

本文深入探讨了如何通过优化Apache Paimon的快照管理机制来避免Flink作业中的反压问题。详细解析了同步与异步快照过期模式的适用场景及配置建议,并提供了Checkpoint策略与状态后端的协同优化方案,帮助提升实时数据处理的性能和稳定性。

i1j2k的博客 177

MFC消息机制详细剖析

本文详细剖析了MFC的消息机制全流程,帮助你分析MFC的消息派发是如何一步步走到控件自己定义的函数

Tandy12356_的博客 1768

Yocto下载加速秘籍:用清华镜像+PREMIRRORS配置让构建速度翻倍

本文详细解析了如何通过配置Yocto的PREMIRRORS优先级策略,并利用清华大学等国内镜像源,显著加速构建过程中的源码下载。文章提供了具体的配置示例和验证方法,帮助开发者解决网络瓶颈,实现构建速度翻倍,提升开发效率。

game4的博客 275

通过特征码找断点

<br />掌握调试技巧比知识更为重要<br />在逆向调试的时候 如果能下到正确的断点事半功倍<br />比如在处理一个按钮事件的话 如果能立刻找到该按钮的处理函数<br />那么破解或者逆向都是小问题了<br /> <br />比如要逆向MFC程序的按钮事件  可以写一个小Demo 然后下int3 或者 写个MsgBox<br />然后再用OD跟 回硕 一般来说像MFC这类的框架代码都是一样的  所以具备特征码的特点<br />由此可以找到MFC中的特征码就是<br /> <br />83E8 0A  

jmp esp 1120

从芯片选型到光学集成:手持激光测距仪硬件设计全解析

本文全面解析手持激光测距仪的硬件设计,从芯片选型到光学集成,详细介绍了相位法测距技术的核心原理与方案选择。通过模块化设计、信号链路优化及PCB布局技巧,实现毫米级精度。文章还分享了量产化关键控制点,帮助工程师规避常见设计陷阱,提升产品可靠性。

weixin_30425949的博客 445

华为OD机试 - 城市聚集度(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 2025A卷题库疯狂收录中,刷题。

学Java,找哪吒 1129

11月份月总结

11月份月总结 ====================================================一、熟悉、学习MFC框架。==================================================== 项目:基于MFC实现 LoveString.exe的功能复刻。 完成:1.0版本,2.0版本 ----------------------...

weixin_30610755的博客 115

【007】C++编程必知:原码、补码、反码的全面解读

计算机存储的是数据的补码。原码:计算机中对数字的二进制定点表示方法。比如123的原码是0111 1011。无符号数:原码=反码=补码。有符号数:要分正数和负数,正数的最高位为0,负数的最高位为1。其中,正数的原码、反码、补码都是相同的;负数的反码等于原码的符号数(最高位)不变,其他位取反;补码等于反码+1。比如:-123的原码是1111 1011,反码为1000 0100,补码为1000 0101。原码、补码和反码都是用于计算机表示有符号整数的方法。

Lion_Long的博客 2917

逆向总结(1)--事件响应特征码总结

易语言 易语言派发事件的特征码 FF55FC5F5E MFC MFC 事件响应函数 DEBUG特征 CALL DOWRD PTR [EBP-8] DEBUG 静态编译 特征 call dword ptr ss:[ebp-0x8] release 特征 call dword ptr ss:[ebp+0xC] release 静态编译 特征 call

oBuYiSeng的博客 1050

大数据运营可视化:Tableau+PowerBI数据看板搭建教程

当企业数据量从“GB级”跃升到“TB级”,运营人员面临的最大挑战不再是“如何收集数据”,而是“如何让数据说话”。数据看板作为“运营指挥中心的仪表盘”,能将零散的用户行为、业务指标、流量趋势浓缩成可快速解读的视觉语言。本文结合Tableau(自由探索的“数据瑞士军刀”)与PowerBI(微软生态的“组合家具”)两大工具,从需求分析→数据准备→指标设计→视图搭建→ dashboard 组合,一步步教你搭建符合业务逻辑的运营看板。

AI智能探索者的博客 1362

C语言中errno与perror()函数

宏errno和perror()函数都是在stdlib.h中定义的。 1 stdlib.h头文件 stdlib.h头文件即standard library标准库函数头文件,包含了C、C++语言的最常用的系统函数,该文件中还包含了C语言标准库函数的定义。 2 errno宏 errno宏在stdlib.h中的定义为 #define errno (*_errno()) errno宏用于保存程...

hou09tian的博客 1万+

逆向---按钮事件

特征码:FF 93 20 01 00 00 5B C3 53。FF 55 FC 5F 5E或(e-debug)mfc会断用mfc32.dll vc++不用调用。特征码:F3A58BC883E103F3A4E8。查看——》user32 在搜索。特征码:sub eax,0a。特征码:sub eax,0a。进入mfc.dll搜索。特征码:816C24。

peng05的博客 1193

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

mfc 按钮事件 vs2010 vs2013 vs2015 vc程序

vs2010 2013 特征码:FF 24 85 ?? ?? ?? 00 FF 55 14vs2015 :FF 55 14 E9通杀这个三个的特征:FF 55 14 E9搜索特征码 ,第一个call 就是 F7 就可以到按钮事件

h1028962069的专栏 1172

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

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

记:破解MFC小程序02

在很久很久以前,有几个加密过的小程序 然后,他们被我破解了…. 现在我们来破解第三个小程序打开之后的页面是这样的感觉和上一个程序一样是输入正确密码才可以点亮“确定”按钮,运行程序后发现,这九个按钮只有 0 和 1这两个状态,那么肯定也是通过匹配正确密码来达到点亮“确定”按钮的目的的那么我们就像上次一样找到关键的几个密码就可以了还是找特征码,怎么找特征码我在破解MFC小程序01中已经详细说明了,不

DSQSYSPA的博客 833

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

内存特征码查找--摸索

下午在广海论坛看到别人的一个关于游戏内存特征码查找的帖子,有了些兴趣。想研究下其原理,看了下Ollydb和CE之类的软件,其中对内存的显示都是16进制的字符形式。也想试下那种效果。 个人感觉这个查找是字符串匹配问题,特征码就是子串,而源串是游戏内存了。考虑到内存太大了,所以觉得还是KMP算法好啊,呵呵。 网上找到个现成的,修改了下就OK了,为了结合函数参数一致,所以写了

HoneyCat的月光浴场 8561

现在主流免杀是源码免杀

2011-05-21 13:07 一、文件特征码定位: 一般我们先用MyCCL把被查杀文件的文件特征码定位出来,然后用C32判断定位出来的这个特征码是代码还 是字符串,或者是输入表、输出表、版权信息等…定位在不同的地方,就要用不同的方法来进行源码免杀

qingruo_yin的专栏 6582

MyCCL特征码定位原理学习

这段时间学习WEB方面的技术,遇到了木马免杀特征码定位的问题,这里做一下学习笔记。 这里对MyCCL的分块原理做一下探究 对指定文件生成10个切块   对指定的木马进行切块后,文件列表是这样的。   注意这里是从E0作为切块的偏移量。也就是说从E0的位置开始逐个切块,E0之前的内容是保留的。这样做的目的是保留一些PE必须的头文件信息。 我们来通过亲身的探究来解析一下MyCCL的切块区...

weixin_33711647的博客 418

特征码免杀MYCCL应用实验

特征码免杀软件mycll的使用

xiao_ZHEDA的博客 734

新手学免杀之myccl使用指南

免杀的开始:用WinHex逐字节修改***免杀 -> 到后来软件保护(加壳)的加入、特征码免杀技术的公开、多层加壳的发现、反调试技术、针对于PE文件格式的免杀,到如今盛行的源码免杀。 再看反病毒的历程:从文件扫描技术、到通配符扫描技术、内存特征码扫描技术、虚拟机扫描技术、主动防御、启发式病毒查杀技术、云查杀。 我们不难发现,反病毒与反-反病毒这两项处于对立面的技术慢...

weixin_34279184的博客 676

从后渗透分析应急响应的那些事儿(二)免杀初识篇

从后渗透分析应急响应的那些事儿(二)免杀初识篇 文章首发于freebuf Tidesec专栏 https://www.freebuf.com/column/204005.html,转载到个人博客记录,转载请注明出处。 不知攻,焉知防。初识免杀,借此划重点分析应急响应应注意的免杀木马那些事儿。 1免杀相关定义 1.1木马 木马(Trojan),也称木马病毒,是指通过特定的程序(木马程序)来...

爱上卿的博客 4868

逆向MFC程序

文章目录@[toc]1 MFC执行流程1.1 环境支持1.2 分析1.3 实践探索1.3.1 创建一个MFC程序1.3.2 下关键断点并调试1.4 转向MFC库源文件中观测2 逆向2.1 特征码的选择(比如我这里还是想找到InitInstance())2.2 使用调试工具(OD) 搜索特侦码咐语 1 MFC执行流程 1.1 环境支持 vs 2017 afxwin.h,afxcdialogex.h...

leibso的博客 4329
上一篇: 参看windows进程
下一篇: 游戏是如何检测到有OD等调试工具的(转)
happy hell
博客等级 码龄23年 136粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值