XPSecurity2005c註冊演算法分析---標準DES+變形MD5

看雪資料發表於2015-11-15

標 題:XPSecurity2005c註冊演算法分析---標準DES+變形MD5 

發信人:cnbragon

時 間:2005-01-07,15:56

詳細資訊: 



這個軟體是我在12.29號的0day中發現的,因為它採用了DES演算法所以偶才拿來練練手

XPSecurity是一款專業的WINDOWS XP 作業系統安全設定工具

下載地址:http://www3.skycn.com/soft/18979.html

主程式用ASPack 2.12 -> Alexey Solodovnikov加殼,PeScan輕鬆脫掉,原程式有CRC校驗
脫殼後PeID顯示為Borland Delphi 6.0 - 7.0 [Overlay],DES,MD5,CRC32,
然後用DeDe分析,匯出.map檔案,匯入Ollydbg

經分析發現程式啟動時會在HKCU\Software\Microsoft\Security2005c下讀取"UN"和"RN",其中UN為DES_Encrypt(username),RN為DES_Encrypt(sn)
程式啟動的時候會從登錄檔中讀取,然後分別進行Des_Decrypt,再得到輸入的使用者名稱和假碼,然後再DES_Encrypt(username)+MD5(username)
即為正確的sn,其中MD5演算法為變形MD5,

分析後發現程式啟動時從下面的地方開始讀登錄檔校驗註冊碼

005399E0 <>/.  55                      push ebp                                      ;  <-TMainFrm@FormShow
005399E1   |.  8BEC                    mov ebp,esp
005399E3   |.  B9 19000000             mov ecx,19
005399E8 <>|>  6A 00                   /push 0                                       ;  loc_5399E8
005399EA   |.  6A 00                   |push 0
005399EC   |.  49                      |dec ecx
005399ED   |.^ 75 F9                   \jnz short <unpack.loc_5399E8>
005399EF   |.  53                      push ebx
005399F0   |.  56                      push esi
005399F1   |.  57                      push edi
005399F2   |.  8BF0                    mov esi,eax
005399F4   |.  33C0                    xor eax,eax
005399F6   |.  55                      push ebp
005399F7   |.  68 87A55300             push <unpack.loc_53A587>
005399FC   |.  64:FF30                 push dword ptr fs:[eax]
005399FF   |.  64:8920                 mov dword ptr fs:[eax],esp
00539A02   |.  B2 01                   mov dl,1
00539A04   |.  A1 D0994300             mov eax,dword ptr ds:[<dword_4399D0>]
00539A09 <>|.  E8 E200F0FF             call <unpack.sub_439AF0>                      ;  ->Registry.TRegistry.Create(TRegistry;boolean);overload;
00539A0E   |.  8BD8                    mov ebx,eax
00539A10   |.  BA 01000080             mov edx,80000001
00539A15   |.  8BC3                    mov eax,ebx
00539A17 <>|.  E8 7401F0FF             call <unpack.sub_439B90>                      ;  ->Registry.TRegistry.SetRootKey(TRegistry;HKEY);
00539A1C   |.  833D 64255400 01        cmp dword ptr ds:[542564],1
00539A23   |.  0F85 2F0B0000           jnz <unpack.loc_53A558>
00539A29   |.  B1 01                   mov cl,1
00539A2B   |.  BA A0A55300             mov edx,<unpack.asc_53A5A0>                   ;  ASCII "\Software\Microsoft\Security2005c"
00539A30   |.  8BC3                    mov eax,ebx
00539A32 <>|.  E8 9D02F0FF             call <unpack.sub_439CD4>                      ;  ->Registry.TRegistry.OpenKey(TRegistry;AnsiString;Boolean):Boolean;
00539A37   |.  84C0                    test al,al
00539A39   |.  74 3E                   je short <unpack.loc_539A79>
00539A3B   |.  8D4D EC                 lea ecx,dword ptr ss:[ebp-14]
00539A3E   |.  BA CCA55300             mov edx,<unpack.dword_53A5CC>                 ;  ASCII "UN"
00539A43   |.  8BC3                    mov eax,ebx
00539A45   |.  E8 E207F0FF             call <unpack.sub_43A22C>
00539A4A   |.  8B45 EC                 mov eax,dword ptr ss:[ebp-14]
00539A4D   |.  8D4D FC                 lea ecx,dword ptr ss:[ebp-4]
00539A50   |.  BA D8A55300             mov edx,<unpack.aSecurityone_1>               ;  ASCII "SecurityOne",這個是金鑰
00539A55   |.  E8 DEB3F9FF             call <unpack.sub_4D4E38>                      ;但是隻取前面的8個字元"Security"
                                                                                     ;作為64的金鑰,別忘了其中有8位是用作校驗的
                                                                                     ;實際只有56位
{
004D4E38 <>/$  55                      push ebp                                      ;  sub_4D4E38
004D4E39   |.  8BEC                    mov ebp,esp
004D4E3B   |.  6A 00                   push 0
004D4E3D   |.  6A 00                   push 0
004D4E3F   |.  6A 00                   push 0
004D4E41   |.  6A 00                   push 0
004D4E43   |.  6A 00                   push 0
004D4E45   |.  53                      push ebx
004D4E46   |.  56                      push esi
004D4E47   |.  57                      push edi
004D4E48   |.  8BF9                    mov edi,ecx
004D4E4A   |.  8955 F8                 mov dword ptr ss:[ebp-8],edx
004D4E4D   |.  8945 FC                 mov dword ptr ss:[ebp-4],eax
004D4E50   |.  8B45 FC                 mov eax,dword ptr ss:[ebp-4]
004D4E53   |.  E8 9CF7F2FF             call <unpack.sub_4045F4>
004D4E58   |.  8B45 F8                 mov eax,dword ptr ss:[ebp-8]
004D4E5B   |.  E8 94F7F2FF             call <unpack.sub_4045F4>
004D4E60   |.  33C0                    xor eax,eax
004D4E62   |.  55                      push ebp
004D4E63   |.  68 EE4E4D00             push <unpack.loc_4D4EEE>
004D4E68   |.  64:FF30                 push dword ptr fs:[eax]
004D4E6B   |.  64:8920                 mov dword ptr fs:[eax],esp
004D4E6E   |.  8D45 F4                 lea eax,dword ptr ss:[ebp-C]
004D4E71   |.  E8 CEF2F2FF             call <unpack.sub_404144>
004D4E76   |.  8B45 FC                 mov eax,dword ptr ss:[ebp-4]
004D4E79   |.  E8 86F5F2FF             call <unpack.sub_404404>
004D4E7E   |.  8BD8                    mov ebx,eax
004D4E80   |.  D1FB                    sar ebx,1
004D4E82   |.  79 03                   jns short <unpack.loc_4D4E87>
004D4E84   |.  83D3 00                 adc ebx,0
004D4E87 <>|>  4B                      dec ebx                                       ;  loc_4D4E87
004D4E88   |.  85DB                    test ebx,ebx
004D4E8A   |.  7C 3A                   jl short <unpack.loc_4D4EC6>
004D4E8C   |.  43                      inc ebx
004D4E8D   |.  33F6                    xor esi,esi
004D4E8F <>|>  8D45 F0                 /lea eax,dword ptr ss:[ebp-10]                ;  loc_4D4E8F
004D4E92   |.  50                      |push eax
004D4E93   |.  8BD6                    |mov edx,esi
004D4E95   |.  03D2                    |add edx,edx
004D4E97   |.  42                      |inc edx
004D4E98   |.  B9 02000000             |mov ecx,2
004D4E9D   |.  8B45 FC                 |mov eax,dword ptr ss:[ebp-4]
004D4EA0   |.  E8 BFF7F2FF             |call <unpack.sub_404664>
004D4EA5   |.  8B45 F0                 |mov eax,dword ptr ss:[ebp-10]
004D4EA8   |.  E8 9BFEFFFF             |call <unpack.sub_4D4D48>
004D4EAD   |.  8BD0                    |mov edx,eax
004D4EAF   |.  8D45 EC                 |lea eax,dword ptr ss:[ebp-14]
004D4EB2   |.  E8 75F4F2FF             |call <unpack.sub_40432C>
004D4EB7   |.  8B55 EC                 |mov edx,dword ptr ss:[ebp-14]
004D4EBA   |.  8D45 F4                 |lea eax,dword ptr ss:[ebp-C]
004D4EBD   |.  E8 4AF5F2FF             |call <unpack.sub_40440C>
004D4EC2   |.  46                      |inc esi
004D4EC3   |.  4B                      |dec ebx
004D4EC4   |.^ 75 C9                   \jnz short <unpack.loc_4D4E8F>
004D4EC6 <>|>  8BCF                    mov ecx,edi                                   ;  loc_4D4EC6
004D4EC8   |.  8B55 F8                 mov edx,dword ptr ss:[ebp-8]
004D4ECB   |.  8B45 F4                 mov eax,dword ptr ss:[ebp-C]   ;登錄檔中的UN
004D4ECE   |.  E8 E9FBFFFF             call <unpack.sub_4D4ABC>
004D4ED3   |.  33C0                    xor eax,eax
004D4ED5   |.  5A                      pop edx
004D4ED6   |.  59                      pop ecx
004D4ED7   |.  59                      pop ecx
004D4ED8   |.  64:8910                 mov dword ptr fs:[eax],edx
004D4EDB   |.  68 F54E4D00             push <unpack.a_LxUl3UhOm>
004D4EE0 <>|>  8D45 EC                 lea eax,dword ptr ss:[ebp-14]                 ;  loc_4D4EE0
004D4EE3   |.  BA 05000000             mov edx,5
004D4EE8   |.  E8 7BF2F2FF             call <unpack.sub_404168>
004D4EED   \.  C3                      retn

}
---------------------------------------------------------------------------------------------------------
 call <unpack.sub_4D4ABC>
{
 004D4ABC <>/$  55                      push ebp                                      ;  sub_4D4ABC
004D4ABD   |.  8BEC                    mov ebp,esp
004D4ABF   |.  83C4 CC                 add esp,-34
004D4AC2   |.  53                      push ebx
004D4AC3   |.  56                      push esi
004D4AC4   |.  33DB                    xor ebx,ebx
004D4AC6   |.  895D CC                 mov dword ptr ss:[ebp-34],ebx
004D4AC9   |.  895D D8                 mov dword ptr ss:[ebp-28],ebx
004D4ACC   |.  894D F4                 mov dword ptr ss:[ebp-C],ecx
004D4ACF   |.  8955 F8                 mov dword ptr ss:[ebp-8],edx
004D4AD2   |.  8945 FC                 mov dword ptr ss:[ebp-4],eax
004D4AD5   |.  8B45 FC                 mov eax,dword ptr ss:[ebp-4]
004D4AD8   |.  E8 17FBF2FF             call <unpack.sub_4045F4>
004D4ADD   |.  8B45 F8                 mov eax,dword ptr ss:[ebp-8]
004D4AE0   |.  E8 0FFBF2FF             call <unpack.sub_4045F4>
004D4AE5   |.  33C0                    xor eax,eax
004D4AE7   |.  55                      push ebp
004D4AE8   |.  68 354C4D00             push <unpack.loc_4D4C35>
004D4AED   |.  64:FF30                 push dword ptr fs:[eax]
004D4AF0   |.  64:8920                 mov dword ptr fs:[eax],esp
004D4AF3   |.  8B45 F8                 mov eax,dword ptr ss:[ebp-8]
004D4AF6   |.  E8 09F9F2FF             call <unpack.sub_404404>
004D4AFB   |.  83F8 08                 cmp eax,8
004D4AFE   |.  7D 1C                   jge short <unpack.loc_4D4B1C>
004D4B00   |.  EB 0D                   jmp short <unpack.loc_4D4B0F>
004D4B02 <>|>  8D45 F8                 /lea eax,dword ptr ss:[ebp-8]                 ;  loc_4D4B02
004D4B05   |.  BA 4C4C4D00             |mov edx,<unpack.dword_4D4C4C>
004D4B0A   |.  E8 FDF8F2FF             |call <unpack.sub_40440C>
004D4B0F <>|>  8B45 F8                  mov eax,dword ptr ss:[ebp-8]                 ;  loc_4D4B0F
004D4B12   |.  E8 EDF8F2FF             |call <unpack.sub_404404>
004D4B17   |.  83F8 08                 |cmp eax,8
004D4B1A   |.^ 7C E6                   \jl short <unpack.loc_4D4B02>
004D4B1C <>|>  33DB                    xor ebx,ebx                                   ;  loc_4D4B1C
004D4B1E   |.  8D45 DC                 lea eax,dword ptr ss:[ebp-24]
004D4B21 <>|>  8B55 F8                 /mov edx,dword ptr ss:[ebp-8]                 ;  取64位的金鑰
004D4B24   |.  8A141A                  |mov dl,byte ptr ds:[edx+ebx]
004D4B27   |.  8810                    |mov byte ptr ds:[eax],dl
004D4B29   |.  43                      |inc ebx
004D4B2A   |.  40                      |inc eax
004D4B2B   |.  83FB 08                 |cmp ebx,8
004D4B2E   |.^ 75 F1                   \jnz short <unpack.loc_4D4B21>
004D4B30   |.  6A 0F                   push 0F                                       ; /Arg1 = 0000000F
004D4B32   |.  B9 AC1D5400             mov ecx,unpack.00541DAC                       ; |
004D4B37   |.  8D45 DC                 lea eax,dword ptr ss:[ebp-24]                 ; |
004D4B3A   |.  BA 07000000             mov edx,7                                     ; |
004D4B3F   |.  E8 64F9FFFF             call <unpack.SetSubKey>                       ; \unpack.004D44A8
004D4B44   |.  8D45 D8                 lea eax,dword ptr ss:[ebp-28]
004D4B47   |.  E8 F8F5F2FF             call <unpack.sub_404144>
004D4B4C   |.  8B45 FC                 mov eax,dword ptr ss:[ebp-4]
004D4B4F   |.  E8 B0F8F2FF             call <unpack.sub_404404>
004D4B54   |.  85C0                    test eax,eax
004D4B56   |.  79 03                   jns short <unpack.loc_4D4B5B>
004D4B58   |.  83C0 07                 add eax,7
004D4B5B <>|>  C1F8 03                 sar eax,3                                     ;  loc_4D4B5B
004D4B5E   |.  48                      dec eax
004D4B5F   |.  85C0                    test eax,eax
004D4B61   |.  7C 7E                   jl short <unpack.loc_4D4BE1>
004D4B63   |.  40                      inc eax
004D4B64   |.  8945 D0                 mov dword ptr ss:[ebp-30],eax
004D4B67   |.  C745 D4 00000000        mov dword ptr ss:[ebp-2C],0
004D4B6E <>|>  33DB                    /xor ebx,ebx                                  ;  loc_4D4B6E
004D4B70   |.  8D45 EC                 |lea eax,dword ptr ss:[ebp-14]
004D4B73 <>|>  8B55 D4                 |/mov edx,dword ptr ss:[ebp-2C]               ;  loc_4D4B73
004D4B76   |.  C1E2 03                 ||shl edx,3
004D4B79   |.  03D3                    ||add edx,ebx
004D4B7B   |.  8B4D FC                 ||mov ecx,dword ptr ss:[ebp-4]                ;UN
004D4B7E   |.  8A1411                  ||mov dl,byte ptr ds:[ecx+edx]                ;分組
004D4B81   |.  8810                    ||mov byte ptr ds:[eax],dl
004D4B83   |.  43                      ||inc ebx
004D4B84   |.  40                      ||inc eax
004D4B85   |.  83FB 08                 ||cmp ebx,8
004D4B88   |.^ 75 E9                   |\jnz short <unpack.loc_4D4B73>
004D4B8A   |.  8D45 E4                 |lea eax,dword ptr ss:[ebp-1C]
004D4B8D   |.  50                      |push eax                                     ; /Arg2
004D4B8E   |.  6A 07                   |push 7                                       ; |Arg1 = 00000007
004D4B90   |.  8D55 EC                 |lea edx,dword ptr ss:[ebp-14]                ; |
004D4B93   |.  B9 07000000             |mov ecx,7                                    ; |
004D4B98   |.  B0 01                   |mov al,1                                     ; |
004D4B9A   |.  E8 61FBFFFF             |call <unpack.sub_4D4700>                     ; \unpack.004D4700
--------------------------------------------------------------------------------------------------
{
004D4700 <>/$  55                      push ebp                                      ;  sub_4D4700
004D4701   |.  8BEC                    mov ebp,esp
004D4703   |.  83C4 E8                 add esp,-18
004D4706   |.  53                      push ebx
004D4707   |.  56                      push esi
004D4708   |.  57                      push edi
004D4709   |.  8BD9                    mov ebx,ecx
004D470B   |.  85DB                    test ebx,ebx
004D470D   |.  78 0A                   js short <unpack.loc_4D4719>
004D470F   |.  C1EB 02                 shr ebx,2
004D4712 <>|>  8B349A                  /mov esi,dword ptr ds:[edx+ebx*4]             ;  loc_4D4712
004D4715   |.  4B                      |dec ebx
004D4716   |.  56                      |push esi
004D4717   |.^ 79 F9                   \jns short <unpack.loc_4D4712>
004D4719 <>|>  8BD4                    mov edx,esp                                   ;  loc_4D4719
004D471B   |.  8955 FC                 mov dword ptr ss:[ebp-4],edx
004D471E   |.  8BD8                    mov ebx,eax
004D4720   |.  C745 F8 08000000        mov dword ptr ss:[ebp-8],8
004D4727   |.  8B45 FC                 mov eax,dword ptr ss:[ebp-4]
004D472A   |.  8B4D 0C                 mov ecx,dword ptr ss:[ebp+C]
004D472D <>|>  8A10                    /mov dl,byte ptr ds:[eax]                     ;  loc_4D472D
004D472F   |.  8811                    |mov byte ptr ds:[ecx],dl
004D4731   |.  41                      |inc ecx
004D4732   |.  40                      |inc eax
004D4733   |.  FF4D F8                 |dec dword ptr ss:[ebp-8]
004D4736   |.^ 75 F5                   \jnz short <unpack.loc_4D472D>
004D4738   |.  8B45 0C                 mov eax,dword ptr ss:[ebp+C]
004D473B   |.  8B55 08                 mov edx,dword ptr ss:[ebp+8]
004D473E   |.  E8 81F9FFFF             call <unpack.IP_Table>
----------------------------------------------------------------------
{
004D40C4 <>/$  53                      push ebx                                      ;  IP_Table
004D40C5   |.  56                      push esi
004D40C6   |.  57                      push edi
004D40C7   |.  83C4 F8                 add esp,-8
004D40CA   |.  8BF0                    mov esi,eax
004D40CC   |.  8BC4                    mov eax,esp
004D40CE   |.  33C9                    xor ecx,ecx
004D40D0   |.  BA 08000000             mov edx,8
004D40D5   |.  E8 1AECF2FF             call <unpack.sub_402CF4>
004D40DA   |.  33D2                    xor edx,edx
004D40DC   |.  B8 CCE05300             mov eax,unpack.0053E0CC                        ;IP-Table
-----------------------------------------------------------------------               ;這是DES演算法中的標準IP置換
0053E0CC  39 31 29 21 19 11 09 01 3B 33 2B 23 1B 13 0B 03  91)!.;3+#
0053E0DC  3D 35 2D 25 1D 15 0D 05 3F 37 2F 27 1F 17 0F 07  =5-%.?7/'
0053E0EC  38 30 28 20 18 10 08 00 3A 32 2A 22 1A 12 0A 02  80( .:2*".
0053E0FC  3C 34 2C 24 1C 14 0C 04 3E 36 2E 26 1E 16 0E 06  <4,$.>6.&

--------------------------------------------------------------------------
004D40E1 <>|>  8A18                    /mov bl,byte ptr ds:[eax]                     ;  下面這段程式是ByteToBit
004D40E3   |.  8BCB                    |mov ecx,ebx                                  ; and BitToByte
004D40E5   |.  80E1 07                 |and cl,7
004D40E8   |.  81E1 FF000000           |and ecx,0FF
004D40EE   |.  51                      |push ecx
004D40EF   |.  B9 07000000             |mov ecx,7
004D40F4   |.  5F                      |pop edi
004D40F5   |.  2BCF                    |sub ecx,edi
004D40F7   |.  BF 01000000             |mov edi,1
004D40FC   |.  D3E7                    |shl edi,cl
004D40FE   |.  33C9                    |xor ecx,ecx
004D4100   |.  8ACB                    |mov cl,bl
004D4102   |.  C1E9 03                 |shr ecx,3
004D4105   |.  0FB60C0E                |movzx ecx,byte ptr ds:[esi+ecx]
004D4109   |.  23F9                    |and edi,ecx
004D410B   |.  74 1A                   |je short <unpack.loc_4D4127>
004D410D   |.  8BCA                    |mov ecx,edx
004D410F   |.  83E1 07                 |and ecx,7
004D4112   |.  51                      |push ecx
004D4113   |.  B9 07000000             |mov ecx,7
004D4118   |.  5B                      |pop ebx
004D4119   |.  2BCB                    |sub ecx,ebx
004D411B   |.  B3 01                   |mov bl,1
004D411D   |.  D2E3                    |shl bl,cl
004D411F   |.  8BCA                    |mov ecx,edx
004D4121   |.  C1E9 03                 |shr ecx,3
004D4124   |.  081C0C                  |or byte ptr ss:[esp+ecx],bl
004D4127 <>|>  42                      |inc edx                                      ;  loc_4D4127
004D4128   |.  40                      |inc eax
004D4129   |.  83FA 40                 |cmp edx,40
004D412C   |.^ 75 B3                   \jnz short <unpack.loc_4D40E1>
004D412E   |.  BA 08000000             mov edx,8
004D4133   |.  8BC4                    mov eax,esp
004D4135   |.  8BCE                    mov ecx,esi
004D4137 <>|>  8A18                    /mov bl,byte ptr ds:[eax]                     ;  loc_4D4137
004D4139   |.  8819                    |mov byte ptr ds:[ecx],bl
004D413B   |.  41                      |inc ecx
004D413C   |.  40                      |inc eax
004D413D   |.  4A                      |dec edx
004D413E   |.^ 75 F7                   \jnz short <unpack.loc_4D4137>
---------------------------------------------------------------------------
004D4140   |.  59                      pop ecx
004D4141   |.  5A                      pop edx
004D4142   |.  5F                      pop edi
004D4143   |.  5E                      pop esi
004D4144   |.  5B                      pop ebx
004D4145   \.  C3                      retn

}
------------------------------------------------------------------------------
004D4743   |.  84DB                    test bl,bl
004D4745   |.  0F85 B5000000           jnz <unpack.loc_4D4800>
004D474B   |.  C745 F8 10000000        mov dword ptr ss:[ebp-8],10
004D4752   |.  C745 EC AC1D5400        mov dword ptr ss:[ebp-14],unpack.00541DAC
004D4759 <>|>  B8 04000000             /mov eax,4                                    ;  loc_4D4759
004D475E   |.  8B55 0C                 |mov edx,dword ptr ss:[ebp+C]
004D4761   |.  8D75 F4                 |lea esi,dword ptr ss:[ebp-C]
004D4764 <>|>  8A0A                    |/mov cl,byte ptr ds:[edx]                    ;  loc_4D4764
004D4766   |.  880E                    ||mov byte ptr ds:[esi],cl
004D4768   |.  46                      ||inc esi
004D4769   |.  42                      ||inc edx
004D476A   |.  48                      ||dec eax
004D476B   |.^ 75 F7                   |\jnz short <unpack.loc_4D4764>
004D476D   |.  B8 04000000             |mov eax,4
004D4772   |.  8B55 0C                 |mov edx,dword ptr ss:[ebp+C]
004D4775   |.  83C2 04                 |add edx,4
004D4778 <>|>  8A0A                    |/mov cl,byte ptr ds:[edx]                    ;  loc_4D4778
004D477A   |.  884A FC                 ||mov byte ptr ds:[edx-4],cl
004D477D   |.  42                      ||inc edx
004D477E   |.  48                      ||dec eax
004D477F   |.^ 75 F7                   |\jnz short <unpack.loc_4D4778>
004D4781   |.  6A 05                   |push 5                                       ; /Arg3 = 00000005
004D4783   |.  8D45 F0                 |lea eax,dword ptr ss:[ebp-10]                ; |
004D4786   |.  50                      |push eax                                     ; |Arg2
004D4787   |.  6A 03                   |push 3                                       ; |Arg1 = 00000003
004D4789   |.  8B45 EC                 |mov eax,dword ptr ss:[ebp-14]                ; |
004D478C   |.  8BC8                    |mov ecx,eax                                  ; |
004D478E   |.  8B45 0C                 |mov eax,dword ptr ss:[ebp+C]                 ; |
004D4791   |.  8B55 08                 |mov edx,dword ptr ss:[ebp+8]                 ; |
004D4794   |.  E8 3FFEFFFF             |call <unpack.sub_4D45D8>                     ; \unpack.004D45D8
004D4799   |.  B8 04000000             |mov eax,4
004D479E   |.  8D55 F4                 |lea edx,dword ptr ss:[ebp-C]
004D47A1   |.  8D75 F0                 |lea esi,dword ptr ss:[ebp-10]
004D47A4   |.  8B4D 0C                 |mov ecx,dword ptr ss:[ebp+C]
004D47A7   |.  83C1 04                 |add ecx,4
004D47AA <>|>  8A1A                    |/mov bl,byte ptr ds:[edx]                    ;  loc_4D47AA
004D47AC   |.  321E                    ||xor bl,byte ptr ds:[esi]
004D47AE   |.  8819                    ||mov byte ptr ds:[ecx],bl
004D47B0   |.  41                      ||inc ecx
004D47B1   |.  46                      ||inc esi
004D47B2   |.  42                      ||inc edx
004D47B3   |.  48                      ||dec eax
004D47B4   |.^ 75 F4                   |\jnz short <unpack.loc_4D47AA>
004D47B6   |.  8345 EC 06              |add dword ptr ss:[ebp-14],6
004D47BA   |.  FF4D F8                 |dec dword ptr ss:[ebp-8]
004D47BD   |.^ 75 9A                   \jnz short <unpack.loc_4D4759>
004D47BF   |.  B8 04000000             mov eax,4
004D47C4   |.  8B55 0C                 mov edx,dword ptr ss:[ebp+C]
004D47C7   |.  83C2 04                 add edx,4
004D47CA   |.  8D4D F4                 lea ecx,dword ptr ss:[ebp-C]
004D47CD <>|>  8A1A                    /mov bl,byte ptr ds:[edx]                     ;  loc_4D47CD
004D47CF   |.  8819                    |mov byte ptr ds:[ecx],bl
004D47D1   |.  41                      |inc ecx
004D47D2   |.  42                      |inc edx
004D47D3   |.  48                      |dec eax
004D47D4   |.^ 75 F7                   \jnz short <unpack.loc_4D47CD>
004D47D6   |.  B8 04000000             mov eax,4
004D47DB   |.  8B55 0C                 mov edx,dword ptr ss:[ebp+C]
004D47DE <>|>  8A0A                    /mov cl,byte ptr ds:[edx]                     ;  loc_4D47DE
004D47E0   |.  884A 04                 |mov byte ptr ds:[edx+4],cl
004D47E3   |.  42                      |inc edx
004D47E4   |.  48                      |dec eax
004D47E5   |.^ 75 F7                   \jnz short <unpack.loc_4D47DE>
004D47E7   |.  B8 04000000             mov eax,4
004D47EC   |.  8D55 F4                 lea edx,dword ptr ss:[ebp-C]
004D47EF   |.  8B4D 0C                 mov ecx,dword ptr ss:[ebp+C]
004D47F2 <>|>  8A1A                    /mov bl,byte ptr ds:[edx]                     ;  loc_4D47F2
004D47F4   |.  8819                    |mov byte ptr ds:[ecx],bl
004D47F6   |.  41                      |inc ecx
004D47F7   |.  42                      |inc edx
004D47F8   |.  48                      |dec eax
004D47F9   |.^ 75 F7                   \jnz short <unpack.loc_4D47F2>
004D47FB   |.  E9 BB000000             jmp <unpack.loc_4D48BB>
004D4800 <>|>  80FB 01                 cmp bl,1                                      ;  loc_4D4800
004D4803   |.  0F85 B2000000           jnz <unpack.loc_4D48BB>
004D4809   |.  C745 F8 F0FFFFFF        mov dword ptr ss:[ebp-8],-10
004D4810   |.  BB 061E5400             mov ebx,unpack.00541E06
004D4815 <>|>  B8 04000000             /mov eax,4                                    ;  loc_4D4815
004D481A   |.  8B55 0C                 |mov edx,dword ptr ss:[ebp+C]
004D481D   |.  8D75 F4                 |lea esi,dword ptr ss:[ebp-C]                 ;這裡是對訊息進行分組,把64位的訊息分為L和R
004D4820 <>|>  8A0A                    |/mov cl,byte ptr ds:[edx]                    ;  分為R0和L0
004D4822   |.  880E                    ||mov byte ptr ds:[esi],cl                    ;  L0
004D4824   |.  46                      ||inc esi
004D4825   |.  42                      ||inc edx
004D4826   |.  48                      ||dec eax
004D4827   |.^ 75 F7                   |\jnz short <unpack.loc_4D4820>
004D4829   |.  B8 04000000             |mov eax,4
004D482E   |.  8B55 0C                 |mov edx,dword ptr ss:[ebp+C]
004D4831   |.  83C2 04                 |add edx,4
004D4834 <>|>  8A0A                    |/mov cl,byte ptr ds:[edx]                    ;  R0
004D4836   |.  884A FC                 ||mov byte ptr ds:[edx-4],cl
004D4839   |.  42                      ||inc edx
004D483A   |.  48                      ||dec eax
004D483B   |.^ 75 F7                   |\jnz short <unpack.loc_4D4834>
004D483D   |.  6A 05                   |push 5                                       ; /Arg3 = 00000005
004D483F   |.  8D45 F0                 |lea eax,dword ptr ss:[ebp-10]                ; |
004D4842   |.  50                      |push eax                                     ; |Arg2
004D4843   |.  6A 03                   |push 3                                       ; |Arg1 = 00000003
004D4845   |.  8BCB                    |mov ecx,ebx                                  ; |
004D4847   |.  8B45 0C                 |mov eax,dword ptr ss:[ebp+C]                 ; |
004D484A   |.  8B55 08                 |mov edx,dword ptr ss:[ebp+8]                 ; |
004D484D   |.  E8 86FDFFFF             |call <unpack.sub_4D45D8>                     ; \unpack.004D45D8
004D4852   |.  B8 04000000             |mov eax,4                                    ;F_Function DES中的F函式
----------------------------------------------------------------------------------------------
004D45D8 <>/$  55                      push ebp                                      ;  sub_4D45D8
004D45D9   |.  8BEC                    mov ebp,esp
004D45DB   |.  83C4 EC                 add esp,-14
004D45DE   |.  53                      push ebx
004D45DF   |.  56                      push esi
004D45E0   |.  8B5D 10                 mov ebx,dword ptr ss:[ebp+10]
004D45E3   |.  85DB                    test ebx,ebx
004D45E5   |.  78 0A                   js short <unpack.loc_4D45F1>
004D45E7   |.  C1EB 02                 shr ebx,2
004D45EA <>|>  8B3499                  /mov esi,dword ptr ds:[ecx+ebx*4]             ;  loc_4D45EA
004D45ED   |.  4B                      |dec ebx
004D45EE   |.  56                      |push esi
004D45EF   |.^ 79 F9                   \jns short <unpack.loc_4D45EA>
004D45F1 <>|>  8BCC                    mov ecx,esp                                   ;  loc_4D45F1
004D45F3   |.  8BDA                    mov ebx,edx
004D45F5   |.  85DB                    test ebx,ebx
004D45F7   |.  78 0A                   js short <unpack.loc_4D4603>
004D45F9   |.  C1EB 02                 shr ebx,2
004D45FC <>|>  8B3498                  /mov esi,dword ptr ds:[eax+ebx*4]             ;  loc_4D45FC
004D45FF   |.  4B                      |dec ebx
004D4600   |.  56                      |push esi
004D4601   |.^ 79 F9                   \jns short <unpack.loc_4D45FC>
004D4603 <>|>  8BC4                    mov eax,esp                                   ;  loc_4D4603
004D4605   |.  894D FC                 mov dword ptr ss:[ebp-4],ecx
004D4608   |.  6A 05                   push 5                                        ; /Arg1 = 00000005
004D460A   |.  8D4D F6                 lea ecx,dword ptr ss:[ebp-A]                  ; |
004D460D   |.  E8 BAFBFFFF             call <unpack.E_Table>                         ; \unpack.004D41CC
---------------------------------------------------------------------------------------------
F_function中的擴充套件置換E,把32位的R[i-1]擴充套件為48位
{
004D41CC <>/$  55                      push ebp                                      ;  E_Table
004D41CD   |.  8BEC                    mov ebp,esp
004D41CF   |.  83C4 F8                 add esp,-8
004D41D2   |.  53                      push ebx
004D41D3   |.  56                      push esi
004D41D4   |.  8BDA                    mov ebx,edx
004D41D6   |.  85DB                    test ebx,ebx
004D41D8   |.  78 0A                   js short <unpack.loc_4D41E4>
004D41DA   |.  C1EB 02                 shr ebx,2
004D41DD <>|>  8B3498                  /mov esi,dword ptr ds:[eax+ebx*4]             ;  loc_4D41DD
004D41E0   |.  4B                      |dec ebx
004D41E1   |.  56                      |push esi
004D41E2   |.^ 79 F9                   \jns short <unpack.loc_4D41DD>
004D41E4 <>|>  8BC4                    mov eax,esp                                   ;  loc_4D41E4
004D41E6   |.  894D F8                 mov dword ptr ss:[ebp-8],ecx
004D41E9   |.  8945 FC                 mov dword ptr ss:[ebp-4],eax
004D41EC   |.  8B45 F8                 mov eax,dword ptr ss:[ebp-8]
004D41EF   |.  33C9                    xor ecx,ecx
004D41F1   |.  BA 06000000             mov edx,6
004D41F6   |.  E8 F9EAF2FF             call <unpack.sub_402CF4>
004D41FB   |.  33D2                    xor edx,edx
004D41FD   |.  B8 4CE15300             mov eax,unpack.0053E14C
-----------------------------------------------------------------------------    ;Standard E_table
0053E14C  1F 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00  .............
0053E15C  03 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00  ............
0053E16C  05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00  ............
0053E17C  07 00 00 00 08 00 00 00 09 00 00 00 0A 00 00 00  ..............
0053E18C  0B 00 00 00 0C 00 00 00 0B 00 00 00 0C 00 00 00   ..............
0053E19C  0D 00 00 00 0E 00 00 00 0F 00 00 00 10 00 00 00  .............
0053E1AC  0F 00 00 00 10 00 00 00 11 00 00 00 12 00 00 00  ............
0053E1BC  13 00 00 00 14 00 00 00 13 00 00 00 14 00 00 00  ............
0053E1CC  15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00  ............
0053E1DC  17 00 00 00 18 00 00 00 19 00 00 00 1A 00 00 00  ............
0053E1EC  1B 00 00 00 1C 00 00 00 1B 00 00 00 1C 00 00 00  ............
0053E1FC  1D 00 00 00 1E 00 00 00 1F 00 00 00 00 00 00 00  .............

-------------------------------------------------------------------------------
004D4202 <>|>  8B18                    /mov ebx,dword ptr ds:[eax]                   ;  loc_4D4202
004D4204   |.  8BCB                    |mov ecx,ebx
004D4206   |.  83E1 07                 |and ecx,7
004D4209   |.  51                      |push ecx
004D420A   |.  B9 07000000             |mov ecx,7
004D420F   |.  5E                      |pop esi
004D4210   |.  2BCE                    |sub ecx,esi
004D4212   |.  BE 01000000             |mov esi,1
004D4217   |.  D3E6                    |shl esi,cl
004D4219   |.  C1EB 03                 |shr ebx,3
004D421C   |.  8B4D FC                 |mov ecx,dword ptr ss:[ebp-4]
004D421F   |.  0FB60C19                |movzx ecx,byte ptr ds:[ecx+ebx]
004D4223   |.  23F1                    |and esi,ecx
004D4225   |.  74 1D                   |je short <unpack.loc_4D4244>
004D4227   |.  8BCA                    |mov ecx,edx
004D4229   |.  83E1 07                 |and ecx,7
004D422C   |.  51                      |push ecx
004D422D   |.  B9 07000000             |mov ecx,7
004D4232   |.  5B                      |pop ebx
004D4233   |.  2BCB                    |sub ecx,ebx
004D4235   |.  B3 01                   |mov bl,1
004D4237   |.  D2E3                    |shl bl,cl
004D4239   |.  8BCA                    |mov ecx,edx
004D423B   |.  C1E9 03                 |shr ecx,3
004D423E   |.  8B75 F8                 |mov esi,dword ptr ss:[ebp-8]
004D4241   |.  081C0E                  |or byte ptr ds:[esi+ecx],bl
004D4244 <>|>  42                      |inc edx                                      ;  loc_4D4244
004D4245   |.  83C0 04                 |add eax,4
004D4248   |.  83FA 30                 |cmp edx,30
004D424B   |.^ 75 B5                   \jnz short <unpack.loc_4D4202>
004D424D   |.  8B75 F0                 mov esi,dword ptr ss:[ebp-10]
004D4250   |.  8B5D F4                 mov ebx,dword ptr ss:[ebp-C]
004D4253   |.  8BE5                    mov esp,ebp
004D4255   |.  5D                      pop ebp
004D4256   \.  C2 0400                 retn 4
}
---------------------------------------------------------------------------------
004D4612   |.  BB 06000000             mov ebx,6
004D4617   |.  8B45 FC                 mov eax,dword ptr ss:[ebp-4]                 ;48位的SubKey SubKey[15], 顯然這是在解密
004D461A   |.  8D55 F6                 lea edx,dword ptr ss:[ebp-A]                 ;經過E擴充套件置換得到的48位message
004D461D <>|>  8A08                    /mov cl,byte ptr ds:[eax]                    ;  loc_4D461D
004D461F   |.  300A                    |xor byte ptr ds:[edx],cl                    ; XOR
004D4621   |.  42                      |inc edx
004D4622   |.  40                      |inc eax
004D4623   |.  4B                      |dec ebx
004D4624   |.^ 75 F7                   \jnz short <unpack.loc_4D461D>
004D4626   |.  8A45 F6                 mov al,byte ptr ss:[ebp-A]
004D4629   |.  33D2                    xor edx,edx
004D462B   |.  8AD0                    mov dl,al
004D462D   |.  C1EA 02                 shr edx,2
004D4630   |.  8855 EE                 mov byte ptr ss:[ebp-12],dl
004D4633   |.  24 03                   and al,3
004D4635   |.  C1E0 04                 shl eax,4
004D4638   |.  8A55 F7                 mov dl,byte ptr ss:[ebp-9]
004D463B   |.  33C9                    xor ecx,ecx
004D463D   |.  8ACA                    mov cl,dl
004D463F   |.  C1E9 04                 shr ecx,4
004D4642   |.  0AC1                    or al,cl
004D4644   |.  8845 EF                 mov byte ptr ss:[ebp-11],al
004D4647   |.  80E2 0F                 and dl,0F
004D464A   |.  C1E2 02                 shl edx,2
004D464D   |.  8A45 F8                 mov al,byte ptr ss:[ebp-8]
004D4650   |.  33C9                    xor ecx,ecx
004D4652   |.  8AC8                    mov cl,al
004D4654   |.  C1E9 06                 shr ecx,6
004D4657   |.  0AD1                    or dl,cl
004D4659   |.  8855 F0                 mov byte ptr ss:[ebp-10],dl
004D465C   |.  24 3F                   and al,3F
004D465E   |.  8845 F1                 mov byte ptr ss:[ebp-F],al
004D4661   |.  8A45 F9                 mov al,byte ptr ss:[ebp-7]
004D4664   |.  33D2                    xor edx,edx
004D4666   |.  8AD0                    mov dl,al
004D4668   |.  C1EA 02                 shr edx,2
004D466B   |.  8855 F2                 mov byte ptr ss:[ebp-E],dl
004D466E   |.  24 03                   and al,3
004D4670   |.  C1E0 04                 shl eax,4
004D4673   |.  33D2                    xor edx,edx
004D4675   |.  8A55 FA                 mov dl,byte ptr ss:[ebp-6]
004D4678   |.  C1EA 04                 shr edx,4
004D467B   |.  0AC2                    or al,dl
004D467D   |.  8845 F3                 mov byte ptr ss:[ebp-D],al
004D4680   |.  8A45 FA                 mov al,byte ptr ss:[ebp-6]
004D4683   |.  24 0F                   and al,0F
004D4685   |.  C1E0 02                 shl eax,2
004D4688   |.  33D2                    xor edx,edx
004D468A   |.  8A55 FB                 mov dl,byte ptr ss:[ebp-5]
004D468D   |.  C1EA 06                 shr edx,6
004D4690   |.  0AC2                    or al,dl
004D4692   |.  8845 F4                 mov byte ptr ss:[ebp-C],al
004D4695   |.  8A45 FB                 mov al,byte ptr ss:[ebp-5]
004D4698   |.  24 3F                   and al,3F
004D469A   |.  8845 F5                 mov byte ptr ss:[ebp-B],al
004D469D   |.  33DB                    xor ebx,ebx
004D469F   |.  8D75 EE                 lea esi,dword ptr ss:[ebp-12]
004D46A2 <>|>  8BC3                    /mov eax,ebx                                  ;  loc_4D46A2
004D46A4   |.  8A16                    |mov dl,byte ptr ds:[esi]
004D46A6   |.  E8 31FCFFFF             |call <unpack.sub_4D42DC>                     ;S_box
-------------------------------------------------------------------------------------------
004D42DC <>/$  53                      push ebx                                      ;  sub_4D42DC
004D42DD   |.  8BCA                    mov ecx,edx
004D42DF   |.  80E1 20                 and cl,20
004D42E2   |.  8BDA                    mov ebx,edx
004D42E4   |.  80E3 1E                 and bl,1E
004D42E7   |.  81E3 FF000000           and ebx,0FF
004D42ED   |.  D1EB                    shr ebx,1
004D42EF   |.  0ACB                    or cl,bl
004D42F1   |.  80E2 01                 and dl,1
004D42F4   |.  C1E2 04                 shl edx,4
004D42F7   |.  0ACA                    or cl,dl
004D42F9   |.  8BD1                    mov edx,ecx
004D42FB   |.  81E2 FF000000           and edx,0FF
004D4301   |.  25 FF000000             and eax,0FF
004D4306   |.  C1E0 03                 shl eax,3
004D4309   |.  8D04C5 2CE25300         lea eax,dword ptr ds:[eax*8+53E22C] ;DES中的S-box,沒有變化
-----------------------------------------------------------------------
0053E22C  0E 04 0D 01 02 0F 0B 08 03 0A 06 0C 05 09 00 07  . ....
0053E23C  00 0F 07 04 0E 02 0D 01 0A 06 0C 0B 09 05 03 08  .... .
0053E24C  04 01 0E 08 0D 06 02 0B 0F 0C 09 07 03 0A 05 00  . ....
0053E25C  0F 0C 08 02 04 09 01 07 05 0B 03 0E 0A 00 06 0D  .. ...
0053E26C  0F 01 08 0E 06 0B 03 04 09 07 02 0D 0C 00 05 0A   .....
0053E27C  03 0D 04 07 0F 02 08 0E 0C 00 01 0A 06 09 0B 05  .....
0053E28C  00 0E 07 0B 0A 04 0D 01 05 08 0C 06 09 03 02 0F  . ....
0053E29C  0D 08 0A 01 03 0F 04 02 0B 06 07 0C 00 05 0E 09  .. ...
0053E2AC  0A 00 09 0E 06 03 0F 05 01 0D 0C 07 0B 04 02 08  .....
0053E2BC  0D 07 00 09 03 04 06 0A 02 08 05 0E 0C 0B 0F 01  .....
0053E2CC  0D 06 04 09 08 0F 03 00 0B 01 02 0C 05 0A 0E 07  ... ..
0053E2DC  01 0A 0D 00 06 09 08 07 04 0F 0E 03 0B 05 02 0C  .... .
0053E2EC  07 0D 0E 03 00 06 09 0A 01 02 08 05 0B 0C 04 0F  .... .
0053E2FC  0D 08 0B 05 06 0F 00 03 04 07 02 0C 01 0A 0E 09  . ....
0053E30C  0A 06 09 00 0C 0B 07 0D 0F 01 03 0E 05 02 08 04  .... .
0053E31C  03 0F 00 06 0A 01 0D 08 09 04 05 0B 0C 07 02 0E  .... .
0053E32C  02 0C 04 01 07 0A 0B 06 08 05 03 0F 0D 00 0E 09  .. ...
0053E33C  0E 0B 02 0C 04 07 0D 01 05 00 0F 0A 03 09 08 06   .....
0053E34C  04 02 01 0B 0A 0D 07 08 0F 09 0C 05 06 03 00 0E   .....
0053E35C  0B 08 0C 07 01 0E 02 0D 06 0F 00 09 0A 04 05 03   .....
0053E36C  0C 01 0A 0F 09 02 06 08 00 0D 03 04 0E 07 05 0B  .....
0053E37C  0A 0F 04 02 07 0C 09 05 06 01 0D 0E 00 0B 03 08  .....
0053E38C  09 0E 0F 05 02 08 0C 03 07 00 04 0A 01 0D 0B 06  .....
0053E39C  04 03 02 0C 09 05 0F 0A 0B 0E 01 07 06 00 08 0D  ... ..
0053E3AC  04 0B 02 0E 0F 00 08 0D 03 0C 09 07 05 0A 06 01   .....
0053E3BC  0D 00 0B 07 04 09 01 0A 0E 03 05 0C 02 0F 08 06  .. ...
0053E3CC  01 04 0B 0D 0C 03 07 0E 0A 0F 06 08 00 05 09 02   .....
0053E3DC  06 0B 0D 08 01 04 0A 07 09 05 00 0F 0E 02 03 0C   .....
0053E3EC  0D 02 08 04 06 0F 0B 01 0A 09 03 0E 05 00 0C 07  . ....
0053E3FC  01 0F 0D 08 0A 03 07 04 0C 05 06 0B 00 0E 09 02  ... ..
0053E40C  07 0B 04 01 09 0C 0E 02 00 06 0A 0D 0F 03 05 08   .....
0053E41C  02 01 0E 07 04 0A 08 0D 0F 0C 09 00 03 05 06 0B  .....
0053E42C  38 30 28 20 18 10 08 00 39 31 29 21 19 11 09 01  80( .91)!.
0053E43C  3A 32 2A 22 1A 12 0A 02 3B 33 2B 23 3E 36 2E 26  :2*".;3+#>6.&
0053E44C  1E 16 0E 06 3D 35 2D 25 1D 15 0D 05 3C 34 2C 24  =5-%.<4,$
0053E45C  1C 14 0C 04 1B 13 0B 03 0D 10 0A 17 00 04 02 1B  . ...
0053E46C  0E 05 14 09 16 12 0B 03 19 07 0F 06 1A 13 0C 01  . .
0053E47C  28 33 1E 24 2E 36 1D 27 32 2C 20 2F 2B 30 26 37  (3$.6'2, /+0&7
0053E48C  21 34 2D 29 31 23 1C 1F 01 01 02 02 02 02 02 02  !4-)1#
0053E49C  01 02 02 02 02 02 02 01 80 00 00 00 00 00 00 00  .......

-----------------------------------------------------------------------------------
004D4310   |.  8A0410                  mov al,byte ptr ds:[eax+edx]
004D4313   |.  24 0F                   and al,0F
004D4315   |.  5B                      pop ebx
004D4316   \.  C3                      retn

------------------------------------------------------------------------------------
004D46AB   |.  8806                    |mov byte ptr ds:[esi],al
004D46AD   |.  43                      |inc ebx
004D46AE   |.  46                      |inc esi
004D46AF   |.  83FB 08                 |cmp ebx,8
004D46B2   |.^ 75 EE                   \jnz short <unpack.loc_4D46A2>
004D46B4   |.  BB 04000000             mov ebx,4
004D46B9   |.  8D45 EE                 lea eax,dword ptr ss:[ebp-12]
004D46BC   |.  8D55 F6                 lea edx,dword ptr ss:[ebp-A]
004D46BF <>|>  8A08                    /mov cl,byte ptr ds:[eax]                     ;  loc_4D46BF
004D46C1   |.  C1E1 04                 |shl ecx,4
004D46C4   |.  0A48 01                 |or cl,byte ptr ds:[eax+1]
004D46C7   |.  880A                    |mov byte ptr ds:[edx],cl
004D46C9   |.  42                      |inc edx
004D46CA   |.  83C0 02                 |add eax,2
004D46CD   |.  4B                      |dec ebx
004D46CE   |.^ 75 EF                   \jnz short <unpack.loc_4D46BF>
004D46D0   |.  8D45 F6                 lea eax,dword ptr ss:[ebp-A]
004D46D3   |.  BA 05000000             mov edx,5
004D46D8   |.  E8 7FFBFFFF             call <unpack.P_Function>               ;F函式中的P置換
----------------------------------------------------------------------
004D425C <>/$  53                      push ebx                                      ;  P_Function
004D425D   |.  56                      push esi
004D425E   |.  57                      push edi
004D425F   |.  51                      push ecx
004D4260   |.  8BF0                    mov esi,eax
004D4262   |.  8BC4                    mov eax,esp
004D4264   |.  33C9                    xor ecx,ecx
004D4266   |.  BA 04000000             mov edx,4
004D426B   |.  E8 84EAF2FF             call <unpack.sub_402CF4>
004D4270   |.  33D2                    xor edx,edx
004D4272   |.  B8 0CE25300             mov eax,unpack.0053E20C
004D4277 <>|>  8A18                    /mov bl,byte ptr ds:[eax]                     ;  loc_4D4277
004D4279   |.  8BCB                    |mov ecx,ebx
004D427B   |.  80E1 07                 |and cl,7
004D427E   |.  81E1 FF000000           |and ecx,0FF
004D4284   |.  51                      |push ecx
004D4285   |.  B9 07000000             |mov ecx,7
004D428A   |.  5F                      |pop edi
004D428B   |.  2BCF                    |sub ecx,edi
004D428D   |.  BF 01000000             |mov edi,1
004D4292   |.  D3E7                    |shl edi,cl
004D4294   |.  33C9                    |xor ecx,ecx
004D4296   |.  8ACB                    |mov cl,bl
004D4298   |.  C1E9 03                 |shr ecx,3
004D429B   |.  0FB60C0E                |movzx ecx,byte ptr ds:[esi+ecx]
004D429F   |.  23F9                    |and edi,ecx
004D42A1   |.  74 1A                   |je short <unpack.loc_4D42BD>
004D42A3   |.  8BCA                    |mov ecx,edx
004D42A5   |.  83E1 07                 |and ecx,7
004D42A8   |.  51                      |push ecx
004D42A9   |.  B9 07000000             |mov ecx,7
004D42AE   |.  5B                      |pop ebx
004D42AF   |.  2BCB                    |sub ecx,ebx
004D42B1   |.  B3 01                   |mov bl,1
004D42B3   |.  D2E3                    |shl bl,cl
004D42B5   |.  8BCA                    |mov ecx,edx
004D42B7   |.  C1E9 03                 |shr ecx,3
004D42BA   |.  081C0C                  |or byte ptr ss:[esp+ecx],bl
004D42BD <>|>  42                      |inc edx                                      ;  loc_4D42BD
004D42BE   |.  40                      |inc eax
004D42BF   |.  83FA 20                 |cmp edx,20
004D42C2   |.^ 75 B3                   \jnz short <unpack.loc_4D4277>
004D42C4   |.  BA 04000000             mov edx,4
004D42C9   |.  8BC4                    mov eax,esp
004D42CB   |.  8BCE                    mov ecx,esi
004D42CD <>|>  8A18                    /mov bl,byte ptr ds:[eax]                     ;  經過P置換後得到的32位message
004D42CF   |.  8819                    |mov byte ptr ds:[ecx],bl
004D42D1   |.  41                      |inc ecx
004D42D2   |.  40                      |inc eax
004D42D3   |.  4A                      |dec edx
004D42D4   |.^ 75 F7                   \jnz short <unpack.loc_4D42CD>
004D42D6   |.  5A                      pop edx
004D42D7   |.  5F                      pop edi
004D42D8   |.  5E                      pop esi
004D42D9   |.  5B                      pop ebx
004D42DA   \.  C3                      retn

------------------------------------------------------------------------------------
004D46DD   |.  BB 04000000             mov ebx,4
004D46E2   |.  8D45 F6                 lea eax,dword ptr ss:[ebp-A]
004D46E5   |.  8B55 0C                 mov edx,dword ptr ss:[ebp+C]                  ;最後把F函式的結果放在這裡
004D46E8 <>|>  8A08                    /mov cl,byte ptr ds:[eax]                     ; 
004D46EA   |.  880A                    |mov byte ptr ds:[edx],cl
004D46EC   |.  42                      |inc edx
004D46ED   |.  40                      |inc eax
004D46EE   |.  4B                      |dec ebx
004D46EF   |.^ 75 F7                   \jnz short <unpack.loc_4D46E8>
004D46F1   |.  8B75 E4                 mov esi,dword ptr ss:[ebp-1C]
004D46F4   |.  8B5D E8                 mov ebx,dword ptr ss:[ebp-18]
004D46F7   |.  8BE5                    mov esp,ebp
004D46F9   |.  5D                      pop ebp
004D46FA   \.  C2 0C00                 retn 0C

---------------------------------------------------------------------------------------------
004D4857   |.  8D55 F4                 |lea edx,dword ptr ss:[ebp-C]                 ;L[i-1]
004D485A   |.  8D75 F0                 |lea esi,dword ptr ss:[ebp-10]                ;F函式的結果
004D485D   |.  8B4D 0C                 |mov ecx,dword ptr ss:[ebp+C]
004D4860   |.  83C1 04                 |add ecx,4
004D4863   |.  894D E8                 |mov dword ptr ss:[ebp-18],ecx
004D4866 <>|>  8A0A                    |/mov cl,byte ptr ds:[edx]                    ;  R[i]=L[i-1]^F(R[i-1],K[15-i]);
004D4868   |.  320E                    ||xor cl,byte ptr ds:[esi]
004D486A   |.  8B7D E8                 ||mov edi,dword ptr ss:[ebp-18]
004D486D   |.  880F                    ||mov byte ptr ds:[edi],cl                    ;R[i]
004D486F   |.  FF45 E8                 ||inc dword ptr ss:[ebp-18]
004D4872   |.  46                      ||inc esi
004D4873   |.  42                      ||inc edx
004D4874   |.  48                      ||dec eax
004D4875   |.^ 75 EF                   |\jnz short <unpack.loc_4D4866>
004D4877   |.  83EB 06                 |sub ebx,6                                    ;子金鑰
004D487A   |.  FF45 F8                 |inc dword ptr ss:[ebp-8]
004D487D   |.^ 75 96                   \jnz short <unpack.loc_4D4815>
004D487F   |.  B8 04000000             mov eax,4
004D4884   |.  8B55 0C                 mov edx,dword ptr ss:[ebp+C]
004D4887   |.  83C2 04                 add edx,4
004D488A   |.  8D5D F4                 lea ebx,dword ptr ss:[ebp-C]
004D488D <>|>  8A0A                    /mov cl,byte ptr ds:[edx]                     ;  R[15]
004D488F   |.  880B                    |mov byte ptr ds:[ebx],cl
004D4891   |.  43                      |inc ebx
004D4892   |.  42                      |inc edx
004D4893   |.  48                      |dec eax
004D4894   |.^ 75 F7                   \jnz short <unpack.loc_4D488D>
004D4896   |.  B8 04000000             mov eax,4
004D489B   |.  8B5D 0C                 mov ebx,dword ptr ss:[ebp+C]
004D489E <>|>  8A13                    /mov dl,byte ptr ds:[ebx]                     ;  L[15]
004D48A0   |.  8853 04                 |mov byte ptr ds:[ebx+4],dl
004D48A3   |.  43                      |inc ebx
004D48A4   |.  48                      |dec eax
004D48A5   |.^ 75 F7                   \jnz short <unpack.loc_4D489E>
004D48A7   |.  B8 04000000             mov eax,4
004D48AC   |.  8D5D F4                 lea ebx,dword ptr ss:[ebp-C]
004D48AF   |.  8B55 0C                 mov edx,dword ptr ss:[ebp+C]
004D48B2 <>|>  8A0B                    /mov cl,byte ptr ds:[ebx]                     ;  loc_4D48B2
004D48B4   |.  880A                    |mov byte ptr ds:[edx],cl
004D48B6   |.  42                      |inc edx
004D48B7   |.  43                      |inc ebx
004D48B8   |.  48                      |dec eax
004D48B9   |.^ 75 F7                   \jnz short <unpack.loc_4D48B2>
004D48BB <>|>  8B45 0C                 mov eax,dword ptr ss:[ebp+C]                  ;  這是經過主迴圈後得到的
004D48BE   |.  8B55 08                 mov edx,dword ptr ss:[ebp+8]
004D48C1   |.  E8 82F8FFFF             call <unpack.IPR_Table>
-------------------------------------------------------------------------------------
這是IP Reverse,即IP逆置換
004D4148 <>/$  53                      push ebx                                      ;  IPR_Table
004D4149   |.  56                      push esi
004D414A   |.  57                      push edi
004D414B   |.  83C4 F8                 add esp,-8
004D414E   |.  8BF0                    mov esi,eax
004D4150   |.  8BC4                    mov eax,esp
004D4152   |.  33C9                    xor ecx,ecx
004D4154   |.  BA 08000000             mov edx,8
004D4159   |.  E8 96EBF2FF             call <unpack.sub_402CF4>
004D415E   |.  33D2                    xor edx,edx
004D4160   |.  B8 0CE15300             mov eax,unpack.0053E10C
004D4165 <>|>  8A18                    /mov bl,byte ptr ds:[eax]                     ;  loc_4D4165
004D4167   |.  8BCB                    |mov ecx,ebx
004D4169   |.  80E1 07                 |and cl,7
004D416C   |.  81E1 FF000000           |and ecx,0FF
004D4172   |.  51                      |push ecx
004D4173   |.  B9 07000000             |mov ecx,7
004D4178   |.  5F                      |pop edi
004D4179   |.  2BCF                    |sub ecx,edi
004D417B   |.  BF 01000000             |mov edi,1
004D4180   |.  D3E7                    |shl edi,cl
004D4182   |.  33C9                    |xor ecx,ecx
004D4184   |.  8ACB                    |mov cl,bl
004D4186   |.  C1E9 03                 |shr ecx,3
004D4189   |.  0FB60C0E                |movzx ecx,byte ptr ds:[esi+ecx]
004D418D   |.  23F9                    |and edi,ecx
004D418F   |.  74 1A                   |je short <unpack.loc_4D41AB>
004D4191   |.  8BCA                    |mov ecx,edx
004D4193   |.  83E1 07                 |and ecx,7
004D4196   |.  51                      |push ecx
004D4197   |.  B9 07000000             |mov ecx,7
004D419C   |.  5B                      |pop ebx
004D419D   |.  2BCB                    |sub ecx,ebx
004D419F   |.  B3 01                   |mov bl,1
004D41A1   |.  D2E3                    |shl bl,cl
004D41A3   |.  8BCA                    |mov ecx,edx
004D41A5   |.  C1E9 03                 |shr ecx,3
004D41A8   |.  081C0C                  |or byte ptr ss:[esp+ecx],bl
004D41AB <>|>  42                      |inc edx                                      ;  loc_4D41AB
004D41AC   |.  40                      |inc eax
004D41AD   |.  83FA 40                 |cmp edx,40
004D41B0   |.^ 75 B3                   \jnz short <unpack.loc_4D4165>
004D41B2   |.  BA 08000000             mov edx,8
004D41B7   |.  8BC4                    mov eax,esp
004D41B9   |.  8BCE                    mov ecx,esi
004D41BB <>|>  8A18                    /mov bl,byte ptr ds:[eax]                     ;  loc_4D41BB
004D41BD   |.  8819                    |mov byte ptr ds:[ecx],bl
004D41BF   |.  41                      |inc ecx
004D41C0   |.  40                      |inc eax
004D41C1   |.  4A                      |dec edx
004D41C2   |.^ 75 F7                   \jnz short <unpack.loc_4D41BB>
004D41C4   |.  59                      pop ecx
004D41C5   |.  5A                      pop edx
004D41C6   |.  5F                      pop edi
004D41C7   |.  5E                      pop esi
004D41C8   |.  5B                      pop ebx
004D41C9   \.  C3                      retn

---------------------------------------------------------------------------------
004D48C6   |.  8B7D DC                 mov edi,dword ptr ss:[ebp-24]
004D48C9   |.  8B75 E0                 mov esi,dword ptr ss:[ebp-20]
004D48CC   |.  8B5D E4                 mov ebx,dword ptr ss:[ebp-1C]
004D48CF   |.  8BE5                    mov esp,ebp
004D48D1   |.  5D                      pop ebp
004D48D2   \.  C2 0800                 retn 8

}
-----------------------------------------------------------------------------
004D4B9F   |.  BB 08000000             |mov ebx,8
004D4BA4   |.  8D75 E4                 |lea esi,dword ptr ss:[ebp-1C]          ;這裡是解密的結果
004D4BA7 <>|>  8D45 CC                 |/lea eax,dword ptr ss:[ebp-34]               ;  loc_4D4BA7
004D4BAA   |.  8A16                    ||mov dl,byte ptr ds:[esi]
004D4BAC   |.  E8 7BF7F2FF             ||call <unpack.sub_40432C>
004D4BB1   |.  8B55 CC                 ||mov edx,dword ptr ss:[ebp-34]
004D4BB4   |.  8D45 D8                 ||lea eax,dword ptr ss:[ebp-28]
004D4BB7   |.  E8 50F8F2FF             ||call <unpack.sub_40440C>
004D4BBC   |.  46                      ||inc esi
004D4BBD   |.  4B                      ||dec ebx
004D4BBE   |.^ 75 E7                   |\jnz short <unpack.loc_4D4BA7>
004D4BC0   |.  FF45 D4                 |inc dword ptr ss:[ebp-2C]
004D4BC3   |.  FF4D D0                 |dec dword ptr ss:[ebp-30]
004D4BC6   |.^ 75 A6                   \jnz short <unpack.loc_4D4B6E>
004D4BC8   |.  EB 17                   jmp short <unpack.loc_4D4BE1>
004D4BCA <>|>  8B45 D8                 /mov eax,dword ptr ss:[ebp-28]                ;  loc_4D4BCA
004D4BCD   |.  E8 32F8F2FF             |call <unpack.sub_404404>
004D4BD2   |.  8BD0                    |mov edx,eax
004D4BD4   |.  8D45 D8                 |lea eax,dword ptr ss:[ebp-28]
004D4BD7   |.  B9 01000000             |mov ecx,1
004D4BDC   |.  E8 C3FAF2FF             |call <unpack.sub_4046A4>
004D4BE1 <>|>  8B45 D8                  mov eax,dword ptr ss:[ebp-28]                ;  解密得到的假碼
004D4BE4   |.  E8 1BF8F2FF             |call <unpack.sub_404404>
004D4BE9   |.  85C0                    |test eax,eax
004D4BEB   |.  7E 12                   |jle short <unpack.loc_4D4BFF>
004D4BED   |.  8B45 D8                 |mov eax,dword ptr ss:[ebp-28]
004D4BF0   |.  E8 0FF8F2FF             |call <unpack.sub_404404>
004D4BF5   |.  8B55 D8                 |mov edx,dword ptr ss:[ebp-28]
004D4BF8   |.  807C02 FF 00            |cmp byte ptr ds:[edx+eax-1],0
004D4BFD   |.^ 74 CB                   \je short <unpack.loc_4D4BCA>
004D4BFF <>|>  8B45 F4                 mov eax,dword ptr ss:[ebp-C]                  ;  
004D4C02   |.  8B55 D8                 mov edx,dword ptr ss:[ebp-28]                 ;
004D4C05   |.  E8 8EF5F2FF             call <unpack.sub_404198>
004D4C0A   |.  33C0                    xor eax,eax
004D4C0C   |.  5A                      pop edx
004D4C0D   |.  59                      pop ecx
004D4C0E   |.  59                      pop ecx
004D4C0F   |.  64:8910                 mov dword ptr fs:[eax],edx
004D4C12   |.  68 3C4C4D00             push <unpack.loc_4D4C3C>
004D4C17 <>|>  8D45 CC                 lea eax,dword ptr ss:[ebp-34]                 ;  loc_4D4C17
004D4C1A   |.  E8 25F5F2FF             call <unpack.sub_404144>
004D4C1F   |.  8D45 D8                 lea eax,dword ptr ss:[ebp-28]
004D4C22   |.  E8 1DF5F2FF             call <unpack.sub_404144>
004D4C27   |.  8D45 F8                 lea eax,dword ptr ss:[ebp-8]
004D4C2A   |.  BA 02000000             mov edx,2
004D4C2F   |.  E8 34F5F2FF             call <unpack.sub_404168>
004D4C34   \.  C3                      retn

}

下面是子金鑰的生成過程
004D4318 <>/$  55                      push ebp                                      ;  sub_4D4318
004D4319   |.  8BEC                    mov ebp,esp
004D431B   |.  83C4 F8                 add esp,-8
004D431E   |.  53                      push ebx
004D431F   |.  56                      push esi
004D4320   |.  8BDA                    mov ebx,edx
004D4322   |.  85DB                    test ebx,ebx
004D4324   |.  78 0A                   js short <unpack.loc_4D4330>
004D4326   |.  C1EB 02                 shr ebx,2
004D4329 <>|>  8B3498                  /mov esi,dword ptr ds:[eax+ebx*4]             ;  金鑰"Security"
004D432C   |.  4B                      |dec ebx
004D432D   |.  56                      |push esi
004D432E   |.^ 79 F9                   \jns short <unpack.loc_4D4329>
004D4330 <>|>  8BC4                    mov eax,esp                                   ;  loc_4D4330
004D4332   |.  894D F8                 mov dword ptr ss:[ebp-8],ecx
004D4335   |.  8945 FC                 mov dword ptr ss:[ebp-4],eax
004D4338   |.  8B45 F8                 mov eax,dword ptr ss:[ebp-8]
004D433B   |.  33C9                    xor ecx,ecx
004D433D   |.  BA 07000000             mov edx,7
004D4342   |.  E8 ADE9F2FF             call <unpack.sub_402CF4>
004D4347   |.  33D2                    xor edx,edx
004D4349   |.  B8 2CE45300             mov eax,unpack.0053E42C               ;金鑰生成中的PC-1
------------------------------------------------------------------------------
0053E42C  38 30 28 20 18 10 08 00 39 31 29 21 19 11 09 01  80( .91)!.
0053E43C  3A 32 2A 22 1A 12 0A 02 3B 33 2B 23 3E 36 2E 26  :2*".;3+#>6.&
0053E44C  1E 16 0E 06 3D 35 2D 25 1D 15 0D 05 3C 34 2C 24  =5-%.<4,$
0053E45C  1C 14 0C 04 1B 13 0B 03 0D 10 0A 17 00 04 02 1B  . ...
0053E46C  0E 05 14 09 16 12 0B 03 19 07 0F 06 1A 13 0C 01  . .

----------------------------------------------------------------------------------
004D434E <>|>  8A18                    /mov bl,byte ptr ds:[eax]                     ;  loc_4D434E
004D4350   |.  8BCB                    |mov ecx,ebx
004D4352   |.  80E1 07                 |and cl,7
004D4355   |.  81E1 FF000000           |and ecx,0FF
004D435B   |.  51                      |push ecx
004D435C   |.  B9 07000000             |mov ecx,7
004D4361   |.  5E                      |pop esi
004D4362   |.  2BCE                    |sub ecx,esi
004D4364   |.  BE 01000000             |mov esi,1
004D4369   |.  D3E6                    |shl esi,cl
004D436B   |.  33C9                    |xor ecx,ecx
004D436D   |.  8ACB                    |mov cl,bl
004D436F   |.  C1E9 03                 |shr ecx,3
004D4372   |.  8B5D FC                 |mov ebx,dword ptr ss:[ebp-4]
004D4375   |.  0FB60C0B                |movzx ecx,byte ptr ds:[ebx+ecx]
004D4379   |.  23F1                    |and esi,ecx
004D437B   |.  74 1D                   |je short <unpack.loc_4D439A>
004D437D   |.  8BCA                    |mov ecx,edx
004D437F   |.  83E1 07                 |and ecx,7
004D4382   |.  51                      |push ecx
004D4383   |.  B9 07000000             |mov ecx,7
004D4388   |.  5B                      |pop ebx
004D4389   |.  2BCB                    |sub ecx,ebx
004D438B   |.  B3 01                   |mov bl,1
004D438D   |.  D2E3                    |shl bl,cl
004D438F   |.  8BCA                    |mov ecx,edx
004D4391   |.  C1E9 03                 |shr ecx,3
004D4394   |.  8B75 F8                 |mov esi,dword ptr ss:[ebp-8]
004D4397   |.  081C0E                  |or byte ptr ds:[esi+ecx],bl
004D439A <>|>  42                      |inc edx                                      ;  loc_4D439A
004D439B   |.  40                      |inc eax
004D439C   |.  83FA 38                 |cmp edx,38
004D439F   |.^ 75 AD                   \jnz short <unpack.loc_4D434E>
004D43A1   |.  8B75 F0                 mov esi,dword ptr ss:[ebp-10]
004D43A4   |.  8B5D F4                 mov ebx,dword ptr ss:[ebp-C]
004D43A7   |.  8BE5                    mov esp,ebp
004D43A9   |.  5D                      pop ebp
004D43AA   \.  C2 0400                 retn 4
{
004D452C   |.  BF 10000000             mov edi,10
004D4531   |.  BB 94E45300             mov ebx,unpack.0053E494
004D4536   |.  8B75 FC                 mov esi,dword ptr ss:[ebp-4]                  ;  offset SubKey
004D4539 <>|>  8D45 F1                 /lea eax,dword ptr ss:[ebp-F]                 ;  loc_4D4539
004D453C   |.  8A0B                    |mov cl,byte ptr ds:[ebx]
004D453E   |.  BA 03000000             |mov edx,3
004D4543   |.  E8 00FFFFFF             |call <unpack.sub_4D4448>
004D4548   |.  8D45 ED                 |lea eax,dword ptr ss:[ebp-13]
004D454B   |.  8A0B                    |mov cl,byte ptr ds:[ebx]
004D454D   |.  BA 03000000             |mov edx,3
004D4552   |.  E8 F1FEFFFF             |call <unpack.sub_4D4448>
004D4557   |.  8A55 F1                 |mov dl,byte ptr ss:[ebp-F]
004D455A   |.  C1E2 04                 |shl edx,4
004D455D   |.  8A45 F2                 |mov al,byte ptr ss:[ebp-E]
004D4560   |.  33C9                    |xor ecx,ecx
004D4562   |.  8AC8                    |mov cl,al
004D4564   |.  C1E9 04                 |shr ecx,4
004D4567   |.  0AD1                    |or dl,cl
004D4569   |.  8855 E6                 |mov byte ptr ss:[ebp-1A],dl
004D456C   |.  C1E0 04                 |shl eax,4
004D456F   |.  33D2                    |xor edx,edx
004D4571   |.  8A55 F3                 |mov dl,byte ptr ss:[ebp-D]
004D4574   |.  C1EA 04                 |shr edx,4
004D4577   |.  0AC2                    |or al,dl
004D4579   |.  8845 E7                 |mov byte ptr ss:[ebp-19],al
004D457C   |.  8A55 F3                 |mov dl,byte ptr ss:[ebp-D]
004D457F   |.  C1E2 04                 |shl edx,4
004D4582   |.  8A45 F4                 |mov al,byte ptr ss:[ebp-C]
004D4585   |.  33C9                    |xor ecx,ecx
004D4587   |.  8AC8                    |mov cl,al
004D4589   |.  C1E9 04                 |shr ecx,4
004D458C   |.  0AD1                    |or dl,cl
004D458E   |.  8855 E8                 |mov byte ptr ss:[ebp-18],dl
004D4591   |.  C1E0 04                 |shl eax,4
004D4594   |.  0A45 ED                 |or al,byte ptr ss:[ebp-13]
004D4597   |.  8845 E9                 |mov byte ptr ss:[ebp-17],al
004D459A   |.  8A45 EE                 |mov al,byte ptr ss:[ebp-12]
004D459D   |.  8845 EA                 |mov byte ptr ss:[ebp-16],al
004D45A0   |.  8A45 EF                 |mov al,byte ptr ss:[ebp-11]
004D45A3   |.  8845 EB                 |mov byte ptr ss:[ebp-15],al
004D45A6   |.  8A45 F0                 |mov al,byte ptr ss:[ebp-10]
004D45A9   |.  8845 EC                 |mov byte ptr ss:[ebp-14],al
004D45AC   |.  6A 05                   |push 5                                       ; /Arg1 = 00000005
004D45AE   |.  8BCE                    |mov ecx,esi                                  ; |
004D45B0   |.  8D45 E6                 |lea eax,dword ptr ss:[ebp-1A]                ; |
004D45B3   |.  BA 06000000             |mov edx,6                                    ; |
004D45B8   |.  E8 F3FDFFFF             |call <unpack.sub_4D43B0>                     ; \unpack.004D43B0
004D45BD   |.  83C6 06                 |add esi,6
004D45C0   |.  43                      |inc ebx
004D45C1   |.  4F                      |dec edi
004D45C2   |.^ 0F85 71FFFFFF           \jnz <unpack.loc_4D4539>
004D45C8   |.  8B7D D8                 mov edi,dword ptr ss:[ebp-28]                ;這裡最後生成16個子金鑰
---------------------------------------------------------------------------------------
16個48位的子金鑰
00541DAC  F0 B6 6E 75 28 30 F0 BE F6 82 C2 85 F4 F6 72 D2  鴝nu(0鵓赧r
00541DBC  07 81 E6 D7 76 9A 03 09 EE D3 57 52 73 00 2F D3  孀v?.鈑WRs./
00541DCC  7B 70 21 28 AF 51 FB E0 38 0A BF 4B D9 64 32 3A  {p!(Q8.Kd2:
00541DDC  3F 59 DB 8A C5 01 3F 69 CD 4A 47 04 1B 6D 9D D8  ?Y??iJGm
00541DEC  41 88 5D 2D BD C0 52 09 D7 AC AD D2 32 28 DB AE  A]-嚼R.賺2(郛
00541DFC  A6 B0 1B 28 F8 BE AE 10 3A 32 E1 BE A6 88 41 C5  Π(?:2峋A
---------------------------------------------------------------------------------------
}
下面就是把解密出的使用者名稱再進行加密,雖然金鑰初始化為"SecurityOne2005c",但實際上還是隻用了"Security"
004D4C93   |.  E8 40FCFFFF             call <unpack.sub_4D48D8>        ;對使用者名稱DES加密
00539AB3   |.  8B45 D8                 mov eax,dword ptr ss:[ebp-28]   ;加密後的結果
00539AB6   |.  8D4D DC                 lea ecx,dword ptr ss:[ebp-24]
00539AB9   |.  BA 0A000000             mov edx,0A                                    ;取最左邊的10個字元
00539ABE <>|.  E8 71DCEFFF             call unpack.00437734                          ;  ->StrUtils.LeftStr(AnsiString;Integer):AnsiString;overload;
00539AC3   |.  8D45 DC                 lea eax,dword ptr ss:[ebp-24]
00539AC6   |.  50                      push eax
00539AC7   |.  8D55 D0                 lea edx,dword ptr ss:[ebp-30]
00539ACA   |.  8B45 FC                 mov eax,dword ptr ss:[ebp-4]
00539ACD   |.  E8 6ABFF9FF             call unpack.004D5A3C
----------------------------------------------------------------------------------------------------
004D5941   |.  E8 AEFEFFFF             call unpack.004D57F4
---------------------------------------------------------------------------------------------
下面就是MD5變形的地方,標準MD5初始化的四個常數為
--------------------------------------------------
        state[0] = 0x67452301;
  state[1] = 0xefcdab89;
  state[2] = 0x98badcfe;
  state[3] = 0x10325476;
----------------------------------------------------
而這個變形的MD5變就變在這個常數上
{
004D57F4   /$  C700 4365789A           mov dword ptr ds:[eax],9A786543          ;這裡四個constants發生變化
004D57FA   |.  C740 04 01234567        mov dword ptr ds:[eax+4],67452301
004D5801   |.  C740 08 76543210        mov dword ptr ds:[eax+8],10325476
004D5808   |.  C740 0C A9876543        mov dword ptr ds:[eax+C],436587A9
004D580F   |.  33D2                    xor edx,edx
004D5811   |.  8950 10                 mov dword ptr ds:[eax+10],edx
004D5814   |.  33D2                    xor edx,edx
004D5816   |.  8950 14                 mov dword ptr ds:[eax+14],edx
004D5819   |.  83C0 18                 add eax,18
004D581C   |.  BA 40000000             mov edx,40
004D5821   |.  E8 FE18F3FF             call unpack.00407124
004D5826   \.  C3                      retn
}
----------------------------------------------------------------------------------
004D5946   |.  8B45 FC                 mov eax,dword ptr ss:[ebp-4]
004D5949   |.  E8 B6EAF2FF             call unpack.00404404
004D594E   |.  50                      push eax
004D594F   |.  8B45 FC                 mov eax,dword ptr ss:[ebp-4]
004D5952   |.  E8 ADECF2FF             call unpack.00404604
004D5957   |.  8BD0                    mov edx,eax
004D5959   |.  8D45 A4                 lea eax,dword ptr ss:[ebp-5C]
004D595C   |.  59                      pop ecx
004D595D   |.  E8 C6FEFFFF             call unpack.004D5828
004D5962   |.  8BD3                    mov edx,ebx
004D5964   |.  8D45 A4                 lea eax,dword ptr ss:[ebp-5C]
004D5967   |.  E8 3CFFFFFF             call unpack.004D58A8
--------------------------------------------------------------------
004D59A3   |.  8D7D F0                 lea edi,dword ptr ss:[ebp-10]  ;變形MD5計算的結果

---------------------------------------------------------------------
004D596C   |.  33C0                    xor eax,eax
004D596E   |.  5A                      pop edx
004D596F   |.  59                      pop ecx
004D5970   |.  59                      pop ecx
004D5971   |.  64:8910                 mov dword ptr fs:[eax],edx
004D5974   |.  68 89594D00             push unpack.004D5989
004D5979   |>  8D45 FC                 lea eax,dword ptr ss:[ebp-4]
004D597C   |.  E8 C3E7F2FF             call unpack.00404144
004D5981   \.  C3                      retn
--------------------------------------------------------------------------------------
00539AD2   |.  8B45 D0                 mov eax,dword ptr ss:[ebp-30]
00539AD5   |.  8D4D D4                 lea ecx,dword ptr ss:[ebp-2C]
00539AD8   |.  BA 0A000000             mov edx,0A                                    ;取MD5(name)的前10個字元
00539ADD <>|.  E8 52DCEFFF             call unpack.00437734                          ;  ->StrUtils.LeftStr(AnsiString;Integer):AnsiString;overload;
00539AE2   |.  8B55 D4                 mov edx,dword ptr ss:[ebp-2C]                 ;兩個聯起來
00539AE5   |.  58                      pop eax
00539AE6 <>|.  E8 21A9ECFF             call unpack.0040440C                          ;  ->System.@LStrCat;
00539AEB   |.  8B45 DC                 mov eax,dword ptr ss:[ebp-24]
00539AEE   |.  8D55 E0                 lea edx,dword ptr ss:[ebp-20]
00539AF1   |.  E8 5AE2FFFF             call unpack.00537D50
00539AF6   |.  8B55 E0                 mov edx,dword ptr ss:[ebp-20]
00539AF9   |.  58                      pop eax
00539AFA <>|.  E8 51AAECFF             call unpack.00404550                          ;  ->System.@LStrCmp;

對於驗證,是把假碼經過一系列的浮點運算,得到一個數,然後把真碼也經過同樣的浮點運算得到一個數,兩個進行比較,若相等則註冊成功

兄弟們可以做序號產生器了,用標準的DES演算法,金鑰為"Security",對其進行加密,取前10個字元,然後再用提到的變形MD5演算法(只需要改一下
四個常數即可),也取前10個字元,兩個聯接起來就是正確的sn

相關文章