• 标 题:Multi Clipboard Ver m9.34.01 (18千字)
  • 作 者:lancelot[CCG]
  • 时 间:2001-9-30 22:31:56
  • 链 接:http://bbs.pediy.com

下载:http://newhua.ruyi.com/down/mcbsx.exe

这个软件注册码的计算部分还挺复杂的,一下子还不能马上看明白,可惜最后采用明码比较,是一大败笔... ...
有兴趣的看一看就知道了
==========================================================================================

:004060B6 E8CC160200              call 00427787<-----------------读取用户名
:004060BB BF08914900              mov edi, 00499108
:004060C0 83C9FF                  or ecx, FFFFFFFF
:004060C3 33C0                    xor eax, eax
:004060C5 F2                      repnz
:004060C6 AE                      scasb
:004060C7 F7D1                    not ecx
:004060C9 49                      dec ecx
:004060CA 83F903                  cmp ecx, 00000003<------------用户名要大于3位
:004060CD 7356                    jnb 00406125

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004060CD(C)
|
:00406125 6A50                    push 00000050
:00406127 6858914900              push 00499158

* Possible Reference to Dialog: DialogID_00CE, CONTROL_ID:0483, ""
                                  |
:0040612C 6883040000              push 00000483
:00406131 B930014400              mov ecx, 00440130
:00406136 E84C160200              call 00427787<----------------读取 e-Mail
:0040613B 8B152CA34900            mov edx, dword ptr [0049A32C]
:00406141 BB01000000              mov ebx, 00000001
:00406146 53                      push ebx
:00406147 6858914900              push 00499158
:0040614C 52                      push edx
:0040614D E8DE5B0000              call 0040BD30
:00406152 83C40C                  add esp, 0000000C
:00406155 3BC3                    cmp eax, ebx
:00406157 743E                    je 00406197

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00406157(C)
|
:00406197 53                      push ebx
:00406198 E8F3220000              call 00408490<----------------将用户名和 e-Mail 写入 .ini 文件
:0040619D 83C404                  add esp, 00000004
:004061A0 B908000000              mov ecx, 00000008
:004061A5 33C0                    xor eax, eax
:004061A7 BF348F4900              mov edi, 00498F34
:004061AC F3                      repz
:004061AD AB                      stosd
:004061AE 6A20                    push 00000020
:004061B0 68348F4900              push 00498F34

* Possible Reference to Dialog: DialogID_00CE, CONTROL_ID:0481, ""
                                  |
:004061B5 6881040000              push 00000481
:004061BA B930014400              mov ecx, 00440130
:004061BF E8C3150200              call 00427787<---------------读取注册码
:004061C4 B940000000              mov ecx, 00000040
:004061C9 33C0                    xor eax, eax
:004061CB BFFC014400              mov edi, 004401FC
:004061D0 68FC014400              push 004401FC

* Possible StringData Ref from Data Obj ->"Multi Clipboard"
                                  |
:004061D5 6890B74300              push 0043B790
:004061DA 6808914900              push 00499108
:004061DF F3                      repz
:004061E0 AB                      stosd
:004061E1 E83A1B0000              call 00407D20<----------(1)-----核心计算,跟入
:004061E6 68FC014400              push 004401FC
:004061EB E8B01A0000              call 00407CA0
:004061F0 68348F4900              push 00498F34
:004061F5 E8A61A0000              call 00407CA0
:004061FA BFFC014400              mov edi, 004401FC
:004061FF 83C9FF                  or ecx, FFFFFFFF
:00406202 33C0                    xor eax, eax
:00406204 83C414                  add esp, 00000014
:00406207 F2                      repnz
:00406208 AE                      scasb
:00406209 F7D1                    not ecx
:0040620B 49                      dec ecx
:0040620C BFFC014400              mov edi, 004401FC<-----------30353b3b3437
:00406211 BE348F4900              mov esi, 00498F34<-----------输入的注册码
:00406216 33D2                    xor edx, edx
:00406218 F3                      repz
:00406219 A6                      cmpsb<-----------------------比较,相同则注册成功
:0040621A 0F85B2000000            jne 004062D2
================================================================================================
* Referenced by a CALL at Addresses:-------------------------------计算(1)
|:00401E9B  , :00405EFD  , :004061E1  , :0040C698 
|
:00407D20 51                      push ecx
:00407D21 53                      push ebx
:00407D22 8B54240C                mov edx, dword ptr [esp+0C]
:00407D26 55                      push ebp
:00407D27 56                      push esi
:00407D28 57                      push edi
:00407D29 B9000A0000              mov ecx, 00000A00
:00407D2E 33C0                    xor eax, eax
:00407D30 BFFC044400              mov edi, 004404FC
:00407D35 33DB                    xor ebx, ebx
:00407D37 33F6                    xor esi, esi
:00407D39 F3                      repz
:00407D3A AB                      stosd
:00407D3B 89742410                mov dword ptr [esp+10], esi
:00407D3F BFFC044400              mov edi, 004404FC

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00407DDA(C)
|
:00407D44 8A0416                  mov al, byte ptr [esi+edx]<----------取用户名的第1位'l'=0x6c

          ............. 略 ...............        <----------去掉用户名中非字母或数字的其他字符

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00407DCF(C)
|
:00407DE0 B914000000              mov ecx, 00000014
:00407DE5 33C0                    xor eax, eax
:00407DE7 8BFA                    mov edi, edx
:00407DE9 68FC044400              push 004404FC
:00407DEE F3                      repz
:00407DEF AB                      stosd
:00407DF0 BFFC044400              mov edi, 004404FC
:00407DF5 83C9FF                  or ecx, FFFFFFFF
:00407DF8 F2                      repnz
:00407DF9 AE                      scasb
:00407DFA F7D1                    not ecx<------------------------------用户名的长度0xc
:00407DFC 2BF9                    sub edi, ecx
:00407DFE 8BC1                    mov eax, ecx
:00407E00 8BF7                    mov esi, edi
:00407E02 8BFA                    mov edi, edx
:00407E04 C1E902                  shr ecx, 02
:00407E07 F3                      repz
:00407E08 A5                      movsd
:00407E09 8BC8                    mov ecx, eax
:00407E0B 83E103                  and ecx, 00000003
:00407E0E F3                      repz
:00407E0F A4                      movsb
:00407E10 E898D90000              call 004157AD<-------------------把用户名转换成小写
:00407E15 8D4C2414                lea ecx, dword ptr [esp+14]
:00407E19 8D54241C                lea edx, dword ptr [esp+1C]
:00407E1D 51                      push ecx
:00407E1E 52                      push edx
:00407E1F 895C2424                mov dword ptr [esp+24], ebx
:00407E23 C744241C01000000        mov [esp+1C], 00000001
:00407E2B E8B0010000              call 00407FE0<--------------------(2)------计算,跟入
:00407E30 8B7C2428                mov edi, dword ptr [esp+28]<-----'Multi Clipboard'
:00407E34 83C9FF                  or ecx, FFFFFFFF
:00407E37 33C0                    xor eax, eax
:00407E39 83C40C                  add esp, 0000000C
:00407E3C F2                      repnz
:00407E3D AE                      scasb
:00407E3E F7D1                    not ecx
:00407E40 2BF9                    sub edi, ecx
:00407E42 8BF7                    mov esi, edi
:00407E44 8BD1                    mov edx, ecx
:00407E46 BFFC044400              mov edi, 004404FC<--------------用户名
:00407E4B 83C9FF                  or ecx, FFFFFFFF
:00407E4E F2                      repnz
:00407E4F AE                      scasb
:00407E50 8BCA                    mov ecx, edx
:00407E52 4F                      dec edi
:00407E53 C1E902                  shr ecx, 02
:00407E56 F3                      repz
:00407E57 A5                      movsd<----------------把'Multi Clipboard'接在小写的用户名后
:00407E58 8BCA                    mov ecx, edx
:00407E5A 8B542418                mov edx, dword ptr [esp+18]<---------0x9b((2)的计算结果)
:00407E5E 83E103                  and ecx, 00000003
:00407E61 F3                      repz
:00407E62 A4                      movsb
:00407E63 8A0DFC044400            mov cl, byte ptr [004404FC]<---------连接后的第1位0x6c('l')
:00407E69 33F6                    xor esi, esi
:00407E6B 3ACB                    cmp cl, bl
:00407E6D 89742410                mov dword ptr [esp+10], esi
:00407E71 7431                    je 00407EA4

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00407E9A(C)
|
:00407E73 8BC1                    mov eax, ecx
:00407E75 25FF000000              and eax, 000000FF
:00407E7A 8D3CC0                  lea edi, dword ptr [eax+8*eax]<---------9*0x6c==0x3cc
:00407E7D 03C6                    add eax, esi<---------------------------0x6c+0x0(序号)==0x6c
:00407E7F 8D0478                  lea eax, dword ptr [eax+2*edi]<---------0x6c+2*0x3cc==0x804
:00407E82 03D0                    add edx, eax<---------------------------0x9b+0x804==0x89f
:00407E84 80F960                  cmp cl, 60<------------------------第1位为字母
:00407E87 7305                    jnb 00407E8E
:00407E89 83C215                  add edx, 00000015
:00407E8C EB03                    jmp 00407E91

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00407E87(C)
|
:00407E8E 83EA15                  sub edx, 00000015<-------------------0x89f-0x15==0x88a

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00407E8C(U)
|
:00407E91 8A8EFD044400            mov cl, byte ptr [esi+004404FD]<----------取第2位
:00407E97 46                      inc esi
:00407E98 3ACB                    cmp cl, bl<-------------------------是否为0
:00407E9A 75D7                    jne 00407E73<-----------------------不为0则继续循环
:00407E9C 89742410                mov dword ptr [esp+10], esi<--------0x384
:00407EA0 89542418                mov dword ptr [esp+18], edx<--------0xc28a<---最后结果
                                                                      ~~~~~~

            ******************************************************************
                0xc28a==049802

                049802 的ASCII值为 30 34 39 38 30 32
                                    +0 +1 +2 +3 +4 +5
                                    —————————
                                    30 35 3B 3B 34 37 <------------注册码
            ******************************************************************

=========================================================================================
* Referenced by a CALL at Address:<----------------------------------计算(2)
|:00407E2B 
|
:00407FE0 55                      push ebp
:00407FE1 8BEC                    mov ebp, esp
:00407FE3 83EC08                  sub esp, 00000008
:00407FE6 8B450C                  mov eax, dword ptr [ebp+0C]
:00407FE9 53                      push ebx
:00407FEA 56                      push esi
:00407FEB 57                      push edi
:00407FEC 8B7D08                  mov edi, dword ptr [ebp+08]
:00407FEF 668B08                  mov cx, word ptr [eax]
:00407FF2 660FB605FD044400        movzx ax, byte ptr [004404FD]<-------用户名的第2位0x61('a')
:00407FFA 8B17                    mov edx, dword ptr [edi]
:00407FFC 894DF8                  mov dword ptr [ebp-08], ecx
:00407FFF 660FB60DFE044400        movzx cx, byte ptr [004404FE]<-------用户名的第3位0x6e('n')
:00408007 8955FC                  mov dword ptr [ebp-04], edx
:0040800A 03C8                    add ecx, eax<------------------------0x6e+0x61==0xcf
:0040800C 660FB615FC044400        movzx dx, byte ptr [004404FC]<-------用户名的第1位0x6c('l')
:00408014 03CA                    add ecx, edx<------------------------0xcf+0x6c==0x13b
:00408016 B856555555              mov eax, 55555556
:0040801B 81E1FFFF0000            and ecx, 0000FFFF
:00408021 F7E9                    imul ecx<-----------------------0x55555556*0x13b==0x69000000d2
:00408023 8BC2                    mov eax, edx<------------------------0x69
:00408025 8BC8                    mov ecx, eax
:00408027 C1E91F                  shr ecx, 1F<-------------------------0x69>>0x1f==0x0
:0040802A 03C1                    add eax, ecx<------------------------0x69+0x0===0x69
:0040802C 3C30                    cmp al, 30
:0040802E 7208                    jb 00408038
:00408030 3C39                    cmp al, 39
:00408032 7704                    ja 00408038<--------------------------是否位数字
:00408034 2C30                    sub al, 30<---------------------------是则减0x30
:00408036 EB1A                    jmp 00408052

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040802E(C), :00408032(C)
|
:00408038 3C61                    cmp al, 61
:0040803A 7208                    jb 00408044
:0040803C 3C7A                    cmp al, 7A
:0040803E 7704                    ja 00408044<---------------------是否为字母
:00408040 2C61                    sub al, 61<----------------------是则减0x61
:00408042 EB0E                    jmp 00408052                    0x69-0x61==0x8

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00408036(U), :00408042(U), :00408046(C), :0040804E(U)
|
:00408052 8AC8                    mov cl, al<--------------------------0x8
:00408054 80F91A                  cmp cl, 1A
:00408057 884D0C                  mov byte ptr [ebp+0C], cl
:0040805A 761F                    jbe 0040807B

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040805A(C)
|
:0040807B 8B450C                  mov eax, dword ptr [ebp+0C]
:0040807E 8BC8                    mov ecx, eax
:00408080 81E1FF000000            and ecx, 000000FF<------------------0x8
:00408086 49                      dec ecx<----------------------------0x8-0x1==0x7
:00408087 83F918                  cmp ecx, 00000018
:0040808A 0F87EA000000            ja 0040817A
:00408090 FF248DEC814000          jmp dword ptr [4*ecx+004081EC]<-----jmp [00408208]
                                                                      => jmp 0040815a

=======================================================================================
* Referenced by a CALL at Address:
|:0040815B 
|
:00407780 8B4C2404                mov ecx, dword ptr [esp+04]<--------0x8
:00407784 8B15FC044400            mov edx, dword ptr [004404FC]<------0x63('l')
:0040778A 81E1FF000000            and ecx, 000000FF
:00407790 81E2FF000000            and edx, 000000FF
:00407796 0FAFD1                  imul edx, ecx<----------------------0x63*0x8==0x360
:00407799 B8ABAAAAAA              mov eax, AAAAAAAB
:0040779E 8D0C49                  lea ecx, dword ptr [ecx+2*ecx]<-----0x3*0x8==0x18
:004077A1 F7E2                    mul edx<----------------0xaaaaaaab*0x360==0x24000000120
:004077A3 8BC2                    mov eax, edx<-------------------0x240
:004077A5 D1E8                    shr eax, 1<---------------------0x240>>0x1==0x120
:004077A7 C1E903                  shr ecx, 03<--------------------0x18>>0x3==0x3
:004077AA 0FAFC1                  imul eax, ecx<------------------0x120*0x3==0x360
:004077AD 83C008                  add eax, 00000008<--------------0x360+0x8==0x368
:004077B0 C3                      ret<----------------------------回到:00408160
=======================================================
:0040815A 50                      push eax

=======================================================
:0040815A 50                      push eax
:0040815B E820F6FFFF              call 00407780
:00408160 EB1E                    jmp 00408180<------------------回到这里

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040809D(U), :004080A8(U), :004080B3(U), :004080BE(U), :004080C9(U)
|:004080D4(U), :004080DF(U), :004080EA(U), :004080F5(U), :00408100(U)
|:00408108(U), :00408110(U), :00408118(U), :00408120(U), :00408128(U)
|:00408130(U), :00408138(U), :00408140(U), :00408148(U), :00408150(U)
|:00408158(U), :00408160(U), :00408168(U), :00408170(U), :00408178(U)
|
:00408180 83C404                  add esp, 00000004
:00408183 88450F                  mov byte ptr [ebp+0F], al<-----------0x68
:00408186 6656                    push si
:00408188 2BC0                    sub eax, eax
:0040818A 2BDB                    sub ebx, ebx
:0040818C 2BC9                    sub ecx, ecx
:0040818E 2BD2                    sub edx, edx
:00408190 2BF6                    sub esi, esi
:00408192 668BC3                  mov ax, bx
:00408195 66FF75FC                push [ebp-04]
:00408199 662BD2                  sub dx, dx
:0040819C 8A550F                  mov dl, byte ptr [ebp+0F]<---------0x68
:0040819F 6689550A                mov word ptr [ebp+0A], dx
:004081A3 66FF750A                push [ebp+0A]
:004081A7 662BD8                  sub bx, ax
:004081AA 668B5DF8                mov bx, word ptr [ebp-08]
:004081AE 6658                    pop ax<----------------------------0x68
:004081B0 0283FC044400            add al, byte ptr [ebx+004404FC]<---用户名的第2位0x61('a')
:004081B6 668BC8                  mov cx, ax                      \---0x68+0x61==0xc9
:004081B9 668BF3                  mov si, bx
:004081BC 8AA6B8A54300            mov ah, byte ptr [esi+0043A5B8]<---查表,0x37
:004081C2 0AC4                    or al, ah<------------------------0xc9|0x37==0xff
:004081C4 66D3C8                  ror ax, cl<-----------------------0x37ff>>0xc9==0xff9b
:004081C7 6659                    pop cx
:004081C9 6625FF00                and ax, 00FF<---------------------0x9b
:004081CD 6603C8                  add cx, ax
:004081D0 6651                    push cx
:004081D2 668BD8                  mov bx, ax
:004081D5 668BD3                  mov dx, bx
:004081D8 668F45FC                pop [ebp-04]
:004081DC 665E                    pop si
:004081DE 8B55FC                  mov edx, dword ptr [ebp-04]
:004081E1 8917                    mov dword ptr [edi], edx
:004081E3 5F                      pop edi
:004081E4 5E                      pop esi
:004081E5 5B                      pop ebx
:004081E6 8BE5                    mov esp, ebp
:004081E8 5D                      pop ebp
:004081E9 C3                      ret<-----------------------------返回:00407e30
=================================================
用户名:lancelot[CCG]
注册码:30 35 3B 3B 34 37

          ,;~;,
                /\_
              (  /
              (()      //)
              | \\  ,,;;'\
          __ _(  )m=(lancelot(================--------
        /'  ' '()/~' '.(, |
      ,;(      )||    |  ~
    ,;' \    /-(.;,  )            兰斯洛特[CCG][FCG]
          ) /      ) /
        //        ||                      2001.09.30
        )_\        )_\
========================================================