首页
社区
课程
招聘
[原创]Total Commander注册算法
发表于: 2012-3-30 09:55 28461

[原创]Total Commander注册算法

2012-3-30 09:55
28461

【文章标题】: Total Commander注册算法
【文章作者】: vasthao
【作者邮箱】: vasthao@gmail.com
【软件名称】: Total Commander 7.56a
【下载地址】: 自己搜索下载
【编写语言】: delphi
【使用工具】: OD
--------------------------------------------------------------------------------
【详细过程】
使用的wincmd.key被加入了黑名单,下断CreateFileA,跟踪wincmd.key的读取,到以下代码:

004E06E4   .  8D95 6CFAFFFF lea     edx, dword ptr [ebp-594]         ;  读取0x400字节放在这
  004E06EA   .  66:B9 0004    mov     cx, 400
  004E06EE   .  8BC7          mov     eax, edi
  004E06F0   .  E8 57D7F3FF   call    <ReadFile>
  004E06F5   .  8BC7          mov     eax, edi
  004E06F7   .  E8 E8D6F3FF   call    0041DDE4
  004E06FC   .  EB 0B         jmp     short 004E0709
  004E06FE   >  33DB          xor     ebx, ebx
  004E0700   .  66:C785 DEFEF>mov     word ptr [ebp-122], 0
  004E0709   >  66:81BD DEFEF>cmp     word ptr [ebp-122], 80           ;  是否0x80字节
  004E0712   .  0F9405 15336D>sete    byte ptr [6D3315]                ;  应该是比较是否老版本的
  004E0719   >  C685 DDFEFFFF>mov     byte ptr [ebp-123], 1
  004E0720   .  84DB          test    bl, bl
  004E0722   .  0F84 1E030000 je      004E0A46
  004E0728   .  8D85 00EDFFFF lea     eax, dword ptr [ebp-1300]
  004E072E   .  50            push    eax                              ; /pTimeZoneInfo
  004E072F   .  E8 1C4FF2FF   call    <jmp.&kernel32.GetTimeZoneInform>; \GetTimeZoneInformation
  004E0734   .  40            inc     eax
  004E0735   .  74 1C         je      short 004E0753
  004E0737   .  81BD 00EDFFFF>cmp     dword ptr [ebp-1300], 0F0
  004E0741   .  7F 10         jg      short 004E0753
  004E0743   .  81BD 00EDFFFF>cmp     dword ptr [ebp-1300], -258
  004E074D   .  0F8D 14010000 jge     004E0867
  004E0753   >  B8 02000000   mov     eax, 2
  004E0758   .  E8 EF080000   call    004E104C
  004E075D   .  84C0          test    al, al
  004E075F   .  0F85 02010000 jnz     004E0867
  004E0765   .  B8 01000000   mov     eax, 1
  004E076A   .  E8 DD080000   call    004E104C
  004E076F   .  84C0          test    al, al
  004E0771   .  0F84 F0000000 je      004E0867
  004E0777   .  8D95 00FFFFFF lea     edx, dword ptr [ebp-100]
  004E077D   .  8D85 6CFBFFFF lea     eax, dword ptr [ebp-494]
  004E0783   .  B9 00010000   mov     ecx, 100
  004E0788   .  E8 2720F2FF   call    <MemCpy>
  004E078D   .  8D85 00FFFFFF lea     eax, dword ptr [ebp-100]
  004E0793   .  B9 FF000000   mov     ecx, 0FF
  004E0798   .  BA CF625800   mov     edx, 005862CF
  004E079D   .  E8 AAFBFFFF   call    <Decode>
  004E07A2   .  8D95 20FFFFFF lea     edx, dword ptr [ebp-E0]
  004E07A8   .  B9 78000000   mov     ecx, 78
  004E07AD   .  8B85 E0FEFFFF mov     eax, dword ptr [ebp-120]
  004E07B3   .  E8 C0C3FFFF   call    <BigInBytes>
  004E07B8   .  8D55 98       lea     edx, dword ptr [ebp-68]
  004E07BB   .  B9 68000000   mov     ecx, 68
  004E07C0   .  8B85 F4FEFFFF mov     eax, dword ptr [ebp-10C]
  004E07C6   .  E8 ADC3FFFF   call    <BigInBytes>
  004E07CB   .  8D95 00FFFFFF lea     edx, dword ptr [ebp-100]
  004E07D1   .  8D85 6CFCFFFF lea     eax, dword ptr [ebp-394]
  004E07D7   .  B9 00010000   mov     ecx, 100
  004E07DC   .  E8 D31FF2FF   call    <MemCpy>
  004E07E1   .  8D85 00FFFFFF lea     eax, dword ptr [ebp-100]
  004E07E7   .  B9 FF000000   mov     ecx, 0FF
  004E07EC   .  BA F5E00100   mov     edx, 1E0F5
  004E07F1   .  E8 56FBFFFF   call    <Decode>
  004E07F6   .  8D95 00FFFFFF lea     edx, dword ptr [ebp-100]
  004E07FC   .  B9 68000000   mov     ecx, 68
  004E0801   .  8B85 E4FEFFFF mov     eax, dword ptr [ebp-11C]
  004E0807   .  E8 6CC3FFFF   call    <BigInBytes>
  004E080C   .  6A 00         push    0
  004E080E   .  8D8D ACEDFFFF lea     ecx, dword ptr [ebp-1254]
  004E0814   .  8B85 E0FEFFFF mov     eax, dword ptr [ebp-120]
  004E081A   .  83C0 10       add     eax, 10
  004E081D   .  BA 78000000   mov     edx, 78
  004E0822   .  E8 0590FBFF   call    0049982C
  004E0827   .  BA 88000000   mov     edx, 88
  004E082C   .  8B85 E0FEFFFF mov     eax, dword ptr [ebp-120]
  004E0832   .  E8 41C5FFFF   call    004DCD78
  004E0837   .  8D85 ACEDFFFF lea     eax, dword ptr [ebp-1254]
  004E083D   .  8B95 F8FEFFFF mov     edx, dword ptr [ebp-108]
  004E0843   .  E8 3CFCFFFF   call    004E0484
  004E0848   .  8B8D E4FEFFFF mov     ecx, dword ptr [ebp-11C]
  004E084E   .  8B95 F4FEFFFF mov     edx, dword ptr [ebp-10C]
  004E0854   .  8B85 F8FEFFFF mov     eax, dword ptr [ebp-108]
  004E085A   .  E8 81F5FFFF   call    004DFDE0
  004E085F   .  34 01         xor     al, 1
  004E0861   .  8885 DDFEFFFF mov     byte ptr [ebp-123], al
  004E0867   >  80BD DDFEFFFF>cmp     byte ptr [ebp-123], 0
  004E086E   .  0F84 96000000 je      004E090A
  004E0874   .  BA DC0E4E00   mov     edx, 004E0EDC                    ;  ASCII "AAD4474DC8387E81BB095D810F4F4F21D5D7CCC756E3D6E
                                                                          5DEE48AC000C25AA0EFAD0AD3A5AC46F15B50249597461BBB87CDC
                                                                          3F1BA37C17A9A207A3603E38E718F9927A5EB38005D8B72EAFDC63
                                                                          931C3D93C1FAD457A17CA85BEB40F3FA9152770DAC12E8E3B912D"
  004E0879   .  8B85 F8FEFFFF mov     eax, dword ptr [ebp-108]
  004E087F   .  E8 14C2FFFF   call    <BigInHexString>
  004E0884   .  BA B00F4E00   mov     edx, 004E0FB0                    ;  ASCII "65537"
  004E0889   .  8B85 F4FEFFFF mov     eax, dword ptr [ebp-10C]
  004E088F   .  E8 28C1FFFF   call    <BigInDecString>
  004E0894   .  8D95 CCEDFFFF lea     edx, dword ptr [ebp-1234]
  004E089A   .  8D85 ECFAFFFF lea     eax, dword ptr [ebp-514]         ;  ebp-594是keyfile存放地址,则这个是偏移0x594-0x514=0x80
  004E08A0   .  B9 80000000   mov     ecx, 80                          ;  复制0x80字节
  004E08A5   .  E8 0A1FF2FF   call    <MemCpy>
  004E08AA   .  8D95 CCEDFFFF lea     edx, dword ptr [ebp-1234]
  004E08B0   .  B9 68000000   mov     ecx, 68
  004E08B5   .  8B85 E4FEFFFF mov     eax, dword ptr [ebp-11C]         ;  0x68个字节转为大数
  004E08BB   .  E8 B8C2FFFF   call    <BigInBytes>
  004E08C0   .  8D85 E0FEFFFF lea     eax, dword ptr [ebp-120]         ;  解密存放
  004E08C6   .  50            push    eax
  004E08C7   .  8B8D F8FEFFFF mov     ecx, dword ptr [ebp-108]
  004E08CD   .  8B95 F4FEFFFF mov     edx, dword ptr [ebp-10C]         ;  e=65537
  004E08D3   .  8B85 E4FEFFFF mov     eax, dword ptr [ebp-11C]         ;  这个是0x68个字节要解密的
  004E08D9   .  E8 AADAFFFF   call    <BigDecrypt>                     ;  不是RSA
00DD26A0  48 C6 4D 00 34 00 00 00 E8 03 00 00 01 00 00 00  H芃.4...?.....
  00DD26B0  2D 91 3B 8E 2E C1 DA 70 27 15 A9 3F 0F B4 BE 85  -??邻p'?淳
  00DD26C0  CA 17 7A 45 AD 1F 3C D9 C3 31 39 C6 FD EA 72 8B  ?zE?<倜19讫阹
  00DD26D0  5D 00 38 EB A5 27 99 8F 71 8E E3 03 36 7A 20 9A  ].8毳'檹q庛6z 
  00DD26E0  7A C1 37 BA F1 C3 CD 87 BB 1B 46 97 95 24 50 5B  z?厚猛嚮F棔$P[
  00DD26F0  F1 46 AC A5 D3 0A AD EF A0 5A C2 00 C0 8A E4 DE  馞?燴?缞滢
  00DD2700  E5 D6 E3 56 C7 CC D7 D5 21 4F 4F 0F 81 5D 09 BB  逯鉜翘渍!OO乚.
  00DD2710  81 7E 38 C8 4D 47 D4 AA 00 00 00 00 00 00 00 00  亊8萂G元........
  
004DE388 >/$  55            push    ebp                              ;  BigDecrypt
  004DE389  |.  8BEC          mov     ebp, esp
  004DE38B  |.  53            push    ebx
  004DE38C  |.  8B5D 08       mov     ebx, dword ptr [ebp+8]
  004DE38F  |.  53            push    ebx
  004DE390  |.  6A 00         push    0
  004DE392  |.  92            xchg    eax, edx
  004DE393  |.  E8 60FDFFFF   call    <BigDecrypt0>
  004DE398  |.  5B            pop     ebx
  004DE399  |.  5D            pop     ebp
  004DE39A  \.  C2 0400       retn    4
  
  004DE0F8 >/$  55            push    ebp                              ;  BigDecrypt0
  004DE0F9  |.  8BEC          mov     ebp, esp
  004DE0FB  |.  83C4 E4       add     esp, -1C
  004DE0FE  |.  53            push    ebx
  004DE0FF  |.  56            push    esi
  004DE100  |.  57            push    edi
  004DE101  |.  894D F4       mov     dword ptr [ebp-C], ecx           ;  [ebp-C]=832位大数
  004DE104  |.  8955 F8       mov     dword ptr [ebp-8], edx           ;  [ebp-8]=要解密的0x68个字节
  004DE107  |.  8945 FC       mov     dword ptr [ebp-4], eax           ;  [ebp-4]=65537
  004DE10A  |.  C605 04336D00>mov     byte ptr [6D3304], 0
  004DE111  |.  33D2          xor     edx, edx
  004DE113  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
  004DE116  |.  E8 9DEFFFFF   call    004DD0B8
  004DE11B  |.  85C0          test    eax, eax
  004DE11D  |.  75 14         jnz     short 004DE133
  004DE11F  |.  8B45 0C       mov     eax, dword ptr [ebp+C]
  004DE122  |.  8B00          mov     eax, dword ptr [eax]
  004DE124  |.  BA 02000000   mov     edx, 2
  004DE129  |.  E8 6EE8FFFF   call    <BigIn16>
  004DE12E  |.  E9 4A020000   jmp     004DE37D
  004DE133  |>  B2 01         mov     dl, 1
  004DE135  |.  B8 48C64D00   mov     eax, 004DC648
  004DE13A  |.  E8 8DFEFFFF   call    <BigCreate>
  004DE13F  |.  8945 F0       mov     dword ptr [ebp-10], eax          ;  [ebp-10]=temp1
  004DE142  |.  B2 01         mov     dl, 1
  004DE144  |.  B8 48C64D00   mov     eax, 004DC648
  004DE149  |.  E8 7EFEFFFF   call    <BigCreate>
  004DE14E  |.  8BF0          mov     esi, eax                         ;  esi=temp2
  004DE150  |.  B2 01         mov     dl, 1
  004DE152  |.  B8 48C64D00   mov     eax, 004DC648
  004DE157  |.  E8 70FEFFFF   call    <BigCreate>
  004DE15C  |.  8BF8          mov     edi, eax                         ;  edi=temp3
  004DE15E  |.  B2 01         mov     dl, 1
  004DE160  |.  B8 48C64D00   mov     eax, 004DC648
  004DE165  |.  E8 62FEFFFF   call    <BigCreate>
  004DE16A  |.  8BD8          mov     ebx, eax                         ;  ebx=temp4
  004DE16C  |.  807D 08 00    cmp     byte ptr [ebp+8], 0
  004DE170  |.  74 1F         je      short 004DE191
  004DE172  |.  C745 E8 803E0>mov     dword ptr [ebp-18], 3E80
  004DE179  |.  8B45 E8       mov     eax, dword ptr [ebp-18]
  004DE17C  |.  E8 0345F2FF   call    00402684
  004DE181  |.  8945 E4       mov     dword ptr [ebp-1C], eax
  004DE184  |.  8B45 E4       mov     eax, dword ptr [ebp-1C]
  004DE187  |.  33C9          xor     ecx, ecx
  004DE189  |.  8B55 E8       mov     edx, dword ptr [ebp-18]
  004DE18C  |.  E8 2B49F2FF   call    00402ABC
  004DE191  |>  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  [ebp-4]=e=0x10001
  004DE194  |.  E8 C7EDFFFF   call    <BigGetBitLength>                ;  得到二进制位长度
  004DE199  |.  48            dec     eax
  004DE19A  |.  8945 EC       mov     dword ptr [ebp-14], eax          ;  [ebp-14]=bitlength-1
  004DE19D  |.  8B55 F8       mov     edx, dword ptr [ebp-8]
  004DE1A0  |.  8BC3          mov     eax, ebx
  004DE1A2  |.  E8 F5EDFFFF   call    <BigCopy>                        ;  temp4=c
  004DE1A7  |.  8B4D F0       mov     ecx, dword ptr [ebp-10]
  004DE1AA  |.  8B55 F4       mov     edx, dword ptr [ebp-C]
  004DE1AD  |.  8BC3          mov     eax, ebx
  004DE1AF  |.  E8 F4F3FFFF   call    <BigDiv>                         ;  temp1=temp4%n=c%n temp4=temp4/n=c/n
  004DE1B4  |.  BA 02000000   mov     edx, 2
  004DE1B9  |.  8BC6          mov     eax, esi
  004DE1BB  |.  E8 DCE7FFFF   call    <BigIn16>                        ;  temp2=2
  004DE1C0  |.  8B55 F0       mov     edx, dword ptr [ebp-10]
  004DE1C3  |.  8BC7          mov     eax, edi
  004DE1C5  |.  E8 D2EDFFFF   call    <BigCopy>                        ;  temp3=temp1=c%n
  004DE1CA  |.  837D EC 00    cmp     dword ptr [ebp-14], 0
  004DE1CE  |.  0F8C 6F010000 jl      004DE343
  004DE1D4  |>  FF05 08336D00 /inc     dword ptr [6D3308]              ;  循环开始
  004DE1DA  |.  66:8B55 EC    |mov     dx, word ptr [ebp-14]
  004DE1DE  |.  8B45 FC       |mov     eax, dword ptr [ebp-4]
  004DE1E1  |.  E8 36EFFFFF   |call    <BigBitTest>                    ;  测试二进制位是否为1
  004DE1E6  |.  84C0          |test    al, al
  004DE1E8  |.  0F84 A0000000 |je      004DE28E
  004DE1EE  |.  8BD7          |mov     edx, edi
  004DE1F0  |.  8BC6          |mov     eax, esi
  004DE1F2  |.  E8 59F2FFFF   |call    <BigMul>                        ;  temp2=temp2*temp3
  004DE1F7  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]
  004DE1FA  |.  8BC3          |mov     eax, ebx
  004DE1FC  |.  E8 9BEDFFFF   |call    <BigCopy>                       ;  temp4=n
  004DE201  |.  8B55 F0       |mov     edx, dword ptr [ebp-10]
  004DE204  |.  8BC3          |mov     eax, ebx
  004DE206  |.  E8 C5F1FFFF   |call    <BigSub>                        ;  temp4=temp4-temp1=n-c%n
  004DE20B  |.  8BD6          |mov     edx, esi
  004DE20D  |.  8BC3          |mov     eax, ebx
  004DE20F  |.  E8 58F1FFFF   |call    <BigAdd>                        ;  temp4=temp4+temp2=n-c%n+temp2*temp3
  004DE214  |.  807D 08 00    |cmp     byte ptr [ebp+8], 0
  004DE218  |.  74 13         |je      short 004DE22D
  004DE21A  |.  56            |push    esi
  004DE21B  |.  8B45 E4       |mov     eax, dword ptr [ebp-1C]
  004DE21E  |.  50            |push    eax
  004DE21F  |.  8BCB          |mov     ecx, ebx
  004DE221  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]
  004DE224  |.  8BC3          |mov     eax, ebx
  004DE226  |.  E8 09F9FFFF   |call    <BigDiv0>
  004DE22B  |.  EB 0C         |jmp     short 004DE239
  004DE22D  |>  8BCE          |mov     ecx, esi
  004DE22F  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]
  004DE232  |.  8BC3          |mov     eax, ebx
  004DE234  |.  E8 6FF3FFFF   |call    <BigDiv>                        ;  temp2=temp4%n=(n-c%n+temp2*temp3)%n=(temp2*temp3-c%n)%n
  004DE239  |>  8BD7          |mov     edx, edi
  004DE23B  |.  8BC7          |mov     eax, edi
  004DE23D  |.  E8 0EF2FFFF   |call    <BigMul>                        ;  temp3=temp3*temp3
  004DE242  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]
  004DE245  |.  8BC3          |mov     eax, ebx
  004DE247  |.  E8 50EDFFFF   |call    <BigCopy>                       ;  temp4=n
  004DE24C  |.  BA 02000000   |mov     edx, 2
  004DE251  |.  8BC3          |mov     eax, ebx
  004DE253  |.  E8 28F5FFFF   |call    <BigSub16>                      ;  temp4=n-2
  004DE258  |.  8BD7          |mov     edx, edi
  004DE25A  |.  8BC3          |mov     eax, ebx
  004DE25C  |.  E8 0BF1FFFF   |call    <BigAdd>                        ;  temp4=temp4+temp3=n-2+temp3*temp3
  004DE261  |.  807D 08 00    |cmp     byte ptr [ebp+8], 0             ;  [ebp+8]==0
  004DE265  |.  74 16         |je      short 004DE27D
  004DE267  |.  57            |push    edi
  004DE268  |.  8B45 E4       |mov     eax, dword ptr [ebp-1C]
  004DE26B  |.  50            |push    eax
  004DE26C  |.  8BCB          |mov     ecx, ebx
  004DE26E  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]
  004DE271  |.  8BC3          |mov     eax, ebx
  004DE273  |.  E8 BCF8FFFF   |call    <BigDiv0>
  004DE278  |.  E9 A9000000   |jmp     004DE326
  004DE27D  |>  8BCF          |mov     ecx, edi
  004DE27F  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]
  004DE282  |.  8BC3          |mov     eax, ebx
  004DE284  |.  E8 1FF3FFFF   |call    <BigDiv>                        ;  temp3=temp4%n=(n-2+temp3*temp3)%n=(temp3*temp3-2)%n
  004DE289  |.  E9 98000000   |jmp     004DE326
  004DE28E  |>  8BD6          |mov     edx, esi                        ;  二进制位为0时跳到这
  004DE290  |.  8BC7          |mov     eax, edi
  004DE292  |.  E8 B9F1FFFF   |call    <BigMul>                        ;  temp3=temp3*temp2
  004DE297  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]
  004DE29A  |.  8BC3          |mov     eax, ebx
  004DE29C  |.  E8 FBECFFFF   |call    <BigCopy>                       ;  temp4=n
  004DE2A1  |.  8B55 F0       |mov     edx, dword ptr [ebp-10]
  004DE2A4  |.  8BC3          |mov     eax, ebx
  004DE2A6  |.  E8 25F1FFFF   |call    <BigSub>                        ;  temp4=n-temp1=n-c%n
  004DE2AB  |.  8BD7          |mov     edx, edi
  004DE2AD  |.  8BC3          |mov     eax, ebx
  004DE2AF  |.  E8 B8F0FFFF   |call    <BigAdd>                        ;  temp4=temp4+temp3=n-c%n+temp3*temp2
  004DE2B4  |.  807D 08 00    |cmp     byte ptr [ebp+8], 0
  004DE2B8  |.  74 13         |je      short 004DE2CD
  004DE2BA  |.  57            |push    edi
  004DE2BB  |.  8B45 E4       |mov     eax, dword ptr [ebp-1C]
  004DE2BE  |.  50            |push    eax
  004DE2BF  |.  8BCB          |mov     ecx, ebx
  004DE2C1  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]
  004DE2C4  |.  8BC3          |mov     eax, ebx
  004DE2C6  |.  E8 69F8FFFF   |call    <BigDiv0>
  004DE2CB  |.  EB 0C         |jmp     short 004DE2D9
  004DE2CD  |>  8BCF          |mov     ecx, edi
  004DE2CF  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]
  004DE2D2  |.  8BC3          |mov     eax, ebx
  004DE2D4  |.  E8 CFF2FFFF   |call    <BigDiv>                        ;  temp3=temp4%n=(n-c%n+temp3*temp2)%n=(temp3*temp2-c%n)%n
  004DE2D9  |>  8BD6          |mov     edx, esi
  004DE2DB  |.  8BC6          |mov     eax, esi
  004DE2DD  |.  E8 6EF1FFFF   |call    <BigMul>                        ;  temp2=temp2*temp2
  004DE2E2  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]
  004DE2E5  |.  8BC3          |mov     eax, ebx
  004DE2E7  |.  E8 B0ECFFFF   |call    <BigCopy>                       ;  temp4=n
  004DE2EC  |.  BA 02000000   |mov     edx, 2
  004DE2F1  |.  8BC3          |mov     eax, ebx
  004DE2F3  |.  E8 88F4FFFF   |call    <BigSub16>                      ;  temp4=tem4-2=n-2
  004DE2F8  |.  8BD6          |mov     edx, esi
  004DE2FA  |.  8BC3          |mov     eax, ebx
  004DE2FC  |.  E8 6BF0FFFF   |call    <BigAdd>                        ;  temp4=temp4+temp2=n-2+temp2*temp2
  004DE301  |.  807D 08 00    |cmp     byte ptr [ebp+8], 0             ;  [ebp+8]==0
  004DE305  |.  74 13         |je      short 004DE31A
  004DE307  |.  56            |push    esi
  004DE308  |.  8B45 E4       |mov     eax, dword ptr [ebp-1C]
  004DE30B  |.  50            |push    eax
  004DE30C  |.  8BCB          |mov     ecx, ebx
  004DE30E  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]
  004DE311  |.  8BC3          |mov     eax, ebx
  004DE313  |.  E8 1CF8FFFF   |call    <BigDiv0>
  004DE318  |.  EB 0C         |jmp     short 004DE326
  004DE31A  |>  8BCE          |mov     ecx, esi
  004DE31C  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]
  004DE31F  |.  8BC3          |mov     eax, ebx
  004DE321  |.  E8 82F2FFFF   |call    <BigDiv>                        ;  temp2=temp4%n=(n-2+temp2*temp2)%n=(temp2*temp2-2)%n
  004DE326  |>  FF4D EC       |dec     dword ptr [ebp-14]
  004DE329  |.  803D 04336D00>|cmp     byte ptr [6D3304], 0
  004DE330  |.  74 07         |je      short 004DE339
  004DE332  |.  C745 EC FFFFF>|mov     dword ptr [ebp-14], -1
  004DE339  |>  837D EC 00    |cmp     dword ptr [ebp-14], 0
  004DE33D  |.^ 0F8D 91FEFFFF \jge     004DE1D4                        ;  e从二进制高位至低位循环
  004DE343  |>  8B45 0C       mov     eax, dword ptr [ebp+C]
  004DE346  |.  8B00          mov     eax, dword ptr [eax]
  004DE348  |.  8BD6          mov     edx, esi
  004DE34A  |.  E8 4DECFFFF   call    <BigCopy>                        ;  return temp2
  004DE34F  |.  807D 08 00    cmp     byte ptr [ebp+8], 0
  004DE353  |.  74 0B         je      short 004DE360
  004DE355  |.  8B55 E8       mov     edx, dword ptr [ebp-18]
  004DE358  |.  8B45 E4       mov     eax, dword ptr [ebp-1C]
  004DE35B  |.  E8 3C43F2FF   call    <FreeMem>
  004DE360  |>  8B45 F0       mov     eax, dword ptr [ebp-10]
  004DE363  |.  E8 E049F2FF   call    <Free>
  004DE368  |.  8BC6          mov     eax, esi
  004DE36A  |.  E8 D949F2FF   call    <Free>
  004DE36F  |.  8BC7          mov     eax, edi
  004DE371  |.  E8 D249F2FF   call    <Free>
  004DE376  |.  8BC3          mov     eax, ebx
  004DE378  |.  E8 CB49F2FF   call    <Free>
  004DE37D  |>  5F            pop     edi
  004DE37E  |.  5E            pop     esi
  004DE37F  |.  5B            pop     ebx
  004DE380  |.  8BE5          mov     esp, ebp
  004DE382  |.  5D            pop     ebp
  004DE383  \.  C2 0800       retn    8
对解密后的0x68个字节0x67个字节进行解码:
  
  004E08DE   .  833D 08336D00>cmp     dword ptr [6D3308], 1
  004E08E5   .  7F 23         jg      short 004E090A
  004E08E7   .  6A 10         push    10                               ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
  004E08E9   .  A1 34636C00   mov     eax, dword ptr [6C6334]          ; |
  004E08EE   .  50            push    eax                              ; |Title => "Total Commander"
  004E08EF   .  68 B80F4E00   push    004E0FB8                         ; |using cracks is unfair!\n\nplease get the 
                                                                       ; |official release from www.ghisler.com.
  004E08F4   .  6A 00         push    0                                ; |hOwner = NULL
  004E08F6   .  E8 4559F2FF   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
  004E08FB   .  B8 01000000   mov     eax, 1
  004E0900   .  E8 DB3DF2FF   call    004046E0
  004E0905   .  E9 AA050000   jmp     004E0EB4
  004E090A   >  8D95 6CFEFFFF lea     edx, dword ptr [ebp-194]
  004E0910   .  B9 67000000   mov     ecx, 67
  004E0915   .  8B85 E0FEFFFF mov     eax, dword ptr [ebp-120]
  004E091B   .  E8 98C2FFFF   call    <BitOutBytes>                    ;  0x67字节大数转为字节数组,高位字节抛弃
  004E0920   .  8D85 6CFEFFFF lea     eax, dword ptr [ebp-194]
  004E0926   .  B9 66000000   mov     ecx, 66                          ;  0x67个字节解码
  004E092B      BA BCA42000   mov     edx, 20A4BC                      ;  初始值
  004E0930   .  E8 17FAFFFF   call    <Decode>                         ;  解码
  
  004E034C >/$  55            push    ebp                              ;  Decode
  004E034D  |.  8BEC          mov     ebp, esp
  004E034F  |.  83C4 F8       add     esp, -8
  004E0352  |.  53            push    ebx
  004E0353  |.  56            push    esi
  004E0354  |.  57            push    edi
  004E0355  |.  8BF9          mov     edi, ecx                         ;  edi=解码字节长度-1
  004E0357  |.  8945 FC       mov     dword ptr [ebp-4], eax           ;  [ebp-4]=要解码的字节
  004E035A  |.  8915 2CE06C00 mov     dword ptr [6CE02C], edx          ;  [6CE02C]=初始值
  004E0360      C745 F8 14000>mov     dword ptr [ebp-8], 14
  004E0367      8BF7          mov     esi, edi
  004E0369      85F6          test    esi, esi
  004E036B  |.  7C 1C         |jl      short 004E0389
  004E036D  |.  46            |inc     esi
  004E036E  |.  8B5D FC       |mov     ebx, dword ptr [ebp-4]
  004E0371  |>  8D47 01       |/lea     eax, dword ptr [edi+1]         ;  eax=解码字节长度,解码开始,编码反着来
  004E0374  |.  E8 6327F2FF   ||call    <RandInt>                      ;  计算[6CEO2C]
  004E0379  |.  8B55 FC       ||mov     edx, dword ptr [ebp-4]
  004E037C  |.  03D0          ||add     edx, eax
  004E037E  |.  8BC3          ||mov     eax, ebx
  004E0380  |.  E8 BBFFFFFF   ||call    <ByteSwap>
  004E0385  |.  43            ||inc     ebx
  004E0386  |.  4E            ||dec     esi
  004E0387  |.^ 75 E8         |\jnz     short 004E0371
  004E0389  |>  8BF7          |mov     esi, edi
  004E038B  |.  85F6          |test    esi, esi
  004E038D  |.  7C 2B         |jl      short 004E03BA
  004E038F  |.  46            |inc     esi
  004E0390  |.  8B5D FC       |mov     ebx, dword ptr [ebp-4]
  004E0393  |>  B8 08000000   |/mov     eax, 8
  004E0398  |.  E8 3F27F2FF   ||call    <RandInt>
  004E039D  |.  8BD0          ||mov     edx, eax
  004E039F  |.  8BC3          ||mov     eax, ebx
  004E03A1  |.  E8 76FFFFFF   ||call    <ROR8>                         ;  ror8(x,n) x>>n|x<<(8-n)
  004E03A6  |.  B8 00010000   ||mov     eax, 100
  004E03AB  |.  E8 2C27F2FF   ||call    <RandInt>
  004E03B0  |.  8A13          ||mov     dl, byte ptr [ebx]
  004E03B2  |.  32C2          ||xor     al, dl
  004E03B4  |.  8803          ||mov     byte ptr [ebx], al
  004E03B6  |.  43            ||inc     ebx
  004E03B7  |.  4E            ||dec     esi
  004E03B8  |.^ 75 D9         |\jnz     short 004E0393
  004E03BA  |>  FF4D F8       |dec     dword ptr [ebp-8]               ;  循环了0x14次,有0x14*length*3个[6CE02C]要计算
  004E03BD  |.^ 75 A8         \jnz     short 004E0367
  004E03BF  |.  5F            pop     edi
  004E03C0  |.  5E            pop     esi
  004E03C1  |.  5B            pop     ebx
  004E03C2  |.  59            pop     ecx
  004E03C3  |.  59            pop     ecx
  004E03C4  |.  5D            pop     ebp
  004E03C5  \.  C3            retn
  其中004E0374处的RandInt出现了问题,不知道是不是bug
  00402ADC >    6915 2CE06C00>imul    edx, dword ptr [6CE02C], 8088405 ;  RandInt
  00402AE6      42            inc     edx                              ;  当[6CE02C]==0x20A48C时,某些地址计算不对
  00402AE7      8915 2CE06C00 mov     dword ptr [6CE02C], edx
  00402AED      F7E2          mul     edx
  00402AEF      89D0          mov     eax, edx
  00402AF1      C3            retn
004E0935   .  33C9          xor     ecx, ecx
  004E0937   .  B2 01         mov     dl, 1
  004E0939   .  B8 C06F4700   mov     eax, 00476FC0
  004E093E   .  E8 BD00F3FF   call    00410A00
  004E0943   .  8BF0          mov     esi, eax
  004E0945   .  8D85 7CFEFFFF lea     eax, dword ptr [ebp-184]         ;  0x67解码字节偏移0x10
  004E094B   .  8946 20       mov     dword ptr [esi+20], eax
  004E094E   .  8D85 5CFAFFFF lea     eax, dword ptr [ebp-5A4]         ;  MD5存放处
  004E0954   .  8946 24       mov     dword ptr [esi+24], eax
  004E0957   .  C746 28 57000>mov     dword ptr [esi+28], 57           ;  0x57个字节
  004E095E   .  8BC6          mov     eax, esi
  004E0960   .  E8 CF66F9FF   call    <MD5Init>
  004E0965   .  33D2          xor     edx, edx
  004E0967   .  8BC6          mov     eax, esi
  004E0969   .  E8 5275F9FF   call    <CustomMD5>
  004E096E   .  8BC6          mov     eax, esi
  004E0970   .  E8 4B76F9FF   call    <HashOutput>
  004E0975   .  8BC6          mov     eax, esi
  004E0977   .  E8 CC23F2FF   call    <Free>
  004E097C   .  8D85 5CFAFFFF lea     eax, dword ptr [ebp-5A4]         ;  MD5值
  004E0982   .  8D95 6CFEFFFF lea     edx, dword ptr [ebp-194]         ;  0x67解码字节前0x10字节
  004E0988   .  B9 10000000   mov     ecx, 10
  004E098D   .  E8 BA20F2FF   call    <StrCmp>
  004E0992      0F84 AE000000 je      004E0A46                         ;  必须相等,否则挂

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 10
支持
分享
最新回复 (11)
雪    币: 4902
活跃值: (120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
今天晚了
收藏下来明天慢慢学习哈
2012-4-19 22:13
0
雪    币: 106
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
好文章!
2012-4-20 00:13
0
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
4
楼主好强的算法功底...顶一下
2012-4-29 22:59
0
雪    币: 96
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
一如既往的支持!
2012-4-29 23:14
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
一如既往的支持!
2012-5-1 09:38
0
雪    币: 20851
活跃值: (4060)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
Thank you very much
2012-5-1 09:49
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rwx
8
厉害厉害楼主 ,不服不行呀
2013-1-26 01:49
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
太强大了,我打开看了下,马上就头晕了,不行了啊,楼主用的是什么插件啊,是MAP把IDA分析的函数名导入OD吗还是自己编写的OD插件,有这个函数名是比较好看很多啊
2013-1-30 11:29
0
雪    币: 165
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
好帖,楼主的数学好强悍!
2013-2-17 12:45
0
雪    币: 297
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
看都看晕了,楼主真强。
2013-2-18 10:03
0
雪    币: 175
活跃值: (2511)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
厉害厉害楼主。
2022-2-15 16:36
0
游客
登录 | 注册 方可回帖
返回
//