一、破解目标:XX软件

二、破解工具:OLLYDBG V1.10

三、破解作者:DarkBull@email.com.cn

四、破解过程:

1.用PEID分析该软件采用Armadillo 3.00a - 3.61加壳(标准双进程),脱壳过程略。

2.用OLLYDBG载入程序,注册验证过程代码如下:

00403790   $  81EC A40>SUB ESP,0A4
00403796   .  56       PUSH ESI
00403797   .  8B9424 B>MOV EDX,DWORD PTR SS:[ESP+B0]
0040379E   .  8BF1     MOV ESI,ECX
004037A0   .  57       PUSH EDI
004037A1   .  B9 10000>MOV ECX,10
004037A6   .  33C0     XOR EAX,EAX
004037A8   .  8D7C24 2>LEA EDI,DWORD PTR SS:[ESP+2C]
004037AC   .  C74424 0>MOV DWORD PTR SS:[ESP+8],40
004037B4   .  F3:AB    REP STOS DWORD PTR ES:[EDI]
004037B6   .  8D4424 0>LEA EAX,DWORD PTR SS:[ESP+8]
004037BA   .  8D4C24 2>LEA ECX,DWORD PTR SS:[ESP+2C]
004037BE   .  50       PUSH EAX
004037BF   .  8B8424 B>MOV EAX,DWORD PTR SS:[ESP+B4]
004037C6   .  51       PUSH ECX                             ; 输出地址
004037C7   .  52       PUSH EDX                             ; 32个字节
004037C8   .  50       PUSH EAX                             ; 注册码
004037C9   .  8BCE     MOV ECX,ESI
004037CB   .  E8 10FEF>CALL 004035E0                        ; 将ASCII字符转换为ASCII码
004037D0   .  B9 08000>MOV ECX,8
004037D5   .  33C0     XOR EAX,EAX
004037D7   .  8D7C24 0>LEA EDI,DWORD PTR SS:[ESP+C]
004037DB   .  F3:AB    REP STOS DWORD PTR ES:[EDI]
004037DD   >  8A88 307>MOV CL,BYTE PTR DS:[EAX+5B7130]      ; 解码密钥
004037E3   .  80E9 03  SUB CL,3
004037E6   .  884C04 0>MOV BYTE PTR SS:[ESP+EAX+C],CL
004037EA   .  40       INC EAX
004037EB   .  83F8 0B  CMP EAX,0B                           ; 11个字节
004037EE   .^ 7C ED    JL SHORT 004037DD
004037F0   .  B9 10000>MOV ECX,10
004037F5   .  33C0     XOR EAX,EAX
004037F7   .  8D7C24 6>LEA EDI,DWORD PTR SS:[ESP+6C]
004037FB   .  8D5424 2>LEA EDX,DWORD PTR SS:[ESP+2C]
004037FF   .  F3:AB    REP STOS DWORD PTR ES:[EDI]
00403801   .  6A 20    PUSH 20
00403803   .  8D4424 7>LEA EAX,DWORD PTR SS:[ESP+70]
00403807   .  52       PUSH EDX                             ; 注册码
00403808   .  50       PUSH EAX                             ; 输出地址
00403809   .  8D4C24 1>LEA ECX,DWORD PTR SS:[ESP+18]
0040380D   .  6A 01    PUSH 1
0040380F   .  51       PUSH ECX                             ; 密钥
00403810   .  E8 8B331>CALL 00586BA0                        ; =>DES
00403815   .  8A46 04  MOV AL,BYTE PTR DS:[ESI+4]
00403818   .  8D7E 04  LEA EDI,DWORD PTR DS:[ESI+4]
0040381B   .  84C0     TEST AL,AL
0040381D   .  75 07    JNZ SHORT 00403826
0040381F   .  8BCE     MOV ECX,ESI
00403821   .  E8 2AFEF>CALL 00403650                        ; =>MD5
00403826   >  B9 04000>MOV ECX,4
0040382B   .  8D7424 6>LEA ESI,DWORD PTR SS:[ESP+6C]
0040382F   .  33D2     XOR EDX,EDX
00403831   .  F3:A7    REPE CMPS DWORD PTR ES:[EDI],DWORD P>; 比较用户码和加密后的注册码
00403833   .  8BC2     MOV EAX,EDX
00403835   .  5F       POP EDI
00403836   .  0F94C0   SETE AL                              ; 爆破点
00403839   .  5E       POP ESI
0040383A   .  81C4 A40>ADD ESP,0A4
00403840   .  C2 0800  RETN 8

用户码由系统信息通过MD5算法产生,然后取其中的16个字节,由于用户码是已知的,所以只需解密DES算法就可以找出注册码。

3.程序中DES算法过程如下:

①产生子密钥:

00587190  /$  8B4424 0>MOV EAX,DWORD PTR SS:[ESP+8]
00587194  |.  83EC 40  SUB ESP,40
00587197  |.  8D4C24 0>LEA ECX,DWORD PTR SS:[ESP]
0058719B  |.  56       PUSH ESI
0058719C  |.  57       PUSH EDI
0058719D  |.  6A 40    PUSH 40
0058719F  |.  50       PUSH EAX
005871A0  |.  51       PUSH ECX
005871A1  |.  E8 7A000>CALL 00587220                       ; 将密钥前8个字节转换为64位
005871A6  |.  6A 38    PUSH 38
005871A8  |.  8D5424 1>LEA EDX,DWORD PTR SS:[ESP+18]
005871AC  |.  68 ACBC5>PUSH 005EBCAC
005871B1  |.  8D4424 1>LEA EAX,DWORD PTR SS:[ESP+1C]
005871B5  |.  52       PUSH EDX
005871B6  |.  50       PUSH EAX
005871B7  |.  E8 14010>CALL 005872D0                       ; 经缩小选择换位表1的变换后为56位
005871BC  |.  8B7C24 6>MOV EDI,DWORD PTR SS:[ESP+68]
005871C0  |.  83C4 1C  ADD ESP,1C
005871C3  |.  33F6     XOR ESI,ESI
005871C5  |>  0FBE8E 1>MOVSX ECX,BYTE PTR DS:[ESI+5EBD14]
005871CC  |.  51       PUSH ECX
005871CD  |.  8D5424 0>LEA EDX,DWORD PTR SS:[ESP+C]
005871D1  |.  6A 1C    PUSH 1C
005871D3  |.  52       PUSH EDX
005871D4  |.  E8 87000>CALL 00587260                       ; 将前28位进行循环左移(次数见表3)
005871D9  |.  0FBE86 1>MOVSX EAX,BYTE PTR DS:[ESI+5EBD14]
005871E0  |.  50       PUSH EAX
005871E1  |.  8D4C24 3>LEA ECX,DWORD PTR SS:[ESP+34]
005871E5  |.  6A 1C    PUSH 1C
005871E7  |.  51       PUSH ECX
005871E8  |.  E8 73000>CALL 00587260                       ; 将后28位进行循环左移(次数见表3)
005871ED  |.  6A 30    PUSH 30
005871EF  |.  8D5424 2>LEA EDX,DWORD PTR SS:[ESP+24]
005871F3  |.  68 E4BC5>PUSH 005EBCE4
005871F8  |.  52       PUSH EDX
005871F9  |.  57       PUSH EDI
005871FA  |.  E8 D1000>CALL 005872D0                       ; 经缩小选择换位表2的变换后为48位
005871FF  |.  83C4 28  ADD ESP,28
00587202  |.  46       INC ESI
00587203  |.  83C7 30  ADD EDI,30
00587206  |.  83FE 10  CMP ESI,10                          ; 循环16次产生16个子密钥
00587209  |.^ 7C BA    JL SHORT 005871C5
0058720B  |.  5F       POP EDI
0058720C  |.  5E       POP ESI
0058720D  |.  83C4 40  ADD ESP,40
00587210  \.  C3       RETN

②初始换位:

00587340  /$  8B4424 0>MOV EAX,DWORD PTR SS:[ESP+8]
00587344  |.  83EC 60  SUB ESP,60
00587347  |.  8D4C24 2>LEA ECX,DWORD PTR SS:[ESP+20]
0058734B  |.  53       PUSH EBX
0058734C  |.  55       PUSH EBP
0058734D  |.  56       PUSH ESI
0058734E  |.  57       PUSH EDI
0058734F  |.  6A 40    PUSH 40
00587351  |.  50       PUSH EAX
00587352  |.  51       PUSH ECX
00587353  |.  E8 C8FEF>CALL 00587220                       ; 将注册码前8个字节转换为64位
00587358  |.  6A 40    PUSH 40
0058735A  |.  8D5424 4>LEA EDX,DWORD PTR SS:[ESP+40]
0058735E  |.  68 DCBB5>PUSH 005EBBDC
00587363  |.  8D4424 4>LEA EAX,DWORD PTR SS:[ESP+44]
00587367  |.  52       PUSH EDX
00587368  |.  50       PUSH EAX
00587369  |.  E8 62FFF>CALL 005872D0                       ; 查表4进行初始换位

③16轮置换运算:

00587385  |> |B9 08000>/MOV ECX,8
0058738A  |. |8D7424 5>|LEA ESI,DWORD PTR SS:[ESP+50]
0058738E  |. |8D7C24 1>|LEA EDI,DWORD PTR SS:[ESP+10]
00587392  |. |53       |PUSH EBX
00587393  |. |F3:A5    |REP MOVS DWORD PTR ES:[EDI],DWORD P>; 保存Rx(32位)
00587395  |. |8D4C24 5>|LEA ECX,DWORD PTR SS:[ESP+54]
00587399  |. |51       |PUSH ECX
0058739A  |. |E8 51010>|CALL 005874F0                      ; 进行f(Rx,Ki)运算
0058739F  |. |8D5424 3>|LEA EDX,DWORD PTR SS:[ESP+38]
005873A3  |. |6A 20    |PUSH 20
005873A5  |. |8D4424 5>|LEA EAX,DWORD PTR SS:[ESP+5C]
005873A9  |. |52       |PUSH EDX
005873AA  |. |50       |PUSH EAX
005873AB  |. |E8 10010>|CALL 005874C0                      ; 与Lx(32位)进行异或运算
005873B0  |. |83C4 14  |ADD ESP,14
005873B3  |. |B9 08000>|MOV ECX,8
005873B8  |. |8D7424 1>|LEA ESI,DWORD PTR SS:[ESP+10]
005873BC  |. |8D7C24 3>|LEA EDI,DWORD PTR SS:[ESP+30]
005873C0  |. |83C3 30  |ADD EBX,30
005873C3  |. |4D       |DEC EBP                             ; 共16次
005873C4  |. |F3:A5    |REP MOVS DWORD PTR ES:[EDI],DWORD P>; Lx=R(x-1)
005873C6  |.^|75 BD    \JNZ SHORT 00587385
005873C8  |. |EB 52    JMP SHORT 0058741C


f(Rx,Ki)运算过程如下:

005874F0  /$  83EC 30  SUB ESP,30
005874F3  |.  8D4424 0>LEA EAX,DWORD PTR SS:[ESP]
005874F7  |.  56       PUSH ESI
005874F8  |.  8B7424 3>MOV ESI,DWORD PTR SS:[ESP+38]
005874FC  |.  6A 30    PUSH 30
005874FE  |.  68 5CBC5>PUSH 005EBC5C
00587503  |.  56       PUSH ESI
00587504  |.  50       PUSH EAX
00587505  |.  E8 C6FDF>CALL 005872D0                        ; 经放大选择换位表5的变换后为48位
0058750A  |.  8B4C24 4>MOV ECX,DWORD PTR SS:[ESP+4C]
0058750E  |.  6A 30    PUSH 30
00587510  |.  8D5424 1>LEA EDX,DWORD PTR SS:[ESP+18]
00587514  |.  51       PUSH ECX
00587515  |.  52       PUSH EDX
00587516  |.  E8 A5FFF>CALL 005874C0                        ; 与子密钥进行异或
0058751B  |.  8D4424 2>LEA EAX,DWORD PTR SS:[ESP+20]
0058751F  |.  50       PUSH EAX
00587520  |.  56       PUSH ESI
00587521  |.  E8 1A000>CALL 00587540                        ; 经S盒(见表7)运算产生32位输出
00587526  |.  6A 20    PUSH 20
00587528  |.  68 8CBC5>PUSH 005EBC8C
0058752D  |.  56       PUSH ESI
0058752E  |.  56       PUSH ESI
0058752F  |.  E8 9CFDF>CALL 005872D0                        ; 经换位表6的变换后仍为32位
00587534  |.  83C4 34  ADD ESP,34
00587537  |.  5E       POP ESI
00587538  |.  83C4 30  ADD ESP,30
0058753B  \.  C3       RETN

④逆置换:

0058741C  |> \6A 20    PUSH 20
0058741E  |.  8D5424 3>LEA EDX,DWORD PTR SS:[ESP+34]
00587422  |.  6A 40    PUSH 40
00587424  |.  52       PUSH EDX
00587425  |.  E8 36FEF>CALL 00587260                       ; L16和R16置换
0058742A  |.  6A 40    PUSH 40
0058742C  |.  8D4424 4>LEA EAX,DWORD PTR SS:[ESP+40]
00587430  |.  68 1CBC5>PUSH 005EBC1C
00587435  |.  8D4C24 4>LEA ECX,DWORD PTR SS:[ESP+44]
00587439  |.  50       PUSH EAX
0058743A  |.  51       PUSH ECX
0058743B  |.  E8 90FEF>CALL 005872D0                       ; 查表8进行逆置换
00587440  |.  8B8424 9>MOV EAX,DWORD PTR SS:[ESP+90]
00587447  |.  8D5424 4>LEA EDX,DWORD PTR SS:[ESP+4C]
0058744B  |.  6A 40    PUSH 40
0058744D  |.  52       PUSH EDX
0058744E  |.  50       PUSH EAX
0058744F  |.  E8 0C000>CALL 00587460                       ; 将结果转换为字节
00587454  |.  83C4 28  ADD ESP,28
00587457  |.  5F       POP EDI
00587458  |.  5E       POP ESI
00587459  |.  5D       POP EBP
0058745A  |.  5B       POP EBX
0058745B  |.  83C4 60  ADD ESP,60
0058745E  \.  C3       RETN

⑤子过程:

将字节转换为位的代码如下:

00587220  /$  56       PUSH ESI
00587221  |.  8B7424 1>MOV ESI,DWORD PTR SS:[ESP+10]
00587225  |.  33C0     XOR EAX,EAX
00587227  |.  85F6     TEST ESI,ESI
00587229  |.  7E 2C    JLE SHORT 00587257
0058722B  |.  53       PUSH EBX
0058722C  |.  55       PUSH EBP
0058722D  |.  8B6C24 1>MOV EBP,DWORD PTR SS:[ESP+10]
00587231  |.  57       PUSH EDI
00587232  |.  8B7C24 1>MOV EDI,DWORD PTR SS:[ESP+18]
00587236  |.  83CA FF  OR EDX,FFFFFFFF
00587239  |>  8BD8     /MOV EBX,EAX
0058723B  |.  8ACA     |MOV CL,DL
0058723D  |.  C1FB 03  |SAR EBX,3
00587240  |.  80E1 07  |AND CL,7
00587243  |.  8A1C3B   |MOV BL,BYTE PTR DS:[EBX+EDI]      ; 取1个字节
00587246  |.  D2FB     |SAR BL,CL
00587248  |.  80E3 01  |AND BL,1
0058724B  |.  881C28   |MOV BYTE PTR DS:[EAX+EBP],BL      ; 保存1位
0058724E  |.  40       |INC EAX
0058724F  |.  4A       |DEC EDX
00587250  |.  3BC6     |CMP EAX,ESI                       ; ESI=64
00587252  |.^ 7C E5    \JL SHORT 00587239
00587254  |.  5F       POP EDI
00587255  |.  5D       POP EBP
00587256  |.  5B       POP EBX
00587257  |>  5E       POP ESI
00587258  \.  C3       RETN

循环位移代码如下:

00587260  /$  8B4424 0>MOV EAX,DWORD PTR SS:[ESP+C]
00587264  |.  8B5424 0>MOV EDX,DWORD PTR SS:[ESP+4]
00587268  |.  81EC 000>SUB ESP,100
0058726E  |.  8BC8     MOV ECX,EAX
00587270  |.  53       PUSH EBX
00587271  |.  55       PUSH EBP
00587272  |.  56       PUSH ESI
00587273  |.  8BD9     MOV EBX,ECX
00587275  |.  57       PUSH EDI
00587276  |.  8BF2     MOV ESI,EDX
00587278  |.  8D7C24 1>LEA EDI,DWORD PTR SS:[ESP+10]
0058727C  |.  C1E9 02  SHR ECX,2
0058727F  |.  F3:A5    REP MOVS DWORD PTR ES:[EDI],DWORD PT>
00587281  |.  8BCB     MOV ECX,EBX
00587283  |.  8B9C24 1>MOV EBX,DWORD PTR SS:[ESP+118]
0058728A  |.  83E1 03  AND ECX,3
0058728D  |.  F3:A4    REP MOVS BYTE PTR ES:[EDI],BYTE PTR >; 取出前n位
0058728F  |.  8BCB     MOV ECX,EBX
00587291  |.  8D3402   LEA ESI,DWORD PTR DS:[EDX+EAX]
00587294  |.  2BC8     SUB ECX,EAX
00587296  |.  8BFA     MOV EDI,EDX
00587298  |.  8BE9     MOV EBP,ECX
0058729A  |.  C1E9 02  SHR ECX,2
0058729D  |.  F3:A5    REP MOVS DWORD PTR ES:[EDI],DWORD PT>; 将第n+1位至最后1位向前移
0058729F  |.  8BCD     MOV ECX,EBP
005872A1  |.  83E1 03  AND ECX,3
005872A4  |.  F3:A4    REP MOVS BYTE PTR ES:[EDI],BYTE PTR >
005872A6  |.  8BFA     MOV EDI,EDX
005872A8  |.  8BC8     MOV ECX,EAX
005872AA  |.  2BF8     SUB EDI,EAX
005872AC  |.  8D7424 1>LEA ESI,DWORD PTR SS:[ESP+10]
005872B0  |.  03FB     ADD EDI,EBX
005872B2  |.  C1E9 02  SHR ECX,2
005872B5  |.  F3:A5    REP MOVS DWORD PTR ES:[EDI],DWORD PT>
005872B7  |.  8BC8     MOV ECX,EAX
005872B9  |.  83E1 03  AND ECX,3
005872BC  |.  F3:A4    REP MOVS BYTE PTR ES:[EDI],BYTE PTR >; 将取出n位移至最后位
005872BE  |.  5F       POP EDI
005872BF  |.  5E       POP ESI
005872C0  |.  5D       POP EBP
005872C1  |.  5B       POP EBX
005872C2  |.  81C4 000>ADD ESP,100
005872C8  \.  C3       RETN

查表置换代码如下:

005872D0  /$  81EC 000>SUB ESP,100
005872D6  |.  33C0     XOR EAX,EAX
005872D8  |.  56       PUSH ESI
005872D9  |.  8BB424 1>MOV ESI,DWORD PTR SS:[ESP+114]       ; ESI为查表次数
005872E0  |.  85F6     TEST ESI,ESI
005872E2  |.  57       PUSH EDI
005872E3  |.  7E 29    JLE SHORT 0058730E
005872E5  |.  8BBC24 1>MOV EDI,DWORD PTR SS:[ESP+114]       ; EDI为表的基址
005872EC  |.  8D4C24 0>LEA ECX,DWORD PTR SS:[ESP+8]
005872F0  |.  55       PUSH EBP
005872F1  |.  8BAC24 1>MOV EBP,DWORD PTR SS:[ESP+114]
005872F8  |.  2BF9     SUB EDI,ECX
005872FA  |>  8D5404 0>/LEA EDX,DWORD PTR SS:[ESP+EAX+C]    ; EDX为输出地址
005872FE  |.  40       |INC EAX
005872FF  |.  3BC6     |CMP EAX,ESI
00587301  |.  0FBE0C17 |MOVSX ECX,BYTE PTR DS:[EDI+EDX]     ; 查表
00587305  |.  8A4C29 F>|MOV CL,BYTE PTR DS:[ECX+EBP-1]      ; EBP为输入基址,查表换位
00587309  |.  880A     |MOV BYTE PTR DS:[EDX],CL            ; 保存结果
0058730B  |.^ 7C ED    \JL SHORT 005872FA
0058730D  |.  5D       POP EBP
0058730E  |>  8BBC24 0>MOV EDI,DWORD PTR SS:[ESP+10C]
00587315  |.  8BCE     MOV ECX,ESI
00587317  |.  8BD1     MOV EDX,ECX
00587319  |.  8D7424 0>LEA ESI,DWORD PTR SS:[ESP+8]
0058731D  |.  C1E9 02  SHR ECX,2
00587320  |.  F3:A5    REP MOVS DWORD PTR ES:[EDI],DWORD PT>
00587322  |.  8BCA     MOV ECX,EDX
00587324  |.  83E1 03  AND ECX,3
00587327  |.  F3:A4    REP MOVS BYTE PTR ES:[EDI],BYTE PTR >
00587329  |.  5F       POP EDI
0058732A  |.  5E       POP ESI
0058732B  |.  81C4 000>ADD ESP,100
00587331  \.  C3       RETN

将位转换为字节代码如下:

00587460  /$  8B5424 0>MOV EDX,DWORD PTR SS:[ESP+4]
00587464  |.  55       PUSH EBP
00587465  |.  8B6C24 1>MOV EBP,DWORD PTR SS:[ESP+10]
00587469  |.  56       PUSH ESI
0058746A  |.  8BCD     MOV ECX,EBP
0058746C  |.  57       PUSH EDI
0058746D  |.  C1F9 03  SAR ECX,3
00587470  |.  8BF1     MOV ESI,ECX
00587472  |.  33C0     XOR EAX,EAX
00587474  |.  8BFA     MOV EDI,EDX
00587476  |.  C1E9 02  SHR ECX,2
00587479  |.  F3:AB    REP STOS DWORD PTR ES:[EDI]
0058747B  |.  8BCE     MOV ECX,ESI
0058747D  |.  83E1 03  AND ECX,3
00587480  |.  F3:AA    REP STOS BYTE PTR ES:[EDI]
00587482  |.  33C0     XOR EAX,EAX
00587484  |.  85ED     TEST EBP,EBP
00587486  |.  7E 27    JLE SHORT 005874AF
00587488  |.  53       PUSH EBX
00587489  |.  83CF FF  OR EDI,FFFFFFFF
0058748C  |>  8B5C24 1>/MOV EBX,DWORD PTR SS:[ESP+18]
00587490  |.  8BC8     |MOV ECX,EAX
00587492  |.  C1F9 03  |SAR ECX,3
00587495  |.  8A1C18   |MOV BL,BYTE PTR DS:[EAX+EBX]        ; 取1位
00587498  |.  8D3411   |LEA ESI,DWORD PTR DS:[ECX+EDX]
0058749B  |.  8BCF     |MOV ECX,EDI
0058749D  |.  83E1 07  |AND ECX,7
005874A0  |.  D2E3     |SHL BL,CL
005874A2  |.  8A0E     |MOV CL,BYTE PTR DS:[ESI]
005874A4  |.  0ACB     |OR CL,BL
005874A6  |.  40       |INC EAX
005874A7  |.  4F       |DEC EDI
005874A8  |.  3BC5     |CMP EAX,EBP                         ; EBP=64
005874AA  |.  880E     |MOV BYTE PTR DS:[ESI],CL            ; 保存1个字节
005874AC  |.^ 7C DE    \JL SHORT 0058748C
005874AE  |.  5B       POP EBX
005874AF  |>  5F       POP EDI
005874B0  |.  5E       POP ESI
005874B1  |.  5D       POP EBP
005874B2  \.  C3       RETN

按位异或运算代码如下:

005874C0  /$  56       PUSH ESI
005874C1  |.  8B7424 1>MOV ESI,DWORD PTR SS:[ESP+10]
005874C5  |.  85F6     TEST ESI,ESI
005874C7  |.  7E 19    JLE SHORT 005874E2
005874C9  |.  8B4424 0>MOV EAX,DWORD PTR SS:[ESP+8]
005874CD  |.  8B4C24 0>MOV ECX,DWORD PTR SS:[ESP+C]
005874D1  |.  53       PUSH EBX
005874D2  |.  2BC8     SUB ECX,EAX
005874D4  |>  8A1401   /MOV DL,BYTE PTR DS:[ECX+EAX]
005874D7  |.  8A18     |MOV BL,BYTE PTR DS:[EAX]
005874D9  |.  32DA     |XOR BL,DL                          ; 按位进行异或运行
005874DB  |.  8818     |MOV BYTE PTR DS:[EAX],BL
005874DD  |.  40       |INC EAX
005874DE  |.  4E       |DEC ESI
005874DF  |.^ 75 F3    \JNZ SHORT 005874D4
005874E1  |.  5B       POP EBX
005874E2  |>  5E       POP ESI
005874E3  \.  C3       RETN

S盒运算代码如下:

00587540  /$  83EC 08  SUB ESP,8
00587543  |.  8B5424 1>MOV EDX,DWORD PTR SS:[ESP+10]
00587547  |.  53       PUSH EBX
00587548  |.  55       PUSH EBP
00587549  |.  8B6C24 1>MOV EBP,DWORD PTR SS:[ESP+14]
0058754D  |.  56       PUSH ESI
0058754E  |.  57       PUSH EDI
0058754F  |.  C74424 1>MOV DWORD PTR SS:[ESP+10],0
00587557  |.  C74424 1>MOV DWORD PTR SS:[ESP+14],8
0058755F  |>  8A0A     /MOV CL,BYTE PTR DS:[EDX]
00587561  |.  8A5A 05  |MOV BL,BYTE PTR DS:[EDX+5]
00587564  |.  8A42 01  |MOV AL,BYTE PTR DS:[EDX+1]
00587567  |.  33F6     |XOR ESI,ESI
00587569  |.  D0E1     |SHL CL,1
0058756B  |.  02CB     |ADD CL,BL
0058756D  |.  8A5A 02  |MOV BL,BYTE PTR DS:[EDX+2]
00587570  |.  D0E0     |SHL AL,1
00587572  |.  02C3     |ADD AL,BL
00587574  |.  8A5A 03  |MOV BL,BYTE PTR DS:[EDX+3]
00587577  |.  D0E0     |SHL AL,1
00587579  |.  02C3     |ADD AL,BL
0058757B  |.  8A5A 04  |MOV BL,BYTE PTR DS:[EDX+4]
0058757E  |.  D0E0     |SHL AL,1
00587580  |.  0FBEC9   |MOVSX ECX,CL
00587583  |.  02C3     |ADD AL,BL
00587585  |.  8B5C24 1>|MOV EBX,DWORD PTR SS:[ESP+10]
00587589  |.  03CB     |ADD ECX,EBX
0058758B  |.  0FBEC0   |MOVSX EAX,AL
0058758E  |.  C1E1 04  |SHL ECX,4
00587591  |.  8DBC01 2>|LEA EDI,DWORD PTR DS:[ECX+EAX+5EBD2>; 从S(1-8)中取数据(查表7)
00587598  |.  B8 03000>|MOV EAX,3
0058759D  |>  8A1F     |MOV BL,BYTE PTR DS:[EDI]
0058759F  |.  8AC8     |MOV CL,AL
005875A1  |.  D2FB     |SAR BL,CL
005875A3  |.  80E3 01  |AND BL,1
005875A6  |.  881C2E   |MOV BYTE PTR DS:[ESI+EBP],BL        ; 保存1位
005875A9  |.  46       |INC ESI
005875AA  |.  48       |DEC EAX
005875AB  |.  83FE 04  |CMP ESI,4                           ; 每个S盒取4位
005875AE  |.^ 7C ED    |JL SHORT 0058759D
005875B0  |.  8B7C24 1>|MOV EDI,DWORD PTR SS:[ESP+10]
005875B4  |.  8B4424 1>|MOV EAX,DWORD PTR SS:[ESP+14]
005875B8  |.  83C7 04  |ADD EDI,4
005875BB  |.  83C2 06  |ADD EDX,6
005875BE  |.  83C5 04  |ADD EBP,4
005875C1  |.  48       |DEC EAX
005875C2  |.  897C24 1>|MOV DWORD PTR SS:[ESP+10],EDI
005875C6  |.  894424 1>|MOV DWORD PTR SS:[ESP+14],EAX
005875CA  |.^ 75 93    \JNZ SHORT 0058755F
005875CC  |.  5F       POP EDI
005875CD  |.  5E       POP ESI
005875CE  |.  5D       POP EBP
005875CF  |.  5B       POP EBX
005875D0  |.  83C4 08  ADD ESP,8
005875D3  \.  C3       RETN

⑥附表:

表1如下:

005EBCAC  39 31 29 21 19 11 09 01 3A 32 2A 22 1A 12 0A 02  91)!.:2*".
005EBCBC  3B 33 2B 23 1B 13 0B 03 3C 34 2C 24 3F 37 2F 27  ;3+# <4,$?7/'
005EBCCC  1F 17 0F 07 3E 36 2E 26 1E 16 0E 06 3D 35 2D 25  >6.&=5-%
005EBCDC  1D 15 0D 05 1C 14 0C 04                          ..

表2如下:

005EBCE4  0E 11 0B 18 01 05 03 1C 0F 06 15 0A 17 13 0C 04   ..
005EBCF4  1A 08 10 07 1B 14 0D 02 29 34 1F 25 2F 37 1E 28  .)4%/7(
005EBD04  33 2D 21 30 2C 31 27 38 22 35 2E 2A 32 24 1D 20  3-!0,1'8"5.*2$

表3如下:

005EBD14  01 01 02 02 02 02 02 02 01 02 02 02 02 02 02 01  

表4如下:

005EBBDC  3A 32 2A 22 1A 12 0A 02 3C 34 2C 24 1C 14 0C 04  :2*".<4,$.
005EBBEC  3E 36 2E 26 1E 16 0E 06 40 38 30 28 20 18 10 08  >6.&@80( 
005EBBFC  39 31 29 21 19 11 09 01 3B 33 2B 23 1B 13 0B 03  91)!.;3+# 
005EBC0C  3D 35 2D 25 1D 15 0D 05 3F 37 2F 27 1F 17 0F 07  =5-%.?7/'

表5如下:

005EBC5C  20 01 02 03 04 05 04 05 06 07 08 09 08 09 0A 0B   ...
005EBC6C  0C 0D 0C 0D 0E 0F 10 11 10 11 12 13 14 15 14 15  ....
005EBC7C  16 17 18 19 18 19 1A 1B 1C 1D 1C 1D 1E 1F 20 01   

表6如下:

005EBC8C  10 07 14 15 1D 0C 1C 11 01 0F 17 1A 05 12 1F 0A  ..
005EBC9C  02 08 18 0E 20 1B 03 09 13 0D 1E 06 16 0B 04 19   .. 

表7如下:

005EBD24  0E 04 0D 01 02 0F 0B 08 03 0A 06 0C 05 09 00 07  . ....
005EBD34  00 0F 07 04 0E 02 0D 01 0A 06 0C 0B 09 05 03 08  .... .
005EBD44  04 01 0E 08 0D 06 02 0B 0F 0C 09 07 03 0A 05 00  . ....
005EBD54  0F 0C 08 02 04 09 01 07 05 0B 03 0E 0A 00 06 0D  .. ...

005EBD64  0F 01 08 0E 06 0B 03 04 09 07 02 0D 0C 00 05 0A   .....
005EBD74  03 0D 04 07 0F 02 08 0E 0C 00 01 0A 06 09 0B 05  ..... 
005EBD84  00 0E 07 0B 0A 04 0D 01 05 08 0C 06 09 03 02 0F  . ....
005EBD94  0D 08 0A 01 03 0F 04 02 0B 06 07 0C 00 05 0E 09  .. ...

005EBDA4  0A 00 09 0E 06 03 0F 05 01 0D 0C 07 0B 04 02 08  ..... 
005EBDB4  0D 07 00 09 03 04 06 0A 02 08 05 0E 0C 0B 0F 01  ..... 
005EBDC4  0D 06 04 09 08 0F 03 00 0B 01 02 0C 05 0A 0E 07  ... ..
005EBDD4  01 0A 0D 00 06 09 08 07 04 0F 0E 03 0B 05 02 0C  .... .

005EBDE4  07 0D 0E 03 00 06 09 0A 01 02 08 05 0B 0C 04 0F  .... .
005EBDF4  0D 08 0B 05 06 0F 00 03 04 07 02 0C 01 0A 0E 09  . ....
005EBE04  0A 06 09 00 0C 0B 07 0D 0F 01 03 0E 05 02 08 04  .... .
005EBE14  03 0F 00 06 0A 01 0D 08 09 04 05 0B 0C 07 02 0E  .... .

005EBE24  02 0C 04 01 07 0A 0B 06 08 05 03 0F 0D 00 0E 09  .. ...
005EBE34  0E 0B 02 0C 04 07 0D 01 05 00 0F 0A 03 09 08 06   .....
005EBE44  04 02 01 0B 0A 0D 07 08 0F 09 0C 05 06 03 00 0E   .....
005EBE54  0B 08 0C 07 01 0E 02 0D 06 0F 00 09 0A 04 05 03   .....

005EBE64  0C 01 0A 0F 09 02 06 08 00 0D 03 04 0E 07 05 0B  .....
005EBE74  0A 0F 04 02 07 0C 09 05 06 01 0D 0E 00 0B 03 08  ..... 
005EBE84  09 0E 0F 05 02 08 0C 03 07 00 04 0A 01 0D 0B 06  ..... 
005EBE94  04 03 02 0C 09 05 0F 0A 0B 0E 01 07 06 00 08 0D  ... ..

005EBEA4  04 0B 02 0E 0F 00 08 0D 03 0C 09 07 05 0A 06 01   .....
005EBEB4  0D 00 0B 07 04 09 01 0A 0E 03 05 0C 02 0F 08 06  .. ...
005EBEC4  01 04 0B 0D 0C 03 07 0E 0A 0F 06 08 00 05 09 02   .....
005EBED4  06 0B 0D 08 01 04 0A 07 09 05 00 0F 0E 02 03 0C   .....

005EBEE4  0D 02 08 04 06 0F 0B 01 0A 09 03 0E 05 00 0C 07  . ....
005EBEF4  01 0F 0D 08 0A 03 07 04 0C 05 06 0B 00 0E 09 02  ... ..
005EBF04  07 0B 04 01 09 0C 0E 02 00 06 0A 0D 0F 03 05 08   .....
005EBF14  02 01 0E 07 04 0A 08 0D 0F 0C 09 00 03 05 06 0B  .....

表8如下:

005EBC1C  28 08 30 10 38 18 40 20 27 07 2F 0F 37 17 3F 1F  (08@ '/7?
005EBC2C  26 06 2E 0E 36 16 3E 1E 25 05 2D 0D 35 15 3D 1D  &.6>%-.5=
005EBC3C  24 04 2C 0C 34 14 3C 1C 23 03 2B 0B 33 13 3B 1B  $,.4<#+ 3;
005EBC4C  22 02 2A 0A 32 12 3A 1A 21 01 29 09 31 11 39 19  "*.2:!).19

4.知道密钥后,对用户码进行逆运算就可得到注册码。


                  2005-10-20