好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 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校验去除成功。
本节花费了好多精力,学习之路任重而道远啊,继续努力!!!
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|