-
-
[原创]对《加密与破解》第2版光盘上的作业5.1单元第一题的数学论证。
-
发表于: 2009-1-2 07:41 3488
-
我在作第一题的时候,看到答案说,实验得出,未能证明,这样对初学都来说,不太好,因为我们毕竟没有高人那样的感觉。所以我要从数学定律上来论证这是对的。原题附后:
* 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)
以上为书上一字未改的答案。下面为我的论证。
因为机器码通过跟进可以得出。71 18 59 1B 79 42 45 4C
主要是最后一个2变1生成的数学未知。那么我们假定为M
根据定律:a xor b=c 则,b xor c=a ,a xor c=b成立
那么,注册码与32异或后生成的数字,拿前两个数来举例。假定为A1和B1因为A1 xor M=78 所以A1=78 xor M
那么8变4 这步操作A1 xor B1就可以写为(78 xor M) xor (18 xor M)
根据定律:(a xor b) xor c = a xor (b xor c) = a xor b xor c
a xor b=b xor a
a xor 0=a
a xor a=0
可以推出以下 A1 xor B1 =(78 xor M) xor (18 xor M)=78 xor M xor 18 xor M =78 xor 18 xor M xor M=78 xor 18 xor 0
= 78 xor 18
第三四个数也是如此,也就是,虽然8变4的时候,注册码是未知的,但它们8变4的结果却是可以推出来的,这样后面的变就顺理成章了。所以最后生成的19是证确的,其它的证明我就不写了。所以建议大家对于一些个数学公式,数学定律最好准备一份在手上。方便应付这些问题。
* 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)
以上为书上一字未改的答案。下面为我的论证。
因为机器码通过跟进可以得出。71 18 59 1B 79 42 45 4C
主要是最后一个2变1生成的数学未知。那么我们假定为M
根据定律:a xor b=c 则,b xor c=a ,a xor c=b成立
那么,注册码与32异或后生成的数字,拿前两个数来举例。假定为A1和B1因为A1 xor M=78 所以A1=78 xor M
那么8变4 这步操作A1 xor B1就可以写为(78 xor M) xor (18 xor M)
根据定律:(a xor b) xor c = a xor (b xor c) = a xor b xor c
a xor b=b xor a
a xor 0=a
a xor a=0
可以推出以下 A1 xor B1 =(78 xor M) xor (18 xor M)=78 xor M xor 18 xor M =78 xor 18 xor M xor M=78 xor 18 xor 0
= 78 xor 18
第三四个数也是如此,也就是,虽然8变4的时候,注册码是未知的,但它们8变4的结果却是可以推出来的,这样后面的变就顺理成章了。所以最后生成的19是证确的,其它的证明我就不写了。所以建议大家对于一些个数学公式,数学定律最好准备一份在手上。方便应付这些问题。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
看原图
赞赏
雪币:
留言: