首页
社区
课程
招聘
[分享]必杀技公布——用特征码定位关键代码,秒杀MFC程序
发表于: 2009-2-23 21:20 84177

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

2009-2-23 21:20
84177
收藏
免费 7
支持
分享
最新回复 (132)
雪    币: 203
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
101
内容没有了?
2009-12-20 10:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
102
顶起。。。。。谢谢LZ.。。
2009-12-21 01:12
0
雪    币: 240
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
103
怎么变成不可说了?
2009-12-21 07:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
104
看看高人的必杀经验。
2009-12-21 08:43
0
雪    币: 223
活跃值: (292)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
105
去找个学习.
2009-12-21 11:00
0
雪    币: 252
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
106
的确 哎 删除了!
2010-1-3 10:19
0
雪    币: 1458
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
107
怎么看不到了?
2010-1-3 13:05
0
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
108
学习收藏了,谢谢楼主分享!
2010-1-3 13:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
109
学习收藏了,谢谢楼主分享!
2010-1-3 21:27
0
雪    币: 144
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
110
打个标记,留念
2010-1-3 22:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
111
手段确实很高明.支持下
2010-1-3 23:33
0
雪    币: 1309
活跃值: (207)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
112
讲的不错。一直为这个事情苦闷,有了这种方法好多了。
2010-2-23 14:13
0
雪    币: 32
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
113
空的》》??
2010-2-25 22:18
0
雪    币: 124
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
114
晕。来迟了。什么也没看到。
2010-2-26 10:58
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
115
一年过去了,内容没了?
2010-2-26 15:48
0
雪    币: 351
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
116
怎么内容没了??
2010-2-26 18:36
0
雪    币: 351
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
117
果然如此!!
2010-2-26 18:47
0
雪    币: 77
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
118
http://blog.csdn.net/happyhell/archive/2009/03/10/3976548.aspx
2010-2-26 20:31
0
雪    币: 77
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
119
直接把标题复制 然后百度 很多人转载看雪的
2010-2-26 20:31
0
雪    币: 492
活跃值: (53)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
120
被和谐了丫?
2010-2-27 00:17
0
雪    币: 421
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
121
再贴回来吧。这么精华的帖子不该修改掉的。
【文章标题】: 必杀技公布——用特征码定位关键代码,秒杀MFC程序
【文章作者】: 书呆彭
【下载地址】: 自己搜索下载
【使用工具】: VC与OllyICE
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
本文所讲的方法,其实是一个很古老的方法了。以前,考虑到此法的杀伤力巨大,不便于公布。

随着软件开发者保护意识的提高和软件保护技术的发展,此法的杀伤力逐渐下降成为普通等级。

我本人这学期的课程和任务十分多,打算暂时把程序调试这个业余爱好放一放,估计至少会有半年时间不常来看雪了。

把这个方法写出来,算是给大家的告别礼物。

对于直接使用SDK而不使用第三方库的程序,我们要定位到程序的“关键代码”并不困难。通常在CreateWindow函数或DialogBoxParam函数下断点,可以直接获得其主界面的窗口过程或对话框过程。但是对于使用了MFC的程序,我们找到的窗口过程或对话框过程是在MFC提供的程序框架的内部,经过层层的分发和筛选,消息才最终到达用户代码,直接分析起来比较繁琐。

幸好,有一个Olly的脚本,可以直接帮助我们找到诸如OnOK()之类的函数。这个脚本用到的方法,是建立在对MFC内部机制充分理解的基础上,通过在消息分发的代码处下条件断点而完成的。

然而,我马上要讲到的这个方法,在一定程度上,比这个脚本还好使,可以一下就定位到我们感兴趣的代码处。而且,可以举一反三,如果你看明白了其中的思路,可以自己扩展成为十分强大的“必杀技”,不仅对MFC,对其它的应用程序框架也有效果。

我就不讲我如何想到的这个方法,只讲两个例子。如果你看懂了这个例子,其中的思路肯定会明白了。而且,十分简单。

我以MFC42为例。先打开VC6,创建一个MFC的对话框程序,按默认设置。我们在“OK”按钮的处理函数OnOK()的开头,写上这样一句:

__asm int 3
  
然后,按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
2010-8-11 22:26
0
雪    币: 267
活跃值: (24)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
122
测试时感觉不是第一个call,但是call基本上都挨着的,可能就是分发的问题吧
2010-8-12 10:07
0
雪    币: 440
活跃值: (119)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
123
刚刚测试了一下,在MFC80U下没有成功;MFC42下成功了,但是不是第一个call,不过在第一个的附近;方法还是很强大的,谢谢楼主分享。
2010-8-12 10:47
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
124
谢教学,,,
顶121楼
14楼的管理大大,,,加壳违规帖,,,
2010-8-12 19:28
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
125
学习!!!!!!!!!!!!!!!!!!!!!
2010-10-29 14:19
0
游客
登录 | 注册 方可回帖
返回
//