题目:分析刻录软件“CDRWinV5.05.001”注册码机制 [元宵节献礼]
软件介绍:CDRWin是一款德国人开发的强力的刻录软件,支持AUDIO CD、DATA CD、MP3 CD、VCD、混合型、多重扇区等格式光盘刻

录。独有的CUE SHEET语言可以100%定制盘片布局,避免其他刻录软件在不同Track之间产生间隔的现象;强大的备份功能可以防止

盘片上原有数据的损失;符合ISO9660 磁盘控制标准等功能。未注册版试用期限为14天。
工具:Softice,PEID

引子:今天又找到这个软件,安装试用了一下,觉得还不错的。我用2个小时跟踪其流程,才开始搞的我晕头转向的,陷阱重重,步

步设防,其注册码生成机制比较有趣,有点跟其他软件注册码产生机制不同。下面就开始分析过程。
拿PEID查看是否加壳,结果幸运,没有加壳,用VC开发的。启动程序,点击HELP,然后单击“Register”,弹出注册对话框,输入

用户名wanggang,输入公司名qingdao university,一开始输入注册码654321,可是下面经过跟踪,对注册码有一定要求,起码首

先要是这个形式:11111-22222-33333-44444-55555,共5段,每段5位。最后跟踪发现,光这样输入注册码还不行,还需要在前2段

内包含字符"C""D""R",顺序和位置不限,其实还是有限制的。所以把注册码改为11R1D-222C1-33333-44444-55555。调出SOFTICE

,下断点bpx hmemcpy,F5退出,点击OK按钮,被拦下。按9次F12来到主程序空间,然后换F10跟踪,来到如下代码处:
00423317  |. E8 70D30300    CALL <JMP.&MFC42.#2370>         //取公司名。
0042331C  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]    //我们返回到这里。
0042331F  |. 83C0 64        ADD EAX,64
00423322  |. 50             PUSH EAX
00423323  |. 68 16040000    PUSH 416
00423328  |. 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
0042332B  |. 51             PUSH ECX
0042332C  |. E8 5BD30300    CALL <JMP.&MFC42.#2370>         //取注册码。     
00423331  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]
00423334  |. 83C2 68        ADD EDX,68
00423337  |. 52             PUSH EDX
00423338  |. 68 15040000    PUSH 415
0042333D  |. 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
00423340  |. 50             PUSH EAX
00423341  |. E8 46D30300    CALL <JMP.&MFC42.#2370>         //取用户名。
00423346  |. 8BE5           MOV ESP,EBP
00423348  |. 5D             POP EBP
00423349  \. C2 0400        RETN 4
***************
上面程序流程返回到下面代码:
00423366  /. 55             PUSH EBP
00423367  |. 8BEC           MOV EBP,ESP
00423369  |. 83EC 10        SUB ESP,10
0042336C  |. 894D F8        MOV DWORD PTR SS:[EBP-8],ECX
0042336F  |. 6A 01          PUSH 1
00423371  |. 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8]
00423374  |. E8 1FD30300    CALL <JMP.&MFC42.#6334>
00423379  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
0042337C  |. 83C0 64        ADD EAX,64
0042337F  |. 50             PUSH EAX
00423380  |. B9 E4154800    MOV ECX,CDRWIN5.004815E4
00423385  |. E8 22D10300    CALL <JMP.&MFC42.#858>
0042338A  |. 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8]
0042338D  |. 83C1 68        ADD ECX,68
00423390  |. 51             PUSH ECX
00423391  |. B9 E0154800    MOV ECX,CDRWIN5.004815E0
00423396  |. E8 11D10300    CALL <JMP.&MFC42.#858>
0042339B  |. 8B55 F8        MOV EDX,DWORD PTR SS:[EBP-8]
0042339E  |. 83C2 60        ADD EDX,60
004233A1  |. 52             PUSH EDX
004233A2  |. B9 DC154800    MOV ECX,CDRWIN5.004815DC
004233A7  |. E8 00D10300    CALL <JMP.&MFC42.#858>
004233AC  |. 51             PUSH ECX
004233AD  |. 8BCC           MOV ECX,ESP
004233AF  |. 8965 FC        MOV DWORD PTR SS:[EBP-4],ESP
004233B2  |. 68 E4154800    PUSH CDRWIN5.004815E4
004233B7  |. E8 44D10300    CALL <JMP.&MFC42.#535>
004233BC  |. 8945 F4        MOV DWORD PTR SS:[EBP-C],EAX
004233BF  |. E8 71410300    CALL CDRWIN5.00457535            //这个函数就是“兔子”藏身的地方啦。(1)
004233C4  |. 83C4 04        ADD ESP,4
004233C7  |. 8945 F0        MOV DWORD PTR SS:[EBP-10],EAX    //注意EAX里面是返回值,如果注册码正确则返回41Ah。

否则返回其他相关代码。
004233CA  |. 817D F0 1A0400>CMP DWORD PTR SS:[EBP-10],41A    //返回值与41Ah比较,相等则成功,否则没戏。
004233D1  |. 7D 10          JGE SHORT CDRWIN5.004233E3       //如果是41A,这里就跳到显示成功函数。
004233D3  |. 6A FF          PUSH -1
004233D5  |. 6A 00          PUSH 0
004233D7  |. 68 69EF0000    PUSH 0EF69
004233DC  |. E8 D9D40300    CALL <JMP.&MFC42.#1199>          //这个显示错误系列号信息。
004233E1  |. EB 13          JMP SHORT CDRWIN5.004233F6
004233E3  |> 6A FF          PUSH -1
004233E5  |. 6A 00          PUSH 0
004233E7  |. 68 6AEF0000    PUSH 0EF6A
004233EC  |. E8 C9D40300    CALL <JMP.&MFC42.#1199>         //这个显示注册成功的信息。
004233F1  |. E8 DA520300    CALL CDRWIN5.004586D0
004233F6  |> 6A 00          PUSH 0
004233F8  |. 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8]
004233FB  |. E8 F4D60300    CALL <JMP.&MFC42.#2645>         //把信息写入注册表内。
00423400  |. 8BE5           MOV ESP,EBP
00423402  |. 5D             POP EBP
00423403  \. C3             RETN
====================================================================================================
下面分析004233BF处的 CALL CDRWIN5.00457535 :                 (1)
00457535  /$ 55             PUSH EBP                                               
00457536  |. 8BEC           MOV EBP,ESP
00457538  |. 6A FF          PUSH -1
0045753A  |. 68 7D6E4600    PUSH CDRWIN5.00466E7D
0045753F  |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
00457545  |. 50             PUSH EAX
00457546  |. 64:8925 000000>MOV DWORD PTR FS:[0],ESP
0045754D  |. 81EC F0000000  SUB ESP,0F0
00457553  |. 56             PUSH ESI
00457554  |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
0045755B  |. 68 9A044600    PUSH <JMP.&MFC42.#800>
00457560  |. 68 A6044600    PUSH <JMP.&MFC42.#540>
00457565  |. 6A 05          PUSH 5
00457567  |. 6A 04          PUSH 4
00457569  |. 8D45 DC        LEA EAX,DWORD PTR SS:[EBP-24]
0045756C  |. 50             PUSH EAX
0045756D  |. E8 C49C0000    CALL CDRWIN5.00461236
00457572  |. C645 FC 01     MOV BYTE PTR SS:[EBP-4],1              //下面把黑名单复制到其他地方。
00457576  |. 68 CCDF4700    PUSH CDRWIN5.0047DFCC           ;  ASCII "5BS8X-CCZDR-59B88-CBCK5-DGTSQ"
0045757B  |. 8D4D DC        LEA ECX,DWORD PTR SS:[EBP-24]
0045757E  |. E8 1D8F0000    CALL <JMP.&MFC42.#860>
00457583  |. 68 ECDF4700    PUSH CDRWIN5.0047DFEC           ;  ASCII "59S0@-5CRCD-57647-UPMY3-CEVRF"
00457588  |. 8D4D E0        LEA ECX,DWORD PTR SS:[EBP-20]
0045758B  |. E8 108F0000    CALL <JMP.&MFC42.#860>
00457590  |. 68 0CE04700    PUSH CDRWIN5.0047E00C           ;  ASCII "5ES8D-D5CRT-55606-D1CL0-BNAZL"
00457595  |. 8D4D E4        LEA ECX,DWORD PTR SS:[EBP-1C]
00457598  |. E8 038F0000    CALL <JMP.&MFC42.#860>
0045759D  |. 68 2CE04700    PUSH CDRWIN5.0047E02C           ;  ASCII "59S0C-RDQMN-57B22-6U6Y6-7TQDU"
004575A2  |. 8D4D E8        LEA ECX,DWORD PTR SS:[EBP-18]
004575A5  |. E8 F68E0000    CALL <JMP.&MFC42.#860>
004575AA  |. 68 4CE04700    PUSH CDRWIN5.0047E04C           ;  ASCII "5DC8R-LASH8-57228-LASH8-DLASH"
004575AF  |. 8D4D EC        LEA ECX,DWORD PTR SS:[EBP-14]
004575B2  |. E8 E98E0000    CALL <JMP.&MFC42.#860>
004575B7  |. C745 B4 000000>MOV DWORD PTR SS:[EBP-4C],0
004575BE  |. EB 09          JMP SHORT CDRWIN5.004575C9      
004575C0  |> 8B4D B4        /MOV ECX,DWORD PTR SS:[EBP-4C]   //下面这个循环拿输入的假码与黑名单依次比较。
004575C3  |. 83C1 01        |ADD ECX,1
004575C6  |. 894D B4        |MOV DWORD PTR SS:[EBP-4C],ECX
004575C9  |> 837D B4 04      CMP DWORD PTR SS:[EBP-4C],4     //这是比较次数,总共5次。
004575CD  |. 7F 4F          |JG SHORT CDRWIN5.0045761E       //如果比较结束则跳走。
004575CF  |. 8B55 B4        |MOV EDX,DWORD PTR SS:[EBP-4C]   
004575D2  |. 8D4C95 DC      |LEA ECX,DWORD PTR SS:[EBP+EDX*4-24]
004575D6  |. E8 95BBFAFF    |CALL CDRWIN5.00403170           //取黑名单上的注册码地址。
004575DB  |. 50             |PUSH EAX
004575DC  |. 8D4D 08        |LEA ECX,DWORD PTR SS:[EBP+8]    //取输入的假码地址。  
004575DF  |. E8 BCEEFAFF    |CALL CDRWIN5.004064A0           //进行比较。如果不在黑名单上则返回FFFFFFFh到EAX。
004575E4  |. 85C0           |TEST EAX,EAX                    //EAX=FFFFFFFF。
004575E6  |. 75 34          |JNZ SHORT CDRWIN5.0045761C      //未完继续下一个。
004575E8  |. C745 90 19FCFF>|MOV DWORD PTR SS:[EBP-70],-3E7
004575EF  |. C645 FC 00     |MOV BYTE PTR SS:[EBP-4],0
004575F3  |. 68 9A044600    |PUSH <JMP.&MFC42.#800>
004575F8  |. 6A 05          |PUSH 5
004575FA  |. 6A 04          |PUSH 4
004575FC  |. 8D45 DC        |LEA EAX,DWORD PTR SS:[EBP-24]
004575FF  |. 50             |PUSH EAX
00457600  |. E8 1B9B0000    |CALL CDRWIN5.00461120
00457605  |. C745 FC FFFFFF>|MOV DWORD PTR SS:[EBP-4],-1
0045760C  |. 8D4D 08        |LEA ECX,DWORD PTR SS:[EBP+8]
0045760F  |. E8 868E0000    |CALL <JMP.&MFC42.#800>
00457614  |. 8B45 90        |MOV EAX,DWORD PTR SS:[EBP-70]
00457617  |. E9 CB0F0000    |JMP CDRWIN5.004585E7
0045761C  |>^EB A2          \JMP SHORT CDRWIN5.004575C0      //这里循环上去。
0045761E  |> 6A 00          PUSH 0                           //对第1位注册码进行验证。
00457620  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457623  |. E8 4889FCFF    CALL CDRWIN5.0041FF70            //取出参数指定第1位注册码字符。
00457628  |. 0FBEC8         MOVSX ECX,AL
0045762B  |. 83F9 35        CMP ECX,35                       //与35h比较,实际上就是字符'5'。
0045762E  |. 75 7C          JNZ SHORT CDRWIN5.004576AC       //不是5的话则跳走。如果第一位是5,走一条途径,不是

走另一途径,最后还必须是5。
00457630  |. 6A 01          PUSH 1
00457632  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]     //如果第一位是5,则下面比较后面4位字符是否

是'C','C','8','R'. 如果是的话,则OVER。
00457635  |. E8 3689FCFF    CALL CDRWIN5.0041FF70
0045763A  |. 0FBED0         MOVSX EDX,AL
0045763D  |. 83FA 43        CMP EDX,43
00457640  |. 75 6A          JNZ SHORT CDRWIN5.004576AC
00457642  |. 6A 02          PUSH 2
00457644  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457647  |. E8 2489FCFF    CALL CDRWIN5.0041FF70
0045764C  |. 0FBEC0         MOVSX EAX,AL
0045764F  |. 83F8 43        CMP EAX,43
00457652  |. 75 58          JNZ SHORT CDRWIN5.004576AC
00457654  |. 6A 03          PUSH 3
00457656  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457659  |. E8 1289FCFF    CALL CDRWIN5.0041FF70
0045765E  |. 0FBEC8         MOVSX ECX,AL
00457661  |. 83F9 38        CMP ECX,38
00457664  |. 75 46          JNZ SHORT CDRWIN5.004576AC
00457666  |. 6A 04          PUSH 4
00457668  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
0045766B  |. E8 0089FCFF    CALL CDRWIN5.0041FF70
00457670  |. 0FBED0         MOVSX EDX,AL
00457673  |. 83FA 52        CMP EDX,52
00457676  |. 75 34          JNZ SHORT CDRWIN5.004576AC
00457678  |. C745 8C 66FDFF>MOV DWORD PTR SS:[EBP-74],-29A
0045767F  |. C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
00457683  |. 68 9A044600    PUSH <JMP.&MFC42.#800>
00457688  |. 6A 05          PUSH 5
0045768A  |. 6A 04          PUSH 4
0045768C  |. 8D45 DC        LEA EAX,DWORD PTR SS:[EBP-24]
0045768F  |. 50             PUSH EAX
00457690  |. E8 8B9A0000    CALL CDRWIN5.00461120
00457695  |. C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
0045769C  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
0045769F  |. E8 F68D0000    CALL <JMP.&MFC42.#800>
004576A4  |. 8B45 8C        MOV EAX,DWORD PTR SS:[EBP-74]
004576A7  |. E9 3B0F0000    JMP CDRWIN5.004585E7                //如果前面字符是5CC8R的话,则OVER。  
004576AC  |> 6A 00          PUSH 0                              //下面开始比较前5位字符是否是5CD8R。
004576AE  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004576B1  |. E8 BA88FCFF    CALL CDRWIN5.0041FF70
004576B6  |. 0FBEC8         MOVSX ECX,AL
004576B9  |. 83F9 35        CMP ECX,35
004576BC  |. 75 7C          JNZ SHORT CDRWIN5.0045773A          //不是5则跳走。下面依次判断后续各位是否

是'C','D','8','R'.
004576BE  |. 6A 01          PUSH 1
004576C0  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004576C3  |. E8 A888FCFF    CALL CDRWIN5.0041FF70
004576C8  |. 0FBED0         MOVSX EDX,AL
004576CB  |. 83FA 43        CMP EDX,43
004576CE  |. 75 6A          JNZ SHORT CDRWIN5.0045773A
004576D0  |. 6A 02          PUSH 2
004576D2  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004576D5  |. E8 9688FCFF    CALL CDRWIN5.0041FF70
004576DA  |. 0FBEC0         MOVSX EAX,AL
004576DD  |. 83F8 44        CMP EAX,44
004576E0  |. 75 58          JNZ SHORT CDRWIN5.0045773A
004576E2  |. 6A 03          PUSH 3
004576E4  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004576E7  |. E8 8488FCFF    CALL CDRWIN5.0041FF70
004576EC  |. 0FBEC8         MOVSX ECX,AL
004576EF  |. 83F9 38        CMP ECX,38
004576F2  |. 75 46          JNZ SHORT CDRWIN5.0045773A
004576F4  |. 6A 04          PUSH 4
004576F6  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004576F9  |. E8 7288FCFF    CALL CDRWIN5.0041FF70
004576FE  |. 0FBED0         MOVSX EDX,AL
00457701  |. 83FA 52        CMP EDX,52
00457704  |. 75 34          JNZ SHORT CDRWIN5.0045773A
00457706  |. C745 88 66FDFF>MOV DWORD PTR SS:[EBP-78],-29A
0045770D  |. C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
00457711  |. 68 9A044600    PUSH <JMP.&MFC42.#800>
00457716  |. 6A 05          PUSH 5
00457718  |. 6A 04          PUSH 4
0045771A  |. 8D45 DC        LEA EAX,DWORD PTR SS:[EBP-24]
0045771D  |. 50             PUSH EAX
0045771E  |. E8 FD990000    CALL CDRWIN5.00461120
00457723  |. C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
0045772A  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
0045772D  |. E8 688D0000    CALL <JMP.&MFC42.#800>
00457732  |. 8B45 88        MOV EAX,DWORD PTR SS:[EBP-78]
00457735  |. E9 AD0E0000    JMP CDRWIN5.004585E7                  //如果前面5位是'5CD8R',同样OVER。
0045773A  |> C745 9C 030000>MOV DWORD PTR SS:[EBP-64],3           //3送[EBP-64]内存。
00457741  |. 8B4D 9C        MOV ECX,DWORD PTR SS:[EBP-64]
00457744  |. 6BC9 03        IMUL ECX,ECX,3                        //ECX=ECX*3。
00457747  |. 894D 9C        MOV DWORD PTR SS:[EBP-64],ECX
0045774A  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
0045774D  |. E8 EE3EFBFF    CALL CDRWIN5.0040B640                 //ECX加9,结果是1Dh。
00457752  |. 8B55 9C        MOV EDX,DWORD PTR SS:[EBP-64]
00457755  |. 83C2 14        ADD EDX,14                            //EDX加14h结果是1Dh.
00457758  |. 3BC2           CMP EAX,EDX                           //比较肯定相等。
0045775A  |. 74 34          JE SHORT CDRWIN5.00457790             //跳走。
0045775C  |. C745 84 010000>MOV DWORD PTR SS:[EBP-7C],1
00457763  |. C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
00457767  |. 68 9A044600    PUSH <JMP.&MFC42.#800>
0045776C  |. 6A 05          PUSH 5
0045776E  |. 6A 04          PUSH 4
00457770  |. 8D45 DC        LEA EAX,DWORD PTR SS:[EBP-24]
00457773  |. 50             PUSH EAX
00457774  |. E8 A7990000    CALL CDRWIN5.00461120
00457779  |. C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
00457780  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457783  |. E8 128D0000    CALL <JMP.&MFC42.#800>
00457788  |. 8B45 84        MOV EAX,DWORD PTR SS:[EBP-7C]
0045778B  |. E9 570E0000    JMP CDRWIN5.004585E7
00457790  |> 68 6CE04700    PUSH CDRWIN5.0047E06C                     
00457795  |. 8D4D 98        LEA ECX,DWORD PTR SS:[EBP-68]         //下面一直到4578E7验证注册码内的短杠'-'。
00457798  |. E8 218D0000    CALL <JMP.&MFC42.#537>                //复制'-'到另一地方。
0045779D  |. C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
004577A1  |. 6A 01          PUSH 1
004577A3  |. 6A 05          PUSH 5                                //序号为5的位置进栈。实际就是第6位。
004577A5  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004577A8  |. E8 C387FCFF    CALL CDRWIN5.0041FF70
004577AD  |. 50             PUSH EAX
004577AE  |. 8D8D 7CFFFFFF  LEA ECX,DWORD PTR SS:[EBP-84]
004577B4  |. E8 05930000    CALL <JMP.&MFC42.#536>
004577B9  |. C645 FC 03     MOV BYTE PTR SS:[EBP-4],3
004577BD  |. 8D4D 98        LEA ECX,DWORD PTR SS:[EBP-68]
004577C0  |. 51             PUSH ECX
004577C1  |. 8D95 7CFFFFFF  LEA EDX,DWORD PTR SS:[EBP-84]
004577C7  |. 52             PUSH EDX
004577C8  |. E8 239DFBFF    CALL CDRWIN5.004114F0
004577CD  |. 25 FF000000    AND EAX,0FF
004577D2  |. 85C0           TEST EAX,EAX
004577D4  |. 0F85 03010000  JNZ CDRWIN5.004578DD                  //此处未跳。
004577DA  |. 6A 01          PUSH 1
004577DC  |. 6A 0B          PUSH 0B                               //序号为B的位置进栈。实际就是第12位。
004577DE  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004577E1  |. E8 8A87FCFF    CALL CDRWIN5.0041FF70
004577E6  |. 50             PUSH EAX
004577E7  |. 8D8D 74FFFFFF  LEA ECX,DWORD PTR SS:[EBP-8C]
004577ED  |. E8 CC920000    CALL <JMP.&MFC42.#536>
004577F2  |. C645 FC 04     MOV BYTE PTR SS:[EBP-4],4
004577F6  |. 8D45 98        LEA EAX,DWORD PTR SS:[EBP-68]
004577F9  |. 50             PUSH EAX
004577FA  |. 8D8D 74FFFFFF  LEA ECX,DWORD PTR SS:[EBP-8C]
00457800  |. 51             PUSH ECX
00457801  |. E8 EA9CFBFF    CALL CDRWIN5.004114F0
00457806  |. 8885 78FFFFFF  MOV BYTE PTR SS:[EBP-88],AL
0045780C  |. C645 FC 03     MOV BYTE PTR SS:[EBP-4],3
00457810  |. 8D8D 74FFFFFF  LEA ECX,DWORD PTR SS:[EBP-8C]
00457816  |. E8 7F8C0000    CALL <JMP.&MFC42.#800>
0045781B  |. 8B95 78FFFFFF  MOV EDX,DWORD PTR SS:[EBP-88]
00457821  |. 81E2 FF000000  AND EDX,0FF
00457827  |. 85D2           TEST EDX,EDX
00457829  |. 0F85 AE000000  JNZ CDRWIN5.004578DD
0045782F  |. 6A 01          PUSH 1
00457831  |. 6A 11          PUSH 11                               //序号为11H的位置进栈。实际就是第18位。
00457833  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457836  |. E8 3587FCFF    CALL CDRWIN5.0041FF70
0045783B  |. 50             PUSH EAX
0045783C  |. 8D8D 6CFFFFFF  LEA ECX,DWORD PTR SS:[EBP-94]
00457842  |. E8 77920000    CALL <JMP.&MFC42.#536>
00457847  |. C645 FC 05     MOV BYTE PTR SS:[EBP-4],5
0045784B  |. 8D45 98        LEA EAX,DWORD PTR SS:[EBP-68]
0045784E  |. 50             PUSH EAX
0045784F  |. 8D8D 6CFFFFFF  LEA ECX,DWORD PTR SS:[EBP-94]
00457855  |. 51             PUSH ECX
00457856  |. E8 959CFBFF    CALL CDRWIN5.004114F0
0045785B  |. 8885 70FFFFFF  MOV BYTE PTR SS:[EBP-90],AL
00457861  |. C645 FC 03     MOV BYTE PTR SS:[EBP-4],3
00457865  |. 8D8D 6CFFFFFF  LEA ECX,DWORD PTR SS:[EBP-94]
0045786B  |. E8 2A8C0000    CALL <JMP.&MFC42.#800>
00457870  |. 8B95 70FFFFFF  MOV EDX,DWORD PTR SS:[EBP-90]
00457876  |. 81E2 FF000000  AND EDX,0FF
0045787C  |. 85D2           TEST EDX,EDX
0045787E  |. 75 5D          JNZ SHORT CDRWIN5.004578DD
00457880  |. 6A 01          PUSH 1
00457882  |. 6A 17          PUSH 17                               //序号为17H的位置进栈。实际就是第24位。
00457884  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457887  |. E8 E486FCFF    CALL CDRWIN5.0041FF70
0045788C  |. 50             PUSH EAX
0045788D  |. 8D8D 64FFFFFF  LEA ECX,DWORD PTR SS:[EBP-9C]
00457893  |. E8 26920000    CALL <JMP.&MFC42.#536>
00457898  |. C645 FC 06     MOV BYTE PTR SS:[EBP-4],6
0045789C  |. 8D45 98        LEA EAX,DWORD PTR SS:[EBP-68]
0045789F  |. 50             PUSH EAX
004578A0  |. 8D8D 64FFFFFF  LEA ECX,DWORD PTR SS:[EBP-9C]
004578A6  |. 51             PUSH ECX
004578A7  |. E8 449CFBFF    CALL CDRWIN5.004114F0
004578AC  |. 8885 68FFFFFF  MOV BYTE PTR SS:[EBP-98],AL
004578B2  |. C645 FC 03     MOV BYTE PTR SS:[EBP-4],3
004578B6  |. 8D8D 64FFFFFF  LEA ECX,DWORD PTR SS:[EBP-9C]
004578BC  |. E8 D98B0000    CALL <JMP.&MFC42.#800>
004578C1  |. 8B95 68FFFFFF  MOV EDX,DWORD PTR SS:[EBP-98]
004578C7  |. 81E2 FF000000  AND EDX,0FF
004578CD  |. 85D2           TEST EDX,EDX
004578CF  |. 75 0C          JNZ SHORT CDRWIN5.004578DD            //此处未跳。
004578D1  |. C785 14FFFFFF >MOV DWORD PTR SS:[EBP-EC],0
004578DB  |. EB 0A          JMP SHORT CDRWIN5.004578E7            //此处跳。
004578DD  |> C785 14FFFFFF >MOV DWORD PTR SS:[EBP-EC],1
004578E7  |> 8A85 14FFFFFF  MOV AL,BYTE PTR SS:[EBP-EC]           
004578ED  |. 8845 80        MOV BYTE PTR SS:[EBP-80],AL
004578F0  |. C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
004578F4  |. 8D8D 7CFFFFFF  LEA ECX,DWORD PTR SS:[EBP-84]
004578FA  |. E8 9B8B0000    CALL <JMP.&MFC42.#800>
004578FF  |. 8B4D 80        MOV ECX,DWORD PTR SS:[EBP-80]
00457902  |. 81E1 FF000000  AND ECX,0FF
00457908  |. 85C9           TEST ECX,ECX
0045790A  |. 74 46          JE SHORT CDRWIN5.00457952             //这里跳走。        
*省去多行*
00457952  |> C745 CC 000000>MOV DWORD PTR SS:[EBP-34],0       
00457959  |. 8D4D AC        LEA ECX,DWORD PTR SS:[EBP-54]
0045795C  |. E8 458B0000    CALL <JMP.&MFC42.#540>
00457961  |. C645 FC 07     MOV BYTE PTR SS:[EBP-4],7
00457965  |. 6A 0B          PUSH 0B
00457967  |. 8D85 5CFFFFFF  LEA EAX,DWORD PTR SS:[EBP-A4]
0045796D  |. 50             PUSH EAX
0045796E  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457971  |. E8 268F0000    CALL <JMP.&MFC42.#4129>              //复制前2段注册码到另外地址。
00457976  |. 8985 10FFFFFF  MOV DWORD PTR SS:[EBP-F0],EAX        //前2段注册码的地址在EAX。
0045797C  |. 8B8D 10FFFFFF  MOV ECX,DWORD PTR SS:[EBP-F0]
00457982  |. 898D 0CFFFFFF  MOV DWORD PTR SS:[EBP-F4],ECX
00457988  |. C645 FC 08     MOV BYTE PTR SS:[EBP-4],8
0045798C  |. 8B95 0CFFFFFF  MOV EDX,DWORD PTR SS:[EBP-F4]
00457992  |. 52             PUSH EDX
00457993  |. 8D4D AC        LEA ECX,DWORD PTR SS:[EBP-54]
00457996  |. E8 118B0000    CALL <JMP.&MFC42.#858>
0045799B  |. C645 FC 07     MOV BYTE PTR SS:[EBP-4],7
0045799F  |. 8D8D 5CFFFFFF  LEA ECX,DWORD PTR SS:[EBP-A4]
004579A5  |. E8 F08A0000    CALL <JMP.&MFC42.#800>
004579AA  |. 68 70E04700    PUSH CDRWIN5.0047E070                //字符'C'的地址进栈。
004579AF  |. 8D4D AC        LEA ECX,DWORD PTR SS:[EBP-54]
004579B2  |. E8 978E0000    CALL <JMP.&MFC42.#2764>              //如果前2段注册码包含字符'C'则OK,否则没戏。

字符'C'的位置送EAX返回。
004579B7  |. 83F8 FF        CMP EAX,-1
004579BA  |. 75 09          JNZ SHORT CDRWIN5.004579C5           //前面比较,如果不是0则跳走。此处跳。
004579BC  |. C745 CC 000000>MOV DWORD PTR SS:[EBP-34],0
004579C3  |. EB 07          JMP SHORT CDRWIN5.004579CC
004579C5  |> C745 CC 010000>MOV DWORD PTR SS:[EBP-34],1          //请留意这个:[EBP-34]的值必须为1,最后用到它

。          
004579CC  |> 837D CC 01     CMP DWORD PTR SS:[EBP-34],1
004579D0  |. 75 1B          JNZ SHORT CDRWIN5.004579ED           //此处不跳。
004579D2  |. 68 74E04700    PUSH CDRWIN5.0047E074                //字符'D'的地址进栈。 
004579D7  |. 8D4D AC        LEA ECX,DWORD PTR SS:[EBP-54]
004579DA  |. E8 6F8E0000    CALL <JMP.&MFC42.#2764>              //如果前2段注册码包含字符'D'则OK,否则OVER。

字符'D'的位置送EAX返回。
004579DF  |. 83F8 FF        CMP EAX,-1
004579E2  |. 74 09          JE SHORT CDRWIN5.004579ED            //如果为0则跳。此处不跳。
004579E4  |. C745 CC 010000>MOV DWORD PTR SS:[EBP-34],1
004579EB  |. EB 07          JMP SHORT CDRWIN5.004579F4
004579ED  |> C745 CC 000000>MOV DWORD PTR SS:[EBP-34],0
004579F4  |> 837D CC 01     CMP DWORD PTR SS:[EBP-34],1
004579F8  |. 75 1B          JNZ SHORT CDRWIN5.00457A15          //此处未跳。
004579FA  |. 68 78E04700    PUSH CDRWIN5.0047E078               //字符'R'的地址进栈。 
004579FF  |. 8D4D AC        LEA ECX,DWORD PTR SS:[EBP-54]
00457A02  |. E8 478E0000    CALL <JMP.&MFC42.#2764>             //如果前2段注册码包含字符'R'则OK,否则OVER。字

符'R'的位置送EAX返回。
00457A07  |. 83F8 FF        CMP EAX,-1
00457A0A  |. 74 09          JE SHORT CDRWIN5.00457A15           //此处未跳。
00457A0C  |. C745 CC 010000>MOV DWORD PTR SS:[EBP-34],1         //你看这个:[EBP-34]内一直保持1,说明注册码前面

2段包含了规定的字符了。OK。否则。。。          
00457A13  |. EB 07          JMP SHORT CDRWIN5.00457A1C
00457A15  |> C745 CC 000000>MOV DWORD PTR SS:[EBP-34],0
00457A1C  |> 68 7CE04700    PUSH CDRWIN5.0047E07C                
00457A21  |. 8D4D AC        LEA ECX,DWORD PTR SS:[EBP-54]
00457A24  |. E8 258E0000    CALL <JMP.&MFC42.#2764>             //如果前2段注册码包含字符'P'则OVER。
00457A29  |. 83F8 FF        CMP EAX,-1
00457A2C  |. 74 52          JE SHORT CDRWIN5.00457A80           //如果不包含则EAX返回FFh。这里跳走。
*省去多行*
00457A80  |> 68 80E04700    PUSH CDRWIN5.0047E080         
00457A85  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457A88  |. E8 C18D0000    CALL <JMP.&MFC42.#2764>             //如果前2段注册码包含字符'O'则OVER。
00457A8D  |. 83F8 FF        CMP EAX,-1
00457A90  |. 74 52          JE SHORT CDRWIN5.00457AE4           //如果不包含则EAX返回FFh。这里跳走。
00457A92  |. C785 54FFFFFF >MOV DWORD PTR SS:[EBP-AC],0E
00457A9C  |. C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
00457AA0  |. 8D4D AC        LEA ECX,DWORD PTR SS:[EBP-54]
00457AA3  |. E8 F2890000    CALL <JMP.&MFC42.#800>
00457AA8  |. C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
00457AAC  |. 8D4D 98        LEA ECX,DWORD PTR SS:[EBP-68]
00457AAF  |. E8 E6890000    CALL <JMP.&MFC42.#800>
00457AB4  |. C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
00457AB8  |. 68 9A044600    PUSH <JMP.&MFC42.#800>
00457ABD  |. 6A 05          PUSH 5
00457ABF  |. 6A 04          PUSH 4
00457AC1  |. 8D4D DC        LEA ECX,DWORD PTR SS:[EBP-24]
00457AC4  |. 51             PUSH ECX
00457AC5  |. E8 56960000    CALL CDRWIN5.00461120
00457ACA  |. C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
00457AD1  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457AD4  |. E8 C1890000    CALL <JMP.&MFC42.#800>
00457AD9  |. 8B85 54FFFFFF  MOV EAX,DWORD PTR SS:[EBP-AC]
00457ADF  |. E9 030B0000    JMP CDRWIN5.004585E7
00457AE4  |> 68 84E04700    PUSH CDRWIN5.0047E084
00457AE9  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457AEC  |. E8 5D8D0000    CALL <JMP.&MFC42.#2764>             //如果前2段注册码包含字符'I'则OVER。
00457AF1  |. 83F8 FF        CMP EAX,-1
00457AF4  |. 74 52          JE SHORT CDRWIN5.00457B48           //如果不包含则EAX返回FFh。这里跳走。
*省去多行通往OVER 的代码*
00457B48  |> C745 B0 000000>MOV DWORD PTR SS:[EBP-50],0
00457B4F  |. C745 A8 060000>MOV DWORD PTR SS:[EBP-58],6
00457B56  |. EB 09          JMP SHORT CDRWIN5.00457B61          //此处跳。
00457B58  |> 8B45 A8        /MOV EAX,DWORD PTR SS:[EBP-58]      //下面的循环,累加第2,3段注册码的ASSCI码值。
00457B5B  |. 83C0 01        |ADD EAX,1
00457B5E  |. 8945 A8        |MOV DWORD PTR SS:[EBP-58],EAX
00457B61  |> 837D A8 0B      CMP DWORD PTR SS:[EBP-58],0B
00457B65  |. 7D 33          |JGE SHORT CDRWIN5.00457B9A
00457B67  |. 8B4D A8        |MOV ECX,DWORD PTR SS:[EBP-58]
00457B6A  |. 51             |PUSH ECX
00457B6B  |. 8D4D 08        |LEA ECX,DWORD PTR SS:[EBP+8]
00457B6E  |. E8 FD83FCFF    |CALL CDRWIN5.0041FF70              //取对应位置的字符。
00457B73  |. 0FBED0         |MOVSX EDX,AL
00457B76  |. 8B45 B0        |MOV EAX,DWORD PTR SS:[EBP-50]      //取出上次中间结果。
00457B79  |. 03C2           |ADD EAX,EDX                        //累加。
00457B7B  |. 8945 B0        |MOV DWORD PTR SS:[EBP-50],EAX
00457B7E  |. 8B4D A8        |MOV ECX,DWORD PTR SS:[EBP-58]
00457B81  |. 83C1 06        |ADD ECX,6                          //ECX加6形成第3段的字符位置。
00457B84  |. 51             |PUSH ECX
00457B85  |. 8D4D 08        |LEA ECX,DWORD PTR SS:[EBP+8]
00457B88  |. E8 E383FCFF    |CALL CDRWIN5.0041FF70
00457B8D  |. 0FBED0         |MOVSX EDX,AL
00457B90  |. 8B45 B0        |MOV EAX,DWORD PTR SS:[EBP-50]      //取出上次中间结果。        
00457B93  |. 03C2           |ADD EAX,EDX                        //累加。
00457B95  |. 8945 B0        |MOV DWORD PTR SS:[EBP-50],EAX      //保存结果。
00457B98  |.^EB BE          \JMP SHORT CDRWIN5.00457B58         //未完继续。
00457B9A  |> 8B4D B0        MOV ECX,DWORD PTR SS:[EBP-50]       //取出累加结果送ECX。
00457B9D  |. 81E1 01000080  AND ECX,80000001                    //与80000001h进行与运算。
00457BA3  |. 79 05          JNS SHORT CDRWIN5.00457BAA          //如果不是负数则跳。
00457BA5  |. 49             DEC ECX
00457BA6  |. 83C9 FE        OR ECX,FFFFFFFE
00457BA9  |. 41             INC ECX
00457BAA  |> 85C9           TEST ECX,ECX                        //测试ECX是否为0。
00457BAC  |. 74 52          JE SHORT CDRWIN5.00457C00           //如果ECX为0则OK。跳走。否则OVER。
00457BAE  |. C785 4CFFFFFF >MOV DWORD PTR SS:[EBP-B4],3
00457BB8  |. C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
00457BBC  |. 8D4D AC        LEA ECX,DWORD PTR SS:[EBP-54]
00457BBF  |. E8 D6880000    CALL <JMP.&MFC42.#800>
00457BC4  |. C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
00457BC8  |. 8D4D 98        LEA ECX,DWORD PTR SS:[EBP-68]
00457BCB  |. E8 CA880000    CALL <JMP.&MFC42.#800>
00457BD0  |. C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
00457BD4  |. 68 9A044600    PUSH <JMP.&MFC42.#800>
00457BD9  |. 6A 05          PUSH 5
00457BDB  |. 6A 04          PUSH 4
00457BDD  |. 8D55 DC        LEA EDX,DWORD PTR SS:[EBP-24]
00457BE0  |. 52             PUSH EDX
00457BE1  |. E8 3A950000    CALL CDRWIN5.00461120
00457BE6  |. C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
00457BED  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457BF0  |. E8 A5880000    CALL <JMP.&MFC42.#800>
00457BF5  |. 8B85 4CFFFFFF  MOV EAX,DWORD PTR SS:[EBP-B4]
00457BFB  |. E9 E7090000    JMP CDRWIN5.004585E7                //如果来到这里就OVER。
00457C00  |> 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
00457C03  |. E8 9E880000    CALL <JMP.&MFC42.#540>
00457C08  |. C645 FC 09     MOV BYTE PTR SS:[EBP-4],9
00457C0C  |. 6A 10          PUSH 10                             //处理第10h位,实际就是第17位。
00457C0E  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457C11  |. E8 5A83FCFF    CALL CDRWIN5.0041FF70               //取数。
00457C16  |. 50             PUSH EAX
00457C17  |. 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
00457C1A  |. E8 A9930000    CALL <JMP.&MFC42.#859>              
00457C1F  |. 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
00457C22  |. E8 49B5FAFF    CALL CDRWIN5.00403170               //把字符变成16进制数。如31h为1的ASSIC码,这里

变为'1'。
00457C27  |. 50             PUSH EAX
00457C28  |. FF15 948A4600  CALL DWORD PTR DS:[<&MSVCRT.atoi>]  //字符变整数。
00457C2E  |. 83C4 04        ADD ESP,4
00457C31  |. 8945 F0        MOV DWORD PTR SS:[EBP-10],EAX       //保存整数。
00457C34  |. 837D F0 00     CMP DWORD PTR SS:[EBP-10],0
00457C38  |. 75 70          JNZ SHORT CDRWIN5.00457CAA          //如果不为0则跳走。
00457C3A  |. 6A 10          PUSH 10
00457C3C  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457C3F  |. E8 2C83FCFF    CALL CDRWIN5.0041FF70
00457C44  |. 0FBEC0         MOVSX EAX,AL
00457C47  |. 83F8 30        CMP EAX,30
00457C4A  |. 74 5E          JE SHORT CDRWIN5.00457CAA
00457C4C  |. C785 48FFFFFF >MOV DWORD PTR SS:[EBP-B8],4
00457C56  |. C645 FC 07     MOV BYTE PTR SS:[EBP-4],7
00457C5A  |. 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
00457C5D  |. E8 38880000    CALL <JMP.&MFC42.#800>
00457C62  |. C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
00457C66  |. 8D4D AC        LEA ECX,DWORD PTR SS:[EBP-54]
00457C69  |. E8 2C880000    CALL <JMP.&MFC42.#800>
00457C6E  |. C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
00457C72  |. 8D4D 98        LEA ECX,DWORD PTR SS:[EBP-68]
00457C75  |. E8 20880000    CALL <JMP.&MFC42.#800>
00457C7A  |. C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
00457C7E  |. 68 9A044600    PUSH <JMP.&MFC42.#800>
00457C83  |. 6A 05          PUSH 5
00457C85  |. 6A 04          PUSH 4
00457C87  |. 8D4D DC        LEA ECX,DWORD PTR SS:[EBP-24]
00457C8A  |. 51             PUSH ECX
00457C8B  |. E8 90940000    CALL CDRWIN5.00461120
00457C90  |. C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
00457C97  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457C9A  |. E8 FB870000    CALL <JMP.&MFC42.#800>
00457C9F  |. 8B85 48FFFFFF  MOV EAX,DWORD PTR SS:[EBP-B8]
00457CA5  |. E9 3D090000    JMP CDRWIN5.004585E7
00457CAA  |> 8B55 F0        MOV EDX,DWORD PTR SS:[EBP-10]        //取出上面得到的整数送EDX。
00457CAD  |. 83C2 05        ADD EDX,5                            //加上5。
00457CB0  |. 8955 F0        MOV DWORD PTR SS:[EBP-10],EDX        //保存该数。
00457CB3  |. 837D F0 09     CMP DWORD PTR SS:[EBP-10],9          //如果小于9,则跳走。
00457CB7  |. 0F8E 84000000  JLE CDRWIN5.00457D41                 //否则,下面进行变换。
00457CBD  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00457CC0  |. 83E8 0A        SUB EAX,0A
00457CC3  |. 8945 F0        MOV DWORD PTR SS:[EBP-10],EAX
00457CC6  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
00457CC9  |. 83C1 41        ADD ECX,41
00457CCC  |. 894D F0        MOV DWORD PTR SS:[EBP-10],ECX
00457CCF  |. 6A 18          PUSH 18
00457CD1  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457CD4  |. E8 9782FCFF    CALL CDRWIN5.0041FF70
00457CD9  |. 0FBED0         MOVSX EDX,AL
00457CDC  |. 3B55 F0        CMP EDX,DWORD PTR SS:[EBP-10]
00457CDF  |. 74 5E          JE SHORT CDRWIN5.00457D3F
00457CE1  |. C785 44FFFFFF >MOV DWORD PTR SS:[EBP-BC],5
00457CEB  |. C645 FC 07     MOV BYTE PTR SS:[EBP-4],7
00457CEF  |. 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
00457CF2  |. E8 A3870000    CALL <JMP.&MFC42.#800>
00457CF7  |. C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
00457CFB  |. 8D4D AC        LEA ECX,DWORD PTR SS:[EBP-54]
00457CFE  |. E8 97870000    CALL <JMP.&MFC42.#800>
00457D03  |. C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
00457D07  |. 8D4D 98        LEA ECX,DWORD PTR SS:[EBP-68]
00457D0A  |. E8 8B870000    CALL <JMP.&MFC42.#800>
00457D0F  |. C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
00457D13  |. 68 9A044600    PUSH <JMP.&MFC42.#800>
00457D18  |. 6A 05          PUSH 5
00457D1A  |. 6A 04          PUSH 4
00457D1C  |. 8D45 DC        LEA EAX,DWORD PTR SS:[EBP-24]
00457D1F  |. 50             PUSH EAX
00457D20  |. E8 FB930000    CALL CDRWIN5.00461120
00457D25  |. C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
00457D2C  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457D2F  |. E8 66870000    CALL <JMP.&MFC42.#800>
00457D34  |. 8B85 44FFFFFF  MOV EAX,DWORD PTR SS:[EBP-BC]
00457D3A  |. E9 A8080000    JMP CDRWIN5.004585E7
00457D3F  |> EB 79          JMP SHORT CDRWIN5.00457DBA
00457D41  |> 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]         //取上面得到的结果到ECX。
00457D44  |. 83C1 30        ADD ECX,30                            //ECX加上30H。
00457D47  |. 894D F0        MOV DWORD PTR SS:[EBP-10],ECX         //保存。
00457D4A  |. 6A 18          PUSH 18                               //第18H位进栈,实际就是第25位。
00457D4C  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457D4F  |. E8 1C82FCFF    CALL CDRWIN5.0041FF70                 //取出第18H位。
00457D54  |. 0FBED0         MOVSX EDX,AL
00457D57  |. 3B55 F0        CMP EDX,DWORD PTR SS:[EBP-10]         //与前面计算的结果比较。
00457D5A  |. 74 5E          JE SHORT CDRWIN5.00457DBA             //相等则OK,跳走。所以这里就是第25位的来源。
00457D5C  |. C785 40FFFFFF >MOV DWORD PTR SS:[EBP-C0],6
00457D66  |. C645 FC 07     MOV BYTE PTR SS:[EBP-4],7
00457D6A  |. 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
00457D6D  |. E8 28870000    CALL <JMP.&MFC42.#800>
00457D72  |. C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
00457D76  |. 8D4D AC        LEA ECX,DWORD PTR SS:[EBP-54]
00457D79  |. E8 1C870000    CALL <JMP.&MFC42.#800>
00457D7E  |. C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
00457D82  |. 8D4D 98        LEA ECX,DWORD PTR SS:[EBP-68]
00457D85  |. E8 10870000    CALL <JMP.&MFC42.#800>
00457D8A  |. C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
00457D8E  |. 68 9A044600    PUSH <JMP.&MFC42.#800>
00457D93  |. 6A 05          PUSH 5
00457D95  |. 6A 04          PUSH 4
00457D97  |. 8D45 DC        LEA EAX,DWORD PTR SS:[EBP-24]
00457D9A  |. 50             PUSH EAX
00457D9B  |. E8 80930000    CALL CDRWIN5.00461120
00457DA0  |. C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
00457DA7  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457DAA  |. E8 EB860000    CALL <JMP.&MFC42.#800>
00457DAF  |. 8B85 40FFFFFF  MOV EAX,DWORD PTR SS:[EBP-C0]
00457DB5  |. E9 2D080000    JMP CDRWIN5.004585E7                 //如果上面不跳,则这里OVER。
00457DBA  |> C745 BC 000000>MOV DWORD PTR SS:[EBP-44],0          //下面的循环累加第1,2,4,5段注册码。
00457DC1  |. C745 A0 000000>MOV DWORD PTR SS:[EBP-60],0
00457DC8  |. EB 09          JMP SHORT CDRWIN5.00457DD3
00457DCA  |> 8B4D A0        /MOV ECX,DWORD PTR SS:[EBP-60]
00457DCD  |. 83C1 01        |ADD ECX,1                           //计数器加1。
00457DD0  |. 894D A0        |MOV DWORD PTR SS:[EBP-60],ECX
00457DD3  |> 837D A0 05      CMP DWORD PTR SS:[EBP-60],5         //循环次数为5。
00457DD7  |. 7D 67          |JGE SHORT CDRWIN5.00457E40          //循环完毕则跳走。
00457DD9  |. 8B55 A0        |MOV EDX,DWORD PTR SS:[EBP-60]       //字符相对位置送EDX。
00457DDC  |. 52             |PUSH EDX
00457DDD  |. 8D4D 08        |LEA ECX,DWORD PTR SS:[EBP+8]
00457DE0  |. E8 8B81FCFF    |CALL CDRWIN5.0041FF70               //取字符到AL。
00457DE5  |. 0FBEC0         |MOVSX EAX,AL
00457DE8  |. 8B4D BC        |MOV ECX,DWORD PTR SS:[EBP-44]
00457DEB  |. 03C8           |ADD ECX,EAX                         //累加。
00457DED  |. 894D BC        |MOV DWORD PTR SS:[EBP-44],ECX
00457DF0  |. 8B55 A0        |MOV EDX,DWORD PTR SS:[EBP-60]
00457DF3  |. 83C2 06        |ADD EDX,6                           //EDX加6,累加第二段的字符。
00457DF6  |. 52             |PUSH EDX
00457DF7  |. 8D4D 08        |LEA ECX,DWORD PTR SS:[EBP+8]
00457DFA  |. E8 7181FCFF    |CALL CDRWIN5.0041FF70
00457DFF  |. 0FBEC0         |MOVSX EAX,AL
00457E02  |. 8B4D BC        |MOV ECX,DWORD PTR SS:[EBP-44]
00457E05  |. 03C8           |ADD ECX,EAX
00457E07  |. 894D BC        |MOV DWORD PTR SS:[EBP-44],ECX
00457E0A  |. 8B55 A0        |MOV EDX,DWORD PTR SS:[EBP-60]
00457E0D  |. 83C2 12        |ADD EDX,12                          //EDX加12h,累加第四段的字符。
00457E10  |. 52             |PUSH EDX
00457E11  |. 8D4D 08        |LEA ECX,DWORD PTR SS:[EBP+8]
00457E14  |. E8 5781FCFF    |CALL CDRWIN5.0041FF70
00457E19  |. 0FBEC0         |MOVSX EAX,AL
00457E1C  |. 8B4D BC        |MOV ECX,DWORD PTR SS:[EBP-44]
00457E1F  |. 03C8           |ADD ECX,EAX
00457E21  |. 894D BC        |MOV DWORD PTR SS:[EBP-44],ECX
00457E24  |. 8B55 A0        |MOV EDX,DWORD PTR SS:[EBP-60]
00457E27  |. 83C2 18        |ADD EDX,18                          //EDX加18h,累加第五段的字符。
00457E2A  |. 52             |PUSH EDX
00457E2B  |. 8D4D 08        |LEA ECX,DWORD PTR SS:[EBP+8]
00457E2E  |. E8 3D81FCFF    |CALL CDRWIN5.0041FF70
00457E33  |. 0FBEC0         |MOVSX EAX,AL
00457E36  |. 8B4D BC        |MOV ECX,DWORD PTR SS:[EBP-44]
00457E39  |. 03C8           |ADD ECX,EAX
00457E3B  |. 894D BC        |MOV DWORD PTR SS:[EBP-44],ECX
00457E3E  |.^EB 8A          \JMP SHORT CDRWIN5.00457DCA          //未完则继续。
00457E40  |> 8D4D A4        LEA ECX,DWORD PTR SS:[EBP-5C]
00457E43  |. E8 5E860000    CALL <JMP.&MFC42.#540>
00457E48  |. C645 FC 0A     MOV BYTE PTR SS:[EBP-4],0A
00457E4C  |. 8B55 BC        MOV EDX,DWORD PTR SS:[EBP-44]        //取出累加的结果送EDX。
00457E4F  |. 52             PUSH EDX
00457E50  |. 68 88E04700    PUSH CDRWIN5.0047E088                
00457E55  |. 8D45 A4        LEA EAX,DWORD PTR SS:[EBP-5C]
00457E58  |. 50             PUSH EAX
00457E59  |. E8 9C860000    CALL <JMP.&MFC42.#2818>
00457E5E  |. 83C4 0C        ADD ESP,0C
00457E61  |. 8D4D B8        LEA ECX,DWORD PTR SS:[EBP-48]
00457E64  |. E8 3D860000    CALL <JMP.&MFC42.#540>
00457E69  |. C645 FC 0B     MOV BYTE PTR SS:[EBP-4],0B   
00457E6D  |. 6A 03          PUSH 3
00457E6F  |. 6A 0C          PUSH 0C
00457E71  |. 8D8D 3CFFFFFF  LEA ECX,DWORD PTR SS:[EBP-C4]
00457E77  |. 51             PUSH ECX
00457E78  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457E7B  |. E8 42910000    CALL <JMP.&MFC42.#4278>              //把上面的结果逐位变换为ASSIC字符。如整数443

变为'4','4','3'.
00457E80  |. 8985 08FFFFFF  MOV DWORD PTR SS:[EBP-F8],EAX
00457E86  |. 8B95 08FFFFFF  MOV EDX,DWORD PTR SS:[EBP-F8]
00457E8C  |. 8995 04FFFFFF  MOV DWORD PTR SS:[EBP-FC],EDX
00457E92  |. C645 FC 0C     MOV BYTE PTR SS:[EBP-4],0C
00457E96  |. 8B85 04FFFFFF  MOV EAX,DWORD PTR SS:[EBP-FC]
00457E9C  |. 50             PUSH EAX
00457E9D  |. 8D4D B8        LEA ECX,DWORD PTR SS:[EBP-48]
00457EA0  |. E8 07860000    CALL <JMP.&MFC42.#858>
00457EA5  |. C645 FC 0B     MOV BYTE PTR SS:[EBP-4],0B
00457EA9  |. 8D8D 3CFFFFFF  LEA ECX,DWORD PTR SS:[EBP-C4]
00457EAF  |. E8 E6850000    CALL <JMP.&MFC42.#800>
00457EB4  |. 8D4D B8        LEA ECX,DWORD PTR SS:[EBP-48]
00457EB7  |. 51             PUSH ECX                            //假码第三段的前3位地址送ECX。
00457EB8  |. 8D55 A4        LEA EDX,DWORD PTR SS:[EBP-5C]
00457EBB  |. 52             PUSH EDX                            //整数变字符后的3位字符的地址送EDX。
00457EBC  |. E8 2F96FBFF    CALL CDRWIN5.004114F0               //在这个函数内进行比较啦。所以这里可以得到第三

段的前3位。
00457EC1  |. 25 FF000000    AND EAX,0FF
00457EC6  |. 85C0           TEST EAX,EAX
00457EC8  |. 74 76          JE SHORT CDRWIN5.00457F40           //如果相等,则跳走。通往成功之路。
*省去多行通往OVER 的代码*
00457F40  |> 8D4D D0        LEA ECX,DWORD PTR SS:[EBP-30]
00457F43  |. E8 5E850000    CALL <JMP.&MFC42.#540>
00457F48  |. C645 FC 0D     MOV BYTE PTR SS:[EBP-4],0D
00457F4C  |. 6A 03          PUSH 3                              //第3位序号进栈,其实是第四位(第一位从1数起)


00457F4E  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457F51  |. E8 1A80FCFF    CALL CDRWIN5.0041FF70               //取数。
00457F56  |. 50             PUSH EAX
00457F57  |. 8D4D D0        LEA ECX,DWORD PTR SS:[EBP-30]
00457F5A  |. E8 69900000    CALL <JMP.&MFC42.#859>
00457F5F  |. 8D4D D0        LEA ECX,DWORD PTR SS:[EBP-30]
00457F62  |. E8 09B2FAFF    CALL CDRWIN5.00403170               //把取得的数由ASSIC码变16进制数。如31h变为1.
00457F67  |. 50             PUSH EAX
00457F68  |. FF15 948A4600  CALL DWORD PTR DS:[<&MSVCRT.atoi>]    
00457F6E  |. 83C4 04        ADD ESP,4
00457F71  |. 8945 94        MOV DWORD PTR SS:[EBP-6C],EAX
00457F74  |. 837D 94 00     CMP DWORD PTR SS:[EBP-6C],0         //得到的数与0比较。
00457F78  |. 0F85 C0000000  JNZ CDRWIN5.0045803E                //如果为0则跳走。
00457F7E  |. 6A 03          PUSH 3                              
00457F80  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457F83  |. E8 E87FFCFF    CALL CDRWIN5.0041FF70
00457F88  |. 0FBEC8         MOVSX ECX,AL
00457F8B  |. 83F9 30        CMP ECX,30
00457F8E  |. 0F84 AA000000  JE CDRWIN5.0045803E                 //否则下面判断是否为大写字符。
00457F94  |. 6A 03          PUSH 3
00457F96  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457F99  |. E8 D27FFCFF    CALL CDRWIN5.0041FF70
00457F9E  |. 0FBED0         MOVSX EDX,AL
00457FA1  |. 83FA 41        CMP EDX,41
00457FA4  |. 7C 16          JL SHORT CDRWIN5.00457FBC           //如果小于大写字符A则OVER。
00457FA6  |. 6A 03          PUSH 3
00457FA8  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00457FAB  |. E8 C07FFCFF    CALL CDRWIN5.0041FF70
00457FB0  |. 0FBEC0         MOVSX EAX,AL
00457FB3  |. 83F8 46        CMP EAX,46
00457FB6  |. 0F8E 82000000  JLE CDRWIN5.0045803E                //如果大于F也错误。
*省去多行通往OVER 的代码*
0045803E  |> 837D 94 00     CMP DWORD PTR SS:[EBP-6C],0
00458042  |. 75 1B          JNZ SHORT CDRWIN5.0045805F          //这里跳走。
00458044  |. 6A 03          PUSH 3                              //继续取第3位。
00458046  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00458049  |. E8 227FFCFF    CALL CDRWIN5.0041FF70               //取数送AL。
0045804E  |. 0FBED0         MOVSX EDX,AL
00458051  |. 83FA 30        CMP EDX,30                          //与30H比较,即与0比较。
00458054  |. 75 09          JNZ SHORT CDRWIN5.0045805F          //不等则跳走。这里把第4位定为0即可。
00458056  |. C745 94 000000>MOV DWORD PTR SS:[EBP-6C],0
0045805D  |. EB 19          JMP SHORT CDRWIN5.00458078          //如果第四位是0,则这里跳走。
0045805F  |> 837D 94 00     CMP DWORD PTR SS:[EBP-6C],0
00458063  |. 75 13          JNZ SHORT CDRWIN5.00458078
00458065  |. 6A 03          PUSH 3
00458067  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
0045806A  |. E8 017FFCFF    CALL CDRWIN5.0041FF70
0045806F  |. 0FBEC0         MOVSX EAX,AL
00458072  |. 83E8 37        SUB EAX,37
00458075  |. 8945 94        MOV DWORD PTR SS:[EBP-6C],EAX
00458078  |> 8D4D C0        LEA ECX,DWORD PTR SS:[EBP-40]
0045807B  |. E8 26840000    CALL <JMP.&MFC42.#540>
00458080  |. C645 FC 0E     MOV BYTE PTR SS:[EBP-4],0E
00458084  |. 6A 01          PUSH 1                              //处理第1位,实际是第二位。
00458086  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00458089  |. E8 E27EFCFF    CALL CDRWIN5.0041FF70
0045808E  |. 50             PUSH EAX
0045808F  |. 8D4D C0        LEA ECX,DWORD PTR SS:[EBP-40]
00458092  |. E8 318F0000    CALL <JMP.&MFC42.#859>
00458097  |. 8D4D C0        LEA ECX,DWORD PTR SS:[EBP-40]
0045809A  |. E8 D1B0FAFF    CALL CDRWIN5.00403170               //ASCII码变16进制数。
0045809F  |. 50             PUSH EAX
004580A0  |. FF15 948A4600  CALL DWORD PTR DS:[<&MSVCRT.atoi>]  //字符变整数。
004580A6  |. 83C4 04        ADD ESP,4
004580A9  |. 8945 C4        MOV DWORD PTR SS:[EBP-3C],EAX
004580AC  |. 837D C4 00     CMP DWORD PTR SS:[EBP-3C],0         //与0比较。
004580B0  |. 0F85 CC000000  JNZ CDRWIN5.00458182                //如果不等于0,则跳走。
004580B6  |. 6A 01          PUSH 1
004580B8  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004580BB  |. E8 B07EFCFF    CALL CDRWIN5.0041FF70
004580C0  |. 0FBEC8         MOVSX ECX,AL
004580C3  |. 83F9 30        CMP ECX,30
004580C6  |. 0F84 B6000000  JE CDRWIN5.00458182
004580CC  |. 6A 01          PUSH 1
004580CE  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004580D1  |. E8 9A7EFCFF    CALL CDRWIN5.0041FF70
004580D6  |. 0FBED0         MOVSX EDX,AL
004580D9  |. 83FA 41        CMP EDX,41
004580DC  |. 7C 16          JL SHORT CDRWIN5.004580F4            //如果是字母,必须大于A。
004580DE  |. 6A 01          PUSH 1
004580E0  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004580E3  |. E8 887EFCFF    CALL CDRWIN5.0041FF70
004580E8  |. 0FBEC0         MOVSX EAX,AL
004580EB  |. 83F8 46        CMP EAX,46
004580EE  |. 0F8E 8E000000  JLE CDRWIN5.00458182                 //同时要小于F。否则下面就OVER。
*省去多行通往OVER 的代码*
00458182  |> 837D C4 00     CMP DWORD PTR SS:[EBP-3C],0       
00458186  |. 75 1B          JNZ SHORT CDRWIN5.004581A3           //这里跳。
00458188  |. 6A 01          PUSH 1
0045818A  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
0045818D  |. E8 DE7DFCFF    CALL CDRWIN5.0041FF70
00458192  |. 0FBED0         MOVSX EDX,AL
00458195  |. 83FA 30        CMP EDX,30
00458198  |. 75 09          JNZ SHORT CDRWIN5.004581A3
0045819A  |. C745 C4 000000>MOV DWORD PTR SS:[EBP-3C],0
004581A1  |. EB 19          JMP SHORT CDRWIN5.004581BC
004581A3  |> 837D 94 00     CMP DWORD PTR SS:[EBP-6C],0    
004581A7  |. 75 13          JNZ SHORT CDRWIN5.004581BC           //这里跳。
004581A9  |. 6A 01          PUSH 1
004581AB  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004581AE  |. E8 BD7DFCFF    CALL CDRWIN5.0041FF70
004581B3  |. 0FBEC0         MOVSX EAX,AL
004581B6  |. 83E8 37        SUB EAX,37                           //EAX减37h,如果AL小于37h,则变为一个负数。
004581B9  |. 8945 C4        MOV DWORD PTR SS:[EBP-3C],EAX
004581BC  |> 8B4D C4        MOV ECX,DWORD PTR SS:[EBP-3C]        //取出第2位数的16进制形式。
004581BF  |. C1E1 04        SHL ECX,4                            //左移4次。
004581C2  |. 894D C4        MOV DWORD PTR SS:[EBP-3C],ECX
004581C5  |. 8B55 C4        MOV EDX,DWORD PTR SS:[EBP-3C]        //把前面第4位的16进制形式取出送EDX。
004581C8  |. 0355 94        ADD EDX,DWORD PTR SS:[EBP-6C]        //累加起来。
004581CB  |. 8955 C4        MOV DWORD PTR SS:[EBP-3C],EDX
004581CE  |. 8B45 C4        MOV EAX,DWORD PTR SS:[EBP-3C]
004581D1  |. 25 07000080    AND EAX,80000007                     //最后与80000007h与运算。
004581D6  |. 79 05          JNS SHORT CDRWIN5.004581DD           //如果是负数则不跳。
004581D8  |. 48             DEC EAX
004581D9  |. 83C8 F8        OR EAX,FFFFFFF8
004581DC  |. 40             INC EAX
004581DD  |> 85C0           TEST EAX,EAX                         //测试EAX。
004581DF  |. 0F84 8E000000  JE CDRWIN5.00458273                  //EAX为0则OK。否则下面就OVER。
*省去多行通往OVER 的代码*
00458273  |> C745 D8 000000>MOV DWORD PTR SS:[EBP-28],0       
0045827A  |. 6A 12          PUSH 12                              //下面开始处理第12h,13h,14h,15h位。实际就是第

19-22位。
0045827C  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
0045827F  |. E8 EC7CFCFF    CALL CDRWIN5.0041FF70
00458284  |. 0FBEF0         MOVSX ESI,AL
00458287  |. 6A 13          PUSH 13
00458289  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
0045828C  |. E8 DF7CFCFF    CALL CDRWIN5.0041FF70
00458291  |. 0FBED0         MOVSX EDX,AL
00458294  |. 03F2           ADD ESI,EDX                          //第19,20位累加起来。
00458296  |. 6A 14          PUSH 14
00458298  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
0045829B  |. E8 D07CFCFF    CALL CDRWIN5.0041FF70
004582A0  |. 0FBEC0         MOVSX EAX,AL
004582A3  |. 03F0           ADD ESI,EAX                          //累加第21位。
004582A5  |. 6A 15          PUSH 15
004582A7  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004582AA  |. E8 C17CFCFF    CALL CDRWIN5.0041FF70
004582AF  |. 0FBEC8         MOVSX ECX,AL
004582B2  |. 034D D8        ADD ECX,DWORD PTR SS:[EBP-28]
004582B5  |. 03CE           ADD ECX,ESI                          //累加第22位。                           
004582B7  |. 894D D8        MOV DWORD PTR SS:[EBP-28],ECX
004582BA  |. 8B55 D8        MOV EDX,DWORD PTR SS:[EBP-28]
004582BD  |. 6BD2 0D        IMUL EDX,EDX,0D                      //累加结果乘以Dh。             
004582C0  |. 8955 D8        MOV DWORD PTR SS:[EBP-28],EDX
004582C3  |. 8B45 D8        MOV EAX,DWORD PTR SS:[EBP-28]
004582C6  |. 99             CDQ
004582C7  |. B9 0A000000    MOV ECX,0A
004582CC  |. F7F9           IDIV ECX                             //计算结果除以Ah,就是10。   
004582CE  |. 8955 C8        MOV DWORD PTR SS:[EBP-38],EDX        //余数送地址保存。
004582D1  |. 8B55 C8        MOV EDX,DWORD PTR SS:[EBP-38]
004582D4  |. 83C2 30        ADD EDX,30                           //余数加30h变ASSIC码。                     
004582D7  |. 8955 C8        MOV DWORD PTR SS:[EBP-38],EDX
004582DA  |. 6A 16          PUSH 16                              //处理第16h位,即第23位。
004582DC  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
004582DF  |. E8 8C7CFCFF    CALL CDRWIN5.0041FF70                //取第23位数。
004582E4  |. 0FBEC0         MOVSX EAX,AL
004582E7  |. 3B45 C8        CMP EAX,DWORD PTR SS:[EBP-38]        //与前面得到的余数比较。
004582EA  |. 0F84 8E000000  JE CDRWIN5.0045837E                  //相等则OK。
004582F0  |. C785 28FFFFFF >MOV DWORD PTR SS:[EBP-D8],0B         //否则下面OVER。
*省去多行通往OVER 的代码*
0045837E  |> 6A 02          PUSH 2                               //处理第02h位,即第3位。
00458380  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00458383  |. E8 E87BFCFF    CALL CDRWIN5.0041FF70
00458388  |. 0FBED0         MOVSX EDX,AL
0045838B  |. 83FA 4D        CMP EDX,4D                           //与字符'M'比较。
0045838E  |. 0F85 8E000000  JNZ CDRWIN5.00458422                 //不相等即OK。
00458394  |. C785 24FFFFFF >MOV DWORD PTR SS:[EBP-DC],10         //否则下面OVER。
*省去多行通往OVER 的代码*
00458422  |> 6A 00          PUSH 0                               //处理第0h位,即第1位。
00458424  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
00458427  |. E8 447BFCFF    CALL CDRWIN5.0041FF70
0045842C  |. 0FBEC8         MOVSX ECX,AL
0045842F  |. 83F9 35        CMP ECX,35                           //与ASSIC码'35'比较,即与数字5比较。
00458432  |. 0F84 8E000000  JE CDRWIN5.004584C6                  //相等即OK。
00458438  |. C785 20FFFFFF >MOV DWORD PTR SS:[EBP-E0],11         //否则下面OVER。
*省去多行通往OVER 的代码*
004584C6  |> 837D CC 01     CMP DWORD PTR SS:[EBP-34],1          //注意这个地方,[EBP-34]里面保存了一个标志1,

必须为1才行。见前面00457A0C分析。
004584CA  |. 0F85 8E000000  JNZ CDRWIN5.0045855E                 //否则照样OVER。
004584D0  |. C785 1CFFFFFF >MOV DWORD PTR SS:[EBP-E4],41A        //到这里才是成功的。把常量41Ah送内存保存,等返

回到主调函数时要判断是否为此常量。
004584DA  |. C645 FC 0D     MOV BYTE PTR SS:[EBP-4],0D
004584DE  |. 8D4D C0        LEA ECX,DWORD PTR SS:[EBP-40]
004584E1  |. E8 B47F0000    CALL <JMP.&MFC42.#800>
004584E6  |. C645 FC 0B     MOV BYTE PTR SS:[EBP-4],0B
004584EA  |. 8D4D D0        LEA ECX,DWORD PTR SS:[EBP-30]
004584ED  |. E8 A87F0000    CALL <JMP.&MFC42.#800>
004584F2  |. C645 FC 0A     MOV BYTE PTR SS:[EBP-4],0A
004584F6  |. 8D4D B8        LEA ECX,DWORD PTR SS:[EBP-48]
004584F9  |. E8 9C7F0000    CALL <JMP.&MFC42.#800>
004584FE  |. C645 FC 09     MOV BYTE PTR SS:[EBP-4],9
00458502  |. 8D4D A4        LEA ECX,DWORD PTR SS:[EBP-5C]
00458505  |. E8 907F0000    CALL <JMP.&MFC42.#800>
0045850A  |. C645 FC 07     MOV BYTE PTR SS:[EBP-4],7
0045850E  |. 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
00458511  |. E8 847F0000    CALL <JMP.&MFC42.#800>
00458516  |. C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
0045851A  |. 8D4D AC        LEA ECX,DWORD PTR SS:[EBP-54]
0045851D  |. E8 787F0000    CALL <JMP.&MFC42.#800>
00458522  |. C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
00458526  |. 8D4D 98        LEA ECX,DWORD PTR SS:[EBP-68]
00458529  |. E8 6C7F0000    CALL <JMP.&MFC42.#800>
0045852E  |. C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
00458532  |. 68 9A044600    PUSH <JMP.&MFC42.#800>
00458537  |. 6A 05          PUSH 5
00458539  |. 6A 04          PUSH 4
0045853B  |. 8D45 DC        LEA EAX,DWORD PTR SS:[EBP-24]
0045853E  |. 50             PUSH EAX
0045853F  |. E8 DC8B0000    CALL CDRWIN5.00461120
00458544  |. C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
0045854B  |. 8D4D 08        LEA ECX,DWORD PTR SS:[EBP+8]
0045854E  |. E8 477F0000    CALL <JMP.&MFC42.#800>
00458553  |. 8B85 1CFFFFFF  MOV EAX,DWORD PTR SS:[EBP-E4]
00458559  |. E9 89000000    JMP CDRWIN5.004585E7                  //从这里离开才是可以的。
*省去多行通往OVER 的代码*
004585E7  |> 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]             
004585EA  |. 64:890D 000000>MOV DWORD PTR FS:[0],ECX
004585F1  |. 5E             POP ESI
004585F2  |. 8BE5           MOV ESP,EBP
004585F4  |. 5D             POP EBP
004585F5  \. C3             RETN
===================================================================================================
后记:
经过一番艰苦努力,花了一个上午的时间终于搞定了这个软件,随手根据破解笔记整理了一下分析思路,没有想到最后得到这么一篇

如此长的破文,希望大侠不要见笑,希望与菜鸟分享我的成功与快乐!这个软件迷雾重重,一不小心就落入他的陷阱。我只是想把问

题讲得更清楚点。没有想到写了这么多,我用记事本写的时候,系统提示说内存不足呢。只好改写字板来完成了。
感谢看雪论坛的各位大侠的关注!祝论坛越来越红火!祝贺大家元宵节快乐!!团团圆圆!!

结论:我没有写出注册机。应该比较简单的。时间嘛!!??
用户名:随便写(没有用到)
公司名:随便写(没有用到)。
注册码随便写出一个吧。
注册码:
51R0D-211C1-44332-44444-75555

注册成功后在注册表内的H.L.M\software\CDRWIN5\内写入用户名,公司名和注册码。


qduwg
qduwg@163.com

完稿日期2006年2月10日中午ETHIOPIA。