吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2216|回复: 3
收起左侧

[讨论] The039. 吾爱培训,《04:击破程序最坚固的堡垒》讲师:小生 [去暗桩、改MD5验证]

[复制链接]
chuiyan121 发表于 2022-2-20 21:46
本帖最后由 chuiyan121 于 2022-2-20 21:52 编辑


The039. 吾爱培训,《04:击破程序最坚固的堡垒》讲师:小生 [去暗桩、改MD5验证]
关于吾爱破解论坛官方入门教学培训第一期,我的学习记录,如有疑问欢迎交流指正。^_^
好几天没有发帖了,反复在研究小生大牛的去暗桩、改MD5验证的自校验实战,虽然对着教程能成功,仍然一知半解,暂且无脑记录下来,希望后面的学习能够充分理解其中精髓。

1、上集已完成注册,但程序有暗桩,如下几个插入功能全是插入乱码,而原版都是正常的。


2、由于要检测按钮事件,而且查询程序后知道是delphi程序,现在需要使用一个脚本文件(Delphi & VB事件断点查找脚本.osc)查询程序所有的按钮事件。使用方法为:OD载入->插件->ODbgScript->运行脚本->打开,找到脚本文件即可自动运行脚本。


3、运行完毕后,Alt+B打开断点窗口,所有的按钮事件已经被下断点了。


4、Ctrl+F2重载程序,F9运行,到达00479DF4处,程序运行了,但是卡住点不动,再F9一次,可以点开了。点击插入其他按钮,再次卡在00479DF4处,无论点击哪个按钮,都会卡在这里。


5、要让程序继续往后运行,则需禁止这个断点,Alt+B调出断点窗口,再对应的地址右键禁止即可。断点在禁止后是可以再次激活的,并不是删除了。


6、禁止断点后F9运行,程序可以选择插入随机字母按钮了。


7、选择插入随机字母后,断在0048B2D6处,小生大牛的教程是F7分进去看代码,直到找到MD5校验的地方,说实话我这几天都在反复看,但始终没有参透。我在网上也查了很多其他牛人的资料,找到一个去到MD5校验很便捷的方法。


8、命令窗口输入bp GetFileSize,即可下GetFileSize(获取文件大小)断点。成功后发现断点窗口多出一个。将其他无用的断点都禁止。


9、F9运行一次,即可断在GetFileSize处,在堆栈窗口004B1E9E处右键->反汇编窗口跟随。


10、到达这里,F2下断,F9运行到此。然后F8一直跟,直到此函数结尾004B1F30的retn,直接跳到004B1F6F。


11、004B1F6F这里就是MD5的校验处了。在下一行004B1F74处右键,数据窗口跟随内存地址,可以看到数据窗口中的值就是程序本程序的MD5值。原始程序会调用自身的MD5值和我们修改后的MD5值进行比较,如果不一致则会出现篇首的乱码情况,无法正常使用。


12、知道了MD5验证的地方,接下来需要寻找一块全00的空地,用来修改MD5的值。方法为:右键->查找->二进制字串(Ctrl+B)。


13、在HEX编辑框里输入一段00,确定,搜索到这片00空地。


14、我们选择0056B0A0处开始对MD5校验的代码进行改写,Alt+C回到MD5校验处,复制相关代码如下:
[Asm] 纯文本查看 复制代码
004B1F74      8D5D EC       lea ebx,dword ptr ss:[ebp-0x14]
004B1F77      8D55 E8       lea edx,dword ptr ss:[ebp-0x18]
004B1F7A  |.  33C0          xor eax,eax
004B1F7C  |.  8A03          mov al,byte ptr ds:[ebx]
004B1F7E  |.  E8 35F1FFFF   call qqqfPoji.004B10B8
004B1F83  |.  8B55 E8       mov edx,[local.6]
004B1F86  |.  8BC7          mov eax,edi
004B1F88  |.  E8 3F26F5FF   call qqqfPoji.004045CC
004B1F8D  |.  43            inc ebx
004B1F8E  |.  4E            dec esi
004B1F8F  |.^ 75 E6         jnz short qqqfPoji.004B1F77
004B1F91  |.  33C0          xor eax,eax

接下来将以上代码第一行改写为jmp到00空地的0056B0A0地址上。也就是说当程序运行到这里时会跳转我们改写的代码处。


15、F8走两步,成功跳转到了0056B0A0空地,改写代码如下:
[Asm] 纯文本查看 复制代码
0056B0A0      60                    pushad                                      ;  堆栈平衡
0056B0A1      C745 EC 11EA70A3   mov dword ptr ss:[ebp-0x14],0xA370EA11   ;  写入原版程序MD5
0056B0A8      C745 F0 C3735C29   mov dword ptr ss:[ebp-0x10],0x295C73C3   ;  写入原版程序MD5
0056B0AF      C745 F4 B4855277   mov dword ptr ss:[ebp-0xC],0x775285B4    ;  写入原版程序MD5
0056B0B6      C745 F8 6756406A   mov dword ptr ss:[ebp-0x8],0x6A405667    ;  写入原版程序MD5
0056B0BD      8D5D EC            lea ebx,dword ptr ss:[ebp-0x14]
0056B0C0      8D55 E8            lea edx,dword ptr ss:[ebp-0x18]
0056B0C3      33C0               xor eax,eax
0056B0C5      8A03               mov al,byte ptr ds:[ebx]
0056B0C7      E8 EC5FF4FF        call qqqfPoji.004B10B8
0056B0CC      8B55 E8            mov edx,dword ptr ss:[ebp-0x18]
0056B0CF      8BC7               mov eax,edi
0056B0D1      E8 F694E9FF        call qqqfPoji.004045CC
0056B0D6      43                 inc ebx
0056B0D7      4E                 dec esi
0056B0D8    ^ 75 E6              jnz short qqqfPoji.0056B0C0          ;  注意这里跳转到上面几行
0056B0DA    ^ E9 B26EF4FF        jmp qqqfPoji.004B1F91              ;  注意这里不是原来的xor语句,而是直接跳转到004B1F91处。

完成后如下图,红框中是写入原MD5值,蓝框中是MD5校验代码,绿圈中要注意手动填写,不要直接粘贴原来的代码。


16、上图修改的代码最后的跳转前要保持堆栈平衡,插入popad,否则程序会闪退。如下图修改完成后,保存文件为1.exe。


17、运行1.exe,终于没有乱码了,MD5校验去除成功。



本节花费了好多精力,学习之路任重而道远啊,继续努力!!!


免费评分

参与人数 5吾爱币 +5 热心值 +5 收起 理由
beatone + 1 我很赞同!
oxding + 1 + 1 我很赞同!
0adsl + 1 + 1 向老师学习 老师辛苦了
Caraciold_Jr + 2 + 1 我很赞同!
cyhcuichao + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

0adsl 发表于 2022-2-21 08:37
向老师学习  老师辛苦了
我今天是大佬 发表于 2022-2-21 11:16
wapj152321 发表于 2022-2-23 08:46
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-4 01:15

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表