首页
社区
课程
招聘
[原创]对《加密与破解》第2版光盘上的作业5.1单元第一题的数学论证。
发表于: 2009-1-2 07:41 3488

[原创]对《加密与破解》第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是证确的,其它的证明我就不写了。所以建议大家对于一些个数学公式,数学定律最好准备一份在手上。方便应付这些问题。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//