📄 lesson14061.htm
字号:
第二步必须是10B <br>
第三步必须是10B <br>
第四步必须是01B <br>
<br>
那么这个字节是: 10101001B=A9H-->169D <br>
<br>
这是所有的移动: <br>
10101001 = A9H =169d ;12H个字符是被DL异或后的值
<br>
10101011 = ABH =171d ;这个结果存在[4034E8]中
<br>
10100101 = A5H =165d ; <br>
00010000 = 10H = 16d <br>
01010100 = 54H = 84d <br>
00111111 = 3FH = 63d <br>
00110000 = 30H = 48d <br>
01010101 = 55H = 85d <br>
01100101 = 65H =101d <br>
00010110 = 16H = 22d <br>
01010110 = 56H = 86d <br>
10111110 = BEH =190d <br>
11110011 = F3H =243d <br>
11101010 = EAH =234d <br>
11101001 = E9H =233d <br>
01010000 = 50H = 80d <br>
01010101 = 55H = 85d <br>
10101111 = AFH =175d <br>
<br>
这些就是12H个移动指针的字节.但是,这12H个字节还不能直接写入KwazyWeb.bit文件.这些值还没有跟DL的值异或.如果首字节是01H它就会读出另一个字节.那么这另一个字节就是DL的值.那么就用它逐个的与这12H个字节异或,然后将12H个字节写入文件.那么你就注册成功了.
<br>
<br>
当它第二次使用READFILE时,就读出了第一个字节的值,其实就是名字的长度.然后计算DL.再用它与上面的12H个字符异或.最后再写入KwazyWeb.bit文件中.
<br>
我编了一个Pascal程序.你有时间可以看看. <br>
感谢你的阅读! <br>
<br>
<br>
<br>
<br>
译于2000年9月 <br>
garfield cat <br>
<br>
<br>
老外真是粗心,到了最后也没有把他举的例子的结果写出来: <br>
0C 67 61 72 66 69 65 6C 64 20 63 61 74 3F 3D 33 86 C2 A9 A6 C3 F3 80
C0 28 65 7C 7F C6 C3 39 <br>
| \
/ \
/ <br>
| --------------------------------- --------------------------------------------------
<br>
| garfield cat
这是移动针指的12H(18)个字节(这是异或后的) <br>
|
<br>
|
<br>
|
<br>
|
<br>
名字的长度共12位 <br>
<br>
先算DL: <br>
将名字加起来:67+61+72+66+69+65+6C+64+20+63+61+74=496H <br>
取后两个字节就是:96H 所以DL就是96 然后用96H与 A9 AB A5 10 54 3F 30 55 65 16 56
BE F3 EA E9 50 55 AF逐个进行异或后就得3F 3D 33 86 C2 A9 A6 C3 F3 80 C0 28 65
7C 7F C6 C3 39 </span></blockquote>
</td>
</tr>
</table>
</div>
<div id="KB5Parent" class="parent"> <span class="p9"><a href="#" onClick="expandIt('KB5'); return false">
5、习题五 答案</a> </span></div>
<div id="KB5Child" class="child"> <span class="p9"> </span>
<table width="100%" cellspacing="0" align="center">
<tr bgcolor="#EFEFEF">
<td>
<p class="p9">I. 介绍 <br>
I.1 这篇教程所需的工具 <br>
II. 破解 <br>
<br>
<br>
I.欢迎看我的第21篇教程.这次我将写我破的第一个KEYFILE :) 虽然它很简单,但是我还是很高兴写这篇文章. <br>
I.1 <br>
<br>
W32Dasm 8.9 <br>
Cruehead's CrackMe 3.0 <br>
<br>
II.破解: <br>
<br>
当你反编译后,你会看到一个很像文件名的字符串:Crackme3.key .很幸运这个就是真正的KEYFILE. <br>
<br>
那么,让我们开始-你应该看这: <br>
<br>
<br>
:00401021 6A03
push 00000003 <br>
:00401023 68000000C0
push C0000000 <br>
<br>
* Possible StringData Ref from Data Obj ->"CRACKME3.KEY"
<br>
| <br>
:00401028 68D7204000
push 004020D7 <br>
<br>
* Reference To: KERNEL32.CreateFileA, Ord:0000h <br>
| <br>
:0040102D E876040000
Call 004014A8 ;;寻找这个文件的CALL <br>
:00401032 83F8FF
cmp eax, FFFFFFFF ;; 如果文件存在 <br>
:00401035 750C
jne 00401043 ;; 就跳 <br>
<br>
---省略了一部分--- ;;显示信息Uncracked <br>
<br>
:00401052 6A00
push 00000000 <br>
:00401054 68A0214000
push 004021A0 <br>
:00401059 50
push eax <br>
:0040105A 53
push ebx <br>
:0040105B FF35F5204000
push dword ptr [004020F5] <br>
<br>
* Reference To: KERNEL32.ReadFile, Ord:0000h <br>
| <br>
:00401061 E830040000
Call 00401496 ;;开始读这个文件 <br>
:00401066 833DA021400012
cmp dword ptr [004021A0], 00000012 ;;大小是否为18字节 <br>
:0040106D 75C8
jne 00401037 ;; 如果不是,则显示Uncracked
<br>
:0040106F 6808204000
push 00402008 ;; 保存文件内容 <br>
:00401074 E898020000
call 00401311 ;; 进行计算 <br>
:00401079 8135F920400078563412 xor dword
ptr [004020F9], 12345678 ;;与12345678做异或 <br>
:00401083 83C404
add esp, 00000004 <br>
:00401086 6808204000
push 00402008 <br>
:0040108B E8AC020000
call 0040133C <br>
:00401090 83C404
add esp, 00000004 <br>
:00401093 3B05F9204000
cmp eax, dword ptr [004020F9] ;; 比较两个的值 <br>
:00401099 0F94C0
sete al ;; 如果相同,则在AL中做标志 <br>
:0040109C 50
push eax ;; 保存 eax <br>
:0040109D 84C0
test al, al ;;测试标志 <br>
:0040109F 7496
je 00401037 ;; 如果为零就跳 <br>
<br>
那好,创建一个CrackMe3.key大小为18 bytes.创建后让我们看看call 00401311. <br>
<br>
* Referenced by a CALL at Address: <br>
|:00401074 <br>
| <br>
:00401311 33C9
xor ecx, ecx ;; 清零 <br>
:00401313 33C0
xor eax, eax ;; 清零 <br>
:00401315 8B742404
mov esi, dword ptr [esp+04] ;; esi 是文件内容 <br>
:00401319 B341
mov bl, 41 ;; bl =41h <br>
<br>
* Referenced by a (U)nconditional or (C)onditional Jump
at Address: <br>
|:00401333(C) <br>
| <br>
:0040131B 8A06
mov al, byte ptr [esi] ;; al = 文件的第一个字节
<br>
:0040131D 32C3
xor al, bl
;; 第一个字节与41h做异或 <br>
:0040131F 8806
mov byte ptr [esi], al ;; 然后再存入ESI
<br>
:00401321 46
inc esi
;; 下一个字节 <br>
:00401322 FEC3
&nb
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -