📄 chap6-1-61.htm.primary
字号:
:004010BB 6A65
push 00000065 <br>
:004010BD 56
push esi <br>
<br>
* Reference To: USER32.SetDlgItemTextA, Ord:0000h <br>
| <br>
:004010BE E859040000 Call
0040151C <br>
:004010C3 EB23
jmp 004010E8 <br>
<br>
* Referenced by a (U)nconditional or (C)onditional Jump at Address: <br>
|:0040109E(C) <br>
| <br>
:004010C5 6800100000 push
00001000 <br>
<br>
* Possible StringData Ref from Data Obj ->"Bad Luck" <br>
| <br>
:004010CA 68F3204000 push
004020F3 <br>
<br>
* Possible StringData Ref from Data Obj ->"This program isn't being run
from " <br>
->"a CD, Please insert the CD" <br>
| <br>
:004010CF 68B6204000 push
004020B6 <br>
:004010D4 6A00
push 00000000 <br>
<br>
* Reference To: USER32.MessageBoxA, Ord:0000h <br>
| <br>
:004010D6 E847040000 Call
00401522 <br>
<br>
* Possible StringData Ref from Data Obj ->"Invalid CD In Drive" <br>
| <br>
:004010DB 68FC204000 push
004020FC <br>
<br>
因此,如下改动: <br>
<br>
0040109E 7525
jne 004010C5 to <br>
0040109E 7425
je 004010C5 <br>
<br>
或 <br>
0040109E 90
nop <br>
0040109F 90
nop
</table>
</div>
<div id="KB2Parent" class="parent"> <span class="p9"><a href="#" onClick="expandIt('KB2'); return false">
2、习题二 答案</a> </span></div>
<div id="KB2Child" class="child"> <span class="p9"> </span>
<table width="100%" align="center" cellspacing="0">
<tr bgcolor="#EFEFEF">
<td height="7" class="p9">这程序利用了GetDriveTypeA检测光驱,还用CreateFileA找开光盘文件,如两者都OK,则成功。
<br>
首先用W32DASM装载程序,用串式参考查找"You lost",来到: <br>
<br>
* Reference To: KERNEL32.GetDriveTypeA, Ord:0104h <br>
| <br>
:00401349 FF1504204000 Call dword
ptr [00402004] <br>
:0040134F 83F803
cmp eax, 00000003................如EAX是3则是硬盘 <br>
:00401352 743E
je 00401392 -----------------------改成两个NOP, <br>
:00401354 8D45E8
lea eax, dword ptr [ebp-18] <br>
<br>
* Possible StringData Ref from Data Obj ->"CD_CHECK.DAT" <br>
| <br>
:00401357 6858304000 push
00403058 <br>
:0040135C 50
push eax <br>
:0040135D 8D45E0
lea eax, dword ptr [ebp-20] <br>
:00401360 50
push eax <br>
<br>
* Reference To: MFC42.Ordinal:039C, Ord:039Ch <br>
| <br>
:00401361 E822030000 Call
00401688 <br>
:00401366 8B00
mov eax, dword ptr [eax] <br>
:00401368 53
push ebx <br>
:00401369 53
push ebx <br>
:0040136A 53
push ebx <br>
:0040136B 53
push ebx <br>
:0040136C 6A01
push 00000001 <br>
:0040136E 6800000080 push
80000000 <br>
:00401373 50
push eax <br>
<br>
* Reference To: KERNEL32.CreateFileA, Ord:0034h <br>
| <br>
:00401374 FF1500204000 Call dword
ptr [00402000] <br>
:0040137A 83F8FF
cmp eax, FFFFFFFF................eax=-1打开文件失败 <br>
:0040137D 8D4DE0
lea ecx, dword ptr [ebp-20] <br>
:00401380 0F9445F3
sete byte ptr [ebp-0D] <br>
<br>
* Reference To: MFC42.Ordinal:0320, Ord:0320h <br>
| <br>
:00401384 E811030000 Call
0040169A <br>
:00401389 385DF3
cmp byte ptr [ebp-0D], bl <br>
:0040138C 0F84F3000000 je 00401485
......如打开文件成功则跳转,改成:jmp 00401485 <br>
<br>
* Referenced by a (U)nconditional or (C)onditional Jump at Address: <br>
|:00401352(C) <br>
| <br>
:00401392 FF45EC
inc [ebp-14] <br>
:00401395 83C704
add edi, 00000004 <br>
:00401398 837DEC07
cmp dword ptr [ebp-14], 00000007 <br>
:0040139C 759F
jne 0040133D <br>
:0040139E 53
push ebx <br>
<br>
* Possible StringData Ref from Data Obj ->"Try again" <br>
| <br>
:0040139F 684C304000 push
0040304C <br>
<br>
* Possible StringData Ref from Data Obj ->"You lost" <br>
| <br>
:004013A4 6840304000 push
00403040 <br>
这样改之后,成功crack。
</table>
</div>
<div id="KB3Parent" class="parent"> <span class="p9"><a href="#" onClick="expandIt('KB3'); return false">
3、习题三 答案</a> </span></div>
<div id="KB3Child" class="child"> <span class="p9"> </span>
<table width="100%" align="center" cellspacing="0">
<tr bgcolor="#EFEFEF">
<td height="7" class="p9">reversing a lame cd-check, pay attention boy!
by R!SC -- risc@notme.com <br>
<br>
<br>
starting from the top, cd-checks normally use kernel32!getdrivetypea to
find out what sort of <br>
drive they are looking at, you simply push a pointer to a drive letter,
then after getdrivetypea <br>
eax=03 for hard disk or eax=05 for a cd-rom. <br>
<br>
so load crackcd.exe, enter softice, and type in 'bpx getdrivetypea'. Click
on the CheckCD <br>
button, and bingo! we have located the code to check the CD.. now pay
close attention to the <br>
comments in dead listing... <br>
<br>
<br>
<br>
015F:004011B3 68EB234000 PUSH
004023EB ; pointer to 'kernel32.dll',0 <br>
015F:004011B8 E861070000 CALL
KERNEL32!LoadLibraryA <br>
015F:004011BD 8BF0
MOV ESI,EAX ; save address of kernel32
in esi <br>
015F:004011BF 8D85E8FBFFFF LEA
EAX,[EBP+FFFFFBE8] <br>
015F:004011C5 50
PUSH EAX ;
pointer to some free space <br>
015F:004011C6 68F8234000 PUSH
004023F8 ; pointer to getdrivetypea (wide char...)
<br>
015F:004011CB E8C3020000 CALL
00401493 ; convert it to normal, pasting it into
the free space <br>
015F:004011D0 83C408
ADD ESP,08 <br>
015F:004011D3 8D95E8FBFFFF LEA
EDX,[EBP+FFFFFBE8] <br>
015F:004011D9 52
PUSH EDX ;
points to the converted 'getdrivetypea' <br>
015F:004011DA 56
PUSH ESI ;
kernel32 <br>
015F:004011DB E820070000 CALL
KERNEL32!GetProcAddress ; returns the address
of 'getdrivetypea' in eax <br>
015F:004011E0 6A00
PUSH 00 ; null,
return the drivetype of the current drive <br>
015F:004011E2 FFD0
CALL EAX ; call
getdrivetypea (where softice will break) <br>
015F:004011E4 8BF8
MOV EDI,EAX ; eax will == 3 if the
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -