欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

公路坐标计算系统

公路坐标计算系统

【在上一篇《[原创]解密算法---公路坐标计算系统 》 中未对其DES加密算法进行详细分析,经过两天对DES加密算法的了解,对程序又进行了跟踪,很相与大家一起分享,所以再次发贴进行补充,错误之处,请即时指出。
首先介绍一下有关DES的知识(资料来自互联网)
一.加密
DES算法处理的数据对象是一组64比特的明文串。设该明文串为m=m1m2…m64 (mi=0或1)。明文串经过64比特的密钥K来加密,最后生成长度为64比特的密文E。其加密过程图示如下:


DES算法加密过程
对DES算法加密过程图示的说明如下:待加密的64比特明文串m,经过IP置换后,得到的比特串的下标列表如下:
IP
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
该比特串被分为32位的L0和32位的R0两部分。R0子密钥K1(子密钥的生成将在后面讲)经过变换f(R0,K1)(f变换将在下面讲)输出32位的比特串f1,f1与L0做不进位的二进制加法运算。运算规则为:
f1与L0做不进位的二进制加法运算后的结果赋给R1,R0则原封不动的赋给L1。L1与R0又做与以上完全相同的运算,生成L2,R2…… 一共经过16次运算。最后生成R16和L16。其中R16为L15与f(R15,K16)做不进位二进制加法运算的结果,L16是R15的直接赋值。
R16与L16合并成64位的比特串。值得注意的是R16一定要排在L16前面。R16与L16合并后成的比特串,经过置换IP-1后所得比特串的下标列表如下:
IP-1
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
经过置换IP-1后生成的比特串就是密文e
下面再讲一下变换f(Ri-1,Ki)。
它的功能是将32比特的输入再转化为32比特的输出。其过程如图所示:

对f变换说明如下:输入Ri-1(32比特)经过变换E后,膨胀为48比特。膨胀后的比特串的下标列表如下:
E:
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 31
膨胀后的比特串分为8组,每组6比特。各组经过各自的S盒后,又变为4比特(具体过程见后),合并后又成为32比特。该32比特经过P变换后,其下标列表如下:
P:
16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25
经过P变换后输出的比特串才是32比特的f (Ri-1,Ki)。
下面再讲一下S盒的变换过程。任取一S盒。见图:

在其输入b1,b2,b3,b4,b5,b6中,计算出x=b1*2+b6, y=b5+b4*2+b3*4+b2*8,再从Si表中查出x 行,y 列的值Sxy。将Sxy化为二进制,即得Si盒的输出。(S表如图所示)

至此,DES算法加密原理讲完了。
二.子密钥的生成
64比特的密钥生成16个48比特的子密钥。其生成过程见图:

子密钥生成过程具体解释如下:
64比特的密钥K,经过PC-1后,生成56比特的串。其下标如表所示:
PC-1
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
该比特串分为长度相等的比特串C0和D0。然后C0和D0分别循环左移1位,得到C1和D1。C1和D1合并起来生成C1D1。C1D1经过PC-2变换后即生成48比特的K1。K1的下标列表为:
PC-2
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32
C1、D1分别循环左移LS2位,再合并,经过PC-2,生成子密钥K2……依次类推直至生成子密钥K16。
注意:Lsi (I =1,2,….16)的数值是不同的。具体见下表:
迭代顺序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
左移位数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
三.解密
DES的解密过程和DES的加密过程完全类似,只不过将16圈的子密钥序列K1,K2……K16的顺序倒过来。即第一圈用第16个子密钥K16,第二圈用K15,其余类推。
第一圈: 加密后的结果 L=R15, R=L15⊕f(R15,K16)⊕f(R15,K16)=L15
同理R15=L14⊕f(R14,K15), L15=R14。
同理类推:
得 L=R0, R=L0。
四.示例
例如:已知明文m=learning, 密钥 k=computer。
明文m的ASCII二进制表示:
m= 01101100 01100101 01100001 01110010
01101110 01101001 01101110 01100111
密钥k的ASCII二进制表示:
k=01100011 01101111 01101101 01110000
01110101 01110100 01100101 01110010
明文m经过IP置换后,得:
11111111 00001000 11010011 10100110 00000000 11111111 01110001 11011000
等分为左右两段:
L0=11111111 00001000 11010011 10100110 R0=00000000 11111111 01110001 11011000
经过16次迭代后,所得结果为:
L1=00000000 11111111 01110001 11011000 R1=00110101 00110001 00111011 10100101
L2=00110101 00110001 00111011 10100101 R2=00010111 11100010 10111010 10000111
L3=00010111 11100010 10111010 10000111 R3=00111110 10110001 00001011 10000100
L4=00111110101100010000101110000100 R4=11110111110101111111101000111110
L5=11110111110101111111101000111110 R5=10010110011001110100111111100101
L6=10010110011001110100111111100101 R6=11001011001010000101110110100111
L7=11001011001010000101110110100111 R7=01100011110011101000111011011001
L8=01100011110011101000111011011001 R8=01001011110100001111001000000100
L9=01001011110100001111001000000100 R9=00011101001101111010111011100001
L10=00011101001101111010111011100001 R10=11101110111110111111010100000101
L11=11101110111110111111010100000101 R11=01101101111011011110010111111000
L12=01101101111011011110010111111000 R12=11111101110011100111000110110111
L13=11111101110011100111000110110111 R13=11100111111001011010101000000100
L14=11100111111001011010101000000100 R14=00011110010010011011100001100001
L15=00011110010010011011100001100001 R15=01010000111001001101110110100011
L16=01010000111001001101110110100011 R16=01111101101010000100110001100001
其中,f函数的结果为:
f1=11001010001110011110100000000011 f2=00010111000111011100101101011111
f3=00001011100000000011000000100001 f4=11100000001101010100000010111001
f5=10101000110101100100010001100001 f6=00111100111111111010011110011001
f7=11110101101010011100000100111100 f8=10000000111110001010111110100011
f9=01111110111110010010000000111000 f10=10100101001010110000011100000001
f11=01110000110110100100101100011001 f12=00010011001101011000010010110010
f13=10001010000010000100111111111100 f14=11100011100001111100100111010110
f15=10110111000000010111011110100111 f16=01100011111000011111010000000000
16个子密钥为:
K1=11110000101111101110111011010000 K2=11100000101111101111011010010101
K3=11110100111111100111011000101000 K4=11100110111101110111001000011010
K5=11101110110101110111011100100110 K6=11101111110100110101101110001011
K7=00101111110100111111101111100110 K8=10111111010110011101101101010000
K9=00011111010110111101101101000100 K10=00111111011110011101110100001001
K11=00011111011011011100110101101000 K12=01011011011011011011110100001010
K13=11011101101011011010110110001111 K14=11010011101011101010111110000000
K15=11111001101111101010011011010011 K16=11110001101111100010111000000001
S盒中,16次运算时,每次的8 个结果为:
第一次:5,11,4,1,0,3,13,9;
第二次:7,13,15,8,12,12,13,1;
第三次:8,0,0,4,8,1,9,12;
第四次:0,7,4,1,7,6,12,4;
第五次:8,1,0,11,5,0,14,14;
第六次:14,12,13,2,7,15,14,10;
第七次:12,15,15,1,9,14,0,4;
第八次:15,8,8,3,2,3,14,5;
第九次:8,14,5,2,1,15,5,12;
第十次:2,8,13,1,9,2,10,2;
第十一次:10,15,8,2,1,12,12,3;
第十二次:5,4,4,0,14,10,7,4;
第十三次:2,13,10,9,2,4,3,13;
第十四次:13,7,14,9,15,0,1,3;
第十五次:3,1,15,5,11,9,11,4;
第十六次:12,3,4,6,9,3,3,0;
子密钥生成过程中,生成的数值为:
C0=0000000011111111111111111011 D0=1000001101110110000001101000
C1=0000000111111111111111110110 D1=0000011011101100000011010001
C2=0000001111111111111111101100 D2=0000110111011000000110100010
C3=0000111111111111111110110000 D3=0011011101100000011010001000
C4=0011111111111111111011000000 D4=1101110110000001101000100000
C5=1111111111111111101100000000 D5=0111011000000110100010000011
C6=1111111111111110110000000011 D6=1101100000011010001000001101
C7=1111111111111011000000001111 D7=0110000001101000100000110111
C8=1111111111101100000000111111 D8=1000000110100010000011011101
C9=1111111111011000000001111111 D9=0000001101000100000110111011
C10=1111111101100000000111111111 D10=0000110100010000011011101100
C11=1111110110000000011111111111 D11=0011010001000001101110110000
C12=1111011000000001111111111111 D12=1101000100000110111011000000
C13=1101100000000111111111111111 D13=0100010000011011101100000011
C14=0110000000011111111111111111 D14=0001000001101110110000001101
C15=1000000001111111111111111101 D15=0100000110111011000000110100
C16=0000000011111111111111111011 D16=1000001101110110000001101000
解密过程与加密过程相反,所得的数据的顺序恰好相反。在此就不赘述。

有关《[原创]解密算法---公路坐标计算系统 》一文的DES算法补充
00417885  |. 8D95 30FFFFFF  LEA EDX,DWORD PTR SS:[EBP-D0]
0041788B  |. 8D85 30FEFFFF  LEA EAX,DWORD PTR SS:[EBP-1D0]
00417891  |. 52             PUSH EDX
00417892  |. 50             PUSH EAX
00417893  |. E8 C8FBFFFF    CALL UNPACKED.00417460
                            --->计算子密钥,下面有详细分析
00417898  |. 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
0041789B  |. 6A 01          PUSH 1
0041789D  |. 8D95 30FEFFFF  LEA EDX,DWORD PTR SS:[EBP-1D0]
004178A3  |. 51             PUSH ECX
004178A4  |. 52             PUSH EDX
004178A5  |. E8 F6FBFFFF    CALL UNPACKED.004174A0
                            --->根据密钥进行DES加密,下面有详细分析
004178AA  |. 8B45 D7        MOV EAX,DWORD PTR SS:[EBP-29]
004178AD  |. 8B4D D6        MOV ECX,DWORD PTR SS:[EBP-2A]
004178B0  |. 8B55 D5        MOV EDX,DWORD PTR SS:[EBP-2B]
----------------------------------------------
00417460  /$ 56             PUSH ESI
00417461  |. 8B7424 0C      MOV ESI,DWORD PTR SS:[ESP+C]
00417465  |. 57             PUSH EDI
00417466  |. 6A 00          PUSH 0
00417468  |. 56             PUSH ESI
00417469  |. E8 02FBFFFF    CALL UNPACKED.00416F70
                            --->此CALL计算子密钥,下面有详细分析
0041746E  |. 8B7C24 14      MOV EDI,DWORD PTR SS:[ESP+14]
00417472  |. 57             PUSH EDI
00417473  |. E8 F8FCFFFF    CALL UNPACKED.00417170
00417478  |. 6A 01          PUSH 1
0041747A  |. 56             PUSH ESI
0041747B  |. E8 F0FAFFFF    CALL UNPACKED.00416F70
00417480  |. 81C7 80000000  ADD EDI,80
00417486  |. 57             PUSH EDI
00417487  |. E8 E4FCFFFF    CALL UNPACKED.00417170
0041748C  |. 83C4 18        ADD ESP,18
0041748F  |. 5F             POP EDI
00417490  |. 5E             POP ESI
00417491  \. C3             RETN
----------------------------------------------
004174A0  /$ 83EC 08        SUB ESP,8
004174A3  |. 56             PUSH ESI
004174A4  |. 8B7424 14      MOV ESI,DWORD PTR SS:[ESP+14]
004174A8  |. 57             PUSH EDI
004174A9  |. 8B7C24 1C      MOV EDI,DWORD PTR SS:[ESP+1C]
004174AD  |. 85FF           TEST EDI,EDI
004174AF  |. 7E 30          JLE SHORT UNPACKED.004174E1
004174B1  |. 53             PUSH EBX
004174B2  |. 8B5C24 18      MOV EBX,DWORD PTR SS:[ESP+18]
004174B6  |> 8D4424 0C      /LEA EAX,DWORD PTR SS:[ESP+C]
004174BA  |. 50             |PUSH EAX
004174BB  |. 56             |PUSH ESI
004174BC  |. E8 EFFCFFFF    |CALL UNPACKED.004171B0
         |                 |--->此CALL对机器码进行了位置变换40019524-->10044295,就不详细分析了
         |                 |
004174C1  |. 8D4C24 14      |LEA ECX,DWORD PTR SS:[ESP+14]
004174C5  |. 53             |PUSH EBX
004174C6  |. 51             |PUSH ECX
004174C7  |. E8 A4FDFFFF    |CALL UNPACKED.00417270
         |                 |--->此CALL对进行了初始IP位置置换,并进行16次迭代最后计算出R16和L16在下面详细分析
         |                 |
004174CC  |. 8D5424 1C      |LEA EDX,DWORD PTR SS:[ESP+1C]
004174D0  |. 56             |PUSH ESI
004174D1  |. 52             |PUSH EDX
004174D2  |. E8 49FDFFFF    |CALL UNPACKED.00417220
         |                 |--->此CALL对上一步计算结果进行IP-1置换,生成64位密文输出
         |                 |
004174D7  |. 83C4 18        |ADD ESP,18
004174DA  |. 83C6 08        |ADD ESI,8
004174DD  |. 4F             |DEC EDI
004174DE  |.^75 D6          \JNZ SHORT UNPACKED.004174B6
004174E0  |. 5B             POP EBX
004174E1  |> 5F             POP EDI
004174E2  |. 5E             POP ESI
004174E3  |. 83C4 08        ADD ESP,8
004174E6  \. C3             RETN
------------------------------------------------------------
00416F70  /$ 81EC F4000000  SUB ESP,0F4
00416F76  |. 33C9           XOR ECX,ECX
00416F78  |. 53             PUSH EBX
00416F79  |. 55             PUSH EBP
00416F7A  |. 56             PUSH ESI
00416F7B  |. 8BB424 0401000>MOV ESI,DWORD PTR SS:[ESP+104]
00416F82  |. 57             PUSH EDI
          |                 ---------------------
          |                 下面的循环对64位的初始密钥进行上面所介绍的DES子密钥生成的PC-1 变换生成56位的串,保存在SS:[ESP+ECX+4C]
00416F83  |> 33C0           /XOR EAX,EAX
00416F85  |. 8A81 3C074200  |MOV AL,BYTE PTR DS:[ECX+42073C]
00416F8B  |. 8BD0           |MOV EDX,EAX
00416F8D  |. 83E0 07        |AND EAX,7
00416F90  |. C1FA 03        |SAR EDX,3
00416F93  |. 8A1C45 CC06420>|MOV BL,BYTE PTR DS:[EAX*2+4206CC]
00416F9A  |. 8A1432         |MOV DL,BYTE PTR DS:[EDX+ESI]
00416F9D  |. 84D3           |TEST BL,DL
00416F9F  |. 0F95C0         |SETNE AL
00416FA2  |. 88440C 4C      |MOV BYTE PTR SS:[ESP+ECX+4C],AL
00416FA6  |. 41             |INC ECX
00416FA7  |. 83F9 38        |CMP ECX,38------>十进制 = 56    
00416FAA  |.^7C D7          \JL SHORT UNPACKED.00416F83
          |                 ---------------------
00416FAC  |. 33DB           XOR EBX,EBX
00416FAE  |. C74424 10 1E00>MOV DWORD PTR SS:[ESP+10],1E
          |                 ---------------------
          |                 下面的循环进行16个48位子密钥计算  
00416FB6  |> 66:83BC24 0C01>/CMP WORD PTR SS:[ESP+10C],1
00416FBF  |. 8B4424 10      |MOV EAX,DWORD PTR SS:[ESP+10]
00416FC3  |. 74 03          |JE SHORT UNPACKED.00416FC8
00416FC5  |. 8D041B         |LEA EAX,DWORD PTR DS:[EBX+EBX]
00416FC8  |> 8DBC84 8800000>|LEA EDI,DWORD PTR SS:[ESP+EAX*4+88]
00416FCF  |. 8DAC84 8400000>|LEA EBP,DWORD PTR SS:[ESP+EAX*4+84]
00416FD6  |. 33C0           |XOR EAX,EAX
00416FD8  |. 33C9           |XOR ECX,ECX
00416FDA  |. 8A8B 74074200  |MOV CL,BYTE PTR DS:[EBX+420774]
00416FE0  |. C707 00000000  |MOV DWORD PTR DS:[EDI],0
00416FE6  |. C745 00 000000>|MOV DWORD PTR SS:[EBP],0
00416FED  |. 8BF1           |MOV ESI,ECX
          |                 |-------------------------------------------
                            |  下面这个循环共28次,对上面生成的56位串的前28位就是前文的C0进行循环移位,移位位数表前文已经列出,将结果保存在SS:[ESP+EAX+14]
00416FEF  |> 83F9 1C        |/CMP ECX,1C
00416FF2  |. 7D 06          ||JGE SHORT UNPACKED.00416FFA
00416FF4  |. 8A540C 4C      ||MOV DL,BYTE PTR SS:[ESP+ECX+4C]
00416FF8  |. EB 04          ||JMP SHORT UNPACKED.00416FFE
00416FFA  |> 8A540C 30      ||MOV DL,BYTE PTR SS:[ESP+ECX+30]
00416FFE  |> 885404 14      ||MOV BYTE PTR SS:[ESP+EAX+14],DL
00417002  |. 40             ||INC EAX
00417003  |. 41             ||INC ECX
00417004  |. 83F8 1C        ||CMP EAX,1C
00417007  |.^7C E6          |\JL SHORT UNPACKED.00416FEF
          |                 |-------------------------------------------
00417009  |. B8 1C000000    |MOV EAX,1C
0041700E  |. 8D4E 1C        |LEA ECX,DWORD PTR DS:[ESI+1C]
          |                 |-------------------------------------------
                            |  下面这个循环共28次,对上面生成的56位串的后28位就是前文的D0进行循环移位,移位位数表前文已经列出,将保存在SS:[ESP+EAX+14]
00417011  |> 83F9 38        |/CMP ECX,38
00417014  |. 7D 06          ||JGE SHORT UNPACKED.0041701C
00417016  |. 8A540C 4C      ||MOV DL,BYTE PTR SS:[ESP+ECX+4C]
0041701A  |. EB 04          ||JMP SHORT UNPACKED.00417020
0041701C  |> 8A540C 30      ||MOV DL,BYTE PTR SS:[ESP+ECX+30]
00417020  |> 885404 14      ||MOV BYTE PTR SS:[ESP+EAX+14],DL
00417024  |. 40             ||INC EAX
00417025  |. 41             ||INC ECX
00417026  |. 83F8 38        ||CMP EAX,38
00417029  |.^7C E6          |\JL SHORT UNPACKED.00417011
          |                 |-------------------------------------------
0041702B  |. 33C9           |XOR ECX,ECX
0041702D  |. B8 DC064200    |MOV EAX,UNPACKED.004206DC
          |                 |-------------------------------------------
                            | 下面这个循环进行PC-2移位变换生成子密钥,保存在 SS:[EBP],我的第一个子密钥是
                              94DC2062C323
00417032  |> 33D2           |/XOR EDX,EDX
00417034  |. 8A91 84074200  ||MOV DL,BYTE PTR DS:[ECX+420784]
0041703A  |. 807C14 14 00   ||CMP BYTE PTR SS:[ESP+EDX+14],0
0041703F  |. 74 0A          ||JE SHORT UNPACKED.0041704B
00417041  |. 8B10           ||MOV EDX,DWORD PTR DS:[EAX]
00417043  |. 8B75 00        ||MOV ESI,DWORD PTR SS:[EBP]
00417046  |. 0BF2           ||OR ESI,EDX
00417048  |. 8975 00        ||MOV DWORD PTR SS:[EBP],ESI
0041704B  |> 33D2           ||XOR EDX,EDX
0041704D  |. 8A91 9C074200  ||MOV DL,BYTE PTR DS:[ECX+42079C]
00417053  |. 807C14 14 00   ||CMP BYTE PTR SS:[ESP+EDX+14],0
00417058  |. 74 08          ||JE SHORT UNPACKED.00417062
0041705A  |. 8B10           ||MOV EDX,DWORD PTR DS:[EAX]
0041705C  |. 8B37           ||MOV ESI,DWORD PTR DS:[EDI]
0041705E  |. 0BF2           ||OR ESI,EDX
00417060  |. 8937           ||MOV DWORD PTR DS:[EDI],ESI
00417062  |> 83C0 04        ||ADD EAX,4
00417065  |. 41             ||INC ECX
00417066  |. 3D 3C074200    ||CMP EAX,UNPACKED.0042073C
0041706B  |.^7C C5          |\JL SHORT UNPACKED.00417032
          |                 |-------------------------------------------
0041706D  |. 8B07           |MOV EAX,DWORD PTR DS:[EDI]
0041706F  |. 8B4D 00        |MOV ECX,DWORD PTR SS:[EBP]
00417072  |. 50             |PUSH EAX                                ; /<%06x>
00417073  |. 51             |PUSH ECX                                ; |<%06x>
00417074  |. 53             |PUSH EBX                                ; |<%d>
00417075  |. 68 B40F4200    |PUSH UNPACKED.00420FB4                  ; |format = "DES key%d:   %06x   %06x
"
0041707A  |. FF15 50B44100  |CALL DWORD PTR DS:[<&MSVCRT.printf>]    ; \printf
00417080  |. 8B4424 20      |MOV EAX,DWORD PTR SS:[ESP+20]
00417084  |. 83C4 10        |ADD ESP,10
00417087  |. 83E8 02        |SUB EAX,2
0041708A  |. 43             |INC EBX
0041708B  |. 83F8 FE        |CMP EAX,-2
0041708E  |. 894424 10      |MOV DWORD PTR SS:[ESP+10],EAX
00417092  |.^0F8F 1EFFFFFF  \JG UNPACKED.00416FB6
          |                 |循环16次后就会生成16个48位的子密钥
          |                 |-------------------------------------------
00417098  |. 8D9424 8400000>LEA EDX,DWORD PTR SS:[ESP+84]
0041709F  |. 52             PUSH EDX
004170A0  |. E8 1B000000    CALL UNPACKED.004170C0
004170A5  |. 83C4 04        ADD ESP,4
004170A8  |. 5F             POP EDI
004170A9  |. 5E             POP ESI
004170AA  |. 5D             POP EBP
004170AB  |. 5B             POP EBX
004170AC  |. 81C4 F4000000  ADD ESP,0F4
004170B2  \. C3             RETN
-------------------------------------------------------------
00417270  /$ 53             PUSH EBX
00417271  |. 8B5C24 08      MOV EBX,DWORD PTR SS:[ESP+8]
00417275  |. 55             PUSH EBP
00417276  |. 56             PUSH ESI
00417277  |. 8B03           MOV EAX,DWORD PTR DS:[EBX]
00417279  |. 8B4B 04        MOV ECX,DWORD PTR DS:[EBX+4]
0041727C  |. 8BD0           MOV EDX,EAX
0041727E  |. 8BF1           MOV ESI,ECX
00417280  |. C1EA 04        SHR EDX,4
00417283  |. 81E2 0F0F0F0F  AND EDX,0F0F0F0F
00417289  |. 81E6 0F0F0F0F  AND ESI,0F0F0F0F
0041728F  |. 33D6           XOR EDX,ESI
00417291  |. 57             PUSH EDI
00417292  |. 33CA           XOR ECX,EDX
00417294  |. C1E2 04        SHL EDX,4
00417297  |. 33C2           XOR EAX,EDX
00417299  |. 8BF1           MOV ESI,ECX
0041729B  |. 8BD0           MOV EDX,EAX
0041729D  |. 81E6 FFFF0000  AND ESI,0FFFF
004172A3  |. C1EA 10        SHR EDX,10
004172A6  |. 33D6           XOR EDX,ESI
004172A8  |. 33CA           XOR ECX,EDX
004172AA  |. C1E2 10        SHL EDX,10
004172AD  |. 33C2           XOR EAX,EDX
004172AF  |. 8BD1           MOV EDX,ECX
004172B1  |. C1EA 02        SHR EDX,2
004172B4  |. 8BF0           MOV ESI,EAX
004172B6  |. 81E2 33333333  AND EDX,33333333
004172BC  |. 81E6 33333333  AND ESI,33333333
004172C2  |. 33D6           XOR EDX,ESI
004172C4  |. 33C2           XOR EAX,EDX
004172C6  |. C1E2 02        SHL EDX,2
004172C9  |. 33CA           XOR ECX,EDX
004172CB  |. 8BF0           MOV ESI,EAX
004172CD  |. 8BD1           MOV EDX,ECX
004172CF  |. 81E6 FF00FF00  AND ESI,0FF00FF
004172D5  |. C1EA 08        SHR EDX,8
004172D8  |. 81E2 FF00FF00  AND EDX,0FF00FF
004172DE  |. 33D6           XOR EDX,ESI
004172E0  |. 33C2           XOR EAX,EDX
004172E2  |. C1E2 08        SHL EDX,8
004172E5  |. 33CA           XOR ECX,EDX
004172E7  |. 8BF1           MOV ESI,ECX
004172E9  |. 03C9           ADD ECX,ECX
004172EB  |. C1EE 1F        SHR ESI,1F
004172EE  |. 0BF1           OR ESI,ECX
004172F0  |. 8BCE           MOV ECX,ESI
004172F2  |. 33C8           XOR ECX,EAX
004172F4  |. 81E1 AAAAAAAA  AND ECX,AAAAAAAA
004172FA  |. 33C1           XOR EAX,ECX
004172FC  |. 33F1           XOR ESI,ECX
004172FE  |. 8BF8           MOV EDI,EAX
00417300  |. 56             PUSH ESI                              ; /<%08x>
00417301  |. C1EF 1F        SHR EDI,1F                            ; |
00417304  |. 8D1400         LEA EDX,DWORD PTR DS:[EAX+EAX]        ; |
00417307  |. 0BFA           OR EDI,EDX                            ; |
00417309  |. 57             PUSH EDI                              ; |<%08x>
0041730A  |. 68 D00F4200    PUSH UNPACKED.00420FD0                ; |format = "IP trans: %08x %08x
"
0041730F  |. FF15 50B44100  CALL DWORD PTR DS:[<&MSVCRT.printf>]  ; \printf
          |                 |--->上面对初始明文进行了IP位置变换,下面就会与16个密钥进行异或运算
          |                 |
00417315  |. 8B4C24 24      MOV ECX,DWORD PTR SS:[ESP+24]
00417319  |. 83C4 0C        ADD ESP,0C
0041731C  |. C74424 14 0800>MOV DWORD PTR SS:[ESP+14],8
00417324  |> 8B41 04        MOV EAX,DWORD PTR DS:[ECX+4]
00417327  |. 83C1 04        ADD ECX,4
0041732A  |. 33C6           XOR EAX,ESI
0041732C  |. 83C1 08        ADD ECX,8
0041732F  |. 8BD0           MOV EDX,EAX
00417331  |. 8BE8           MOV EBP,EAX
00417333  |. C1EA 18        SHR EDX,18
00417336  |. 83E2 3F        AND EDX,3F
00417339  |. 83C1 04        ADD ECX,4
0041733C  |. C1ED 10        SHR EBP,10
0041733F  |. 8B1495 B408420>MOV EDX,DWORD PTR DS:[EDX*4+4208B4]
00417346  |. 83E5 3F        AND EBP,3F
00417349  |. 0B14AD B40A420>OR EDX,DWORD PTR DS:[EBP*4+420AB4]
00417350  |. 8BE8           MOV EBP,EAX
00417352  |. C1ED 08        SHR EBP,8
00417355  |. 83E5 3F        AND EBP,3F
00417358  |. 83E0 3F        AND EAX,3F
0041735B  |. 0B14AD B40C420>OR EDX,DWORD PTR DS:[EBP*4+420CB4]
00417362  |. 8B2C85 B40E420>MOV EBP,DWORD PTR DS:[EAX*4+420EB4]
00417369  |. 8B41 FC        MOV EAX,DWORD PTR DS:[ECX-4]
0041736C  |. 0BD5           OR EDX,EBP
0041736E  |. 33FA           XOR EDI,EDX
00417370  |. 33C7           XOR EAX,EDI
00417372  |. 8BD0           MOV EDX,EAX
00417374  |. 8BE8           MOV EBP,EAX
00417376  |. C1EA 18        SHR EDX,18
00417379  |. 83E2 3F        AND EDX,3F
0041737C  |. C1ED 10        SHR EBP,10
0041737F  |. 8B1495 B408420>MOV EDX,DWORD PTR DS:[EDX*4+4208B4]
00417386  |. 83E5 3F        AND EBP,3F
00417389  |. 0B14AD B40A420>OR EDX,DWORD PTR DS:[EBP*4+420AB4]
00417390  |. 8BE8           MOV EBP,EAX
00417392  |. C1ED 08        SHR EBP,8
00417395  |. 83E5 3F        AND EBP,3F
00417398  |. 83E0 3F        AND EAX,3F
0041739B  |. 0B14AD B40C420>OR EDX,DWORD PTR DS:[EBP*4+420CB4]
004173A2  |. 8B2C85 B40E420>MOV EBP,DWORD PTR DS:[EAX*4+420EB4]
004173A9  |. 8B4424 14      MOV EAX,DWORD PTR SS:[ESP+14]
004173AD  |. 0BD5           OR EDX,EBP
004173AF  |. 33F2           XOR ESI,EDX
004173B1  |. 48             DEC EAX
004173B2  |. 894424 14      MOV DWORD PTR SS:[ESP+14],EAX
004173B6  |.^0F85 68FFFFFF  JNZ UNPACKED.00417324              
004173BC  |. 8BC6           MOV EAX,ESI
004173BE  |. C1E0 1F        SHL EAX,1F
004173C1  |. D1EE           SHR ESI,1
004173C3  |. 0BC6           OR EAX,ESI
004173C5  |. 8BC8           MOV ECX,EAX
004173C7  |. 33CF           XOR ECX,EDI
004173C9  |. 81E1 AAAAAAAA  AND ECX,AAAAAAAA
004173CF  |. 33F9           XOR EDI,ECX
004173D1  |. 33C1           XOR EAX,ECX
004173D3  |. 8BCF           MOV ECX,EDI
004173D5  |. 8BF0           MOV ESI,EAX
004173D7  |. C1E1 1F        SHL ECX,1F
004173DA  |. D1EF           SHR EDI,1
004173DC  |. 0BCF           OR ECX,EDI
004173DE  |. 81E6 FF00FF00  AND ESI,0FF00FF
004173E4  |. 8BD1           MOV EDX,ECX
004173E6  |. 5F             POP EDI
004173E7  |. C1EA 08        SHR EDX,8
004173EA  |. 81E2 FF00FF00  AND EDX,0FF00FF
004173F0  |. 33D6           XOR EDX,ESI
004173F2  |. 33C2           XOR EAX,EDX
004173F4  |. C1E2 08        SHL EDX,8
004173F7  |. 33CA           XOR ECX,EDX
004173F9  |. 8BF0           MOV ESI,EAX
004173FB  |. 8BD1           MOV EDX,ECX
004173FD  |. 81E6 33333333  AND ESI,33333333
00417403  |. C1EA 02        SHR EDX,2
00417406  |. 81E2 33333333  AND EDX,33333333
0041740C  |. 33D6           XOR EDX,ESI
0041740E  |. 33C2           XOR EAX,EDX
00417410  |. C1E2 02        SHL EDX,2
00417413  |. 33CA           XOR ECX,EDX
00417415  |. 8BD0           MOV EDX,EAX
00417417  |. 8BF1           MOV ESI,ECX
00417419  |. C1EA 10        SHR EDX,10
0041741C  |. 81E6 FFFF0000  AND ESI,0FFFF
00417422  |. 33D6           XOR EDX,ESI
00417424  |. 33CA           XOR ECX,EDX
00417426  |. C1E2 10        SHL EDX,10
00417429  |. 33C2           XOR EAX,EDX
0041742B  |. 8BF1           MOV ESI,ECX
0041742D  |. 8BD0           MOV EDX,EAX
0041742F  |. 81E6 0F0F0F0F  AND ESI,0F0F0F0F
00417435  |. C1EA 04        SHR EDX,4
00417438  |. 81E2 0F0F0F0F  AND EDX,0F0F0F0F
0041743E  |. 33D6           XOR EDX,ESI
00417440  |. 8BF2           MOV ESI,EDX
00417442  |. 33D1           XOR EDX,ECX
00417444  |. C1E6 04        SHL ESI,4
00417447  |. 33F0           XOR ESI,EAX
00417449  |. 8933           MOV DWORD PTR DS:[EBX],ESI
0041744B  |. 5E             POP ESI
0041744C  |. 8953 04        MOV DWORD PTR DS:[EBX+4],EDX
0041744F  |. 5D             POP EBP
00417450  |. 5B             POP EBX
00417451  \. C3             RETN
          |                 |--->上面已经完成与16个密钥进行的异或运算,以及S盒的运算,(可能分析有误)返回
----------------------------------------------

总结,经过这次跟踪我觉得断定一个软件是否使用DES加密就要看是否有16个子密钥的计算过程,这一点最容易看出来。只要有上面关于子密钥算法的汇编形式就应该可以断定使用的是DES加密。以上仅是一点个人心得,不一定完全正确。
 

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功