文章作者:jacky
信息来源:邪恶八进制信息安全团队(
www.eviloctal.com)
事先说明下,我不是跟风,只是玩了几天游戏,所以才有此文。写的很粗糙,没有技术含量,只为求证,解惑。
第一步:脱壳
首先,PEID查壳:
Themida/WinLicense V1.8.X-V1.9.X Other -> Oreans Technologies * Sign.By.fly * 20080131 *
我这里用一个非常好工具直接脱之。
好了,脱壳完毕。
PEID再查:
Borland Delphi 6.0 - 7.0
这样第一步就完成了。
第二步:找关键代码
用DeDeDark找登陆事件。
打开DD,处理完毕。点过程,找到模块:TFormlogin,并在旁边事件中,找到btnCheckldClick
复制地址004C14E0,到此关键代码段就找到了。
第三步:破解
用OD载入,CTRL+G 到004C14E0地址,下断。
F9运行,填入错误验证。
F8步过。
一直到:
004C1697 . E8 543CF8FF call 004452F0
004C169C . 8B55 D8 mov edx, dword ptr [ebp-28]
004C169F . B8 48194C00 mov eax, 004C1948
004C16A4 . E8 E730F4FF call 00404790
004C16A9 . 85C0 test eax, eax
004C16AB 7E 1E jle short 004C16CB
//这里跳转未实现
//004C16CB=004C16CB
004C16AD . 8D55 D4 lea edx, dword ptr [ebp-2C]
004C16B0 . 8B45 FC mov eax, dword ptr [ebp-4]
004C16B3 . 8B80 20030000 mov eax, dword ptr [eax+320]
004C16B9 . E8 323CF8FF call 004452F0
//不理它,继续。
004C16BE . 8B45 D4 mov eax, dword ptr [ebp-2C]
004C16C1 . E8 4212F7FF call 00432908 //提示错误,看来刚才那个就关键的跳转。
好重新载入下断点,再次到此处:
004C16AB 7E 1E jle short 004C16CB
把它修改,JLE改为jmp,直接让它调。
保存修改,运行程序看看效果,结果程序一闪而过,看来不行了,继续。
004C16F5 E8 DEA6F4FF call 0040BDD8
//到此,程序又有错误提示,重新来过,再到这里跟进,跟进一段时间,又提示错误,难道我就这样陷入代
码的苦海!
此时我注意观察
004C16F5 E8 DEA6F4FF call 0040BDD8
下面的代码。
004C16FA 8B45 FC mov eax, dword ptr [ebp-4]
004C16FD DD98 40030000
fstp qword ptr [eax+340]
004C1703 9B wait
004C1704 8D4D C4 lea ecx, dword ptr [ebp-3C]
004C1707 8B45 FC mov eax, dword ptr [ebp-4]
004C170A 8B80 20030000 mov eax, dword ptr [eax+320]
004C1710 8B80 20020000 mov eax, dword ptr [eax+220]
004C1716 BA 02000000 mov edx, 2
004C171B 8B18 mov ebx, dword ptr [eax]
004C171D FF53 0C call dword ptr [ebx+C]
004C1720 8B45 C4 mov eax, dword ptr [ebp-3C]
004C1723 8D55 C8 lea edx, dword ptr [ebp-38]
004C1726 E8 9D6FF4FF call 004086C8
004C172B 8B45 C8 mov eax, dword ptr [ebp-38]
004C172E E8 A5A6F4FF call 0040BDD8
004C1733 8B45 FC mov eax, dword ptr [ebp-4]
004C1736 DD98 48030000
fstp qword ptr [eax+348]
004C173C 9B wait
004C173D 8D4D BC lea ecx, dword ptr [ebp-44]
004C1740 8B45 FC mov eax, dword ptr [ebp-4]
004C1743 8B80 20030000 mov eax, dword ptr [eax+320]
004C1749 8B80 20020000 mov eax, dword ptr [eax+220]
004C174F BA 03000000 mov edx, 3
004C1754 8B18 mov ebx, dword ptr [eax]
004C1756 FF53 0C call dword ptr [ebx+C]
004C1759 8B45 BC mov eax, dword ptr [ebp-44]
004C175C 8D55 C0 lea edx, dword ptr [ebp-40]
004C175F E8 646FF4FF call 004086C8
004C1764 8B45 C0 mov eax, dword ptr [ebp-40]
004C1767 E8 6CA6F4FF call 0040BDD8
004C176C 8B45 FC mov eax, dword ptr [ebp-4]
004C176F DD98 50030000
fstp qword ptr [eax+350]
004C1775 9B wait
004C1776 8B45 FC mov eax, dword ptr [ebp-4]
004C1779 DD80 50030000 fld qword ptr [eax+350]
004C177F 8B45 FC mov eax, dword ptr [ebp-4]
004C1782 DC98 48030000 fcomp qword ptr [eax+348]
004C1788 DFE0 fstsw ax
无有例外都有FSTP,也同样调用
XXXXXXXX E8 646FF4FF
call 004086C8
XXXXXXXX 8B45 C0 mov eax, dword ptr [ebp-40]
XXXXXXXX E8 6CA6F4FF
call 0040BDD8
那又是什么意思呢?不管是什么,既然前面很多,是不是像障碍一样呢。那好我就全部清理下,死马当活马医。
全部NOP掉,保存修改,运行程序,很幸运通过程序,到此破解完毕!
后记:此次破解过程,是在我多次跟踪,试验后才有的成果。其中的如果有半点浮躁,恐怕也没今日的结
果。学破解就要执着,耐心,浮躁要不得。
对于FSTP命令,我事后查找了一下,就找到一点点:
fild和fstp都是x87指令
fild是将整数转化为长双精FP80压栈(压到st0)
fstp是将弹栈指令,将st0弹出。
没听懂说什么。

,哪位大侠指点下小弟。
[
本帖最后由 jacky 于 2008-2-21 15:23 编辑 ]