• 标 题:瑞科英语通 V3.0 
  • 作 者:fxyang
  • 时 间:2003/04/27 06:44pm
  • 链 接:http://bbs.pediy.com

瑞科英语通 V3.0

软件大小:  2327 KB
软件语言:  简体中文
软件类别:  国产软件 / 共享版 / 外语学习
应用平台:  Win9x/NT/2000/XP
界面预览:  无
加入时间:  2003-04-25 09:31:32
下载地址:  http://www.skycn.com/soft/11849.html
 

联 系 人:  zcgkali@kali.com.cn  
开 发 商:  http://rike.yeah.net/

软件介绍:
   "瑞科英语通"是一款个人英语学习和学校课堂辅助教学的软件。精通英语必须经常性地
进行"听,说、读、写"的练习,"瑞科英语通"就是帮助你进行这些综合练习的学习和教学软
件,本软件结合了多种成功的英语学习和英语教学经验,提供了超强的"听,说、读、写"的
功能、科学的并可随心所欲组合的学习方法,使您在很短的时间内提高"听,说、读、写"的
能力,使您成为名符其实的英语通。

【作者声明】:本人只是对Crack感兴趣,没有其它目的。
【破解工具】:Ollydbg1.09 中文版


—————————————————————————————
【过    程】:
   
  由于是vb程序,所以在Ollydbg中用ALT+E到MSVBVM60.DLL领空,下__vbastrcmp中断。
来到这里:

004AA515  PUSH    EBX
004AA516  PUSH    EAX
004AA517  CALL    DWORD PTR DS:[401060]        
004AA51D  MOV     EAX, DWORD PTR SS:[EBP-2C]
004AA520  LEA     ECX, DWORD PTR SS:[EBP-54]
004AA523  MOV     DWORD PTR SS:[EBP-3C], EAX
004AA526  LEA     EAX, DWORD PTR SS:[EBP-44]
004AA529  PUSH    EAX
004AA52A  PUSH    ECX
004AA52B  MOV     DWORD PTR SS:[EBP-2C], EDI
004AA52E  MOV     DWORD PTR SS:[EBP-44], 8
004AA535  CALL    DWORD PTR DS:[4010A4]      
004AA53B  LEA     EDX, DWORD PTR SS:[EBP-54]
004AA53E  PUSH    EDX
004AA53F  CALL    DWORD PTR DS:[401024]        
004AA545  MOV     EBX, DWORD PTR DS:[4011D4]  
004AA54B  MOV     EDX, EAX
004AA54D  LEA     ECX, DWORD PTR SS:[EBP-24]
004AA550  CALL    EBX                          

;  EDI<--0015CCB4,(UNICODE "59622746")

004AA552  LEA     ECX, DWORD PTR SS:[EBP-34]
004AA555  CALL    DWORD PTR DS:[401200]        
004AA55B  LEA     EAX, DWORD PTR SS:[EBP-54]
004AA55E  LEA     ECX, DWORD PTR SS:[EBP-44]
004AA561  PUSH    EAX
004AA562  PUSH    ECX
004AA563  PUSH    2
004AA565  CALL    DWORD PTR DS:[401034]      
004AA56B  MOV     EDX, DWORD PTR DS:[ESI]
004AA56D  ADD     ESP, 0C
004AA570  PUSH    ESI
004AA571  CALL    DWORD PTR DS:[EDX+308]
004AA577  PUSH    EAX
004AA578  LEA     EAX, DWORD PTR SS:[EBP-34]
004AA57B  PUSH    EAX
004AA57C  CALL    DWORD PTR DS:[40107C]        
004AA582  MOV     ESI, EAX
004AA584  LEA     EDX, DWORD PTR SS:[EBP-2C]
004AA587  PUSH    EDX
004AA588  PUSH    ESI
004AA589  MOV     ECX, DWORD PTR DS:[ESI]
004AA58B  CALL    DWORD PTR DS:[ECX+A0]
004AA591  CMP     EAX, EDI
004AA593  FCLEX
004AA595  JGE     SHORT 004AA5A9              
004AA597  PUSH    0A0
004AA59C  PUSH    462E34
004AA5A1  PUSH    ESI
004AA5A2  PUSH    EAX
004AA5A3  CALL    DWORD PTR DS:[401060]        
004AA5A9  MOV     EAX, DWORD PTR SS:[EBP-2C]  

;  EAX<--0015CCEC,(UNICODE "789456123")<--试验码

004AA5AC  LEA     ECX, DWORD PTR SS:[EBP-54]
004AA5AF  MOV     DWORD PTR SS:[EBP-3C], EAX  
004AA5B2  LEA     EAX, DWORD PTR SS:[EBP-44]
004AA5B5  PUSH    EAX
004AA5B6  PUSH    ECX
004AA5B7  MOV     DWORD PTR SS:[EBP-2C], EDI
004AA5BA  MOV     DWORD PTR SS:[EBP-44], 8
004AA5C1  CALL    DWORD PTR DS:[4010A4]        
004AA5C7  LEA     EDX, DWORD PTR SS:[EBP-54]
004AA5CA  PUSH    EDX
004AA5CB  CALL    DWORD PTR DS:[401024]        
004AA5D1  MOV     EDX, EAX                    

;  EDX<--0015CCEC,(UNICODE "789456123")

004AA5D3  LEA     ECX, DWORD PTR SS:[EBP-28]
004AA5D6  CALL    EBX
004AA5D8  LEA     ECX, DWORD PTR SS:[EBP-34]
004AA5DB  CALL    DWORD PTR DS:[401200]        
004AA5E1  MOV     ESI, DWORD PTR DS:[401034]  
004AA5E7  LEA     EAX, DWORD PTR SS:[EBP-54]
004AA5EA  LEA     ECX, DWORD PTR SS:[EBP-44]
004AA5ED  PUSH    EAX
004AA5EE  PUSH    ECX
004AA5EF  PUSH    2
004AA5F1  CALL    ESI                          
004AA5F3  ADD     ESP, 0C
004AA5F6  MOV     EDX, 462068                  

;  UNICODE "zcgrike640315"

004AA5FB  LEA     ECX, DWORD PTR SS:[EBP-2C]
004AA5FE  CALL    DWORD PTR DS:[401184]        

;  0015CCEC<-- UNICODE "zcgrike640315"

004AA604  LEA     EDX, DWORD PTR SS:[EBP-2C]
004AA607  LEA     EAX, DWORD PTR SS:[EBP-28]
004AA60A  PUSH    EDX
004AA60B  PUSH    EAX
004AA60C  CALL    004A0E30          ;  <--用上面的字符串和试验码计算出用户号
=======>F8
------用上面的字符串和试验码计算出用户号
004A0EBC  PUSH    20
004A0EBE  PUSH    46217C
004A0EC3  PUSH    EDI
004A0EC4  PUSH    EAX
004A0EC5  CALL    DWORD PTR DS:[401060]      
004A0ECB  LEA     ECX, DWORD PTR SS:[EBP-48]
004A0ECE  CALL    DWORD PTR DS:[401200]        
004A0ED4  MOV     ESI, DWORD PTR SS:[EBP+C]
004A0ED7  PUSH    ESI
004A0ED8  CALL    004A0C40                    
004A0EDD  MOV     EDX, EAX
004A0EDF  MOV     ECX, ESI
004A0EE1  MOV     ESI, DWORD PTR DS:[4011D4]  
004A0EE7  CALL    ESI                        
004A0EE9  MOV     EDX, DWORD PTR SS:[EBP+8]
004A0EEC  MOV     EAX, DWORD PTR DS:[EDX]
004A0EEE  PUSH    EAX
004A0EEF  CALL    DWORD PTR DS:[40102C]        
004A0EF5  MOV     ECX, EAX
004A0EF7  CALL    DWORD PTR DS:[4010E4]        
004A0EFD  MOV     DWORD PTR SS:[EBP-B8], EAX
004A0F03  MOV     EAX, 1
004A0F08  MOV     DWORD PTR SS:[EBP-20], EAX
004A0F0B  MOV     EDI, DWORD PTR DS:[401024]  
004A0F11  CMP     AX, WORD PTR SS:[EBP-B8]
004A0F18  JG      004A117D                    
004A0F1E  MOV     DWORD PTR SS:[EBP-50], 1
004A0F25  MOV     DWORD PTR SS:[EBP-58], 2
004A0F2C  MOV     ECX, DWORD PTR SS:[EBP+8]
004A0F2F  MOV     DWORD PTR SS:[EBP-90], ECX
004A0F35  MOV     DWORD PTR SS:[EBP-98], 4008
004A0F3F  MOVSX   EBX, AX
004A0F42  LEA     EDX, DWORD PTR SS:[EBP-58]
004A0F45  PUSH    EDX
004A0F46  PUSH    EBX
004A0F47  LEA     EAX, DWORD PTR SS:[EBP-98]
004A0F4D  PUSH    EAX
004A0F4E  LEA     ECX, DWORD PTR SS:[EBP-68]
004A0F51  PUSH    ECX
004A0F52  CALL    DWORD PTR DS:[4010BC]        
004A0F58  LEA     EDX, DWORD PTR SS:[EBP-68]
004A0F5B  PUSH    EDX
004A0F5C  CALL    EDI
004A0F5E  MOV     EDX, EAX
004A0F60  LEA     ECX, DWORD PTR SS:[EBP-2C]
004A0F63  CALL    ESI
004A0F65  LEA     EAX, DWORD PTR SS:[EBP-68]
004A0F68  PUSH    EAX
004A0F69  LEA     ECX, DWORD PTR SS:[EBP-58]
004A0F6C  PUSH    ECX
004A0F6D  PUSH    2
004A0F6F  CALL    DWORD PTR DS:[401034]      
004A0F75  ADD     ESP, 0C
004A0F78  MOV     EDX, DWORD PTR SS:[EBP+8]
004A0F7B  MOV     EAX, DWORD PTR DS:[EDX]
004A0F7D  PUSH    EAX
004A0F7E  CALL    DWORD PTR DS:[40102C]      
004A0F84  XOR     EDX, EDX
004A0F86  CMP     EBX, EAX
004A0F88  SETNE   DL
004A0F8B  MOV     ECX, DWORD PTR SS:[EBP-2C]
004A0F8E  PUSH    ECX
004A0F8F  PUSH    462CA8
004A0F94  MOV     DWORD PTR SS:[EBP-CC], EDX
004A0F9A  CALL    DWORD PTR DS:[4010DC]        
004A0FA0  NEG     EAX
004A0FA2  SBB     EAX, EAX
004A0FA4  NEG     EAX
004A0FA6  MOV     EDX, DWORD PTR SS:[EBP-CC]
004A0FAC  TEST    EAX, EDX
004A0FAE  JNZ     004A1151                                        

<--这个循环判断试验码的长度和中间有没有连接号"-",第九次不跳,说明注册码长度的第一组是八位
即试验码>8位就不跳,进入计算的地方

004A0FB4  MOV     EAX, DWORD PTR SS:[EBP+8]
004A0FB7  MOV     ECX, DWORD PTR DS:[EAX]
004A0FB9  PUSH    ECX
004A0FBA  CALL    DWORD PTR DS:[40102C]        
004A0FC0  MOVSX   ECX, WORD PTR SS:[EBP-20]
004A0FC4  CMP     ECX, EAX
004A0FC6  JNZ     SHORT 004A0FDD              
004A0FC8  MOV     EDX, DWORD PTR SS:[EBP-38]
004A0FCB  PUSH    EDX
004A0FCC  MOV     EAX, DWORD PTR SS:[EBP-2C]
004A0FCF  PUSH    EAX
004A0FD0  CALL    DWORD PTR DS:[401050]      
004A0FD6  MOV     EDX, EAX
004A0FD8  LEA     ECX, DWORD PTR SS:[EBP-38]
004A0FDB  CALL    ESI
004A0FDD  MOV     CX, WORD PTR SS:[EBP-24]
004A0FE1  ADD     CX, 1
004A0FE5  JO      004A1249                    
004A0FEB  MOV     DWORD PTR SS:[EBP-24], ECX
004A0FEE  LEA     EDX, DWORD PTR SS:[EBP-38]
004A0FF1  MOV     DWORD PTR SS:[EBP-90], EDX
004A0FF7  MOV     DWORD PTR SS:[EBP-98], 4008
004A1001  LEA     EAX, DWORD PTR SS:[EBP-98]
004A1007  PUSH    EAX
004A1008  LEA     ECX, DWORD PTR SS:[EBP-58]
004A100B  PUSH    ECX
004A100C  CALL    DWORD PTR DS:[4010A4]        
004A1012  LEA     EDX, DWORD PTR SS:[EBP-58]
004A1015  PUSH    EDX
004A1016  CALL    EDI
004A1018  MOV     EDX, EAX
004A101A  LEA     ECX, DWORD PTR SS:[EBP-38]
004A101D  CALL    ESI
004A101F  LEA     ECX, DWORD PTR SS:[EBP-58]
004A1022  CALL    DWORD PTR DS:[401020]      
004A1028  MOV     EAX, DWORD PTR SS:[EBP-38]
004A102B  PUSH    EAX
004A102C  CALL    DWORD PTR DS:[401208]      
004A1032  CALL    DWORD PTR DS:[4011C8]      
004A1038  MOV     EBX, EAX
004A103A  MOV     DWORD PTR SS:[EBP-50], 4
004A1041  MOV     DWORD PTR SS:[EBP-58], 2
004A1048  MOV     ECX, DWORD PTR SS:[EBP+C]
004A104B  MOV     DWORD PTR SS:[EBP-90], ECX
004A1051  MOV     DWORD PTR SS:[EBP-98], 4008

; 以上计算字符串"zcgrike640315"各位ASCII码值的10进制值"1229910311410510710154524851"

004A105B  LEA     EDX, DWORD PTR SS:[EBP-58]  
004A105E  PUSH    EDX
004A105F  MOV     AX, WORD PTR SS:[EBP-24]
004A1063  SUB     AX, 1
004A1067  JO      004A1249                    
004A106D  IMUL    AX, AX, 4
004A1071  JO      004A1249                    
004A1077  ADD     AX, 1
004A107B  JO      004A1249                    
004A1081  MOVSX   ECX, AX
004A1084  PUSH    ECX
004A1085  LEA     EDX, DWORD PTR SS:[EBP-98]
004A108B  PUSH    EDX
004A108C  LEA     EAX, DWORD PTR SS:[EBP-68]
004A108F  PUSH    EAX
004A1090  CALL    DWORD PTR DS:[4010BC]        

;  <--取前4位”1229“

004A1096  LEA     ECX, DWORD PTR SS:[EBP-68]
004A1099  PUSH    ECX
004A109A  CALL    EDI
004A109C  MOV     EDX, EAX                    

;  EDX<--00165E5C,”1229“

004A109E  LEA     ECX, DWORD PTR SS:[EBP-34]
004A10A1  CALL    ESI
004A10A3  LEA     EDX, DWORD PTR SS:[EBP-68]
004A10A6  PUSH    EDX
004A10A7  LEA     EAX, DWORD PTR SS:[EBP-58]
004A10AA  PUSH    EAX
004A10AB  PUSH    2
004A10AD  CALL    DWORD PTR DS:[401034]      
004A10B3  ADD     ESP, 0C
004A10B6  MOV     ECX, DWORD PTR SS:[EBP-34]  

;  ECX<--00165E5C,”1229“

004A10B9  PUSH    ECX
004A10BA  CALL    DWORD PTR DS:[401208]        

;  计算“1229”的16进制=4CD
-----把1229转变成16进制4CD----
|
779C33DD   LEA     ECX, DWORD PTR DS:[EBX+EBX*4]
779C33E0   XOR     EBX, EBX
779C33E2   MOV     BL, BYTE PTR DS:[EAX]            ; BL=01
779C33E4   INC     EAX
779C33E5   DEC     ESI
779C33E6   LEA     EBX, DWORD PTR DS:[EBX+ECX*2]
779C33E9   MOV     ECX, DWORD PTR SS:[EBP-20]
779C33EC   DEC     ECX
779C33ED   MOV     DWORD PTR SS:[EBP-20], ECX
779C33F0   JNZ     SHORT 779C33DD                  

; <--把1229转变成16进制4CD
====>F8
----------------------------------
|
004A10C0  CALL    DWORD PTR DS:[4011C8]        

;  <--把值4CD==>DS:[0012E95C]  ==>DS:[0012E960]

004A10C6  MOV     EDX, DWORD PTR SS:[EBP-44]
004A10C9  MOV     DWORD PTR SS:[EBP-A0], EDX
004A10CF  MOV     DWORD PTR SS:[EBP-A8], 8
004A10D9  XOR     EAX, EBX                    

<--关键计算"把试验码的16进制值 XOR "4CD"

004A10DB  MOV     DWORD PTR SS:[EBP-50], EAX  

;  EAX=2F0E2036<--中间值

004A10DE  MOV     DWORD PTR SS:[EBP-58], 3
004A10E5  LEA     EAX, DWORD PTR SS:[EBP-58]
004A10E8  PUSH    EAX
004A10E9  LEA     ECX, DWORD PTR SS:[EBP-68]
004A10EC  PUSH    ECX
004A10ED  CALL    DWORD PTR DS:[4011B8]        

;  EAX=2F0E2036变成10进制”789454902“,还原成10进制值
===>F8
----16进制转变成10进制----
|
779A23FF   MOV     ESI, DWORD PTR SS:[ESP+10]
779A2403   MOV     EBX, ECX
779A2405   MOV     EAX, ESI
779A2407   XOR     EDX, EDX
779A2409   MOV     EDI, 0A
779A240E   ADD     ECX, 2
779A2411   DIV     EDI
779A2413   MOV     EAX, CCCCCCCD
779A2418   MOV     EDI, EDX
779A241A   MUL     ESI
779A241C   SHR     EDX, 3
779A241F   ADD     EDI, 30
779A2422   MOV     ESI, EDX
779A2424   MOV     WORD PTR DS:[ECX-2], DI
779A2428   TEST    ESI, ESI                        
779A242A   JA      SHORT 779A2405                  
779A242C   MOV     WORD PTR DS:[ECX], 0
779A2431   SUB     ECX, 2
779A2434   MOV     DX, WORD PTR DS:[EBX]
779A2437   MOV     AX, WORD PTR DS:[ECX]
779A243A   MOV     WORD PTR DS:[ECX], DX
779A243D   MOV     WORD PTR DS:[EBX], AX
779A2440   SUB     ECX, 2
779A2443   ADD     EBX, 2
779A2446   CMP     EBX, ECX
779A2448   JB      SHORT 779A2434                  
779A244A   POP     EDI                              

; EAX=2F0E2036变成10进制”789454902“


-----------------------
|
004A10F3  LEA     EDX, DWORD PTR SS:[EBP-68]
004A10F6  PUSH    EDX
004A10F7  LEA     EAX, DWORD PTR SS:[EBP-78]
004A10FA  PUSH    EAX
004A10FB  CALL    DWORD PTR DS:[4010A4]        
004A1101  LEA     ECX, DWORD PTR SS:[EBP-A8]
004A1107  PUSH    ECX
004A1108  LEA     EDX, DWORD PTR SS:[EBP-78]
004A110B  PUSH    EDX
004A110C  LEA     EAX, DWORD PTR SS:[EBP-88]
004A1112  PUSH    EAX
004A1113  CALL    DWORD PTR DS:[4011AC]        
004A1119  PUSH    EAX
004A111A  CALL    EDI
004A111C  MOV     EDX, EAX                    

;  EAX=”789454902“

004A111E  LEA     ECX, DWORD PTR SS:[EBP-44]
004A1121  CALL    ESI
004A1123  LEA     ECX, DWORD PTR SS:[EBP-88]
004A1129  PUSH    ECX
004A112A  LEA     EDX, DWORD PTR SS:[EBP-78]
004A112D  PUSH    EDX
004A112E  LEA     EAX, DWORD PTR SS:[EBP-68]
004A1131  PUSH    EAX
004A1132  LEA     ECX, DWORD PTR SS:[EBP-58]
004A1135  PUSH    ECX
004A1136  PUSH    4
004A1138  CALL    DWORD PTR DS:[401034]        
004A113E  ADD     ESP, 14
004A1141  MOV     EDX, 461630
004A1146  LEA     ECX, DWORD PTR SS:[EBP-38]
004A1149  CALL    DWORD PTR DS:[401184]      
004A114F  JMP     SHORT 004A1166              
004A1151  MOV     EDX, DWORD PTR SS:[EBP-38]
004A1154  PUSH    EDX
004A1155  MOV     EAX, DWORD PTR SS:[EBP-2C]
004A1158  PUSH    EAX
004A1159  CALL    DWORD PTR DS:[401050]        
004A115F  MOV     EDX, EAX
004A1161  LEA     ECX, DWORD PTR SS:[EBP-38]
004A1164  CALL    ESI
004A1166  MOV     EAX, 1
004A116B  ADD     AX, WORD PTR SS:[EBP-20]
004A116F  JO      004A1249                    
004A1175  MOV     DWORD PTR SS:[EBP-20], EAX
004A1178  JMP     004A0F11                    
004A117D  LEA     ECX, DWORD PTR SS:[EBP-44]
004A1180  MOV     DWORD PTR SS:[EBP-90], ECX
004A1186 >MOV     DWORD PTR SS:[EBP-98], 4008
004A1190  LEA     EDX, DWORD PTR SS:[EBP-98]
004A1196  PUSH    EDX
004A1197  LEA     EAX, DWORD PTR SS:[EBP-58]
004A119A  PUSH    EAX
004A119B  CALL    DWORD PTR DS:[4010A4]        
004A11A1  LEA     ECX, DWORD PTR SS:[EBP-58]
004A11A4  PUSH    ECX
004A11A5  CALL    EDI
004A11A7  MOV     EDX, EAX                    

;  EAX=”789454902“

004A11A9  LEA     ECX, DWORD PTR SS:[EBP-44]
004A11AC  CALL    ESI
004A11AE  LEA     ECX, DWORD PTR SS:[EBP-58]
004A11B1  CALL    DWORD PTR DS:[401020]      
004A11B7  LEA     EDX, DWORD PTR SS:[EBP-44]
004A11BA  PUSH    EDX
004A11BB  CALL    004A0A10                    
004A11C0  MOV     EDX, EAX
004A11C2  LEA     ECX, DWORD PTR SS:[EBP-44]
004A11C5  CALL    ESI
004A11C7  MOV     EDX, DWORD PTR SS:[EBP-44]
004A11CA  LEA     ECX, DWORD PTR SS:[EBP-40]
004A11CD  CALL    DWORD PTR DS:[401184]        
004A11D3  CALL    DWORD PTR DS:[401074]        

<--以上把”789454902“二个一组,然后把每组的值变成16进制值连接后成为(4E 5E 36 5A)

004A11D9  WAIT
004A11DA  PUSH    4A1233
004A11DF  JMP     SHORT 004A1218              
004A11E1  TEST    BYTE PTR SS:[EBP-C], 4
004A11E5  JE      SHORT 004A11F0              
004A11E7  LEA     ECX, DWORD PTR SS:[EBP-40]
004A11EA  CALL    DWORD PTR DS:[401204]      
004A11F0  LEA     ECX, DWORD PTR SS:[EBP-48]
004A11F3  CALL    DWORD PTR DS:[401200]      
004A11F9  LEA     EAX, DWORD PTR SS:[EBP-88]
004A11FF  PUSH    EAX
004A1200  LEA     ECX, DWORD PTR SS:[EBP-78]
004A1203  PUSH    ECX
004A1204  LEA     EDX, DWORD PTR SS:[EBP-68]
004A1207  PUSH    EDX
004A1208  LEA     EAX, DWORD PTR SS:[EBP-58]
004A120B  PUSH    EAX
004A120C  PUSH    4
004A120E  CALL    DWORD PTR DS:[401034]      
004A1214  ADD     ESP, 14
004A1217  RETN

--------------------------------
|
004AA611  MOV     EDX, EAX                    

;  EAX<--00149164,(4E 5E 36 5A 00)

004AA613  LEA     ECX, DWORD PTR SS:[EBP-18]
004AA616  CALL    EBX
004AA618  LEA     ECX, DWORD PTR SS:[EBP-2C]
004AA61B  CALL    DWORD PTR DS:[401204]      
004AA621  MOV     ECX, DWORD PTR SS:[EBP-18]  

;  ECX<--00149164,(4E 5E 36 5A)<--通过计算得到的值

004AA624  MOV     EDX, DWORD PTR SS:[EBP-24]  

;  EDX<--0015CCB4,(UNICODE "59622746") <--用户码

004AA627  PUSH    ECX
004AA628  PUSH    EDX
004AA629  CALL    DWORD PTR DS:[4010DC]  <-- 注册码正确性比较,即上面的二个参数相同
===>F8
------注册码正确性比较,即上面的二个参数相同-----
|
77A14331  MOV     EDI, DWORD PTR SS:[EBP+C]    ; EDI=0013D9DC <--37
77A14334  MOV     ESI, DWORD PTR SS:[EBP+8]    ; ESI=0013DB14 <--31
77A14337  MOV     ECX, DWORD PTR SS:[EBP+10]
77A1433A  XOR     EAX, EAX
77A1433C  REPE    CMPS WORD PTR ES:[EDI], WORD>; <--这里进行比较
77A1433F  JE      SHORT 77A14346               ; OLEAUT32.77A14346
77A14341  SBB     EAX, EAX
77A14343  SBB     EAX, -1                      <--赋失败标志
77A14346  TEST    EAX, EAX
77A14348  JG      SHORT 77A1437D               ; OLEAUT32.77A1437D
77A1434A  JGE     SHORT 77A14350               ; OLEAUT32.77A14350
77A1434C  XOR     EAX, EAX                     <--赋成功标志
77A1434E  JMP     SHORT 77A143AB               ; OLEAUT32.77A143AB

-------------------------------
|
004AA62F  TEST    EAX, EAX
004AA631  JNZ     004AA7DC                     ;  关键的跳转

========================================================================

到这里算法跟踪完成,总结一下。

   注册码由二组组成,依据 004A0FAE  JNZ   004A1151 这个跳转>8 <11时进入下面的计算核心。
   不然就出错,注册码每组的长度是八位或者是10位,中间用“-”连接。


   注册码的计算方法:

        1.用试验码的16进制值 XOR  4CD(字符串计算出来的常数)  
        2.把上面得到的值变换成10进制
        3.把上面的10进制值每二个一组,然后把每组的值转变成16进制,就是用户码


  由于算法比较简单,就是16进制和10进制的转换和 XOR 操作,所以可逆还是比较简单的。

       1.把用户码的每位的hex值转变成10进制值
       2.把转换的字符串分成二部分
       3.把第一部分的值转变成16进制 XOR 4CD(1229D) ,然后再转变成10进制就是注册码的第一部分
       4.把第二部分的值转变成16进制 XOR 238F(9103D) ,然后再转变成10进制就是注册码的第二部分
       5.用连接号‘-’连接后就是注册码

==================================================================

注册机源码:
---VB6.0编译通过----

Dim j As Integer
Dim k As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer
Dim f As Integer
Dim g As Integer
Dim i As Integer
Dim h As Integer
Dim l As Integer
Dim edx As String
Dim ebx As Long
Dim eax As Long
Dim ecx As String
Dim startin As String   '以上定义变量及变量类型

startin = Text2.Text   '变量startin接收输入的数据
nlen = Len(startin)    '取输入数据的长度
If nlen < 8 Then       '如果小于八位就不正确
h = MsgBox("你还没有输入用户码,或者长度没有八位,请核对后重新输入")
GoTo tc                '结束
Else:
End If


c = AscB(Mid(startin, 1))
d = AscB(Mid(startin, 2))
e = AscB(Mid(startin, 3))
f = AscB(Mid(startin, 4))
g = AscB(Mid(startin, 5))
h = AscB(Mid(startin, 6))
i = AscB(Mid(startin, 7))
j = AscB(Mid(startin, 8))     '用asc函数取每位的ascii码的10进制值
eax = c * CLng(1000000) + d * CLng(10000) + e * CLng(100) + f   '按位连接前四位
ebx = g * CLng(1000000) + h * CLng(10000) + i * CLng(100) + j   '按位连接后四位
ecx = eax Xor 1229       'VB不要转换,直接用。
edx = ebx Xor 9103       'VB不要转换,直接用。
Text1.Text = ecx + "-" + edx   '连接成注册码

tc: End Sub


有个问题请教,谢谢:
  1.如果用户码是10,eax的值超出long类型,就无法计算。所以这里只能计算用户码是
八位的注册码。
  2.C怎么实现。


                                               by  fxyang[OCN][BCG]

                                                    2003.4.27