llpplplp 发表于 2009-10-25 16:13

简单的SMC带壳补丁(QQ农场小帮手去广告)

本帖最后由 llpplplp 于 2009-10-25 16:17 编辑

汗,用Peace2008的生成器生成直接贴上来为什么格式全部乱套- =!!
我还是发个DOC文档吧

llpplplp 发表于 2009-10-25 16:22

【文章标题】简单的SMC带壳补丁(QQ农场小帮手去广告)
【作者名称】llpplplp
【电子邮箱】6285688@qq.com
【软件名称】QQ农场小帮手v1.31版
【软件简介】偷菜的= =!
【下载地址】http://bbs.nn47.com/qqfarm/QQ农场小帮手1.31.rar
【加壳方式】ASPack 2.12
【使用工具】PEID,OD,LORDPE
【破解平台】Win9x/NT/2000/XP
【破解声明】纯粹游戏,大侠们不要见笑哈

【版权声明】欢迎大家自由转载,但是请保持文章的完整性并注明出处
【破解内容】------------------------------------------------------
本文只是探讨一下简单的带壳补丁,如果您只是想去广告,当然可以选择脱壳后直接打补丁更方便快捷。再就是试试Peace2008的破文生成器,这么好的工具都出来了,不用用怎么行呢^ ^,文章比较简单,大家别笑话哈~~
首先用PEID查壳为ASPack 2.12的壳,OD加载程序,用ESP定律先走到程序OEP,ESP定律我就不说了哈~
00406EFC    68 D4C44000   push    0040C4D4                         ; OEP
00406F01    E8 F0FFFFFF   call    00406EF6                         ; jmp 到 msvbvm60.ThunRTMain
00406F06    0000            add   byte ptr , al
00406F08    48            dec   eax
00406F09    0000            add   byte ptr , al
00406F0B    0030            add   byte ptr , dh

程序是VB编写,我们用Ultra String Reference插件查找一下unicode字符串,看看能不能找到它的广告地址,我们可以看到
Ultra String Reference, 条目 74
Address=00437F57
Disassembly=mov   dword ptr , 0041C410
Text String=http://nn47.com/ad/ad.htm

Ultra String Reference, 条目 169
Address=00451233
Disassembly=mov   eax, 0041DCB0
Text String=http://bbs.rcqn.net/ad/xl.htm

程序是调用了存放于0041c410的http://nn47.com/ad/ad.htm广告地址和存放于0041DCB0的http://bbs.rcqn.net/ad/xl.htm广告地址,我们需要把他填充00以去掉广告,很多人填充掉后发现还是有广告弹出,那是因为程序初始化的时候还会生成广告地址,我们先让程序运行,再在内存中搜索一下http://bbs.rcqn.net/ad/xl.htm就会发现了

OK,我们在网址上下内存访问断点,看看是哪里调用它,中断后我们向上找跳转跳过它
004C5C09   51            push    ecx
004C5C0A   FF15 18114000   call    dword ptr                ; msvbvm60.__vbaVarTstLt
004C5C10   0FBFD0          movsx   edx, ax
004C5C13   85D2            test    edx, edx
004C5C15   0F84 DA000000   je      004C5CF5                         ; 就是你了,改为jmp直接跳过去
004C5C1B   C745 FC 1000000>mov   dword ptr , 10
004C5C22   C745 BC C8B0510>mov   dword ptr , 0051B0C8
004C5C29   C745 B4 0840000>mov   dword ptr , 4008
004C5C30   B8 10000000   mov   eax, 10
004C5C35   E8 D60DF4FF   call    00406A10                         ; jmp 到 msvbvm60.__vbaChkstk
004C5C3A   8BC4            mov   eax, esp
004C5C3C   8B4D B4         mov   ecx, dword ptr

好了,去广告的地址和跳转我们找到了,下面来看看怎么进行SMC补丁
用OD重新载入程序,因为代码已经被ASPACK压缩了,我们来看看我们要修改的地方在何处被解压,我们来到http://nn47.com/ad/ad.htm的地址0041C410下内存写入断点,运行后断下
00527177   8BB5 52010000   mov   esi, dword ptr
0052717D   C1F9 02         sar   ecx, 2
00527180   F3:A5         rep   movs dword ptr es:, dword p>; 中断在这里
00527182   8BC8            mov   ecx, eax
00527184   83E1 03         and   ecx, 3
00527187   F3:A4         rep   movs byte ptr es:, byte ptr>
00527189   5E            pop   esi
0052718A   68 00800000   push    8000
0052718F   6A 00         push    0
00527191   FFB5 52010000   push    dword ptr
00527197   FF95 51050000   call    dword ptr
0052719D   83C6 08         add   esi, 8
005271A0   833E 00         cmp   dword ptr , 0
005271A3   ^ 0F85 1EFFFFFF   jnz   005270C7                         ; 循环比较区块是否恢复完毕
005271A9   68 00800000   push    8000
005271AE   6A 00         push    0
005271B0   FFB5 56010000   push    dword ptr
005271B6   FF95 51050000   call    dword ptr
005271BC   8B9D 31050000   mov   ebx, dword ptr
005271C2   0BDB            or      ebx, ebx

我们可以选择在005271A9处进行补丁,因为这时候区块已经全部解压完毕,但005271A9的代码是动态生成的,如果在这里补丁,我们还要确定005271A9处的代码是在何处被解压的,因此我们选择到下面来补丁
005273A9   8985 A8030000   mov   dword ptr , eax
005273AF   61            popad                                    ; 根据堆栈平衡原理,我们知道在这里壳代码已经执行完毕
005273B0   75 08         jnz   short 005273BA                   ; 跳到程序OEP
005273B2   B8 01000000   mov   eax, 1
005273B7   C2 0C00         retn    0C
005273BA   68 FC6E4000   push    00406EFC                         ; 将动态生成的OEP压栈
005273BF   C3            retn
005273C0   8B85 26040000   mov   eax, dword ptr

在这之前我们还要确定一下SMC代码的存放位置,这里要求文件解压后这个位置不能被覆盖或者被调用,我们来用LORDPE查看程序区块

图中.null区块为外壳部分,我们选它尾部的空白部分来存放补丁代码,OD中我们按Alt+M查看.null区块代码,并选择尾部的0052C4CB地址来作为补丁空间,OK,下面我们把
005273B0 jnz 005273BA
改为
005273B0 jmp 0052C4CB

在0052C4CB处写入补丁代码
0052C4CB   C605 B0DC4100 0>mov   byte ptr , 0
0052C4D2   C605 10C44100 0>mov   byte ptr , 0
0052C4D9   C605 155C4C00 E>mov   byte ptr , 0E9
0052C4E0   C605 165C4C00 D>mov   byte ptr , 0DB
0052C4E7   C605 175C4C00 0>mov   byte ptr , 0
0052C4EE   C605 1A5C4C00 9>mov   byte ptr , 90            ; 以上为补丁数据
0052C4F5   ^ 0F85 BFAEFFFF   jnz   005273BA
0052C4FB   B8 01000000   mov   eax, 1
0052C500   ^ E9 B2AEFFFF   jmp   005273B7                         ; 跳回原地址

OK,将修改后的结果用OD保存到文件,修改完毕,这样就实现了带壳补丁了。

影子情人 发表于 2009-10-25 16:34

学习了,支持!!!

binqizhilian 发表于 2009-10-25 16:36

额 好复杂~~

sina666 发表于 2009-10-25 16:41

本帖最后由 sina666 于 2009-10-26 07:02 编辑

好贴,学习了
已解决

llpplplp 发表于 2009-10-25 19:40

伴侣在我的电脑没见弹窗出来:rggrg
如果要去除右上角的广告条
004154B0      68            db      68
改为
004154B0      00            db      00
就可以了

sina666 发表于 2009-10-25 19:56

本帖最后由 sina666 于 2009-10-26 11:43 编辑

db 68 改为db 00是什么原理呢,有些网址能打开,有些网址打不开
貌似这样改下以后不能在线获取数据库了
去掉ie弹窗还有其他修改方法么?

热火朝天 发表于 2009-10-25 22:40

伴侣在我的电脑没见弹窗出来:rggrg
如果要去除右上角的广告条
004154B0      68            db      68
改为
004154B0      00            db      00
就可以了
llpplplp 发表于 2009-10-25 19:40 http://www.52pojie.cn/images/common/back.gif
大牛指点一下怎么找到的

Hmily 发表于 2009-10-25 23:11

普及SMC知识.加精华鼓励!

ZeNiX 发表于 2009-10-26 13:22

不錯不錯,
復習一下,
我也好久沒用 SMC 了.
页: [1] 2 3 4 5
查看完整版本: 简单的SMC带壳补丁(QQ农场小帮手去广告)