【破文标题】菜鸟破解之四---水晶排课系统软件注册算法分析
【破文作者】紫色缘[TFW][PCG]
【作者邮箱】Cn_Fish@126.com
【作者主页】www.cniso.org
【破解工具】OD/红色警戒~~(没精神的时候就打打它,嘿嘿~~)
【破解平台】WinXP SP2
【软件大小】9MB
【原版下载】不提供~
【保护方式】无
【软件简介】本人觉得这款软件真的很不错 
--------------------------------------------------------------------------------------------------------
【破解过程】

未查壳后直接OD载入,有提示压入壳加密,询问是否加以分析,点否后,进入如下代码处:

005EC710 >  60              pushad
005EC711    BE 00A05400     mov     esi, 0054A000
005EC716    8DBE 0070EBFF   lea     edi, [esi+FFEB7000]
005EC71C    57              push    edi
005EC71D    83CD FF         or      ebp, FFFFFFFF
005EC720    EB 10           jmp     short 005EC732
005EC722    90              nop

----------------------------------------------------------------------------------------------------------
从压缩的特征看,不是UPX就是asp了,直接CTRL+F 输入popad,到达如下代码处~

005EC869   /74 07           je      short 005EC872
005EC86B   |8903            mov     [ebx], eax
005EC86D   |83C3 04         add     ebx, 4
005EC870  ^|EB D8           jmp     short 005EC84A
005EC872   \FF96 843A1F00   call    [esi+1F3A84]
005EC878    61              popad                                    ; 此处直接F2后,F9断在此,然后取消断点后,F8下
005EC879  - E9 AE70E1FF     jmp     0040392C                         ; F7跟进


---------------跟进5EC879后,代码如下----------------------------------------------------------------------

0040392C    68 403D4100     push    00413D40
00403931    E8 F0FFFFFF     call    00403926                         ; jmp 到 MSVBVM60.ThunRTMain
00403936    0000            add     [eax], al
00403938    0000            add     [eax], al
0040393A    0000            add     [eax], al
0040393C    3000            xor     [eax], al
0040393E    0000            add     [eax], al
00403940    40              inc     eax
00403941    0000            add     [eax], al
00403943    0000            add     [eax], al
00403945    0000            add     [eax], al
00403947    0070 B5         add     [eax-4B], dh
0040394A    0315 D9E0954F   add     edx, [4F95E0D9]
00403950    B3 2F           mov     bl, 2F                                ;   原来此软件是VB编写的~
------------------------------------------------------------------------------------------------------------

-------------------------找到关键点后直接跟踪到此,代码如下-------------------------------------------------

005D0960   .  55            PUSH EBP                                            ;  在此下断,F8继续跟
005D0961   .  8BEC          MOV EBP,ESP
005D0963   .  83EC 08       SUB ESP,8
005D0966   .  68 06354000   PUSH <JMP.&MSVBVM60.__vbaExceptHandler>             ;  SE 处理程序安装
005D096B   .  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
005D0971   .  50            PUSH EAX
005D0972   .  64:8925 00000>MOV DWORD PTR FS:[0],ESP
.............................................省略N行代码~~...................................................
005D0B78   .  50            PUSH EAX
005D0B79   .  53            PUSH EBX
005D0B7A   .  8B13          MOV EDX,DWORD PTR DS:[EBX]
005D0B7C   .  FF92 A0000000 CALL DWORD PTR DS:[EDX+A0]                          ;  读取机器码
005D0B82   .  3BC7          CMP EAX,EDI                                         ;  2者作为比较
005D0B84   .  DBE2          FCLEX
005D0B86   .  7D 12         JGE SHORT unpack.005D0B9A                           ;  大于或等于则跳
005D0B88   .  68 A0000000   PUSH 0A0
005D0B8D   .  68 10594200   PUSH unpack.00425910
005D0B92   .  53            PUSH EBX
005D0B93   .  50            PUSH EAX
005D0B94   .  FF15 7C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHresultCheckObj>>;  MSVBVM60.__vbaHresultCheckObj
005D0B9A   >  8B45 DC       MOV EAX,DWORD PTR SS:[EBP-24]                       ;  机器码送入EAX
005D0B9D   .  8D8D 40FFFFFF LEA ECX,DWORD PTR SS:[EBP-C0]
005D0BA3   .  8D95 30FFFFFF LEA EDX,DWORD PTR SS:[EBP-D0]
005D0BA9   .  BB 08000000   MOV EBX,8                                           ;  EBX=8
005D0BAE   .  51            PUSH ECX
005D0BAF   .  52            PUSH EDX
005D0BB0   .  897D DC       MOV DWORD PTR SS:[EBP-24],EDI
005D0BB3   .  8985 48FFFFFF MOV DWORD PTR SS:[EBP-B8],EAX                       ;  EAX(机器码)送入[EBP-B8]
005D0BB9   .  899D 40FFFFFF MOV DWORD PTR SS:[EBP-C0],EBX                       ;  EBX(8)送入[EBP-C0]
005D0BBF   .  FF15 0C114000 CALL DWORD PTR DS:[<&MSVBVM60.rtcUpperCaseVar>]     ;  MSVBVM60.rtcUpperCaseVar
005D0BC5   .  8B06          MOV EAX,DWORD PTR DS:[ESI]
005D0BC7   .  56            PUSH ESI
.............................................省略N行代码~~...................................................
005D10B9   .  52            PUSH EDX
005D10BA   .  50            PUSH EAX
005D10BB   .  C785 D8FBFFFF>MOV DWORD PTR SS:[EBP-428],unpack.0042847C
005D10C5   .  FFD3          CALL EBX                                            ;  <&MSVBVM60.__vbaVarCat>
005D10C7   .  8D4D BC       LEA ECX,DWORD PTR SS:[EBP-44]
005D10CA   .  50            PUSH EAX
005D10CB   .  51            PUSH ECX
005D10CC   .  FF15 C8114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVarVal>]      ;  开始取注册编号第3位,尾部加“0”
005D10D2   .  50            PUSH EAX                                            ;  EAX=“-0”入栈
005D10D3   .  FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcByteValueBstr>]    ;  转换为16进制
005D10D9   .  50            PUSH EAX                                            ;  EAX=2D(16进制)
005D10DA   .  FF15 8C114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrUI1>]         ;  转为10进制
005D10E0   .  8B35 7C124000 MOV ESI,DWORD PTR DS:[<&MSVBVM60.__vbaStrMove>]     ;  MSVBVM60.__vbaStrMove
005D10E6   .  8BD0          MOV EDX,EAX                                         ;  EAX=45(转为10进制)送入EDX
005D10E8   .  8D4D B0       LEA ECX,DWORD PTR SS:[EBP-50]
005D10EB   .  FFD6          CALL ESI                                            ;  <&MSVBVM60.__vbaStrMove>
005D10ED   .  50            PUSH EAX                                            ;  EAX入栈
005D10EE   .  8D95 20FEFFFF LEA EDX,DWORD PTR SS:[EBP-1E0]
005D10F4   .  8D85 50FCFFFF LEA EAX,DWORD PTR SS:[EBP-3B0]
005D10FA   .  52            PUSH EDX
005D10FB   .  8D8D 10FEFFFF LEA ECX,DWORD PTR SS:[EBP-1F0]
005D1101   .  50            PUSH EAX
005D1102   .  51            PUSH ECX
005D1103   .  FFD3          CALL EBX
005D1105   .  8D55 B4       LEA EDX,DWORD PTR SS:[EBP-4C]
005D1108   .  50            PUSH EAX
005D1109   .  52            PUSH EDX
005D110A   .  FF15 C8114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVarVal>]      ;  取注册编号第4位,尾部加“0”
005D1110   .  50            PUSH EAX                                            ;  EAX=WO入栈
005D1111   .  FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcByteValueBstr>]    ;  转换为16进制
005D1117   .  50            PUSH EAX                                            ;  EAX=57(16进制)
005D1118   .  FF15 8C114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrUI1>]         ;  转为10进制
005D111E   .  8BD0          MOV EDX,EAX                                         ;  EAX=87(转为10进制)送入EDX
005D1120   .  8D4D AC       LEA ECX,DWORD PTR SS:[EBP-54]
005D1123   .  FFD6          CALL ESI
005D1125   .  50            PUSH EAX                                            ;  EAX入栈
005D1126   .  FF15 68104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>]         ;  2个EAX值连接
005D112C   .  8BD0          MOV EDX,EAX                                         ;  EAX=“4587”送入EDX
005D112E   .  8D4D A8       LEA ECX,DWORD PTR SS:[EBP-58]
005D1131   .  FFD6          CALL ESI
005D1133   .  50            PUSH EAX                                            ;  EAX最后值入栈
005D1134   .  FF15 10124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaI4Str>]          ;  10进制的值连接后转换为16进制
005D113A   .  8BD0          MOV EDX,EAX                                         ;  然后EAX=“11EB”送入EDX
005D113C   .  8D85 10FFFFFF LEA EAX,DWORD PTR SS:[EBP-F0]
005D1142   .  50            PUSH EAX
005D1143   .  8D8D B0FCFFFF LEA ECX,DWORD PTR SS:[EBP-350]
005D1149   .  8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
005D114F   .  51            PUSH ECX
005D1150   .  50            PUSH EAX
005D1151   .  8995 48FBFFFF MOV DWORD PTR SS:[EBP-4B8],EDX                      ;  EDX送入[EBP-4B8]
005D1157   .  FFD3          CALL EBX
005D1159   .  50            PUSH EAX
005D115A   .  8D4D D8       LEA ECX,DWORD PTR SS:[EBP-28]
005D115D   .  51            PUSH ECX
005D115E   .  FF15 C8114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVarVal>]      ;  取注册编号第1位,尾部加“0”
005D1164   .  50            PUSH EAX                                            ;  EAX=“W0”入栈
005D1165   .  FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcByteValueBstr>]    ;  转换为16进制
005D116B   .  50            PUSH EAX                                            ;  EAX=57(16进制)
005D116C   .  FF15 8C114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrUI1>]         ;  转为10进制
005D1172   .  8BD0          MOV EDX,EAX                                         ;  EAX=87(转为10进制)送入EDX
005D1174   .  8D4D CC       LEA ECX,DWORD PTR SS:[EBP-34]
005D1177   .  FFD6          CALL ESI
005D1179   .  50            PUSH EAX                                            ;  EAX入栈
005D117A   .  8D95 C0FEFFFF LEA EDX,DWORD PTR SS:[EBP-140]
005D1180   .  8D85 90FCFFFF LEA EAX,DWORD PTR SS:[EBP-370]
005D1186   .  52            PUSH EDX
005D1187   .  8D8D B0FEFFFF LEA ECX,DWORD PTR SS:[EBP-150]
005D118D   .  50            PUSH EAX
005D118E   .  51            PUSH ECX
005D118F   .  FFD3          CALL EBX
005D1191   .  8D55 D0       LEA EDX,DWORD PTR SS:[EBP-30]
005D1194   .  50            PUSH EAX
005D1195   .  52            PUSH EDX
005D1196   .  FF15 C8114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVarVal>]      ;  取注册编号第2位,尾部加“0”
005D119C   .  50            PUSH EAX                                            ;  EAX=“D0”入栈
005D119D   .  FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcByteValueBstr>]    ;  转换为16进制
005D11A3   .  50            PUSH EAX                                            ;  EAX=44(16进制)
005D11A4   .  FF15 8C114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrUI1>]         ;  转为10进制
005D11AA   .  8BD0          MOV EDX,EAX                                         ;  EAX=68(转为10进制)送入EDX
005D11AC   .  8D4D C8       LEA ECX,DWORD PTR SS:[EBP-38]
005D11AF   .  FFD6          CALL ESI
005D11B1   .  50            PUSH EAX                                            ;  EAX入栈
005D11B2   .  FF15 68104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>]         ;  2个EAX值连接
005D11B8   .  8BD0          MOV EDX,EAX                                         ;  EAX=“8768”送入EDX (即转换为16进制为

“2240”)
005D11BA   .  8D4D C4       LEA ECX,DWORD PTR SS:[EBP-3C]
005D11BD   .  FFD6          CALL ESI
005D11BF   .  50            PUSH EAX                                            ;  EAX的值入栈
005D11C0   .  FF15 10124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaI4Str>]          ;  MSVBVM60.__vbaI4Str
005D11C6   .  8B9D 48FBFFFF MOV EBX,DWORD PTR SS:[EBP-4B8]                      ;  [EBP-4B8]送入EBX
005D11CC   .  8D8D 30FCFFFF LEA ECX,DWORD PTR SS:[EBP-3D0]                      ;  把[EBP-3D0]装入ECX的有效地址
005D11D2   .  03D8          ADD EBX,EAX                                         ;  EBX=EBX+EAX,即EBX=11EB+2240=342B
005D11D4   .  8D85 D0FDFFFF LEA EAX,DWORD PTR SS:[EBP-230]
005D11DA   .  50            PUSH EAX
005D11DB   .  8D95 C0FDFFFF LEA EDX,DWORD PTR SS:[EBP-240]
005D11E1   .  51            PUSH ECX
005D11E2   .  52            PUSH EDX
005D11E3   .  0F80 E50B0000 JO unpack.005D1DCE
005D11E9   .  FF15 D0114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarCat>]         ;  MSVBVM60.__vbaVarCat
005D11EF   .  50            PUSH EAX
005D11F0   .  8D45 A0       LEA EAX,DWORD PTR SS:[EBP-60]
005D11F3   .  50            PUSH EAX
005D11F4   .  FF15 C8114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVarVal>]      ;  取注册编号第5位,尾部加“0”
005D11FA   .  50            PUSH EAX                                            ;  EAX=“C0”入栈
005D11FB   .  FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcByteValueBstr>]    ;  转换为16进制
005D1201   .  50            PUSH EAX                                            ;  EAX=43(16进制)
005D1202   .  FF15 8C114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrUI1>]         ;  转为10进制
005D1208   .  8BD0          MOV EDX,EAX                                         ;  EAX=67(转为10进制)送入EDX
005D120A   .  8D4D 94       LEA ECX,DWORD PTR SS:[EBP-6C]
005D120D   .  FFD6          CALL ESI
005D120F   .  8D8D 80FDFFFF LEA ECX,DWORD PTR SS:[EBP-280]
005D1215   .  50            PUSH EAX                                            ;  EAX入栈
005D1216   .  8D95 10FCFFFF LEA EDX,DWORD PTR SS:[EBP-3F0]
005D121C   .  51            PUSH ECX
005D121D   .  8D85 70FDFFFF LEA EAX,DWORD PTR SS:[EBP-290]
005D1223   .  52            PUSH EDX
005D1224   .  50            PUSH EAX
005D1225   .  FF15 D0114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarCat>]         ;  MSVBVM60.__vbaVarCat
005D122B   .  8D4D 98       LEA ECX,DWORD PTR SS:[EBP-68]
005D122E   .  50            PUSH EAX
005D122F   .  51            PUSH ECX
005D1230   .  FF15 C8114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVarVal>]      ;  取注册编号第6位,尾部加“0”
005D1236   .  50            PUSH EAX                                            ;  EAX=“A0”入栈
005D1237   .  FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcByteValueBstr>]    ;  转换为16进制
005D123D   .  50            PUSH EAX                                            ;  EAX=41入栈
005D123E   .  FF15 8C114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrUI1>]         ;  转为10进制
005D1244   .  8BD0          MOV EDX,EAX                                         ;  EAX=“65”送入EDX
005D1246   .  8D4D 90       LEA ECX,DWORD PTR SS:[EBP-70]
005D1249   .  FFD6          CALL ESI
005D124B   .  50            PUSH EAX                                            ;  EAX入栈
005D124C   .  FF15 68104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>]         ;  2个EAX值连接
005D1252   .  8BD0          MOV EDX,EAX                                         ;  EAX=“6765”送入EDX(即转换为16进制为

“1AD6”)
005D1254   .  8D4D 8C       LEA ECX,DWORD PTR SS:[EBP-74]
005D1257   .  FFD6          CALL ESI
005D1259   .  50            PUSH EAX                                            ;  EAX入栈
005D125A   .  FF15 10124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaI4Str>]          ;  MSVBVM60.__vbaI4Str
005D1260   .  03D8          ADD EBX,EAX                                         ;  EBX=EBX+EAX,即EBX=342B+1AD6=4E98
005D1262   .  8D95 30FDFFFF LEA EDX,DWORD PTR SS:[EBP-2D0]
005D1268   .  8D85 F0FBFFFF LEA EAX,DWORD PTR SS:[EBP-410]
005D126E   .  52            PUSH EDX
005D126F   .  8D8D 20FDFFFF LEA ECX,DWORD PTR SS:[EBP-2E0]
005D1275   .  50            PUSH EAX
005D1276   .  51            PUSH ECX
005D1277   .  0F80 510B0000 JO unpack.005D1DCE
005D127D   .  FF15 D0114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarCat>]         ;  MSVBVM60.__vbaVarCat
005D1283   .  8D55 84       LEA EDX,DWORD PTR SS:[EBP-7C]
005D1286   .  50            PUSH EAX
005D1287   .  52            PUSH EDX
005D1288   .  FF15 C8114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVarVal>]      ;  取注册编号第7位,尾部加“0”
005D128E   .  50            PUSH EAX                                            ;  EAX=“M0”入栈
005D128F   .  FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcByteValueBstr>]    ;  转换为16进制
005D1295   .  50            PUSH EAX                                            ;  EAX=“4D”入栈
005D1296   .  FF15 8C114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrUI1>]         ;  转换为10进制
005D129C   .  8BD0          MOV EDX,EAX                                         ;  EAX=“77”送入EDX
005D129E   .  8D8D 78FFFFFF LEA ECX,DWORD PTR SS:[EBP-88]
005D12A4   .  FFD6          CALL ESI
005D12A6   .  50            PUSH EAX                                            ;  EAX入栈
005D12A7   .  8D85 E0FCFFFF LEA EAX,DWORD PTR SS:[EBP-320]
005D12AD   .  8D8D D0FBFFFF LEA ECX,DWORD PTR SS:[EBP-430]
005D12B3   .  50            PUSH EAX
005D12B4   .  8D95 D0FCFFFF LEA EDX,DWORD PTR SS:[EBP-330]
005D12BA   .  51            PUSH ECX
005D12BB   .  52            PUSH EDX
005D12BC   .  FF15 D0114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarCat>]         ;  MSVBVM60.__vbaVarCat
005D12C2   .  50            PUSH EAX
005D12C3   .  8D85 7CFFFFFF LEA EAX,DWORD PTR SS:[EBP-84]
005D12C9   .  50            PUSH EAX
005D12CA   .  FF15 C8114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVarVal>]      ;  取注册编号第8位,尾部加“0”
005D12D0   .  50            PUSH EAX                                            ;  EAX=“90”
005D12D1   .  FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcByteValueBstr>]    ;  转换16进制
005D12D7   .  50            PUSH EAX                                            ;  EAX=“39”
005D12D8   .  FF15 8C114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrUI1>]         ;  转换10进制
005D12DE   .  8BD0          MOV EDX,EAX                                         ;  EAX=“57”送入EDX
005D12E0   .  8D8D 74FFFFFF LEA ECX,DWORD PTR SS:[EBP-8C]
005D12E6   .  FFD6          CALL ESI
005D12E8   .  50            PUSH EAX                                            ;  EAX入栈
005D12E9   .  FF15 68104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>]         ;  2个EAX值连接
005D12EF   .  8BD0          MOV EDX,EAX                                         ;  EAX=“7757”送入EDX
005D12F1   .  8D8D 70FFFFFF LEA ECX,DWORD PTR SS:[EBP-90]
005D12F7   .  FFD6          CALL ESI
005D12F9   .  50            PUSH EAX                                            ;  EAX入栈
005D12FA   .  FF15 10124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaI4Str>]          ;  MSVBVM60.__vbaI4Str
005D1300   .  03D8          ADD EBX,EAX                                         ;  EBX=EBX+EAX ,即EBX=4E98+1E4D=6CE5
005D1302   .  8D95 C0FBFFFF LEA EDX,DWORD PTR SS:[EBP-440]
005D1308   .  0F80 C00A0000 JO unpack.005D1DCE
005D130E   .  8D4D E0       LEA ECX,DWORD PTR SS:[EBP-20]
005D1311   .  899D C8FBFFFF MOV DWORD PTR SS:[EBP-438],EBX                      ;  EBX送入[EBP-438]
005D1317   .  C785 C0FBFFFF>MOV DWORD PTR SS:[EBP-440],3
005D1321   .  FF15 1C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarMove>]        ;  MSVBVM60.__vbaVarMove
005D1327   .  8D8D 70FFFFFF LEA ECX,DWORD PTR SS:[EBP-90]
005D132D   .  8D95 74FFFFFF LEA EDX,DWORD PTR SS:[EBP-8C]
.............................................省略N行代码~~...................................................
005D1663   .  50            PUSH EAX
005D1664   .  51            PUSH ECX
005D1665   .  FF15 8C124000 call    [<&MSVBVM60.rtcRightCharVar>]               ;  MSVBVM60.rtcRightCharVar
005D166B   .  8D95 40FFFFFF lea     edx, [ebp-C0]                               ;  把[EBP-C0]的内容装入有效地址EDX
005D1671   .  52            push    edx                                         ;  EDX入栈
005D1672   .  FF15 4C104000 call    [<&MSVBVM60.__vbaStrErrVarCopy>]            ;  MSVBVM60.__vbaStrErrVarCopy
005D1678   .  8BD0          mov     edx, eax                                    ;  EAX(7877)送入EDX
005D167A   .  8D4D D8       lea     ecx, [ebp-28]
005D167D   .  FFD6          call    esi
005D167F   .  50            push    eax                                         ;  EAX入栈
005D1680   .  FF15 10124000 call    [<&MSVBVM60.__vbaI4Str>]                    ;  转换16进制
005D1686   .  8985 C8FCFFFF mov     [ebp-338], eax                              ;  EAX(1EC5)送入[EBP-338]
005D168C   .  8D45 E0       lea     eax, [ebp-20]
005D168F   .  8D8D C0FCFFFF lea     ecx, [ebp-340]
005D1695   .  50            push    eax
005D1696   .  8D95 30FFFFFF lea     edx, [ebp-D0]
005D169C   .  51            push    ecx
005D169D   .  52            push    edx
005D169E   .  C785 C0FCFFFF>mov     dword ptr [ebp-340], 3
005D16A8   .  FF15 44124000 call    [<&MSVBVM60.__vbaVarAdd>]                   ;  MSVBVM60.__vbaVarAdd
005D16AE   .  50            push    eax
005D16AF   .  8D85 20FFFFFF lea     eax, [ebp-E0]
005D16B5   .  50            push    eax
005D16B6   .  FF15 04124000 call    [<&MSVBVM60.rtcHexVarFromVar>]              ;  MSVBVM60.rtcHexVarFromVar
005D16BC   .  8D8D 10FFFFFF lea     ecx, [ebp-F0]
005D16C2   .  8D55 E0       lea     edx, [ebp-20]
005D16C5   .  51            push    ecx
005D16C6   .  6A 03         push    3
005D16C8   .  8D85 00FFFFFF lea     eax, [ebp-100]
005D16CE   .  52            push    edx
005D16CF   .  50            push    eax
005D16D0   .  C785 18FFFFFF>mov     dword ptr [ebp-E8], 4
005D16DA   .  C785 10FFFFFF>mov     dword ptr [ebp-F0], 2
005D16E4   .  FF15 F8104000 call    [<&MSVBVM60.rtcMidCharVar>]                 ;  MSVBVM60.rtcMidCharVar
005D16EA   .  8D8D 00FFFFFF lea     ecx, [ebp-100]
005D16F0   .  8D95 F0FEFFFF lea     edx, [ebp-110]
005D16F6   .  51            push    ecx
005D16F7   .  52            push    edx
005D16F8   .  FF15 04124000 call    [<&MSVBVM60.rtcHexVarFromVar>]              ;  MSVBVM60.rtcHexVarFromVar
005D16FE   .  8B45 DC       mov     eax, [ebp-24]
005D1701   .  8D8D 20FFFFFF lea     ecx, [ebp-E0]
005D1707   .  50            push    eax
005D1708   .  51            push    ecx
005D1709   .  FF15 4C104000 call    [<&MSVBVM60.__vbaStrErrVarCopy>]            ;  MSVBVM60.__vbaStrErrVarCopy
005D170F   .  8BD0          mov     edx, eax                                    ;  EAX(8BAA)送入EDX
005D1711   .  8D4D D4       lea     ecx, [ebp-2C]
005D1714   .  FFD6          call    esi
005D1716   .  8D95 F0FEFFFF lea     edx, [ebp-110]
005D171C   .  50            push    eax                                         ;  EAX入栈
005D171D   .  52            push    edx
005D171E   .  FF15 4C104000 call    [<&MSVBVM60.__vbaStrErrVarCopy>]            ;  MSVBVM60.__vbaStrErrVarCopy
005D1724   .  8BD0          mov     edx, eax                                    ;  EAX(36D)送入EDX
005D1726   .  8D4D D0       lea     ecx, [ebp-30]
005D1729   .  FFD6          call    esi
005D172B   .  50            push    eax                                         ;  EAX入栈
005D172C   .  FF15 68104000 call    [<&MSVBVM60.__vbaStrCat>]                   ;  2者连接
005D1732   .  8BD0          mov     edx, eax                                    ;  EAX送入EDX(此处可做内存注册机)
005D1734   .  8D4D CC       lea     ecx, [ebp-34]
005D1737   .  FFD6          call    esi
005D1739   .  50            push    eax                                         ;  EAX入栈
005D173A   .  FF15 14114000 call    [<&MSVBVM60.__vbaStrCmp>]                   ;  MSVBVM60.__vbaStrCmp
005D1740   .  8BF0          mov     esi, eax
005D1742   .  8D45 CC       lea     eax, [ebp-34]
005D1745   .  8D4D DC       lea     ecx, [ebp-24]
005D1748   .  50            push    eax
005D1749   .  F7DE          neg     esi
005D174B   .  8D55 D0       lea     edx, [ebp-30]
005D174E   .  51            push    ecx
005D174F   .  8D45 D4       lea     eax, [ebp-2C]
005D1752   .  52            push    edx
005D1753   .  1BF6          sbb     esi, esi
005D1755   .  8D4D D8       lea     ecx, [ebp-28]
005D1758   .  50            push    eax
005D1759   .  46            inc     esi
005D175A   .  51            push    ecx
005D175B   .  6A 05         push    5
005D175D   .  F7DE          neg     esi
005D175F   .  FF15 18124000 call    [<&MSVBVM60.__vbaFreeStrList>]              ;  MSVBVM60.__vbaFreeStrList
005D1765   .  83C4 18       add     esp, 18
005D1768   .  8D8D 6CFFFFFF lea     ecx, [ebp-94]
005D176E   .  FF15 BC124000 call    [<&MSVBVM60.__vbaFreeObj>]                  ;  MSVBVM60.__vbaFreeObj
005D1774   .  8D95 F0FEFFFF lea     edx, [ebp-110]
005D177A   .  8D85 F0FEFFFF lea     eax, [ebp-110]
005D1780   .  52            push    edx
005D1781   .  8D8D 00FFFFFF lea     ecx, [ebp-100]
005D1787   .  50            push    eax
005D1788   .  8D95 10FFFFFF lea     edx, [ebp-F0]
005D178E   .  51            push    ecx
005D178F   .  8D85 20FFFFFF lea     eax, [ebp-E0]
005D1795   .  52            push    edx
005D1796   .  8D8D 20FFFFFF lea     ecx, [ebp-E0]
005D179C   .  50            push    eax
005D179D   .  8D95 30FFFFFF lea     edx, [ebp-D0]
005D17A3   .  51            push    ecx
005D17A4   .  8D85 40FFFFFF lea     eax, [ebp-C0]
005D17AA   .  52            push    edx
005D17AB   .  8D8D 40FFFFFF lea     ecx, [ebp-C0]
005D17B1   .  50            push    eax
005D17B2   .  51            push    ecx
005D17B3   .  6A 09         push    9
005D17B5   .  FF15 3C104000 call    [<&MSVBVM60.__vbaFreeVarList>]              ;  MSVBVM60.__vbaFreeVarList
005D17BB   .  83C4 28       add     esp, 28
005D17BE   .  66:3BF7       cmp     si, di
005D17C1   .  0F84 4F030000 je      005D1B16                                    ;  爆破处NOP~


------------------------------------------------------------------------
【算法总结】

(1)、取机器码第3位,尾部再加上0,然后转换取得的机器码的16进制数,最后再转换为10进制.
(2)、取机器码第4位,尾部再加上0,然后转换取得的机器码的16进制数,最后再转换为10进制.
(3)、取机器码第1位,尾部再加上0,然后转换取得的机器码的16进制数,最后再转换为10进制.
(4)、取机器码第2位,尾部再加上0,然后转换取得的机器码的16进制数,最后再转换为10进制.
(5)、取机器码第5位,尾部再加上0,然后转换取得的机器码的16进制数,最后再转换为10进制.
(6)、取机器码第6位,尾部再加上0,然后转换取得的机器码的16进制数,最后再转换为10进制.
(7)、取机器码第7位,尾部再加上0,然后转换取得的机器码的16进制数,最后再转换为10进制.
(8)、取机器码第8位,尾部再加上0,然后转换取得的机器码的16进制数,最后再转换为10进制.
(9)、然后(1)的10进制数与(2)的10进制数相加后再转换16进制,可记为A.
         (3)的10进制数与(4)的10进制数相加后再转换16进制,可记为B.
         (5)的10进制数与(6)的10进制数相加后再转换16进制,可记为C.
         (7)的10进制数与(8)的10进制数相加后再转换16进制,可记为D.
(10)、把(9)中的A、B、C、D全部相加后的值再加上一个固定16进制数"1EC5"后得到第一部分注册码.
(11)将第一部分注册码与固定数值"36D"连接起来,即是真的注册码~
------------------------------------------------------------------------
【破解总结】

分析的算法中错误在所难免,请各位大侠不吝赐教~~~感谢你看完~
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!