chuiyan121 发表于 2022-2-20 21:46

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

本帖最后由 chuiyan121 于 2022-2-20 21:52 编辑


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

1、上集已完成注册,但程序有暗桩,如下几个插入功能全是插入乱码,而原版都是正常的。
https://s4.ax1x.com/2022/02/20/HO4ur9.png

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

3、运行完毕后,Alt+B打开断点窗口,所有的按钮事件已经被下断点了。
https://s4.ax1x.com/2022/02/20/HO4V8U.png

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

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

6、禁止断点后F9运行,程序可以选择插入随机字母按钮了。
https://s4.ax1x.com/2022/02/20/HO4G8O.png

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

8、命令窗口输入bp GetFileSize,即可下GetFileSize(获取文件大小)断点。成功后发现断点窗口多出一个。将其他无用的断点都禁止。
https://s4.ax1x.com/2022/02/20/HO4156.png

9、F9运行一次,即可断在GetFileSize处,在堆栈窗口004B1E9E处右键->反汇编窗口跟随。
https://s4.ax1x.com/2022/02/20/HO48PK.png

10、到达这里,F2下断,F9运行到此。然后F8一直跟,直到此函数结尾004B1F30的retn,直接跳到004B1F6F。
https://s4.ax1x.com/2022/02/20/HO4J2D.png

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

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

13、在HEX编辑框里输入一段00,确定,搜索到这片00空地。
https://s4.ax1x.com/2022/02/20/HO4Urd.png

14、我们选择0056B0A0处开始对MD5校验的代码进行改写,Alt+C回到MD5校验处,复制相关代码如下:

004B1F74      8D5D EC       lea ebx,dword ptr ss:
004B1F77      8D55 E8       lea edx,dword ptr ss:
004B1F7A|.33C0          xor eax,eax
004B1F7C|.8A03          mov al,byte ptr ds:
004B1F7E|.E8 35F1FFFF   call qqqfPoji.004B10B8
004B1F83|.8B55 E8       mov edx,
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地址上。也就是说当程序运行到这里时会跳转我们改写的代码处。
https://s4.ax1x.com/2022/02/20/HO4aqA.png

15、F8走两步,成功跳转到了0056B0A0空地,改写代码如下:

0056B0A0      60                  pushad                                    ;堆栈平衡
0056B0A1      C745 EC 11EA70A3   mov dword ptr ss:,0xA370EA11   ;写入原版程序MD5
0056B0A8      C745 F0 C3735C29   mov dword ptr ss:,0x295C73C3   ;写入原版程序MD5
0056B0AF      C745 F4 B4855277   mov dword ptr ss:,0x775285B4    ;写入原版程序MD5
0056B0B6      C745 F8 6756406A   mov dword ptr ss:,0x6A405667    ;写入原版程序MD5
0056B0BD      8D5D EC            lea ebx,dword ptr ss:
0056B0C0      8D55 E8            lea edx,dword ptr ss:
0056B0C3      33C0               xor eax,eax
0056B0C5      8A03               mov al,byte ptr ds:
0056B0C7      E8 EC5FF4FF      call qqqfPoji.004B10B8
0056B0CC      8B55 E8            mov edx,dword ptr ss:
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校验代码,绿圈中要注意手动填写,不要直接粘贴原来的代码。
https://s4.ax1x.com/2022/02/20/HO4wVI.png

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

17、运行1.exe,终于没有乱码了,MD5校验去除成功。
https://s4.ax1x.com/2022/02/20/HO4BIP.png


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


0adsl 发表于 2022-2-21 08:37

向老师学习老师辛苦了

我今天是大佬 发表于 2022-2-21 11:16

很详细, 感谢分享

wapj152321 发表于 2022-2-23 08:46

似懂非懂,谢谢分享!
页: [1]
查看完整版本: The039. 吾爱培训,《04:击破程序最坚固的堡垒》讲师:小生 [去暗桩、改MD5验证]