再贴一篇cd-chcek破解译文,我自己译的,文章来源不详,若觉得还可以,给点鼓励,我会继续努力。
这次的目标是:
Warlords 3 - Darklords Rising
工具: SICE, W32Dasm
保护:CD-checks 加filesize check(文件长度检测)
破解参考:
* Reference To: KERNEL32.GetDriveTypeA, Ord:00CEh
|
:00445853 FF1540F85900 Call dword
ptr [0059F840]
:00445859 83F805
cmp eax, 00000005 <-- 你在这里,这是一个检测光盘类型的指令
:0044585C 757A
jne 004458D8
:0044585E 8D45E4
lea eax, dword ptr [ebp-1C]
:00445861 8D4D94
lea ecx, dword ptr [ebp-6C]
:00445864 50
push eax
* Possible StringData Ref from Data Obj ->"%sW3.DAT" <--在光盘上看是否有这个文件
|
|
:00445865 68603E4F00 push
004F3E60 <-- 压入文件指针
:0044586A 51
push ecx
:0044586B FFD7
call edi <-- call getdrivetypea
:0044586D 83C40C
add esp, 0000000C
:00445870 8D4D94
lea ecx, dword ptr [ebp-6C]
:00445873 6A00
push 00000000
* Possible Reference to String Resource ID=00001: "Error!"
|
:00445875 6A01
push 00000001
:00445877 51
push ecx
:00445878 8D8D84FEFFFF lea ecx, dword
ptr [ebp+FFFFFE84]
:0044587E E8FD330900 call
004D8C80 <-- 检查文件 (如果eax == 1 ->检测通过)
:00445883 85C0
test eax, eax <-- 看是否检测到文件
:00445885 7451
je 004458D8 <-- 如果没有就跳转
:00445887 8D8D84FEFFFF lea ecx, dword
ptr [ebp+FFFFFE84]
:0044588D E8DE350900 call
004D8E70
:00445892 8D45E4
lea eax, dword ptr [ebp-1C]
:00445895 8D4D94
lea ecx, dword ptr [ebp-6C]
:00445898 50
push eax
* Possible StringData Ref from Data Obj ->"%sDRAKDUM\DRAKDUM0.SMK" <--
也要检查是否有这文件
|
:00445899 68483E4F00 push
004F3E48 <-- 压入文件指针
:0044589E 51
push ecx
:0044589F FFD7
call edi <-- call getdrivetypea
:004458A1 83C40C
add esp, 0000000C
:004458A4 8D4D94
lea ecx, dword ptr [ebp-6C]
:004458A7 6A00
push 00000000
* Possible Reference to String Resource ID=00001: "Error!"
|
:004458A9 6A01
push 00000001
:004458AB 51
push ecx
:004458AC 8D8D84FEFFFF lea ecx, dword
ptr [ebp+FFFFFE84]
:004458B2 E8C9330900 call
004D8C80 <-- 检测 (若eax == 1 ->检测通过)
:004458B7 85C0
test eax, eax
:004458B9 741D
je 004458D8
:004458BB 8D8D84FEFFFF lea ecx, dword
ptr [ebp+FFFFFE84]
:004458C1 E89A360900 call
004D8F60 <-- 跟入!!
Ok.. 这就是那两个检测.. 让我们看最后一个检测, 跟入那个 call
:004D8F60 56
push esi
:004D8F61 57
push edi
:004D8F62 8BF9
mov edi, ecx
:004D8F64 33F6
xor esi, esi
:004D8F66 39B708010000 cmp dword
ptr [edi+00000108], esi
:004D8F6C 7415
je 004D8F83
:004D8F6E 56
push esi
:004D8F6F 8B870C010000 mov eax, dword
ptr [edi+0000010C]
:004D8F75 50
push eax
* Reference To: KERNEL32.GetFileSize, Ord:00DAh <-- 获取 DRAKDUM0.SMK文件的长度
GetFileSize是最后的检查了,它决定了DRAKDUM0.SMK的长度而且如果没有发现文件,eax将被赋值0,文件如果找到,EAX就是2B465C(文件长度的十六进制)!你自己看一看吧,2836060
= 2B465C。
唉..我们经历了艰难而漫长的道路..现在我们知道做那些修补了.
:0044587E E8FD330900 - call 004D8C80 改成 -> B801000000 - mov eax, 00000001
:004458B2 E8C9330900 - call 004D8C80 改成 -> B801000000 - mov eax, 00000001
:004458C1 E89A360900 - call 004D8F60 改成 -> B85C462B00 - mov eax, 002B465C
ok,任务完成,收工。
Static Vengeance