【破解作者】 zmw1224[CZG]
【作者邮箱】 zmw1224@yahoo.com.cn
【使用工具】 OD,PEiD,AspackDie
【破解平台】 XP
【软件名称】 客户王 V5.5
【下载地址】 http://www2.skycn.com/soft/10294.html
【软件大小】 4967 KB
【加壳方式】 ASPack 2.12 -> Alexey Solodovnikov
【破解声明】 本笔记只用于学习交流, 初学Crack,只是感兴趣技术,没有其他目的, 如有不妥之处, 希望作者谅解.
--------------------------------------------------------------------------------
【破解内容】


先用PEiD查壳ASPack 2.12 -> Alexey Solodovnikov,用手脱或自动都可解决,我是懒人,所以用AspackDie脱了它
^_^,原来是Borland Delphi 6.0 - 7.0,运行脱壳程序,出现软件启动画面一闪而过,刚还暗自高兴,没想到一下
掉入万丈深渊!即然能运行就说明不是壳的问题,而是有校验!!没办法,软件作者有意不让我们好过,我们只好用OD伺候。
OD载入停在这:

00708020 > $  55            PUSH EBP         
00708021   .  8BEC          MOV EBP,ESP
00708023   .  83C4 F0       ADD ESP,-10
00708026   .  53            PUSH EBX
00708027   .  56            PUSH ESI
00708028   .  57            PUSH EDI
00708029   .  B8 08727000   MOV EAX,00707208
0070802E   .  E8 81F7CFFF   CALL 004077B4
00708033   .  33D2          XOR EDX,EDX
00708035   .  55            PUSH EBP
00708036   .  68 3B847000   PUSH 0070843B
0070803B   .  64:FF32       PUSH DWORD PTR FS:[EDX]
0070803E   .  64:8922       MOV DWORD PTR FS:[EDX],ESP
00708041   .  A1 ACBF7100   MOV EAX,DWORD PTR DS:[71BFAC]
00708046   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
00708048   .  E8 17C9DAFF   CALL 004B4964

下断 bp CreateFileA ,10多次F9后,Alt+F9返回领空停在下面:
00423785  |.  8BC8          MOV ECX,EAX
00423787  |.  33D2          XOR EDX,EDX
00423789  |.  8BC3          MOV EAX,EBX
0042378B  |.  E8 38FEFFFF   CALL 004235C8
00423790      837B 04 00    CMP DWORD PTR DS:[EBX+4],0
00423794      7D 48         JGE SHORT 004237DE      就是它搞的鬼了,nop后,保存成新文件Unpacked1
00423796      8D55 E0       LEA EDX,DWORD PTR SS:[EBP-20]
00423799  |.  8BC6          MOV EAX,ESI
0042379B  |.  E8 DC76FEFF   CALL 0040AE7C

运行Unpacked1一切正常,ok!,校验搞定。^_^

OD载入Unpacked1,查找中文字符串,找到“恭喜你,注册成功,谢谢您的支持,请重新打开本系统!”双击停在下面:
00676C06   .  B8 7C6D6700   MOV EAX,00676D7C     “恭喜你,……………………”
00676C0B   .  E8 90C30700   CALL 006F2FA0
00676C10   .  8D55 DC       LEA EDX,DWORD PTR SS:[EBP-24]
00676C13   .  A1 ACBF7100   MOV EAX,DWORD PTR DS:[71BFAC]
00676C18   .  8B00          MOV EAX,DWORD PTR DS:[EAX]

即然要研究算法就要从入口开始,向上看找到入口00676AA8:

00676AA8   .  55            PUSH EBP     在这下断。
00676AA9   .  8BEC          MOV EBP,ESP
00676AAB   .  B9 05000000   MOV ECX,5
00676AB0   >  6A 00         PUSH 0
00676AB2   .  6A 00         PUSH 0
00676AB4   .  49            DEC ECX
00676AB5   .^ 75 F9         JNZ SHORT 00676AB0
00676AB7   .  53            PUSH EBX
00676AB8   .  56            PUSH ESI
00676AB9   .  57            PUSH EDI




运行程序,输入相应数据:

单位名称:CZG ;
用户代码:21938258(根据硬盘序列号算出来的)  ;
软件序列号:19821224(随意输入最好和用户代码位数一样8位数,最好不要用12345,abcde,11111,等);
软件注册码:11111-22222-33333(这可任意输入)

好,点"立即注册"后,马上被OD中断,停在入口处:

00676AA8   .  55            PUSH EBP
00676AA9   .  8BEC          MOV EBP,ESP
00676AAB   .  B9 05000000   MOV ECX,5
00676AB0   >  6A 00         PUSH 0
00676AB2   .  6A 00         PUSH 0
00676AB4   .  49            DEC ECX
00676AB5   .^ 75 F9         JNZ SHORT 00676AB0
00676AB7   .  53            PUSH EBX
00676AB8   .  56            PUSH ESI
00676AB9   .  57            PUSH EDI
00676ABA   .  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
00676ABD   .  33C0          XOR EAX,EAX
00676ABF   .  55            PUSH EBP
00676AC0   .  68 A76C6700   PUSH 00676CA7
00676AC5   .  64:FF30       PUSH DWORD PTR FS:[EAX]
00676AC8   .  64:8920       MOV DWORD PTR FS:[EAX],ESP
00676ACB   .  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
00676ACE   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00676AD1   .  8B80 20030000 MOV EAX,DWORD PTR DS:[EAX+320]
00676AD7   .  E8 30BAE1FF   CALL 0049250C                  这个call获取我输入的数"19821224"
00676ADC   .  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]      把19821224送到EDX里
00676ADF   .  B8 C06C6700   MOV EAX,00676CC0                         ;  ASCII "Softkey"
00676AE4   .  E8 D7F30700   CALL 006F5EC0
00676AE9   .  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
00676AEC   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00676AEF   .  8B80 18030000 MOV EAX,DWORD PTR DS:[EAX+318]
00676AF5   .  E8 12BAE1FF   CALL 0049250C                   获取用户代码“21938258”
00676AFA   .  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]      送到EDX里
00676AFD   .  B8 D06C6700   MOV EAX,00676CD0                         ;  ASCII "request"
00676B02   .  E8 B9F30700   CALL 006F5EC0
00676B07   .  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
00676B0A   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00676B0D   .  8B80 28030000 MOV EAX,DWORD PTR DS:[EAX+328]
00676B13   .  E8 F4B9E1FF   CALL 0049250C                      获取注册码第一部分"11111"
00676B18   .  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
00676B1B   .  B8 E06C6700   MOV EAX,00676CE0                         ;  ASCII "Regkey1"
00676B20   .  E8 9BF30700   CALL 006F5EC0
00676B25   .  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
00676B28   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00676B2B   .  8B80 2C030000 MOV EAX,DWORD PTR DS:[EAX+32C]
00676B31   .  E8 D6B9E1FF   CALL 0049250C                             获取注册码第二部分"22222"
00676B36   .  8B55 EC       MOV EDX,DWORD PTR SS:[EBP-14]
00676B39   .  B8 F06C6700   MOV EAX,00676CF0                         ;  ASCII "Regkey2"
00676B3E   .  E8 7DF30700   CALL 006F5EC0
00676B43   .  8D55 E8       LEA EDX,DWORD PTR SS:[EBP-18]
00676B46   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00676B49   .  8B80 30030000 MOV EAX,DWORD PTR DS:[EAX+330]
00676B4F   .  E8 B8B9E1FF   CALL 0049250C                         获取注册码第三部分"33333"
00676B54   .  8B55 E8       MOV EDX,DWORD PTR SS:[EBP-18]
00676B57   .  B8 006D6700   MOV EAX,00676D00                         ;  ASCII "Regkey3"
00676B5C   .  E8 5FF30700   CALL 006F5EC0



F8走:
00676BCB   . /EB 14         JMP SHORT 00676BE1
00676BCD   .^|E9 E2D8D8FF   JMP 004044B4
00676BD2   . |B8 546D6700   MOV EAX,00676D54
00676BD7   . |E8 C4C30700   CALL 006F2FA0
00676BDC   . |E8 FFDCD8FF   CALL 004048E0           算法call
00676BE1   > \E8 DE020800   CALL 006F6EC4
00676BE6   .  8BD0          MOV EDX,EAX
00676BE8   .  80F2 01       XOR DL,1
00676BEB   .  A1 C0BA7100   MOV EAX,DWORD PTR DS:[71BAC0]
00676BF0   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
00676BF2   .  8B80 D0030000 MOV EAX,DWORD PTR DS:[EAX+3D0]
00676BF8   .  E8 DFE4E2FF   CALL 004A50DC
00676BFD   .  E8 C2020800   CALL 006F6EC4
00676C02   .  84C0          TEST AL,AL
00676C04   .  74 36         JE SHORT 00676C3C     这是关键跳转,所以算法就在上面call里。
00676C06   .  B8 7C6D6700   MOV EAX,00676D7C
00676C0B   .  E8 90C30700   CALL 006F2FA0



算法call:

006F6EC4  /$  55            PUSH EBP
006F6EC5  |.  8BEC          MOV EBP,ESP
006F6EC7  |.  B9 05000000   MOV ECX,5
006F6ECC  |>  6A 00         /PUSH 0
006F6ECE  |.  6A 00         |PUSH 0
006F6ED0  |.  49            |DEC ECX
006F6ED1  |.^ 75 F9         \JNZ SHORT 006F6ECC
006F6ED3  |.  51            PUSH ECX
006F6ED4  |.  53            PUSH EBX
006F6ED5  |.  33C0          XOR EAX,EAX
006F6ED7  |.  55            PUSH EBP
006F6ED8  |.  68 C66F6F00   PUSH 006F6FC6
006F6EDD  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
006F6EE0  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
006F6EE3  |.  8D4D FC       LEA ECX,DWORD PTR SS:[EBP-4]
006F6EE6  |.  33D2          XOR EDX,EDX
006F6EE8  |.  B8 DC6F6F00   MOV EAX,006F6FDC                         ;  ASCII "Coname"
006F6EED  |.  E8 02EFFFFF   CALL 006F5DF4
006F6EF2  |.  837D FC 00    CMP DWORD PTR SS:[EBP-4],0   单位名称即CZG是否为空?
006F6EF6  |.  75 07         JNZ SHORT 006F6EFF           不是空就跳
006F6EF8  |.  33DB          XOR EBX,EBX
006F6EFA  |.  E9 9F000000   JMP 006F6F9E
006F6EFF  |>  8D4D F4       LEA ECX,DWORD PTR SS:[EBP-C]
006F6F02  |.  33D2          XOR EDX,EDX
006F6F04  |.  B8 EC6F6F00   MOV EAX,006F6FEC                         ;  ASCII "request"
006F6F09  |.  E8 E6EEFFFF   CALL 006F5DF4                
006F6F0E  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]   把21938258送到EAX
006F6F11  |.  E8 16FFFFFF   CALL 006F6E2C                  这也是个重要算法call
006F6F16  |.  D80D F46F6F00 FMUL DWORD PTR DS:[6F6FF4]
006F6F1C  |.  DB7D E8       FSTP TBYTE PTR SS:[EBP-18]
006F6F1F  |.  9B            WAIT
006F6F20  |.  8D4D E4       LEA ECX,DWORD PTR SS:[EBP-1C]
006F6F23  |.  33D2          XOR EDX,EDX


再跟进重要算法call:

006F6E2C  /$  55           PUSH EBP
006F6E2D  |.  8BEC          MOV EBP,ESP
006F6E2F  |.  83C4 EC       ADD ESP,-14
006F6E32  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX   把EAX=21938258存入[EBP-4]
006F6E35  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]   
006F6E38  |.  E8 6BE5D0FF   CALL 004053A8
006F6E3D  |.  33C0          XOR EAX,EAX      EAX=0
006F6E3F  |.  55            PUSH EBP
006F6E40  |.  68 B26E6F00   PUSH 006F6EB2
006F6E45  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
006F6E48  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
006F6E4B  |.  C745 F0 00000>MOV DWORD PTR SS:[EBP-10],80000000   赋初值,[EBP-10]=80000000
006F6E52  |.  C745 F4 DCDA7>MOV DWORD PTR SS:[EBP-C],4172DADC    赋初值 [EBP-C]=4172DADC
006F6E59  |.  837D FC 00    CMP DWORD PTR SS:[EBP-4],0          这是判断用户代码(21938258)是否为空,是就跳,不是就往下进行循环运算。
006F6E5D  |.  74 35         JE SHORT 006F6E94
006F6E5F  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
006F6E62  |.  E8 51E3D0FF   CALL 004051B8                  这个call获取21938258的长度EAX=8
006F6E67  |.  85C0          TEST EAX,EAX
006F6E69  |.  7E 31         JLE SHORT 006F6E9C             好, 下面开始浮点的循环运算了。
006F6E6B  |.  BA 01000000   MOV EDX,1                        
006F6E70  |>  8B4D FC       /MOV ECX,DWORD PTR SS:[EBP-4]      这里ECX=21938258
006F6E73  |.  0FB64C11 FF   |MOVZX ECX,BYTE PTR DS:[ECX+EDX-1]  取21938258的第一个的2(32)的ASCii到ECX里,即ECX=32
006F6E78  |.  0FB7C9        |MOVZX ECX,CX                      这里把ECX低位移到ECX,意思不大,值没变。
006F6E7B  |.  894D EC       |MOV DWORD PTR SS:[EBP-14],ECX     把32存入[EBP-14]里
006F6E7E  |.  DB45 EC       |FILD DWORD PTR SS:[EBP-14]        这是32转成十进制数50放到st0
006F6E81  |.  DC45 F0       |FADD QWORD PTR SS:[EBP-10]     st0=19770874=50+19770824(这个19770824是由上面两个初值所形成的常数,可能是作者的生日1977-08-24,大约27-28岁^_^)
006F6E84  |.  D805 C06E6F00 |FADD DWORD PTR DS:[6F6EC0]     st0=20493276=19770874+722402(722402是常数,估计又是某个有意义数字。)
006F6E8A  |.  DD5D F0       |FSTP QWORD PTR SS:[EBP-10]     把20493276存到[EBP-10]里(注: 下次[EBP-10]的值就是累加值)
006F6E8D  |.  9B            |WAIT
006F6E8E  |.  42            |INC EDX                       EDX=EDX+1
006F6E8F  |.  48            |DEC EAX                      后面的循环就不加了,8个数的SUM=25550462
006F6E90  |.^ 75 DE         \JNZ SHORT 006F6E70           
006F6E92  |.  EB 08         JMP SHORT 006F6E9C
006F6E94  |>  33C0          XOR EAX,EAX
006F6E96  |.  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX
006F6E99  |.  8945 F4       MOV DWORD PTR SS:[EBP-C],EAX
006F6E9C  |>  33C0          XOR EAX,EAX
006F6E9E  |.  5A            POP EDX
006F6E9F  |.  59            POP ECX
006F6EA0  |.  59            POP ECX
006F6EA1  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
006F6EA4  |.  68 B96E6F00   PUSH 006F6EB9
006F6EA9  |>  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
006F6EAC  |.  E8 37E0D0FF   CALL 00404EE8
006F6EB1  \.  C3            RETN
006F6EB2   .^ E9 B1D8D0FF   JMP 00404768
006F6EB7   .^ EB F0         JMP SHORT 006F6EA9
006F6EB9   .  DD45 F0       FLD QWORD PTR SS:[EBP-10]  眼睛睁大了,不要把SUM跟丢了,st0=SUM=25550462
006F6EBC   .  8BE5          MOV ESP,EBP
006F6EBE   .  5D            POP EBP   
006F6EBF   .  C3            RETN        


返回后停在这里:
006F6F11  |.  E8 16FFFFFF   CALL 006F6E2C
006F6F16  |.  D80D F46F6F00 FMUL DWORD PTR DS:[6F6FF4]   一出来就是个浮点乘法运算st0=184576537488=SUM*7224(又一个常数,不要看错了。)
006F6F1C  |.  DB7D E8       FSTP TBYTE PTR SS:[EBP-18]    又把SUM存起来,以便后面第二组注册码的运算。
006F6F1F  |.  9B            WAIT
006F6F20  |.  8D4D E4       LEA ECX,DWORD PTR SS:[EBP-1C]
006F6F23  |.  33D2          XOR EDX,EDX
006F6F25  |.  B8 00706F00   MOV EAX,006F7000                         ;  ASCII "Softkey"
006F6F2A  |.  E8 C5EEFFFF   CALL 006F5DF4
006F6F2F  |.  8B45 E4       MOV EAX,DWORD PTR SS:[EBP-1C]            把我输入软件序列号:19821224,放到EAX=19821224
006F6F32  |.  E8 F5FEFFFF   CALL 006F6E2C        算法CALL跟进


算法CALL:
006F6E2C  /$  55            PUSH EBP        第二组算法和第一组的一模一样。可以偷懒了^_^
006F6E2D  |.  8BEC          MOV EBP,ESP
006F6E2F  |.  83C4 EC       ADD ESP,-14
006F6E32  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
006F6E35  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
006F6E38  |.  E8 6BE5D0FF   CALL 004053A8
006F6E3D  |.  33C0          XOR EAX,EAX
006F6E3F  |.  55            PUSH EBP
006F6E40  |.  68 B26E6F00   PUSH 006F6EB2
006F6E45  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
006F6E48  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
006F6E4B  |.  C745 F0 00000>MOV DWORD PTR SS:[EBP-10],80000000
006F6E52  |.  C745 F4 DCDA7>MOV DWORD PTR SS:[EBP-C],4172DADC
006F6E59  |.  837D FC 00    CMP DWORD PTR SS:[EBP-4],0
006F6E5D  |.  74 35         JE SHORT 006F6E94
006F6E5F  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
006F6E62  |.  E8 51E3D0FF   CALL 004051B8
006F6E67  |.  85C0          TEST EAX,EAX
006F6E69  |.  7E 31         JLE SHORT 006F6E9C
006F6E6B  |.  BA 01000000   MOV EDX,1
006F6E70  |>  8B4D FC       /MOV ECX,DWORD PTR SS:[EBP-4]
006F6E73  |.  0FB64C11 FF   |MOVZX ECX,BYTE PTR DS:[ECX+EDX-1]
006F6E78  |.  0FB7C9        |MOVZX ECX,CX
006F6E7B  |.  894D EC       |MOV DWORD PTR SS:[EBP-14],ECX
006F6E7E  |.  DB45 EC       |FILD DWORD PTR SS:[EBP-14]
006F6E81  |.  DC45 F0       |FADD QWORD PTR SS:[EBP-10]
006F6E84  |.  D805 C06E6F00 |FADD DWORD PTR DS:[6F6EC0]
006F6E8A  |.  DD5D F0       |FSTP QWORD PTR SS:[EBP-10]
006F6E8D  |.  9B            |WAIT
006F6E8E  |.  42            |INC EDX
006F6E8F  |.  48            |DEC EAX
006F6E90  |.^ 75 DE         \JNZ SHORT 006F6E70
006F6E92  |.  EB 08         JMP SHORT 006F6E9C
006F6E94  |>  33C0          XOR EAX,EAX
006F6E96  |.  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX
006F6E99  |.  8945 F4       MOV DWORD PTR SS:[EBP-C],EAX
006F6E9C  |>  33C0          XOR EAX,EAX
006F6E9E  |.  5A            POP EDX
006F6E9F  |.  59            POP ECX
006F6EA0  |.  59            POP ECX
006F6EA1  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
006F6EA4  |.  68 B96E6F00   PUSH 006F6EB9
006F6EA9  |>  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
006F6EAC  |.  E8 37E0D0FF   CALL 00404EE8
006F6EB1  \.  C3            RETN
006F6EB2   .^ E9 B1D8D0FF   JMP 00404768
006F6EB7   .^ EB F0         JMP SHORT 006F6EA9
006F6EB9   .  DD45 F0       FLD QWORD PTR SS:[EBP-10]
006F6EBC   .  8BE5          MOV ESP,EBP
006F6EBE   .  5D            POP EBP
006F6EBF   .  C3            RETN                                第二组运算:SUM1=25550453    

      
  

返回后停在这里:
006F6F37  |.  DB6D E8       FLD TBYTE PTR SS:[EBP-18]  
006F6F3A  |.  DEC1          FADDP ST(1),ST              st0=SUM+SUM1=184576537488+25550453=18460208794099998720(出来一大串)
006F6F3C  |.  83C4 F4       ADD ESP,-0C
006F6F3F  |.  DB3C24        FSTP TBYTE PTR SS:[ESP]                   
006F6F42  |.  9B            WAIT                                      
006F6F43  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]             
006F6F46  |.  E8 D551D1FF   CALL 0040C120        这个CALL比较复杂,先过,然后看各寄存器的值变化情况来推测,它的作用。                     
006F6F4B  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]   果然,呵呵EAX=184602087941,不知你有没有看出些什么门道来?
                                                           呵呵,对了,就是取SUM+SUM1的和,即18460208794099998720的前12位,并四舍五入。


006F6F4E  |.  50            PUSH EAX
006F6F4F  |.  8D4D DC       LEA ECX,DWORD PTR SS:[EBP-24]
006F6F52  |.  33D2          XOR EDX,EDX
006F6F54  |.  B8 10706F00   MOV EAX,006F7010                         ;  ASCII "Regkey1"
006F6F59  |.  E8 96EEFFFF   CALL 006F5DF4
006F6F5E  |.  FF75 DC       PUSH DWORD PTR SS:[EBP-24]
006F6F61  |.  8D4D D8       LEA ECX,DWORD PTR SS:[EBP-28]
006F6F64  |.  33D2          XOR EDX,EDX
006F6F66  |.  B8 20706F00   MOV EAX,006F7020                         ;  ASCII "Regkey2"
006F6F6B  |.  E8 84EEFFFF   CALL 006F5DF4
006F6F70  |.  FF75 D8       PUSH DWORD PTR SS:[EBP-28]
006F6F73  |.  8D4D D4       LEA ECX,DWORD PTR SS:[EBP-2C]
006F6F76  |.  33D2          XOR EDX,EDX
006F6F78  |.  B8 30706F00   MOV EAX,006F7030                         ;  ASCII "Regkey3"
006F6F7D  |.  E8 72EEFFFF   CALL 006F5DF4
006F6F82  |.  FF75 D4       PUSH DWORD PTR SS:[EBP-2C]
006F6F85  |.  8D45 E0       LEA EAX,DWORD PTR SS:[EBP-20]
006F6F88  |.  BA 03000000   MOV EDX,3
006F6F8D  |.  E8 E6E2D0FF   CALL 00405278
006F6F92  |.  8B55 E0       MOV EDX,DWORD PTR SS:[EBP-20]             上面的一堆是,分别取我输入的假注册码,并把它们连起来,即“111112222233333”

后面是比对的过程了,注册码就是1846-0208-7941,你可能会说,明码么,我只要追到后面就成功了,的确,但是如果
有一天你碰到的软件都不是明码怎么办?所以要培养自己的分析能力,最主要的就是,成功=耐心+练习,你会成功的^_^


--------------------------------------------------------------------------------
【破解总结】


总的说这个软件算法简单,适合像我一样的新手,上手,最主要的是搞定他的验检,再慢慢的分析就出来了,不要闲麻烦!!
后话:此软件会定时检测“软件序列号”的合法性,如果不合法,那就会提示过期!
--------------------------------------------------------------------------------
【算法注册机】

#include <stdlib.h>
#include <stdio.h>
 main()

{
    char CODE[255],s[255];

    int i,n;
    double sum=19770824,sum1=19770824;


printf("Crack by zmw1224[CZG][DFCG]\n");
printf("___________________________\n");
printf("请输入你的用户代码:");
scanf("%s",CODE);



 n=strlen(CODE);
          for(i=0;i<n;i++)
              {sum+=CODE[i];
               sum+=722402;
               }

sum*=7224;

printf("请输入你的软件序列号:");
scanf("%s",CODE);

n=strlen(CODE);
          for(i=0;i<n;i++)
              {sum1+=CODE[i];
               sum1+=722402;
               }

sum+=sum1;

gcvt(sum, 12, s);

printf("你的注册码是:%s",s);



}

--------------------------------------------------------------------------------
【内存注册机】


在006F6F4B这可做内存注册机了。
--------------------------------------------------------------------------------
【用户名、密码】


单位名称:CZG
用户代码:21938258
软件序列号:19821224
软件注册码:1846-0208-7941

--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

  • 标 题: 答复
  • 作 者:ljy3282393
  • 时 间:2005-02-02 14:02

楼主:下断 bp CreateFileA 后,如何判断应该按多少次F9才能到达程序校验的地方?

  • 标 题: 答复
  • 作 者:zmw1224
  • 时 间:2005-02-02 14:56

注意堆栈,打开自己时返回,还要靠一些经验
0012F508   10001222  /CALL 到 CreateFileA 来自 1000121C
0012F50C   0012F558  |FileName = "D:\Program Files\客户王\Unpacked.ExE"
0012F510   80000000  |Access = GENERIC_READ
0012F514   00000003  |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012F518   00000000  |pSecurity = NULL
0012F51C   00000003  |Mode = OPEN_EXISTING
0012F520   00000080  |Attributes = NORMAL
0012F524   00000000  \hTemplateFile = NULL