能力值:
( LV9,RANK:1130 )
|
-
-
2 楼
http://www.pediy.com/tutorial/chap6/Exercise/section01/chap6-1-1-01.zip
这个就是看雪主页上的“序列号保护”的第一个crackme。
我顺便粘贴出来。大家都比较下。
楼主写得很详细。精神非常可嘉。继续啊....
破解chap6-1-1-01
* Referenced by a CALL at Address:
|:004010B0
|
:004010C9 56 push esi
:004010CA 57 push edi
:004010CB 51 push ecx
:004010CC 33F6 xor esi, esi
:004010CE 33FF xor edi, edi
:004010D0 B908000000 mov ecx, 00000008 ---定义循环次数
:004010D5 BE44304000 mov esi, 00403044 ---调出输入的密码
:004010DA 803632 xor byte ptr [esi], 32 ---把密码个字节与32取异或
:004010DD 46 inc esi
:004010DE E2FA loop 004010DA ---向上循环
:004010E0 BE44304000 mov esi, 00403044
:004010E5 B904000000 mov ecx, 00000004 ---8变4
:004010EA 8A06 mov al, byte ptr [esi]
:004010EC 8A5E01 mov bl, byte ptr [esi+01]
:004010EF 32C3 xor al, bl ---把变化后的密码前后取异或
:004010F1 88874C304000 mov byte ptr [edi+0040304C], al
:004010F7 83C602 add esi, 00000002
:004010FA 47 inc edi
:004010FB E2ED loop 004010EA ---向上循环
:004010FD BE4C304000 mov esi, 0040304C ---将生成的4个数变成2个
:00401102 8A06 mov al, byte ptr [esi]
:00401104 8A5E01 mov bl, byte ptr [esi+01]
:00401107 32C3 xor al, bl
:00401109 8A5E02 mov bl, byte ptr [esi+02]
:0040110C 8A4E03 mov cl, byte ptr [esi+03]
:0040110F 32D9 xor bl, cl
:00401111 32C3 xor al, bl ---再由2个变1个放入AL
:00401113 B908000000 mov ecx, 00000008
:00401118 BE44304000 mov esi, 00403044
:0040111D 3006 xor byte ptr [esi], al ---将生成的1个与原来的取异或
:0040111F 46 inc esi
:00401120 E2FB loop 0040111D
:00401122 B908000000 mov ecx, 00000008 ---从这往下开始比较
:00401127 BE44304000 mov esi, 00403044 ---放入算出的结果
* Possible StringData Ref from Data Obj ->"q"
|
:0040112C BF08304000 mov edi, 00403008 ---放入正确的结果
:00401131 8A06 mov al, byte ptr [esi]
:00401133 3A07 cmp al, byte ptr [edi]
:00401135 751D jne 00401154 ---跳向出错
:00401137 46 inc esi
:00401138 47 inc edi
:00401139 E2F6 loop 00401131 ---向上循环
:0040113B 6A40 push 00000040
模拟运算:
如果输入12345678
机器码 31 32 33 34 35 36 37 38
与32异或 03 00 01 06 07 04 05 0A ----(1)
8变4为 03 07 03 0F
4变2为 04 0C
2变1为 08 ----(2)
(1)与08取异或 0B 08 09 0E 0F 0C 0D 02
00403008 内正确的为 71 18 59 1B 79 42 45 4C
根据正确反推注册码: (关键是如何计算(2))
由算法可知(2)是由机器码反复取异或得到,其实由它的正确的密码重复这 一算法也可求的(2),实验得出。缺少证明。
机器码 71 18 59 1B 79 42 45 4C
8变4为 69 42 3B 09
4变2为 2B 32
2变1为 19 ----正确的密码的(2)值应为19
接着反推正确的注册码:
机器码 71 18 59 1B 79 42 45 4C
与19取异或 68 01 40 02 60 5B 5C 55
与32取异或 5A 33 72 30 52 69 6E 67
查表得正确的注册码为: Z 3 r 0 R i n g (Z3r0Ring)
ZXEM 2000.3.20
|