📄 chap6-1-11.htm.primary
字号:
mov bl, byte ptr [esi+02] <br>
:0040110C 8A4E03
mov cl, byte ptr [esi+03] <br>
:0040110F 32D9
xor bl, cl <br>
:00401111 32C3
xor al, bl
---再由2个变1个放入AL <br>
:00401113 B908000000
mov ecx, 00000008 <br>
:00401118 BE44304000
mov esi, 00403044 <br>
:0040111D 3006
xor byte ptr [esi], al ---将生成的1个与原来的取异或 <br>
:0040111F 46
inc esi <br>
:00401120 E2FB
loop 0040111D <br>
:00401122 B908000000
mov ecx, 00000008 ---从这往下开始比较 <br>
:00401127 BE44304000
mov esi, 00403044 ---放入算出的结果 <br>
<br>
* Possible StringData Ref from Data Obj ->"q" <br>
| <br>
:0040112C BF08304000
mov edi, 00403008 ---放入正确的结果 <br>
:00401131 8A06
mov al, byte ptr [esi] <br>
:00401133 3A07
cmp al, byte ptr [edi] <br>
:00401135 751D
jne 00401154
---跳向出错 <br>
:00401137 46
inc esi <br>
:00401138 47
inc edi <br>
:00401139 E2F6
loop 00401131
---向上循环 <br>
:0040113B 6A40
push 00000040 <br>
<br>
模拟运算: <br>
如果输入12345678 <br>
机器码 31
32 33 34 35 36 37 38 <br>
与32异或 03 00
01 06 07 04 05 0A ----(1) <br>
8变4为 03
07 03 0F <br>
4变2为
04 0C <br>
2变1为
08
----(2) <br>
(1)与08取异或 0B 08 09
0E 0F 0C 0D 02 <br>
<br>
00403008 内正确的为 71 18 59 1B 79
42 45 4C <br>
<br>
根据正确反推注册码: (关键是如何计算(2)) <br>
由算法可知(2)是由机器码反复取异或得到,其实由它的正确的密码重复这
一算法也可求的(2),实验得出。缺少证明。 <br>
<br>
机器码 71
18 59 1B 79 42 45 4C <br>
8变4为 69
42 3B 09 <br>
4变2为
2B 32 <br>
2变1为
19
----正确的密码的(2)值应为19 <br>
<br>
接着反推正确的注册码: <br>
机器码 71
18 59 1B 79 42 45 4C <br>
与19取异或 68 01
40 02 60 5B 5C 55 <br>
与32取异或 5A 33
72 30 52 69 6E 67 <br>
查表得正确的注册码为: Z 3 r 0 R i
n g (Z3r0Ring) <br>
ZXEM 2000.3.20
</table>
</div>
<div id="KB6Parent" class="parent"> <a href="#" onClick="expandIt('KB6'); return false" class="p9">
2、习题二 答案</a></div>
<div id="KB6Child" class="child">
<table width="100%" align="center" cellspacing="0">
<tr bgcolor="#EFEFEF">
<td height="28">
<p class="p9">破解chap6-1-1-02<br>
<br>
* Referenced by a CALL at Address: <br>
|:004011A9 <br>
| <br>
:0040120B C8000000
enter 0000, 00 <br>
:0040120F 53
push ebx <br>
:00401210 52
push edx <br>
:00401211 33C0
xor eax, eax <br>
:00401213 B8A6204000
mov eax, 004020A6 ----把输入的密码放入EAX <br>
:00401218 803800
cmp byte ptr [eax], 00 <br>
:0040121B 7460
je 0040127D <br>
:0040121D 33DB
xor ebx, ebx <br>
:0040121F 33D2
xor edx, edx <br>
:00401221 8A18
mov bl, byte ptr [eax] ----开始处理密码 过程见下(1)
<br>
:00401223 C1C308
rol ebx, 08 <br>
:00401226 03D3
add edx, ebx
----处理后的都放入EDX <br>
:00401228 40
inc eax <br>
:00401229 803800
cmp byte ptr [eax], 00 <br>
:0040122C 75F3
jne 00401221 <br>
:0040122E 52
push edx <br>
:0040122F 6854204000
push 00402054 <br>
:00401234 68BF204000
push 004020BF <br>
:00401239 E88F000000
Call 004012CD <br>
:0040123E BBBF204000
mov ebx, 004020BF ----与正确的开始比较 <br>
:00401243 803B38
cmp byte ptr [ebx], 38 <br>
:00401246 7535
jne 0040127D <br>
:00401248 807B0144
cmp byte ptr [ebx+01], 44 <br>
:0040124C 752F
jne 0040127D <br>
:0040124E 807B0243
cmp byte ptr [ebx+02], 43 <br>
:00401252 7529
jne 0040127D <br>
:00401254 807B0341
cmp byte ptr [ebx+03], 41 <br>
:00401258 7523
jne 0040127D <br>
:0040125A 807B0446
cmp byte ptr [ebx+04], 46 <br>
:0040125E 751D
jne 0040127D <br>
:00401260 807B0533
cmp byte ptr [ebx+05], 33 <br>
:00401264 7517
jne 0040127D <br>
:00401266 807B0636
cmp byte ptr [ebx+06], 36 <br>
:0040126A 7511
jne 0040127D <br>
:0040126C 807B0738
cmp byte ptr [ebx+07], 38 <br>
:00401270 750B
jne 0040127D <br>
:00401272 B801000000
mov eax, 00000001 <br>
:00401277 5A
pop edx <br>
:00401278 5B
pop ebx <br>
:00401279 C9
leave <br>
:0040127A C20400
ret 0004 <br>
<br>
(1)过程分析: <br>
如果输入123456 <br>
过程:
00 00 31 00 <br>
00 31 32 00 <br>
31 32 33 00 <br>
32 33 34 31 <br>
33 34 35 32
<br>
+) 34 35 36 33 <br>
结果: CB 00 35 96 <br>
<br>
而正确的应为:8D CA F3 68 <br>
我们通过上面的模拟分析可以大致的了解运算过程,由于相加结果是如上的有很多,我们就可以大胆的假设,来推出一组数。 <br>
我就推出一组6位的:""$%=) <br>
ZXEM 2000.3.23
</table>
</div>
<div id="KB7Parent" class="parent"> <span class="p9"><a href="#" onClick="expandIt('KB7'); return false">
3、习题三 答案</a> </span></div>
<div id="KB7Child" class="child">
<table width="100%" align="center" cellspacing="0">
<tr bgcolor="#EFEFEF">
<td height="28">
<p class="p9">这题我们用函数getdlgitemtexta设断,它作用是得指定输入框输入字符串。也是一个常用的函数。 <br>
在注册框中输入:12345678 <br>
然后设断:bpx getdlgitemtexta <br>
点击OK,你将中断在SOFTICE,具体如下: <br>
* Reference To: USER32.GetDlgItemTextA, Ord:0000h <br>
| <br>
:0040115D E8E4030000
Call 00401546 <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -