首页
社区
课程
招聘
[分享]WindRand's BlowFish算法分析
发表于: 2007-12-6 08:24 9374

[分享]WindRand's BlowFish算法分析

2007-12-6 08:24
9374

【理论准备】



以下是看雪教程Crack Tutorial 2001上关于BlowFish算法的说明:



BlowFish算法用来加密64Bit长度的字符串。


    BlowFish算法使用两个“盒”——ungigned long pbox[18]和unsigned long sbox[4,256]。


    BlowFish算法中,有一个核心加密函数:BF_En(后文详细介绍)。该函数输入64位信息,运算后, 以64位密文的形式输出。 用BlowFish算法加密信息,需要两个过程:


   


1.密钥预处理


2.信息加密



分别说明如下:


密钥预处理:


    BlowFish算法的源密钥——pbox和sbox是固定的。我们要加密一个信息,需要自己选择一个key, 用这个key对pbox和sbox进行变换,得到下一步信息加密所要用的key_pbox和key_sbox。具体的变化算法如下:



1)用sbox填充key_sbox


2)用自己选择的key8个一组地去异或pbox,用异或的结果填充key_pbox。key可以循环使用。


  比如说:选的key是"abcdefghijklmn"。则异或过程为:


  key_pbox[0]=pbox[0]^abcdefgh


  key_pbox[1]=pbox[1]^ijklmnab


  …………


  …………


  如此循环,直到key_box填充完毕。


3)用BF_En加密一个全0的64位信息,用输出的结果替换key_pbox[0]和key_pbox[1]。i=0


4)用BF_En加密替换后的key_pbox[i],key_pbox[i+1],用输出替代key_pbox[i+2]和key_pbox[i+3]


5)i+2,继续第4步,直到key_pbox全部被替换


6)用key_pbox[16]和key_pbox[17]做首次输入(相当于上面的全0的输入),用类似的方法,替换key_sbox 信息加密。信息加密就是用函数把待加密信息x分成32位的两部分:xL,xR BF_En对输入信息进行变换,BF_En函数详细过程如下:



对于i=1至16


  xL=xL^Pi


  xR=F(xL)^xR


  交换xL和xR(最后一轮取消该运算)


  xR=xR^P17


  xL=xL^P18


  重新合并xL和xR


  函数F见下图:



        8位              32位


    |-----------S盒1-----------


    |                        |加


    |  8位              32位  |----


    |-----------S盒2-----------  |


    |                            |


    |                            |异或----


32位-|                            |      |


    |  8位              32位      |      |


    |-----------S盒3---------------      |加


    |                                    |-----------------32位


    |                                    |


    |                                    |


    |  8位              32位              |


    |-----------S盒4-----------------------



把xL分成4个8位分组:a,b,c和d


输出为:F(xL)=((((S[1,a]+S[2,b])MOD 4294967296)^s[3,c])+S[4,d])MOD 4294967296


                                (2的32次方)                  (2的32次方)


        重新合并后输出的结果就是我们需要的密文。


        用BlowFish算法解密,同样也需要两个过程。


1.密钥预处理


2.信息解密


    密钥预处理的过程与加密时完全相同


    信息解密的过程就是把信息加密过程的key_pbox逆序使用即可。



怎么样,第一次看到这些理论时是不是有点似懂非懂,OK,让我们亲自分析一下BlowFish算法的CrackMe,加深对上述理论的理解



--------------------------------------------------------------------------------



【实践部分】



这个CrackMe要求输入8位用户名和16位注册码(任意16进制数,其中字母部分为大写,不是16的倍数位数会异常中断),如:


用户名:tgfytgfy


注册码:1234567A1234567B



【注册验证部分代码】



004071CB   .  8DBD F0FEFFFF LEA EDI,DWORD PTR SS:[EBP-110]           ;  

根据字符串参考在这里下断

,EDI为用户名地址


004071D1   .  83C9 FF       OR ECX,FFFFFFFF


004071D4   .  33C0          XOR EAX,EAX


004071D6   .  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]


004071D8   .  F7D1          NOT ECX


004071DA   .  49            DEC ECX


004071DB   .  83F9 01       CMP ECX,1                                ;  用户名不能为空


004071DE   .  73 26         JNB SHORT Blowfish.00407206


004071E0   .  6A 40         PUSH 40                                  ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL


004071E2   .  68 A4D14200   PUSH Blowfish.0042D1A4                   ; |注册提示


004071E7   .  68 8CD14200   PUSH Blowfish.0042D18C                   ; |用户名不能为空请输入!


004071EC   .  56            PUSH ESI                                 ; |hOwner


004071ED   .  FF15 04614200 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA


004071F3   .  33C0          XOR EAX,EAX


004071F5   .  8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]


004071F8   .  64:890D 00000>MOV DWORD PTR FS:[0],ECX


004071FF   .  5F            POP EDI


00407200   .  5E            POP ESI


00407201   .  5B            POP EBX


00407202   .  8BE5          MOV ESP,EBP


00407204   .  5D            POP EBP


00407205   .  C3            RET


00407206   >  8D95 F0FDFFFF LEA EDX,DWORD PTR SS:[EBP-210]


0040720C   .  68 00010000   PUSH 100


00407211   .  52            PUSH EDX


00407212   .  68 07040000   PUSH 407


00407217   .  56            PUSH ESI


00407218   .  FFD3          CALL EBX


0040721A   .  8DBD F0FDFFFF LEA EDI,DWORD PTR SS:[EBP-210]           ;  EDI为试验码地址


00407220   .  83C9 FF       OR ECX,FFFFFFFF


00407223   .  33C0          XOR EAX,EAX


00407225   .  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]


00407227   .  F7D1          NOT ECX


00407229   .  49            DEC ECX


0040722A   .  83F9 01       CMP ECX,1                                ;  试验码不能为空


0040722D   .  73 26         JNB SHORT Blowfish.00407255


0040722F   .  6A 40         PUSH 40                                  ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL


00407231   .  68 A4D14200   PUSH Blowfish.0042D1A4                   ; |注册提示


00407236   .  68 74D14200   PUSH Blowfish.0042D174                   ; |注册码不能为空请输入!


0040723B   .  56            PUSH ESI                                 ; |hOwner


0040723C   .  FF15 04614200 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA


00407242   .  33C0          XOR EAX,EAX


00407244   .  8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]


00407247   .  64:890D 00000>MOV DWORD PTR FS:[0],ECX


0040724E   .  5F            POP EDI


0040724F   .  5E            POP ESI


00407250   .  5B            POP EBX


00407251   .  8BE5          MOV ESP,EBP


00407253   .  5D            POP EBP


00407254   .  C3            RET


00407255   >  8D85 F0FCFFFF LEA EAX,DWORD PTR SS:[EBP-310]


0040725B   .  6A 00         PUSH 0                                   ; /Arg4 = 00000000


0040725D   .  50            PUSH EAX                                 ; |Arg3


0040725E   .  8D8D F0FDFFFF LEA ECX,DWORD PTR SS:[EBP-210]           ; |试验码地址


00407264   .  68 68D14200   PUSH Blowfish.0042D168                   ; |key=WindRand


00407269   .  51            PUSH ECX                                 ; |Arg1


0040726A   .  C745 FC 00000>MOV DWORD PTR SS:[EBP-4],0               ; |


00407271   .  E8 FAFCFFFF   CALL Blowfish.00406F70                   ; \

算法Call,F7跟进


00407276   .  83C4 10       ADD ESP,10


00407279   .  8D95 F0FCFFFF LEA EDX,DWORD PTR SS:[EBP-310]           ;  运算结果


0040727F   .  8D85 F0FEFFFF LEA EAX,DWORD PTR SS:[EBP-110]           ;  用户名


00407285   .  52            PUSH EDX


00407286   .  50            PUSH EAX


00407287   .  E8 A4FDFFFF   CALL Blowfish.00407030                   ;

比较Call,F7跟进


0040728C   .  83C4 08       ADD ESP,8


0040728F   .  83F8 01       CMP EAX,1


00407292   .  6A 40         PUSH 40                                  ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL


00407294   .  68 A4D14200   PUSH Blowfish.0042D1A4                   ; |注册提示


00407299   .  75 1F         JNZ SHORT Blowfish.004072BA              ; |跳向注册失败


0040729B   .  68 54D14200   PUSH Blowfish.0042D154                   ; |恭喜你,注册码正确!


004072A0   .  56            PUSH ESI                                 ; |hOwner


004072A1   .  FF15 04614200 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA


004072A7   .  33C0          XOR EAX,EAX


004072A9   .  8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]


004072AC   .  64:890D 00000>MOV DWORD PTR FS:[0],ECX


004072B3   .  5F            POP EDI


004072B4   .  5E            POP ESI


004072B5   .  5B            POP EBX


004072B6   .  8BE5          MOV ESP,EBP


004072B8   .  5D            POP EBP


004072B9   .  C3            RET


004072BA   >  68 3CD14200   PUSH Blowfish.0042D13C                   ; |注册码错误,继续加油!


004072BF   .  56            PUSH ESI                                 ; |hOwner


004072C0   .  FF15 04614200 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA



【算法Call】



00406F70  /$  55            PUSH EBP


00406F71  |.  8BEC          MOV EBP,ESP


00406F73  |.  8B45 0C       MOV EAX,DWORD PTR SS:[EBP+C]             ;  “WindRand”


00406F76  |.  8B4D 14       MOV ECX,DWORD PTR SS:[EBP+14]            ;  试验码


00406F79  |.  53            PUSH EBX


00406F7A  |.  56            PUSH ESI


00406F7B  |.  57            PUSH EDI


00406F7C  |.  50            PUSH EAX


00406F7D  |.  51            PUSH ECX


00406F7E  |.  E8 CDFEFFFF   CALL Blowfish.00406E50                   ;  

关键:加密数据Call,F7跟进


00406F83  |.  8B7D 08       MOV EDI,DWORD PTR SS:[EBP+8]             ;  试验码


00406F86  |.  8BD8          MOV EBX,EAX


00406F88  |.  83C9 FF       OR ECX,FFFFFFFF


00406F8B  |.  33C0          XOR EAX,EAX


00406F8D  |.  83C4 08       ADD ESP,8


00406F90  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]


00406F92  |.  F7D1          NOT ECX


00406F94  |.  49            DEC ECX                                  ;  试验码位数


00406F95  |.  8BF1          MOV ESI,ECX


00406F97  |.  D1EE          SHR ESI,1                                ;  ESI=试验码位数<<1(这里为8),这个值有用


00406F99  |.  8BC6          MOV EAX,ESI


00406F9B  |.  83C0 03       ADD EAX,3


00406F9E  |.  24 FC         AND AL,0FC


00406FA0  |.  E8 6B140100   CALL Blowfish.00418410


00406FA5  |.  8B55 08       MOV EDX,DWORD PTR SS:[EBP+8]             ;  试验码


00406FA8  |.  8BC4          MOV EAX,ESP


00406FAA  |.  56            PUSH ESI


00406FAB  |.  50            PUSH EAX


00406FAC  |.  52            PUSH EDX


00406FAD  |.  8945 0C       MOV DWORD PTR SS:[EBP+C],EAX


00406FB0  |.  E8 4BFEFFFF   CALL Blowfish.00406E00                   ;  转换试验码,检查是否是数字或大写A-F字母,并存入sn[2]


00406FB5  |.  8D46 01       LEA EAX,DWORD PTR DS:[ESI+1]


00406FB8  |.  83C4 0C       ADD ESP,0C


00406FBB  |.  8945 08       MOV DWORD PTR SS:[EBP+8],EAX


00406FBE  |.  83C0 03       ADD EAX,3


00406FC1  |.  24 FC         AND AL,0FC


00406FC3  |.  E8 48140100   CALL Blowfish.00418410


00406FC8  |.  8B03          MOV EAX,DWORD PTR DS:[EBX]


00406FCA  |.  8BCB          MOV ECX,EBX


00406FCC  |.  8BFC          MOV EDI,ESP


00406FCE  |.  FF50 18       CALL DWORD PTR DS:[EAX+18]


00406FD1  |.  8B45 0C       MOV EAX,DWORD PTR SS:[EBP+C]


00406FD4  |.  8B13          MOV EDX,DWORD PTR DS:[EBX]


00406FD6  |.  56            PUSH ESI                                 ;  上述ESI值在这里进入到地址[12f730]=8,后面有用


00406FD7  |.  57            PUSH EDI


00406FD8  |.  50            PUSH EAX


00406FD9  |.  8BCB          MOV ECX,EBX


00406FDB  |.  FF52 0C       CALL DWORD PTR DS:[EDX+C]                ;

注册码参与运算Call,F7跟进


00406FDE  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]


00406FE1  |.  C60437 00     MOV BYTE PTR DS:[EDI+ESI],0


00406FE5  |.  83C0 03       ADD EAX,3


00406FE8  |.  24 FC         AND AL,0FC


00406FEA  |.  E8 21140100   CALL Blowfish.00418410


00406FEF  |.  83C9 FF       OR ECX,FFFFFFFF


00406FF2  |.  33C0          XOR EAX,EAX


00406FF4  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]


00406FF6  |.  F7D1          NOT ECX


00406FF8  |.  2BF9          SUB EDI,ECX


00406FFA  |.  8BD4          MOV EDX,ESP


00406FFC  |.  8BC1          MOV EAX,ECX


00406FFE  |.  8BF7          MOV ESI,EDI


00407000  |.  8BFA          MOV EDI,EDX


00407002  |.  52            PUSH EDX                                 ; /String2


00407003  |.  C1E9 02       SHR ECX,2                                ; |


00407006  |.  F3:A5         REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>; |


00407008  |.  8BC8          MOV ECX,EAX                              ; |


0040700A  |.  83E1 03       AND ECX,3                                ; |


0040700D  |.  F3:A4         REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>; |运算结果复制


0040700F  |.  8B4D 10       MOV ECX,DWORD PTR SS:[EBP+10]            ; |


00407012  |.  51            PUSH ECX                                 ; |String1


00407013  |.  FF15 00604200 CALL DWORD PTR DS:[<&KERNEL32.lstrcpyA>] ; \lstrcpyA


00407019  |.  8D65 F4       LEA ESP,DWORD PTR SS:[EBP-C]


0040701C  |.  5F            POP EDI


0040701D  |.  5E            POP ESI


0040701E  |.  5B            POP EBX


0040701F  |.  5D            POP EBP


00407020  \.  C3            RET



【加密数据Call】



00406E50  /$  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]


00406E56  |.  6A FF         PUSH -1


00406E58  |.  68 03414200   PUSH Blowfish.00424103


00406E5D  |.  50            PUSH EAX


00406E5E  |.  8B4424 10     MOV EAX,DWORD PTR SS:[ESP+10]


00406E62  |.  64:8925 00000>MOV DWORD PTR FS:[0],ESP


00406E69  |.  83EC 48       SUB ESP,48


00406E6C  |.  85C0          TEST EAX,EAX


00406E6E  |.  0F85 E1000000 JNZ Blowfish.00406F55


00406E74  |.  A1 34154300   MOV EAX,DWORD PTR DS:[431534]


00406E79  |.  85C0          TEST EAX,EAX


00406E7B  |.  0F85 81000000 JNZ Blowfish.00406F02                    ;  第一次载入时不跳,重复后这里跳走


00406E81  |.  53            PUSH EBX


00406E82  |.  56            PUSH ESI


00406E83  |.  68 78100000   PUSH 1078


00406E88  |.  E8 75070100   CALL Blowfish.00417602


00406E8D  |.  83C4 04       ADD ESP,4


00406E90  |.  894424 60     MOV DWORD PTR SS:[ESP+60],EAX


00406E94  |.  85C0          TEST EAX,EAX


00406E96  |.  C74424 58 000>MOV DWORD PTR SS:[ESP+58],0


00406E9E  |.  74 0B         JE SHORT Blowfish.00406EAB


00406EA0  |.  8BC8          MOV ECX,EAX


00406EA2  |.  E8 79A1FFFF   CALL Blowfish.00401020                   ;  填充3e1c08处


00406EA7  |.  8BF0          MOV ESI,EAX


00406EA9  |.  EB 02         JMP SHORT Blowfish.00406EAD


00406EAB  |>  33F6          XOR ESI,ESI


00406EAD  |>  85F6          TEST ESI,ESI


00406EAF  |.  0F95C3        SETNE BL


00406EB2  |.  885C24 10     MOV BYTE PTR SS:[ESP+10],BL


00406EB6  |.  897424 14     MOV DWORD PTR SS:[ESP+14],ESI


00406EBA  |.  8B0D 34154300 MOV ECX,DWORD PTR DS:[431534]


00406EC0  |.  C74424 58 010>MOV DWORD PTR SS:[ESP+58],1


00406EC8  |.  3BCE          CMP ECX,ESI


00406ECA  |.  74 1B         JE SHORT Blowfish.00406EE7


00406ECC  |.  A0 30154300   MOV AL,BYTE PTR DS:[431530]


00406ED1  |.  84C0          TEST AL,AL


00406ED3  |.  74 0A         JE SHORT Blowfish.00406EDF


00406ED5  |.  85C9          TEST ECX,ECX


00406ED7  |.  74 06         JE SHORT Blowfish.00406EDF


00406ED9  |.  8B01          MOV EAX,DWORD PTR DS:[ECX]


00406EDB  |.  6A 01         PUSH 1


00406EDD  |.  FF10          CALL DWORD PTR DS:[EAX]


00406EDF  |>  881D 30154300 MOV BYTE PTR DS:[431530],BL


00406EE5  |.  EB 0B         JMP SHORT Blowfish.00406EF2


00406EE7  |>  84DB          TEST BL,BL


00406EE9  |.  74 07         JE SHORT Blowfish.00406EF2


00406EEB  |.  C605 30154300>MOV BYTE PTR DS:[431530],1


00406EF2  |>  8935 34154300 MOV DWORD PTR DS:[431534],ESI


00406EF8  |.  5E            POP ESI


00406EF9  |.  C74424 54 FFF>MOV DWORD PTR SS:[ESP+54],-1


00406F01  |.  5B            POP EBX


00406F02  |>  8B4C24 5C     MOV ECX,DWORD PTR SS:[ESP+5C]            ;  WindRand


00406F06  |.  6A 38         PUSH 38


00406F08  |.  8D5424 14     LEA EDX,DWORD PTR SS:[ESP+14]


00406F0C  |.  51            PUSH ECX


00406F0D  |.  52            PUSH EDX


00406F0E  |.  E8 FD130100   CALL Blowfish.00418310                   ;  该Call作用是向[12f6f0]地址复制“WindRand”字串,生成key[14]


00406F13  |.  83C4 0C       ADD ESP,0C


00406F16  |.  8D4424 00     LEA EAX,DWORD PTR SS:[ESP]


00406F1A  |.  8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10]


00406F1E  |.  C74424 00 000>MOV DWORD PTR SS:[ESP],0


00406F26  |.  6A 01         PUSH 1


00406F28  |.  6A 00         PUSH 0


00406F2A  |.  50            PUSH EAX


00406F2B  |.  6A 38         PUSH 38


00406F2D  |.  51            PUSH ECX


00406F2E  |.  8B0D 34154300 MOV ECX,DWORD PTR DS:[431534]            ;  [3e1c08]=bqB


00406F34  |.  C74424 18 000>MOV DWORD PTR SS:[ESP+18],0


00406F3C  |.  E8 5FA1FFFF   CALL Blowfish.004010A0                   ;  

关键地方,加密Call,F7跟进


00406F41  |.  A1 34154300   MOV EAX,DWORD PTR DS:[431534]


00406F46  |.  8B4C24 48     MOV ECX,DWORD PTR SS:[ESP+48]


00406F4A  |.  64:890D 00000>MOV DWORD PTR FS:[0],ECX


00406F51  |.  83C4 54       ADD ESP,54


00406F54  |.  C3            RET


00406F55  |>  8B4C24 48     MOV ECX,DWORD PTR SS:[ESP+48]


00406F59  |.  8B4424 58     MOV EAX,DWORD PTR SS:[ESP+58]


00406F5D  |.  64:890D 00000>MOV DWORD PTR FS:[0],ECX


00406F64  |.  83C4 54       ADD ESP,54


00406F67  \.  C3            RET



【加密Call】



004010A0  /$  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]


004010A6  |.  6A FF         PUSH -1


004010A8  |.  68 303A4200   PUSH Blowfish.00423A30


004010AD  |.  50            PUSH EAX


004010AE  |.  64:8925 00000>MOV DWORD PTR FS:[0],ESP


004010B5  |.  83EC 50       SUB ESP,50


004010B8  |.  53            PUSH EBX


004010B9  |.  55            PUSH EBP


004010BA  |.  56            PUSH ESI


004010BB  |.  57            PUSH EDI


004010BC  |.  8B7C24 70     MOV EDI,DWORD PTR SS:[ESP+70]            ;  WindRand


004010C0  |.  8BE9          MOV EBP,ECX


004010C2  |.  85FF          TEST EDI,EDI


004010C4  |.  0F85 BD000000 JNZ Blowfish.00401187                    ;  这里跳走


004010CA  |.  8A4424 70     MOV AL,BYTE PTR SS:[ESP+70]


004010CE  |.  8B35 90D24200 MOV ESI,DWORD PTR DS:[42D290]            ;  Blowfish.0042D384


004010D4  |.  57            PUSH EDI


004010D5  |.  8D4C24 1C     LEA ECX,DWORD PTR SS:[ESP+1C]


004010D9  |.  884424 1C     MOV BYTE PTR SS:[ESP+1C],AL


004010DD  |.  E8 0E440000   CALL Blowfish.004054F0


004010E2  |.  8BFE          MOV EDI,ESI


004010E4  |.  83C9 FF       OR ECX,FFFFFFFF


004010E7  |.  33C0          XOR EAX,EAX


004010E9  |.  6A 01         PUSH 1


004010EB  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]


004010ED  |.  F7D1          NOT ECX


004010EF  |.  49            DEC ECX


004010F0  |.  8BD9          MOV EBX,ECX


004010F2  |.  8D4C24 1C     LEA ECX,DWORD PTR SS:[ESP+1C]


004010F6  |.  53            PUSH EBX


004010F7  |.  E8 144F0000   CALL Blowfish.00406010


004010FC  |.  84C0          TEST AL,AL


004010FE  |.  74 1E         JE SHORT Blowfish.0040111E


00401100  |.  8B7C24 1C     MOV EDI,DWORD PTR SS:[ESP+1C]


00401104  |.  8BCB          MOV ECX,EBX


00401106  |.  8BD1          MOV EDX,ECX


00401108  |.  53            PUSH EBX


00401109  |.  C1E9 02       SHR ECX,2


0040110C  |.  F3:A5         REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>


0040110E  |.  8BCA          MOV ECX,EDX


00401110  |.  83E1 03       AND ECX,3


00401113  |.  F3:A4         REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>


00401115  |.  8D4C24 1C     LEA ECX,DWORD PTR SS:[ESP+1C]


00401119  |.  E8 524E0000   CALL Blowfish.00405F70


0040111E  |>  8D4424 70     LEA EAX,DWORD PTR SS:[ESP+70]


00401122  |.  8D4C24 28     LEA ECX,DWORD PTR SS:[ESP+28]


00401126  |.  50            PUSH EAX


00401127  |.  C74424 6C 000>MOV DWORD PTR SS:[ESP+6C],0


0040112F  |.  C74424 74 181>MOV DWORD PTR SS:[ESP+74],Blowfish.00431>


00401137  |.  E8 B1630100   CALL Blowfish.004174ED


0040113C  |.  8A4C24 18     MOV CL,BYTE PTR SS:[ESP+18]


00401140  |.  6A 00         PUSH 0


00401142  |.  884C24 38     MOV BYTE PTR SS:[ESP+38],CL


00401146  |.  8D4C24 38     LEA ECX,DWORD PTR SS:[ESP+38]


0040114A  |.  C64424 6C 01  MOV BYTE PTR SS:[ESP+6C],1


0040114F  |.  E8 9C430000   CALL Blowfish.004054F0


00401154  |.  8B15 84714200 MOV EDX,DWORD PTR DS:[427184]


0040115A  |.  8D4424 18     LEA EAX,DWORD PTR SS:[ESP+18]


0040115E  |.  52            PUSH EDX


0040115F  |.  6A 00         PUSH 0


00401161  |.  50            PUSH EAX


00401162  |.  8D4C24 40     LEA ECX,DWORD PTR SS:[ESP+40]


00401166  |.  E8 85410000   CALL Blowfish.004052F0


0040116B  |.  8D4C24 28     LEA ECX,DWORD PTR SS:[ESP+28]


0040116F  |.  68 80974200   PUSH Blowfish.00429780                   ; /Arg2 = 00429780


00401174  |.  51            PUSH ECX                                 ; |Arg1


00401175  |.  C74424 30 807>MOV DWORD PTR SS:[ESP+30],Blowfish.00427>; |


0040117D  |.  C64424 70 00  MOV BYTE PTR SS:[ESP+70],0               ; |


00401182  |.  E8 41640100   CALL Blowfish.004175C8                   ; \Blowfish.004175C8


00401187  |>  8B7424 74     MOV ESI,DWORD PTR SS:[ESP+74]            ;  来到这里,ESI=38


0040118B  |.  83FE 01       CMP ESI,1


0040118E  |.  0F8D BD000000 JGE Blowfish.00401251                    ;  这里跳走


00401194  |.  8A5424 70     MOV DL,BYTE PTR SS:[ESP+70]


00401198  |.  8B35 94D24200 MOV ESI,DWORD PTR DS:[42D294]            ;  Blowfish.0042D354


0040119E  |.  6A 00         PUSH 0


004011A0  |.  8D4C24 1C     LEA ECX,DWORD PTR SS:[ESP+1C]


004011A4  |.  885424 1C     MOV BYTE PTR SS:[ESP+1C],DL


004011A8  |.  E8 43430000   CALL Blowfish.004054F0


004011AD  |.  8BFE          MOV EDI,ESI


004011AF  |.  83C9 FF       OR ECX,FFFFFFFF


004011B2  |.  33C0          XOR EAX,EAX


004011B4  |.  6A 01         PUSH 1


004011B6  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]


004011B8  |.  F7D1          NOT ECX


004011BA  |.  49            DEC ECX


004011BB  |.  8BD9          MOV EBX,ECX


004011BD  |.  8D4C24 1C     LEA ECX,DWORD PTR SS:[ESP+1C]


004011C1  |.  53            PUSH EBX


004011C2  |.  E8 494E0000   CALL Blowfish.00406010


004011C7  |.  84C0          TEST AL,AL


004011C9  |.  74 1E         JE SHORT Blowfish.004011E9


004011CB  |.  8B7C24 1C     MOV EDI,DWORD PTR SS:[ESP+1C]


004011CF  |.  8BCB          MOV ECX,EBX


004011D1  |.  8BC1          MOV EAX,ECX


004011D3  |.  53            PUSH EBX


004011D4  |.  C1E9 02       SHR ECX,2


004011D7  |.  F3:A5         REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>


004011D9  |.  8BC8          MOV ECX,EAX


004011DB  |.  83E1 03       AND ECX,3


004011DE  |.  F3:A4         REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>


004011E0  |.  8D4C24 1C     LEA ECX,DWORD PTR SS:[ESP+1C]


004011E4  |.  E8 874D0000   CALL Blowfish.00405F70


004011E9  |>  8D4C24 70     LEA ECX,DWORD PTR SS:[ESP+70]


004011ED  |.  C74424 68 020>MOV DWORD PTR SS:[ESP+68],2


004011F5  |.  51            PUSH ECX


004011F6  |.  8D4C24 2C     LEA ECX,DWORD PTR SS:[ESP+2C]


004011FA  |.  C74424 74 181>MOV DWORD PTR SS:[ESP+74],Blowfish.00431>


00401202  |.  E8 E6620100   CALL Blowfish.004174ED


00401207  |.  8A5424 18     MOV DL,BYTE PTR SS:[ESP+18]


0040120B  |.  6A 00         PUSH 0


0040120D  |.  8D4C24 38     LEA ECX,DWORD PTR SS:[ESP+38]


00401211  |.  C64424 6C 03  MOV BYTE PTR SS:[ESP+6C],3


00401216  |.  885424 38     MOV BYTE PTR SS:[ESP+38],DL


0040121A  |.  E8 D1420000   CALL Blowfish.004054F0


0040121F  |.  A1 84714200   MOV EAX,DWORD PTR DS:[427184]


00401224  |.  8D4C24 18     LEA ECX,DWORD PTR SS:[ESP+18]


00401228  |.  50            PUSH EAX


00401229  |.  6A 00         PUSH 0


0040122B  |.  51            PUSH ECX


0040122C  |.  8D4C24 40     LEA ECX,DWORD PTR SS:[ESP+40]


00401230  |.  E8 BB400000   CALL Blowfish.004052F0


00401235  |.  8D5424 28     LEA EDX,DWORD PTR SS:[ESP+28]


00401239  |.  68 80974200   PUSH Blowfish.00429780                   ; /Arg2 = 00429780


0040123E  |.  52            PUSH EDX                                 ; |Arg1


0040123F  |.  C74424 30 807>MOV DWORD PTR SS:[ESP+30],Blowfish.00427>; |


00401247  |.  C64424 70 02  MOV BYTE PTR SS:[ESP+70],2               ; |


0040124C  |.  E8 77630100   CALL Blowfish.004175C8                   ; \Blowfish.004175C8


00401251  |>  8B4C24 7C     MOV ECX,DWORD PTR SS:[ESP+7C]            ;  来到这里


00401255  |.  85C9          TEST ECX,ECX                             ;  ECX=0


00401257  |.  0F8C 98020000 JL Blowfish.004014F5


0040125D  |.  83F9 02       CMP ECX,2


00401260  |.  0F8F 8F020000 JG Blowfish.004014F5


00401266  |.  8B8424 800000>MOV EAX,DWORD PTR SS:[ESP+80]


0040126D  |.  85C0          TEST EAX,EAX


0040126F  |.  0F8C DE010000 JL Blowfish.00401453


00401275  |.  83F8 02       CMP EAX,2


00401278  |.  0F8F D5010000 JG Blowfish.00401453


0040127E  |.  8945 14       MOV DWORD PTR SS:[EBP+14],EAX


00401281  |.  8B4424 78     MOV EAX,DWORD PTR SS:[ESP+78]


00401285  |.  894D 10       MOV DWORD PTR SS:[EBP+10],ECX


00401288  |.  8B5D 0C       MOV EBX,DWORD PTR SS:[EBP+C]


0040128B  |.  8B08          MOV ECX,DWORD PTR DS:[EAX]


0040128D  |.  894D 20       MOV DWORD PTR SS:[EBP+20],ECX


00401290  |.  8B50 04       MOV EDX,DWORD PTR DS:[EAX+4]


00401293  |.  8955 24       MOV DWORD PTR SS:[EBP+24],EDX


00401296  |.  8B08          MOV ECX,DWORD PTR DS:[EAX]


00401298  |.  894D 28       MOV DWORD PTR SS:[EBP+28],ECX


0040129B  |.  8B50 04       MOV EDX,DWORD PTR DS:[EAX+4]


0040129E  |.  8955 2C       MOV DWORD PTR SS:[EBP+2C],EDX


004012A1  |.  33C9          XOR ECX,ECX


004012A3  |.  33D2          XOR EDX,EDX


004012A5  |.  85DB          TEST EBX,EBX                             ;  EBX=38


004012A7  |.  7E 12         JLE SHORT Blowfish.004012BB


004012A9  |>  8A043A        /MOV AL,BYTE PTR DS:[EDX+EDI]            ;  依次取[12f6f0]="WindRand"的ASCII码


004012AC  |.  88440C 28     |MOV BYTE PTR SS:[ESP+ECX+28],AL


004012B0  |.  8D42 01       |LEA EAX,DWORD PTR DS:[EDX+1]


004012B3  |.  99            |CDQ


004012B4  |.  41            |INC ECX


004012B5  |.  F7FE          |IDIV ESI


004012B7  |.  3BCB          |CMP ECX,EBX


004012B9  |.^ 7C EE         \JL SHORT Blowfish.004012A9              ;  以上循环的作用是将字符串“WindRand”复制到[12f684]中


004012BB  |>  807D 04 01    CMP BYTE PTR SS:[EBP+4],1


004012BF  |.  75 1C         JNZ SHORT Blowfish.004012DD              ;  这里跳走


004012C1  |.  8B75 1C       MOV ESI,DWORD PTR SS:[EBP+1C]


004012C4  |.  8BCB          MOV ECX,EBX


004012C6  |.  8D7C24 28     LEA EDI,DWORD PTR SS:[ESP+28]


004012CA  |.  33C0          XOR EAX,EAX


004012CC  |.  F3:A6         REPE CMPS BYTE PTR ES:[EDI],BYTE PTR DS:>


004012CE  |.  74 05         JE SHORT Blowfish.004012D5


004012D0  |.  1BC0          SBB EAX,EAX


004012D2  |.  83D8 FF       SBB EAX,-1


004012D5  |>  85C0          TEST EAX,EAX


004012D7  |.  0F84 61010000 JE Blowfish.0040143E


004012DD  |>  8B45 1C       MOV EAX,DWORD PTR SS:[EBP+1C]


004012E0  |.  85C0          TEST EAX,EAX


004012E2  |.  75 50         JNZ SHORT Blowfish.00401334


004012E4  |.  53            PUSH EBX


004012E5  |.  E8 18630100   CALL Blowfish.00417602


004012EA  |.  8BF8          MOV EDI,EAX


004012EC  |.  83C4 04       ADD ESP,4


004012EF  |.  85FF          TEST EDI,EDI


004012F1  |.  8D75 18       LEA ESI,DWORD PTR SS:[EBP+18]


004012F4  |.  8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10]


004012F8  |.  0F95C3        SETNE BL


004012FB  |.  3BF1          CMP ESI,ECX


004012FD  |.  74 28         JE SHORT Blowfish.00401327


004012FF  |.  8B46 04       MOV EAX,DWORD PTR DS:[ESI+4]


00401302  |.  3BC7          CMP EAX,EDI


00401304  |.  74 15         JE SHORT Blowfish.0040131B


00401306  |.  803E 00       CMP BYTE PTR DS:[ESI],0


00401309  |.  74 09         JE SHORT Blowfish.00401314


0040130B  |.  50            PUSH EAX


0040130C  |.  E8 1F970000   CALL Blowfish.0040AA30


00401311  |.  83C4 04       ADD ESP,4


00401314  |>  881E          MOV BYTE PTR DS:[ESI],BL


00401316  |.  897E 04       MOV DWORD PTR DS:[ESI+4],EDI


00401319  |.  EB 19         JMP SHORT Blowfish.00401334


0040131B  |>  84DB          TEST BL,BL


0040131D  |.  74 03         JE SHORT Blowfish.00401322


0040131F  |.  C606 01       MOV BYTE PTR DS:[ESI],1


00401322  |>  897E 04       MOV DWORD PTR DS:[ESI+4],EDI


00401325  |.  EB 0D         JMP SHORT Blowfish.00401334


00401327  |>  84DB          TEST BL,BL


00401329  |.  74 09         JE SHORT Blowfish.00401334


0040132B  |.  57            PUSH EDI


0040132C  |.  E8 FF960000   CALL Blowfish.0040AA30


00401331  |.  83C4 04       ADD ESP,4


00401334  |>  8B4D 0C       MOV ECX,DWORD PTR SS:[EBP+C]


00401337  |.  8B7D 1C       MOV EDI,DWORD PTR SS:[EBP+1C]


0040133A  |.  8BD1          MOV EDX,ECX


0040133C  |.  8D7424 28     LEA ESI,DWORD PTR SS:[ESP+28]


00401340  |.  C1E9 02       SHR ECX,2


00401343  |.  F3:A5         REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>


00401345  |.  8BCA          MOV ECX,EDX


00401347  |.  8D45 30       LEA EAX,DWORD PTR SS:[EBP+30]


0040134A  |.  83E1 03       AND ECX,3


0040134D  |.  8D5424 28     LEA EDX,DWORD PTR SS:[ESP+28]


00401351  |.  F3:A4         REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>


00401353  |.  B9 12000000   MOV ECX,12                               ;  ECX=12(十进制数18)


00401358  |.  BE 20614200   MOV ESI,Blowfish.00426120


0040135D  |.  8BF8          MOV EDI,EAX


0040135F  |.  C74424 74 120>MOV DWORD PTR SS:[ESP+74],12


00401367  |.  F3:A5         REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>;  复制原始pbox数据到[3e1c38]地址处,共18个


00401369  |.  8D7D 78       LEA EDI,DWORD PTR SS:[EBP+78]


0040136C  |.  B9 00040000   MOV ECX,400                              ;  ECX=400(十进制数1024)


00401371  |.  BE 68614200   MOV ESI,Blowfish.00426168


00401376  |.  F3:A5         REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>;  复制原始sbox数据到[3e1c80]地址处,共1024个


00401378  |.  33C9          XOR ECX,ECX


0040137A  |.  8BF8          MOV EDI,EAX


0040137C  |>  8B75 0C       /MOV ESI,DWORD PTR SS:[EBP+C]            ;  ESI=0x38


0040137F  |.  33C0          |XOR EAX,EAX


00401381  |.  C74424 70 040>|MOV DWORD PTR SS:[ESP+70],4


00401389  |>  33DB          |/XOR EBX,EBX


0040138B  |.  8A1A          ||MOV BL,BYTE PTR DS:[EDX]               ;  依次取字符串“WindRand”


0040138D  |.  C1E0 08       ||SHL EAX,8


00401390  |.  0BC3          ||OR EAX,EBX


00401392  |.  42            ||INC EDX


00401393  |.  41            ||INC ECX


00401394  |.  3BCE          ||CMP ECX,ESI                            ;  ESI=38(十进制数56)


00401396  |.  75 06         ||JNZ SHORT Blowfish.0040139E


00401398  |.  33C9          ||XOR ECX,ECX


0040139A  |.  8D5424 28     ||LEA EDX,DWORD PTR SS:[ESP+28]


0040139E  |>  8B5C24 70     ||MOV EBX,DWORD PTR SS:[ESP+70]          ;  EBX=4


004013A2  |.  4B            ||DEC EBX


004013A3  |.  895C24 70     ||MOV DWORD PTR SS:[ESP+70],EBX


004013A7  |.^ 75 E0         |\JNZ SHORT Blowfish.00401389


004013A9  |.  8B1F          |MOV EBX,DWORD PTR DS:[EDI]              ;  pbox[0]


004013AB  |.  83C7 04       |ADD EDI,4                               ;  指向下一内容


004013AE  |.  33D8          |XOR EBX,EAX                             ;  pbox[0]^key(8个一组)


004013B0  |.  8B4424 74     |MOV EAX,DWORD PTR SS:[ESP+74]           ;  EAX=12(十进进制数18),表示pbox的18个内容


004013B4  |.  895F FC       |MOV DWORD PTR DS:[EDI-4],EBX            ;  这里进行填充key_pbox[0]


004013B7  |.  48            |DEC EAX


004013B8  |.  894424 74     |MOV DWORD PTR SS:[ESP+74],EAX


004013BC  |.^ 75 BE         \JNZ SHORT Blowfish.0040137C             ;  选择key8个一组地去异或pbox,用异或的结果填充key_pbox


004013BE  |.  33FF          XOR EDI,EDI


004013C0  |.  8D75 30       LEA ESI,DWORD PTR SS:[EBP+30]


004013C3  |.  897C24 10     MOV DWORD PTR SS:[ESP+10],EDI            ;  0


004013C7  |.  897C24 14     MOV DWORD PTR SS:[ESP+14],EDI            ;  0


004013CB  |>  8D4424 10     /LEA EAX,DWORD PTR SS:[ESP+10]


004013CF  |.  8BCD          |MOV ECX,EBP


004013D1  |.  50            |PUSH EAX


004013D2  |.  E8 D9050000   |CALL Blowfish.004019B0                  ;  

加密key_pbox的Call,F7跟进


004013D7  |.  8B4C24 10     |MOV ECX,DWORD PTR SS:[ESP+10]


004013DB  |.  8B5424 14     |MOV EDX,DWORD PTR SS:[ESP+14]


004013DF  |.  890E          |MOV DWORD PTR DS:[ESI],ECX              ;  这里用xL18进行填充


004013E1  |.  83C6 04       |ADD ESI,4


004013E4  |.  47            |INC EDI


004013E5  |.  8916          |MOV DWORD PTR DS:[ESI],EDX              ;  这里用xL17进行填充


004013E7  |.  47            |INC EDI


004013E8  |.  83C6 04       |ADD ESI,4


004013EB  |.  83FF 12       |CMP EDI,12


004013EE  |.^ 7C DB         \JL SHORT Blowfish.004013CB              ;  用BF_En加密一个全0的64位信息,直到key_pbox全部被替换


004013F0  |.  8D45 78       LEA EAX,DWORD PTR SS:[EBP+78]


004013F3  |.  C74424 70 040>MOV DWORD PTR SS:[ESP+70],4


004013FB  |.  8BD8          MOV EBX,EAX


004013FD  |>  33FF          /XOR EDI,EDI


004013FF  |.  8BF3          |MOV ESI,EBX


00401401  |>  8D4424 10     |/LEA EAX,DWORD PTR SS:[ESP+10]


00401405  |.  8BCD          ||MOV ECX,EBP


00401407  |.  50            ||PUSH EAX


00401408  |.  E8 A3050000   ||CALL Blowfish.004019B0                 ;  填充key_sbox 信息加密,过程同上


0040140D  |.  8B4C24 10     ||MOV ECX,DWORD PTR SS:[ESP+10]


00401411  |.  8B5424 14     ||MOV EDX,DWORD PTR SS:[ESP+14]


00401415  |.  890E          ||MOV DWORD PTR DS:[ESI],ECX


[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 246
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
2
【算法小结】
根据上面的分析,对照上面的理论,再小结一下该CrackMe的加密过程
1、首先有两个盒子(即数组)pbox[18]、sbox[4][256](即sbox[1024])是固定的。
2、然后用key="WindRand"作为密鈅,并对密鈅进行处理形成一个key[14]包含14个数据的数组,其方法是以每4个字符组成1个32位的16进制数,不足部分以0填充。
3、用上面形成的key[14]数组与pbox[18]对应的数据进行两两异或,并用异或的结果依次填充pbox,其中key不足的再循环使用,即
 pbox[0]=pbox[0]^key[0]
  pbox[1]=pbox[1]^key[1]
  …………
  …………
  pbox[14]=pbox[14]^key[0]
  pbox[15]=pbox[15]^key[1]
  pbox[16]=pbox[16]^key[2]
  pbox[17]=pbox[17]^key[3]
  直到box填充完毕。
4、再依次对pbox、sbox进行加密,其方法是
对于pbox:
(1)先用pbox[0]与xL(初始值为0)异或结果保存为xL1
(2)将上面xL1作为参数调用FxL函数在sbox数组中查表得到的值后与pbox[1]异或的结果再与xR(初始值为0)进行异或结果保存为xL2
(3)再将上面xL2作为参数调用FxL函数在sbox数组中查表得到的值后与pbox[2]异或的结果再与xL1进行异或结果保存为xL3
(4)再将上面xL3作为参数调用FxL函数在sbox数组中查表得到的值后与pbox[3]异或的结果再与xL2进行异或结果保存为xL4
  …………
  …………
如此,每次将上面的结果作为参数依次与pbox中的每个值异或后再与前2次的值异或得到一个新值,只有最后一个值即xL18不再使用xL17的值进行查表(具体见注册机代码)
最后得到的值xL17和xL18将分别填充到pbox[1]和pbox[0]中,这样就完成一轮循环。下一轮循环将以xL=xL18,xR=xL17作为初始值进行循环,共进行9次循环。

其中FxL函数是将一个32位16进制数(即4个字符),分成a,b,c,d(例如:0x77665544,则a=77,b=66,c=55,d=44),然后在sbox中进行查表得到4个32位16进制数,个体的对应关系是:s1=sbox[0][a],s1=sbox[1],s1=sbox[2][c],s1=sbox[3][d]。最后FxL函数的返回值就是
返回值=((s1+s2)^s3)+s4。

对于sbox进行加密,方法与pbox大体相同,所不同的是初始值xL,xR:
pbox的上述两个初始值为0
sbox的初始值中xL等于已经加密过的pbox中的pbox[17],而xR则为pbox[16]

5、用输入的注册码进行解密,形成最终的值,其方法与上面第4步的加密大体相同
所不同的是:
(1)初始值不同,xL,xR分别取的是注册码的前4个字串和后4个字串;
(2)加密中是按pbox数组顺序异或,而解决是按逆序异或
(3)只参加一次运算

6、最后所得的2个32位16进制数与用户名的ASCII码逐一比较,相同则注册成功(该CarckMe只有注册码参与运算,而与用户名无关,通过计算所得的值反推用户名)。

--------------------------------------------------------------------------------
【C语言注册机】

本注册机程序简化了输入注册码的转换,直接在sn[2]中修改即可

#include "stdio.h"
#include "string.h"

//自定义函数

//注册码参与运算
void BF_De_Sn(unsigned long int *p_pbox,unsigned long int *p_sbox,unsigned long int *m1,unsigned long int *m2);

//解密
void BF_De(unsigned long int *p_pbox,unsigned long int *p_sbox,unsigned long int *m1,unsigned long int *m2);

//加密pbox,sbox
void BF_En_box(unsigned long int *p_pbox,unsigned long int *p_sbox,unsigned long int *m1,unsigned long int *m2);

//理论准备中介绍的F(xL)函数
unsigned long int FxL(unsigned long int xL,unsigned long int *p_sbox);

//加密
void BF_En(unsigned long int *p_pbox,unsigned long int *p_sbox,unsigned long int *m1,unsigned long int *m2);

//填充
void fill_pbox(unsigned long int *p_key,unsigned long int *p_pbox);

//主函数
void main()
{

        unsigned long int n1=0,n2=0;
        unsigned long int *m1,*m2;
        m1=&n1;
        m2=&n2;
       

        //加密密钥"WindRand"的ASCII码按4位一组组成8位16制数,不足部分补0
        unsigned long int key[14]={0x57696e64,0x52616e64,0};

        //输入的注册码按8位一组存入sn中,这里可以随时替换
        unsigned long int sn[2]={0x05F4D42F,0x5CC84A79};
   
        //pbox盒子为固定值
        unsigned long int pbox[18]={
                0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
                0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
                0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
                0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
                0x9216d5d9, 0x8979fb1b};
               
    //sbox盒子为固定值
        unsigned long int sbox[4][256]={

                //0
                {0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,//1
                0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
                0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
                0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
                0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
                0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
                0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
                0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
                0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
                0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,//10
                0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
                0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
                0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
                0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
                0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
                0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
                0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
                0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
                0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
                0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,//20
                0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
                0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
                0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
                0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
                0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
                0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
                0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
                0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
                0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
                0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,//30
                0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
                0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
                0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
                0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
                0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
                0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
                0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
                0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
                0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
                0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,//40
                0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
                0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
                0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
                0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
                0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
                0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
                0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
                0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
                0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
                0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,//50
                0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
                0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
                0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
                0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
                0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
                0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
                0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
                0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
                0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
                0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
                0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
                0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
                0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
                0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a},

                //1
                {0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
                0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
                0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
                0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
                0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
                0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
                0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
                0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
                0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
                0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,//10
                0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
                0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
                0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
                0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
                0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
                0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
                0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
                0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
                0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
                0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,//20
                0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
                0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
                0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
                0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
                0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
                0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
                0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
                0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
                0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
                0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,//30
                0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
                0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
                0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
                0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
                0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
                0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
                0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
                0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
                0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
                0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,//40
                0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
                0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
                0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
                0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
                0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
                0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
                0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
                0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
                0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
                0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
                0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
                0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
                0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
                0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
                0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
                0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
                0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
                0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
                0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
                0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
                0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
                0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
                0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
                0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7},

                //2
                {0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
                0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
                0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
                0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
                0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
                0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
                0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
                0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
                0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
                0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
                0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
                0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
                0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
                0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
                0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
                0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
                0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
                0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
                0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
                0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
                0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
                0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
                0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
                0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
                0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
                0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
                0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
                0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
                0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
                0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
                0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
                0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
                0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
                0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
                0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
                0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
                0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
                0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
                0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
                0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
                0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
                0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
                0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
                0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
                0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
                0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
                0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
                0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
                0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
                0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
                0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
                0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
                0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
                0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
                0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
                0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
                0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
                0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
                0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
                0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
                0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
                0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
                0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
                0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0},

                //3
                {0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
                0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
                0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
                0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
                0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
                0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
                0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
                0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
                0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
                0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
                0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
                0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
                0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
                0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
                0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
                0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
                0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
                0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
                0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
                0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
                0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
                0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
                0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
                0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
                0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
                0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
                0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
                0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
                0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
                0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
                0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
                0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
                0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
                0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
                0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
                0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
                0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
                0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
                0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
                0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
                0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
                0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
                0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
                0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
                0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
                0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
                0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
                0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
                0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
                0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
                0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
                0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
                0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
                0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
                0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
                0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
                0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
                0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
                0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
                0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
                0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
                0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
                0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
                0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6}
        };

       

        unsigned long int *p_key, *p_pbox, *p_sbox;
       
        p_key=key;
        p_pbox=pbox;
        p_sbox=&sbox[0][0];

        fill_pbox(p_key,p_pbox);//用key对原始pbox进行变换
        BF_En_box(p_pbox,p_sbox,m1,m2);//分别对pbox和sbox进行加密
       

        *m1=sn[0];
        *m2=sn[1];

        BF_De_Sn(p_pbox,p_sbox,m1,m2);//调用输入的注册码参与运算,得到2个32位的16进制数(即对应8个字符)

        printf("你的注册码是: ");//显示2个32位的16进制数

        printf("\n");
        printf("%x",*m1);
        printf("\n");

        printf("%x",*m2);
        printf("\n");
}

void BF_De_Sn(unsigned long int *p_pbox,unsigned long int *p_sbox,unsigned long int *m1,unsigned long int *m2)
{

        unsigned long int a1,b1,c1,d1,a2,b2,c2,d2;
        char user[8];
        int i;

        BF_De(p_pbox,p_sbox,m1,m2);
        a1=*m1/0x1000000;
        b1=*m1%0x1000000/0x10000;
        c1=*m1%0x10000/0x100;
        d1=*m1%0x100;

        a2=*m2/0x1000000;
        b2=*m2%0x1000000/0x10000;
        c2=*m2%0x10000/0x100;
        d2=*m2%0x100;
        user[0]=int(a1);
        user[1]=int(b1);
        user[2]=int(c1);
        user[3]=int(d1);
        user[4]=int(a2);
        user[5]=int(b2);
        user[6]=int(c2);
        user[7]=int(d2);
        for(i=0;i<8;i++)
                printf("%c",user[i]);//显示2个32位的16进制数对应的8个字符
        printf("\n");       
}

void BF_De(unsigned long int *p_pbox,unsigned long int *p_sbox,unsigned long int *m1,unsigned long int *m2)
{
    unsigned long int xL,xR;
        unsigned long int xL1,xL2,xL3,xL4,xL5,xL6,xL7,xL8,xL9,xL10,xL11,xL12,xL13,xL14,xL15,xL16,xL17,xL18;

        xL=*m1;
        xR=*m2;

        xL1=xL^*(p_pbox+17);

        xL2=FxL(xL1,p_sbox);
        xL2=(xL2^*(p_pbox+16))^xR;

        xL3=FxL(xL2,p_sbox);
        xL3=(xL3^*(p_pbox+15))^xL1;

        xL4=FxL(xL3,p_sbox);
        xL4=(xL4^*(p_pbox+14))^xL2;

        xL5=FxL(xL4,p_sbox);
        xL5=(xL5^*(p_pbox+13))^xL3;

        xL6=FxL(xL5,p_sbox);
        xL6=(xL6^*(p_pbox+12))^xL4;

        xL7=FxL(xL6,p_sbox);
        xL7=(xL7^*(p_pbox+11))^xL5;

        xL8=FxL(xL7,p_sbox);
        xL8=(xL8^*(p_pbox+10))^xL6;

        xL9=FxL(xL8,p_sbox);
        xL9=(xL9^*(p_pbox+9))^xL7;

        xL10=FxL(xL9,p_sbox);
        xL10=(xL10^*(p_pbox+8))^xL8;

        xL11=FxL(xL10,p_sbox);
        xL11=(xL11^*(p_pbox+7))^xL9;

        xL12=FxL(xL11,p_sbox);
        xL12=(xL12^*(p_pbox+6))^xL10;

        xL13=FxL(xL12,p_sbox);
        xL13=(xL13^*(p_pbox+5))^xL11;

        xL14=FxL(xL13,p_sbox);
        xL14=(xL14^*(p_pbox+4))^xL12;

        xL15=FxL(xL14,p_sbox);
        xL15=(xL15^*(p_pbox+3))^xL13;

        xL16=FxL(xL15,p_sbox);
        xL16=(xL16^*(p_pbox+2))^xL14;

        xL17=FxL(xL16,p_sbox);
        xL17=(xL17^*(p_pbox+1))^xL15;

        xL18=xL16^*(p_pbox+0);

        *m1=xL18;
        *m2=xL17;       
}

void BF_En_box(unsigned long int *p_pbox,unsigned long int *p_sbox,unsigned long int *m1,unsigned long int *m2)
{
        int i;
        for(i=0;i<18;i=i+2)
        {
                BF_En(p_pbox,p_sbox,m1,m2);//对pbox进行加密
                *(p_pbox+i)=*m1;
                *(p_pbox+i+1)=*m2;
        }
        for(i=0;i<1024;i=i+2)
        {
                BF_En(p_pbox,p_sbox,m1,m2);//对sbox进行加密
                *(p_sbox+i)=*m1;
                *(p_sbox+i+1)=*m2;
        }

}

unsigned long int FxL(unsigned long int xL,unsigned long int *p_sbox)
{
        unsigned long int a,b,c,d,s1,s2,s3,s4,di;

        a=xL/0x1000000;
        b=xL%0x1000000/0x10000;
        c=xL%0x10000/0x100;
        d=xL%0x100;

        s1=*((p_sbox+0)+a);
        s2=*((p_sbox+256)+b);
        s3=*((p_sbox+512)+c);
        s4=*((p_sbox+768)+d);

        di=((s1+s2)^s3)+s4;

        return di;
}

void BF_En(unsigned long int *p_pbox,unsigned long int *p_sbox,unsigned long int *m1,unsigned long int *m2)
{
    unsigned long int xL,xR=0;
        unsigned long int xL1,xL2,xL3,xL4,xL5,xL6,xL7,xL8,xL9,xL10,xL11,xL12,xL13,xL14,xL15,xL16,xL17,xL18;

        xL=*m1;//初始为0
        xR=*m2;//初始为0

        xL1=*(p_pbox+0)^xL;

        xL2=FxL(xL1,p_sbox);
        xL2=(xL2^*(p_pbox+1))^xR;

        xL3=FxL(xL2,p_sbox);
        xL3=(xL3^*(p_pbox+2))^xL1;

        xL4=FxL(xL3,p_sbox);
        xL4=(xL4^*(p_pbox+3))^xL2;

        xL5=FxL(xL4,p_sbox);
        xL5=(xL5^*(p_pbox+4))^xL3;

        xL6=FxL(xL5,p_sbox);
        xL6=(xL6^*(p_pbox+5))^xL4;

        xL7=FxL(xL6,p_sbox);
        xL7=(xL7^*(p_pbox+6))^xL5;

        xL8=FxL(xL7,p_sbox);
        xL8=(xL8^*(p_pbox+7))^xL6;

        xL9=FxL(xL8,p_sbox);
        xL9=(xL9^*(p_pbox+8))^xL7;

        xL10=FxL(xL9,p_sbox);
        xL10=(xL10^*(p_pbox+9))^xL8;

        xL11=FxL(xL10,p_sbox);
        xL11=(xL11^*(p_pbox+10))^xL9;

        xL12=FxL(xL11,p_sbox);
        xL12=(xL12^*(p_pbox+11))^xL10;

        xL13=FxL(xL12,p_sbox);
        xL13=(xL13^*(p_pbox+12))^xL11;

        xL14=FxL(xL13,p_sbox);
        xL14=(xL14^*(p_pbox+13))^xL12;

        xL15=FxL(xL14,p_sbox);
        xL15=(xL15^*(p_pbox+14))^xL13;

        xL16=FxL(xL15,p_sbox);
        xL16=(xL16^*(p_pbox+15))^xL14;

        xL17=FxL(xL16,p_sbox);
        xL17=(xL17^*(p_pbox+16))^xL15;

        xL18=xL16^*(p_pbox+17);

        *m1=xL18;
        *m2=xL17;
       
}

void fill_pbox(unsigned long int *p_key,unsigned long int *p_pbox)

{
        int i,j=0;

        for(i=0;i<18;i++)
        {
                if(i>=14)
                {

                        *(p_pbox+i)=*(p_pbox+i)^*(p_key+(i-j));
                }
                else
                {
                        *(p_pbox+i)=*(p_pbox+i)^*(p_key+j);
                        j++;
                }
        }
       
}

由于要根据计算的值反推用户名,因此可能会出现值无法对应可显示的字符,在此以coolstar曾给出的一组注册码说明
将sn[2]设置成sn[2]={0x05F4D42F,0x5CC84A79}即输入注册码:05F4D42F5CC84A79
程序得出2组数值为:636f6f6c 73746172
则对应的字符为:
63 6f 6f 6c   73 74 61 72
c  o  o  l      s  t  a  r
因此有效的注册码:
用户名:coolstar
注册码:05F4D42F5CC84A79
2007-12-6 08:27
0
雪    币: 56043
活跃值: (21220)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
天高飞扬功力提升很快
2007-12-6 10:53
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
4
加密算法是我必收藏的。非常感谢楼主分享
2007-12-7 08:49
0
雪    币: 207
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
学习 学习~~
2007-12-7 12:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
响当当的。。。。。。
  
2007-12-8 19:59
0
游客
登录 | 注册 方可回帖
返回