一个CrackMe,PEid 检测:Borland Delphi 6.0 - 7.0
找到的关键跳转处:
00476C59 /75 18 jnz short Project.00476C73 ; 关键跳转
只需要将jnz 更改为 jz 就可以暴力破解了。
然后我将Crack加了一个ASPack v2.12的壳。
准备直接给壳做个Patch。
开始直接使用ESP定律,到达
004A73B0 /75 08 jnz short Project[.004A73BA //ESP 到达这里
004A73B2 |B8 01000000 mov eax,1
004A73B7 |C2 0C00 retn 0C
找到的空数据段的位置:
004A75A8 0000 add byte ptr ds:[eax],al // 空数据起始位置
004A75AA 0000 add byte ptr ds:[eax],al
004A75AC 0000 add byte ptr ds:[eax],al
004A75AE 0000 add byte ptr ds:[eax],al
004A75B0 0000 add byte ptr ds:[eax],al
004A75B2 0000 add byte ptr ds:[eax],al
第一步更改:
然后更改代码:
004A73B0 /E9 F3010000 jmp Project[.004A75A8
004A73B5 |90 nop
004A73B6 |90 nop
004A73B7 |C2 0C00 retn 0C
004A73BA |68 786F4700 push Project[.00476F78
第二部更改:
空数据段更改为:
004A75A8 C605 596C4700 74 mov byte ptr ds:[476C59],74
004A75AF - E9 C4F9FCFF jmp Project[.00476F78 //直接跳转到OEP
004A75B4 0000 add byte ptr ds:[eax],al
然后全选进行保存,程序报错。
跟踪调试后,发现进入OEP,全部都是空数据。
接着我把步骤拆开,先进行第一步更改,保存,程序当然无法运行,
我对无法运行的文件,进行第二步更改,报讯,程序可以正常运行,达到patch目的。
我的问题:
为什么直接保存全部更改,程序不能正常运行,分步更改却可以达到目的?
附件中有加壳和未加壳的CrackME,请帮忙解答,小弟是菜鸟,很多不太明白。。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)