dewar 发表于 2007-6-5 11:19:01

XX桌面日历2.53算法分析

【文章标题】: XX桌面日历2.53算法分析
【文章作者】: dewar
【作者主页】: 无
【软件名称】: XX桌面日历2.53
【下载地址】: 自己搜索下载
【加壳方式】: UPX
【编写语言】: VB
【操作平台】: WINXP
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
不久前分析过它的2.0版,前几天作者对软件进行了升级,算法也改了,只好重新分析一下。虽然算法改了,但有很多东西没改,有了2.0版的分析作基础,问题就好解决得多了。
1.脱壳+去自检验
查壳,仍然是UPX的壳,脱壳后可看到是VB的程序,运行一下照样会关机,看来自校验和2.0版的没多大变化。还是下断rtcFileLen,F9运行,可找到如下几处自校验的地方:
......
0055CA22    BF 0A000000   MOV   EDI, 0A                                     ; EDI=0x0a
0055CA27    897D B4         MOV   DWORD PTR SS:, EDI
0055CA2A    8D4D B4         LEA   ECX, DWORD PTR SS:
0055CA2D    51            PUSH    ECX
0055CA47    FF15 DC104000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcRandomNext>]    ; 产生一个随机数
0055CA4D    D80D 0C394000   FMUL    DWORD PTR DS:                     ; ×10
0055CA53    FF15 7C134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFPInt>]       ; 取整
0055CA59    D805 48494000   FADD    DWORD PTR DS:                     ; +1
0055CA5F    FF15 00134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFpI2>]      ; MSVBVM60.__vbaFpI2
0055CA65    8BF0            MOV   ESI, EAX
0055CA67    8D4D B4         LEA   ECX, DWORD PTR SS:
0055CA6A    FF15 20104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>]   ; MSVBVM60.__vbaFreeVar
0055CA70    0FBFC6          MOVSX   EAX, SI
0055CA73    3BC7            CMP   EAX, EDI                                    ; 结果与0x0a比较(即与10比较)
0055CA75    0F87 33040000   JA      0055CEAE                                    ; 这里改为JMP就可去除自校验
0055CA7B    FF2485 30CF5500 JMP   DWORD PTR DS:               ; 根据结果跳向不同的分支(功能相同)
0055CA82    8B45 E0         MOV   EAX, DWORD PTR SS:
0055CA85    50            PUSH    EAX
0055CA86    FF15 CC124000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcFileLen>]       ; 得到文件大小
0055CA8C    8945 BC         MOV   DWORD PTR SS:, EAX
0055CA8F    BE 03000000   MOV   ESI, 3
0055CA94    8975 B4         MOV   DWORD PTR SS:, ESI
0055CA97    56            PUSH    ESI
0055CA98    8D4D B4         LEA   ECX, DWORD PTR SS:
0055CA9B    51            PUSH    ECX
0055CA9C    8D55 A4         LEA   EDX, DWORD PTR SS:
0055CA9F    52            PUSH    EDX
0055CAA0    FF15 28134000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcLeftCharVar>]   ; 得到文件大小的左边3位数
0055CAA6    C785 6CFFFFFF B>MOV   DWORD PTR SS:, 1B2
0055CAB0    89B5 64FFFFFF   MOV   DWORD PTR SS:, ESI
0055CAB6    8D45 A4         LEA   EAX, DWORD PTR SS:
0055CAB9    50            PUSH    EAX
0055CABA    8D8D 64FFFFFF   LEA   ECX, DWORD PTR SS:
0055CAC0    51            PUSH    ECX
0055CAC1    8D55 94         LEA   EDX, DWORD PTR SS:
0055CAC4    52            PUSH    EDX
0055CAC5    FF15 CC104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarXor>]      ; 与0x1b2异或
0055CACB    50            PUSH    EAX
0055CACC    FF15 84104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaBoolErrVar>]; MSVBVM60.__vbaBoolErrVar
0055CAD2    8BF0            MOV   ESI, EAX
0055CAD4    8D45 A4         LEA   EAX, DWORD PTR SS:
0055CAD7    50            PUSH    EAX
0055CAD8    8D4D B4         LEA   ECX, DWORD PTR SS:
0055CADB    51            PUSH    ECX
0055CADC    6A 02         PUSH    2
0055CADE    FF15 40104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>] ; MSVBVM60.__vbaFreeVarList
0055CAE4    83C4 0C         ADD   ESP, 0C
0055CAE7    66:3BF3         CMP   SI, BX
0055CAEA    0F84 BE030000   JE      0055CEAE                                    ; 异或结果为0,这里就会跳
......
程序先产生一个1~10内的随机数,根据这个数的大小跳向不同的分支(但完成同样的功能:检验文件有无被脱壳)。这里0x1b2为未脱壳前文件大小的左边3个数字,就是说运行程序的大小与未脱壳文件的大小相等时就会跳走,不等就会继续执行到错误的分支。同样的还有0055CB73、0055CCC9 、0055CD76、0055CDFF四处,将这五处JE都改为JMP就可除去自校验(或改0055CA75处JA为JMP一处即可)。这时你就可以放心大胆地对它进行开刀了,想怎么玩就怎么玩:)
2.注册
通过在打开文件函数_vbaFileOpen上下断,可找到如下的地方
......
00561CBD    FF51 28         CALL    DWORD PTR DS:                     ; 判断是否脱壳,即为上面所述部分
00561CC0    3BC6            CMP   EAX, ESI
00561CC2    7D 0F         JGE   SHORT 00561CD3
00561CC4    6A 28         PUSH    28
00561CC6    68 98AE4100   PUSH    0041AE98
00561CCB    53            PUSH    EBX
00561CCC    50            PUSH    EAX
00561CCD    FF15 B4104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaHresultCheckO>; MSVBVM60.__vbaHresultCheckObj
00561CD3    8B13            MOV   EDX, DWORD PTR DS:
00561CD5    8D85 D0FEFFFF   LEA   EAX, DWORD PTR SS:
00561CDB    50            PUSH    EAX
00561CDC    53            PUSH    EBX
00561CDD    FF52 38         CALL    DWORD PTR DS:                     ; 计算机器码,并将其变形后写入注册表中,有兴趣的朋友可自己跟进看看
00561CE0    3BC6            CMP   EAX, ESI
00561CE2    7D 0F         JGE   SHORT 00561CF3
00561CE4    6A 38         PUSH    38
00561CE6    68 98AE4100   PUSH    0041AE98
00561CEB    53            PUSH    EBX
00561CEC    50            PUSH    EAX
00561CED    FF15 B4104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaHresultCheckO>; MSVBVM60.__vbaHresultCheckObj
00561CF3    8B8D D0FEFFFF   MOV   ECX, DWORD PTR SS:
00561CF9    894D 80         MOV   DWORD PTR SS:, ECX
00561CFC    B8 44144200   MOV   EAX, 00421444
00561D01    8985 14FFFFFF   MOV   DWORD PTR SS:, EAX
00561D07    B9 08000000   MOV   ECX, 8
00561D0C    898D 0CFFFFFF   MOV   DWORD PTR SS:, ECX
00561D12    8B13            MOV   EDX, DWORD PTR DS:
00561D14    8DBD 68FFFFFF   LEA   EDI, DWORD PTR SS:
00561D1A    57            PUSH    EDI
00561D1B    83EC 10         SUB   ESP, 10
00561D1E    8BFC            MOV   EDI, ESP
00561D20    890F            MOV   DWORD PTR DS:, ECX
00561D22    8B8D 10FFFFFF   MOV   ECX, DWORD PTR SS:
00561D28    894F 04         MOV   DWORD PTR DS:, ECX
00561D2B    8947 08         MOV   DWORD PTR DS:, EAX
00561D2E    8B85 18FFFFFF   MOV   EAX, DWORD PTR SS:
00561D34    8947 0C         MOV   DWORD PTR DS:, EAX
00561D37    56            PUSH    ESI
00561D38    53            PUSH    EBX
00561D39    FF52 20         CALL    DWORD PTR DS:
00561D3C    DBE2            FCLEX
00561D3E    3BC6            CMP   EAX, ESI
00561D40    7D 0F         JGE   SHORT 00561D51
00561D42    6A 20         PUSH    20
00561D44    68 98AE4100   PUSH    0041AE98
00561D49    53            PUSH    EBX
00561D4A    50            PUSH    EAX
00561D4B    FF15 B4104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaHresultCheckO>; MSVBVM60.__vbaHresultCheckObj
00561D51    8B0D 54B05600   MOV   ECX, DWORD PTR DS:                  ; 中存着主程序所在的路径X
00561D57    51            PUSH    ECX
00561D58    8B95 68FFFFFF   MOV   EDX, DWORD PTR SS:                  ; FXSYS\FXSYS
00561D5E    52            PUSH    EDX
00561D5F    8B3D 7C104000   MOV   EDI, DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>] ; 连接得X:\FXSYS\FXSYS
00561D65    FFD7            CALL    EDI
00561D67    8BD0            MOV   EDX, EAX
00561D69    8D4D DC         LEA   ECX, DWORD PTR SS:
00561D6C    8B35 34134000   MOV   ESI, DWORD PTR DS:[<&MSVBVM60.__vbaStrMove>>; MSVBVM60.__vbaStrMove
00561D72    FFD6            CALL    ESI
00561D74    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00561D7A    FF15 98134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]   ; MSVBVM60.__vbaFreeStr
00561D80    8B45 DC         MOV   EAX, DWORD PTR SS:
00561D83    50            PUSH    EAX
00561D84    68 C4144200   PUSH    004214C4                                    ; UNICODE ".key"
00561D89    FFD7            CALL    EDI                                       ; 注册文件为X:\FXSYS\FXSYS.KEY
00561D8B    8985 54FFFFFF   MOV   DWORD PTR SS:, EAX
00561D91    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 8
00561D9B    6A 07         PUSH    7
00561D9D    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00561DA3    51            PUSH    ECX
00561DA4    FF15 70124000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcDir>]         ; MSVBVM60.rtcDir
00561DAA    8BD0            MOV   EDX, EAX
00561DAC    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00561DB2    FFD6            CALL    ESI
00561DB4    50            PUSH    EAX
00561DB5    68 58AA4100   PUSH    0041AA58                                    ; NULL
00561DBA    FF15 7C114000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrCmp>]      ; 比较看指定的文件在不在
00561DC0    8BF8            MOV   EDI, EAX
00561DC2    F7DF            NEG   EDI
00561DC4    1BFF            SBB   EDI, EDI
00561DC6    47            INC   EDI
00561DC7    F7DF            NEG   EDI
00561DC9    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00561DCF    FF15 98134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]   ; MSVBVM60.__vbaFreeStr
00561DD5    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00561DDB    FF15 20104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>]   ; MSVBVM60.__vbaFreeVar
00561DE1    66:85FF         TEST    DI, DI
00561DE4    0F85 DD1D0000   JNZ   00563BC7                                    ; 没有指定的文件就跳(不能跳)
00561DEA    8B55 DC         MOV   EDX, DWORD PTR SS:
00561DED    52            PUSH    EDX
00561DEE    68 98F44100   PUSH    0041F498                                    ; UNICODE ".tmp"
00561DF3    8B3D 7C104000   MOV   EDI, DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>] ; MSVBVM60.__vbaStrCat
00561DF9    FFD7            CALL    EDI
00561DFB    8BD0            MOV   EDX, EAX
00561DFD    8D8D 64FFFFFF   LEA   ECX, DWORD PTR SS:
00561E03    FFD6            CALL    ESI
00561E05    8B45 DC         MOV   EAX, DWORD PTR SS:
00561E08    50            PUSH    EAX
00561E09    68 C4144200   PUSH    004214C4                                    ; UNICODE ".key"
00561E0E    FFD7            CALL    EDI
00561E10    8BD0            MOV   EDX, EAX
00561E12    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00561E18    FFD6            CALL    ESI
00561E1A    8B0B            MOV   ECX, DWORD PTR DS:
00561E1C    8D95 D8FEFFFF   LEA   EDX, DWORD PTR SS:
00561E22    52            PUSH    EDX
00561E23    8D85 64FFFFFF   LEA   EAX, DWORD PTR SS:
00561E29    50            PUSH    EAX
00561E2A    8D95 68FFFFFF   LEA   EDX, DWORD PTR SS:
00561E30    52            PUSH    EDX
00561E31    53            PUSH    EBX
00561E32    FF51 34         CALL    DWORD PTR DS:                     ; 解密注册文件并存入临时文件FXSYS.TMP中
解密很简单,只是将文件各字节取出与0xFB异或后再写回
00561E35    85C0            TEST    EAX, EAX
00561E37    7D 0F         JGE   SHORT 00561E48
00561E39    6A 34         PUSH    34
00561E3B    68 98AE4100   PUSH    0041AE98
00561E40    53            PUSH    EBX
00561E41    50            PUSH    EAX
00561E42    FF15 B4104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaHresultCheckO>; MSVBVM60.__vbaHresultCheckObj
00561E48    8D85 64FFFFFF   LEA   EAX, DWORD PTR SS:
00561E4E    50            PUSH    EAX
00561E4F    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00561E55    51            PUSH    ECX
00561E56    6A 02         PUSH    2
00561E58    FF15 B4124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStrList>] ; MSVBVM60.__vbaFreeStrList
00561E5E    83C4 0C         ADD   ESP, 0C
00561E61    C785 54FFFFFF 0>MOV   DWORD PTR SS:, 80020004
00561E6B    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 0A
00561E75    8D95 4CFFFFFF   LEA   EDX, DWORD PTR SS:
00561E7B    52            PUSH    EDX
00561E7C    FF15 8C124000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcFreeFile>]      ; MSVBVM60.rtcFreeFile
00561E82    8845 A8         MOV   BYTE PTR SS:, AL
00561E85    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00561E8B    FF15 20104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>]   ; MSVBVM60.__vbaFreeVar
00561E91    66:0FB67D A8    MOVZX   DI, BYTE PTR SS:
00561E96    8B45 DC         MOV   EAX, DWORD PTR SS:
00561E99    50            PUSH    EAX
00561E9A    68 98F44100   PUSH    0041F498                                    ; UNICODE ".tmp"
00561E9F    FF15 7C104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>]      ; MSVBVM60.__vbaStrCat
00561EA5    8BD0            MOV   EDX, EAX
00561EA7    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00561EAD    FFD6            CALL    ESI
00561EAF    50            PUSH    EAX
00561EB0    57            PUSH    EDI
00561EB1    6A FF         PUSH    -1
00561EB3    6A 01         PUSH    1
00561EB5    FF15 7C124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFileOpen>]    ; 打开解密后的文件FXSYS.TMP
00561EBB    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00561EC1    FF15 98134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]   ; MSVBVM60.__vbaFreeStr
00561EC7    57            PUSH    EDI
00561EC8    8D4D 84         LEA   ECX, DWORD PTR SS:
00561ECB    51            PUSH    ECX
00561ECC    FF15 4C104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaLineInputVar>>; 读取第1行
00561ED2    C785 14FFFFFF 6>MOV   DWORD PTR SS:, 00421460
00561EDC    B8 08000000   MOV   EAX, 8
00561EE1    8985 0CFFFFFF   MOV   DWORD PTR SS:, EAX
00561EE7    8B13            MOV   EDX, DWORD PTR DS:
00561EE9    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00561EEF    51            PUSH    ECX
00561EF0    83EC 10         SUB   ESP, 10
00561EF3    8BCC            MOV   ECX, ESP
00561EF5    8901            MOV   DWORD PTR DS:, EAX
00561EF7    8B85 10FFFFFF   MOV   EAX, DWORD PTR SS:
00561EFD    8941 04         MOV   DWORD PTR DS:, EAX
00561F00    8B85 14FFFFFF   MOV   EAX, DWORD PTR SS:
00561F06    8941 08         MOV   DWORD PTR DS:, EAX
00561F09    8B85 18FFFFFF   MOV   EAX, DWORD PTR SS:
00561F0F    8941 0C         MOV   DWORD PTR DS:, EAX
00561F12    6A 00         PUSH    0
00561F14    53            PUSH    EBX
00561F15    FF52 20         CALL    DWORD PTR DS:                     
00561F18    85C0            TEST    EAX, EAX
00561F1A    7D 0F         JGE   SHORT 00561F2B
00561F1C    6A 20         PUSH    20
00561F1E    68 98AE4100   PUSH    0041AE98
00561F23    53            PUSH    EBX
00561F24    50            PUSH    EAX
00561F25    FF15 B4104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaHresultCheckO>; MSVBVM60.__vbaHresultCheckObj
00561F2B    8B85 68FFFFFF   MOV   EAX, DWORD PTR SS:                  ; 读取的第1行
00561F31    C785 68FFFFFF 0>MOV   DWORD PTR SS:, 0
00561F3B    8985 54FFFFFF   MOV   DWORD PTR SS:, EAX
00561F41    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 8008
00561F4B    8D4D 84         LEA   ECX, DWORD PTR SS:                  ;
00561F4E    51            PUSH    ECX
00561F4F    8D95 4CFFFFFF   LEA   EDX, DWORD PTR SS:                  ; 读取的第1行
00561F55    52            PUSH    EDX
00561F56    FF15 84114000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarTstEq>]    ; 第1行是否为[FXV25]
00561F5C    66:8BD8         MOV   BX, AX
00561F5F    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00561F65    FF15 20104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>]   ; MSVBVM60.__vbaFreeVar
00561F6B    66:85DB         TEST    BX, BX
00561F6E    74 1B         JE      SHORT 00561F8B                              ; 不能跳(不等会跳)
00561F70    57            PUSH    EDI
00561F71    8D45 A0         LEA   EAX, DWORD PTR SS:
00561F74    50            PUSH    EAX
00561F75    8B1D 30104000   MOV   EBX, DWORD PTR DS:[<&MSVBVM60.__vbaLineInpu>; MSVBVM60.__vbaLineInputStr
00561F7B    FFD3            CALL    EBX                                       ; 读取第2行
00561F7D    57            PUSH    EDI
00561F7E    8D4D E0         LEA   ECX, DWORD PTR SS:
00561F81    51            PUSH    ECX
00561F82    FFD3            CALL    EBX                                       ; 读取第3行
00561F84    57            PUSH    EDI
00561F85    8D55 A4         LEA   EDX, DWORD PTR SS:
00561F88    52            PUSH    EDX
00561F89    FFD3            CALL    EBX                                       ; 读取第4行
00561F8B    57            PUSH    EDI
00561F8C    FF15 60114000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFileClose>]   ; 关闭文件
00561F92    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
00561F98    85C0            TEST    EAX, EAX
00561F9A    75 12         JNZ   SHORT 00561FAE
00561F9C    8D85 6CFFFFFF   LEA   EAX, DWORD PTR SS:
00561FA2    50            PUSH    EAX
00561FA3    68 EC814000   PUSH    004081EC
00561FA8    FF15 88124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaNew2>]      ; MSVBVM60.__vbaNew2
00561FAE    8BBD 6CFFFFFF   MOV   EDI, DWORD PTR SS:
00561FB4    C785 D8FEFFFF 0>MOV   DWORD PTR SS:, 0
00561FBE    8B4D DC         MOV   ECX, DWORD PTR SS:
00561FC1    51            PUSH    ECX
00561FC2    68 98F44100   PUSH    0041F498                                    ; UNICODE ".tmp"
00561FC7    FF15 7C104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>]      ; MSVBVM60.__vbaStrCat
00561FCD    8BD0            MOV   EDX, EAX
00561FCF    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00561FD5    FFD6            CALL    ESI
00561FD7    8B17            MOV   EDX, DWORD PTR DS:
00561FD9    8D85 D4FEFFFF   LEA   EAX, DWORD PTR SS:
00561FDF    50            PUSH    EAX
00561FE0    8D8D D8FEFFFF   LEA   ECX, DWORD PTR SS:
00561FE6    51            PUSH    ECX
00561FE7    8D85 68FFFFFF   LEA   EAX, DWORD PTR SS:
00561FED    50            PUSH    EAX
00561FEE    57            PUSH    EDI
00561FEF    FF52 24         CALL    DWORD PTR DS:                     ; 删除临时文件
00561FF2    DBE2            FCLEX
00561FF4    85C0            TEST    EAX, EAX
00561FF6    7D 13         JGE   SHORT 0056200B
00561FF8    6A 24         PUSH    24
00561FFA    68 7CAC4100   PUSH    0041AC7C
00561FFF    57            PUSH    EDI
00562000    50            PUSH    EAX
00562001    8B1D B4104000   MOV   EBX, DWORD PTR DS:[<&MSVBVM60.__vbaHresultC>; MSVBVM60.__vbaHresultCheckObj
00562007    FFD3            CALL    EBX
00562009    EB 06         JMP   SHORT 00562011
0056200B    8B1D B4104000   MOV   EBX, DWORD PTR DS:[<&MSVBVM60.__vbaHresultC>; MSVBVM60.__vbaHresultCheckObj
00562011    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00562017    FF15 98134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]   ; MSVBVM60.__vbaFreeStr
0056201D    8B4D A0         MOV   ECX, DWORD PTR SS:                  ; 读取的第2行(机器码)
00562020    51            PUSH    ECX
00562021    FF15 A0134000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcR8ValFromBstr>] ; 转为浮点数
00562027    FF15 18134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFpI4>]      ; 转为整数
0056202D    3345 80         XOR   EAX, DWORD PTR SS:
00562030    74 65         JE      SHORT 00562097                              ; 与机器码是否相等?等就跳
00562032    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
00562038    85C0            TEST    EAX, EAX
0056203A    75 12         JNZ   SHORT 0056204E
0056203C    8D95 6CFFFFFF   LEA   EDX, DWORD PTR SS:
00562042    52            PUSH    EDX
00562043    68 EC814000   PUSH    004081EC
00562048    FF15 88124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaNew2>]      ; MSVBVM60.__vbaNew2
0056204E    8BBD 6CFFFFFF   MOV   EDI, DWORD PTR SS:
00562054    C785 D8FEFFFF 0>MOV   DWORD PTR SS:, 0
0056205E    8B45 DC         MOV   EAX, DWORD PTR SS:
00562061    50            PUSH    EAX
00562062    68 C4144200   PUSH    004214C4                                    ; UNICODE ".key"
00562067    FF15 7C104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>]      ; MSVBVM60.__vbaStrCat
0056206D    8BD0            MOV   EDX, EAX
0056206F    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00562075    FFD6            CALL    ESI
00562077    8B0F            MOV   ECX, DWORD PTR DS:
00562079    8D95 D4FEFFFF   LEA   EDX, DWORD PTR SS:
0056207F    52            PUSH    EDX
00562080    8D85 D8FEFFFF   LEA   EAX, DWORD PTR SS:
00562086    50            PUSH    EAX
00562087    8D95 68FFFFFF   LEA   EDX, DWORD PTR SS:
0056208D    52            PUSH    EDX
0056208E    57            PUSH    EDI
0056208F    FF51 24         CALL    DWORD PTR DS:
00562092    E9 60010000   JMP   005621F7
00562097    8B45 E0         MOV   EAX, DWORD PTR SS:                  ; 读取的第3行(用户名)
0056209A    50            PUSH    EAX
0056209B    FF15 34104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaLenBstr>]   ; 算长度
005620A1    83F8 02         CMP   EAX, 2                                    ; 与2比较
005620A4    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
005620AA    7D 0D         JGE   SHORT 005620B9                              ; 大于等于就跳,要跳
005620AC    85C0            TEST    EAX, EAX
005620AE    0F85 FF000000   JNZ   005621B3
005620B4    E9 E8000000   JMP   005621A1
005620B9    85C0            TEST    EAX, EAX
005620BB    75 18         JNZ   SHORT 005620D5
005620BD    8D95 6CFFFFFF   LEA   EDX, DWORD PTR SS:
005620C3    52            PUSH    EDX
005620C4    68 EC814000   PUSH    004081EC
005620C9    FF15 88124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaNew2>]      ; MSVBVM60.__vbaNew2
005620CF    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
005620D5    8BF8            MOV   EDI, EAX
005620D7    8B08            MOV   ECX, DWORD PTR DS:
005620D9    8D95 68FFFFFF   LEA   EDX, DWORD PTR SS:
005620DF    52            PUSH    EDX
005620E0    68 60B14100   PUSH    0041B160                                    ; 0
005620E5    68 B49E4200   PUSH    00429EB4                                    ; H
005620EA    8B55 A4         MOV   EDX, DWORD PTR SS:                  ; 读取的第4行(注册码)
005620ED    52            PUSH    EDX
005620EE    50            PUSH    EAX
005620EF    FF51 34         CALL    DWORD PTR DS:                     ; 处理注册码:将其中的H(h)用0代替
005620F2    DBE2            FCLEX
005620F4    85C0            TEST    EAX, EAX
005620F6    7D 0B         JGE   SHORT 00562103
005620F8    6A 34         PUSH    34
005620FA    68 7CAC4100   PUSH    0041AC7C
005620FF    57            PUSH    EDI
00562100    50            PUSH    EAX
00562101    FFD3            CALL    EBX
00562103    8B95 68FFFFFF   MOV   EDX, DWORD PTR SS:                  ; 处理后的注册码
00562109    C785 68FFFFFF 0>MOV   DWORD PTR SS:, 0
00562113    8D4D A4         LEA   ECX, DWORD PTR SS:
00562116    FFD6            CALL    ESI
00562118    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
0056211E    85C0            TEST    EAX, EAX
00562120    75 18         JNZ   SHORT 0056213A
00562122    8D85 6CFFFFFF   LEA   EAX, DWORD PTR SS:
00562128    50            PUSH    EAX
00562129    68 EC814000   PUSH    004081EC
0056212E    FF15 88124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaNew2>]      ; MSVBVM60.__vbaNew2
00562134    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
0056213A    8BF8            MOV   EDI, EAX
0056213C    8B08            MOV   ECX, DWORD PTR DS:
0056213E    8D95 68FFFFFF   LEA   EDX, DWORD PTR SS:
00562144    52            PUSH    EDX
00562145    68 18BF4100   PUSH    0041BF18                                    ; 1
0056214A    68 BC9E4200   PUSH    00429EBC                                    ; X
0056214F    8B55 A4         MOV   EDX, DWORD PTR SS:
00562152    52            PUSH    EDX
00562153    50            PUSH    EAX
00562154    FF51 34         CALL    DWORD PTR DS:                     ; 将注册码中的X(x)用1代替
00562157    DBE2            FCLEX
00562159    85C0            TEST    EAX, EAX
0056215B    7D 0B         JGE   SHORT 00562168
0056215D    6A 34         PUSH    34
0056215F    68 7CAC4100   PUSH    0041AC7C
00562164    57            PUSH    EDI
00562165    50            PUSH    EAX
00562166    FFD3            CALL    EBX
00562168    8B95 68FFFFFF   MOV   EDX, DWORD PTR SS:
0056216E    C785 68FFFFFF 0>MOV   DWORD PTR SS:, 0
00562178    8D4D A4         LEA   ECX, DWORD PTR SS:
0056217B    FFD6            CALL    ESI
0056217D    6A 00         PUSH    0
0056217F    6A FF         PUSH    -1
00562181    68 84AE4100   PUSH    0041AE84                                    ; -
00562186    8B45 A4         MOV   EAX, DWORD PTR SS:
00562189    50            PUSH    EAX
0056218A    FF15 34114000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcInStrRev>]      ; 查找“-”在注册码中的位置
00562190    8BF8            MOV   EDI, EAX
00562192    83FF 05         CMP   EDI, 5                                    ; 与5比较
00562195    7D 7A         JGE   SHORT 00562211                              ; 大于等于就跳,要跳(注册码第1部分要4位或4位以上)
00562197    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
0056219D    85C0            TEST    EAX, EAX
0056219F    75 12         JNZ   SHORT 005621B3
005621A1    8D8D 6CFFFFFF   LEA   ECX, DWORD PTR SS:
005621A7    51            PUSH    ECX
005621A8    68 EC814000   PUSH    004081EC
005621AD    FF15 88124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaNew2>]      ; MSVBVM60.__vbaNew2
005621B3    8BBD 6CFFFFFF   MOV   EDI, DWORD PTR SS:
005621B9    C785 D8FEFFFF 0>MOV   DWORD PTR SS:, 0
005621C3    8B55 DC         MOV   EDX, DWORD PTR SS:
005621C6    52            PUSH    EDX
005621C7    68 C4144200   PUSH    004214C4                                    ; UNICODE ".key"
005621CC    FF15 7C104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>]      ; MSVBVM60.__vbaStrCat
005621D2    8BD0            MOV   EDX, EAX
005621D4    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
005621DA    FFD6            CALL    ESI
005621DC    8B07            MOV   EAX, DWORD PTR DS:
005621DE    8D8D D4FEFFFF   LEA   ECX, DWORD PTR SS:
005621E4    51            PUSH    ECX
005621E5    8D95 D8FEFFFF   LEA   EDX, DWORD PTR SS:
005621EB    52            PUSH    EDX
005621EC    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
005621F2    51            PUSH    ECX
005621F3    57            PUSH    EDI
005621F4    FF50 24         CALL    DWORD PTR DS:
005621F7    DBE2            FCLEX
005621F9    85C0            TEST    EAX, EAX
005621FB    0F8D BA190000   JGE   00563BBB
00562201    6A 24         PUSH    24
00562203    68 7CAC4100   PUSH    0041AC7C
00562208    57            PUSH    EDI
00562209    50            PUSH    EAX
0056220A    FFD3            CALL    EBX
0056220C    E9 AA190000   JMP   00563BBB
00562211    C785 F4FEFFFF 1>MOV   DWORD PTR SS:, 00422C14            ; <====注册码第1部分(从右至左)
0056221B    BB 08000000   MOV   EBX, 8
00562220    899D ECFEFFFF   MOV   DWORD PTR SS:, EBX
00562226    C785 54FFFFFF 0>MOV   DWORD PTR SS:, 80020004
00562230    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 0A
0056223A    8D55 A4         LEA   EDX, DWORD PTR SS:
0056223D    8995 14FFFFFF   MOV   DWORD PTR SS:, EDX
00562243    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 4008
0056224D    8D85 4CFFFFFF   LEA   EAX, DWORD PTR SS:
00562253    50            PUSH    EAX                                       ; 取10位
00562254    8D4F 01         LEA   ECX, DWORD PTR DS:
00562257    51            PUSH    ECX                                       ; 从第EDI+1位取起
00562258    8D95 0CFFFFFF   LEA   EDX, DWORD PTR SS:
0056225E    52            PUSH    EDX                                       ; 从注册码中取
0056225F    8D85 3CFFFFFF   LEA   EAX, DWORD PTR SS:
00562265    50            PUSH    EAX                                       ; 放在这里
00562266    FF15 4C114000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcMidCharVar>]    ; 取注册码从右到左第1部分
0056226C    C785 E4FEFFFF C>MOV   DWORD PTR SS:, 00429EC4            ; &
00562276    899D DCFEFFFF   MOV   DWORD PTR SS:, EBX
0056227C    8D8D ECFEFFFF   LEA   ECX, DWORD PTR SS:
00562282    51            PUSH    ECX
00562283    8D95 3CFFFFFF   LEA   EDX, DWORD PTR SS:
00562289    52            PUSH    EDX
0056228A    8D85 2CFFFFFF   LEA   EAX, DWORD PTR SS:
00562290    50            PUSH    EAX
00562291    8B1D 58124000   MOV   EBX, DWORD PTR DS:[<&MSVBVM60.__vbaVarCat>] ; MSVBVM60.__vbaVarCat
00562297    FFD3            CALL    EBX                                       ; “&H”与其连接
00562299    50            PUSH    EAX
0056229A    8D8D DCFEFFFF   LEA   ECX, DWORD PTR SS:
005622A0    51            PUSH    ECX
005622A1    8D95 1CFFFFFF   LEA   EDX, DWORD PTR SS:
005622A7    52            PUSH    EDX
005622A8    FFD3            CALL    EBX                                       ; 再与“&”连接
005622AA    50            PUSH    EAX
005622AB    8D85 68FFFFFF   LEA   EAX, DWORD PTR SS:
005622B1    50            PUSH    EAX
005622B2    FF15 4C124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrVarVal>]   ; MSVBVM60.__vbaStrVarVal
005622B8    50            PUSH    EAX
005622B9    FF15 A0134000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcR8ValFromBstr>] ; 转为浮点数
005622BF    83EC 08         SUB   ESP, 8
005622C2    DD1C24          FSTP    QWORD PTR SS:
005622C5    FF15 C8114000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrR8>]       ; MSVBVM60.__vbaStrR8
005622CB    8BD0            MOV   EDX, EAX
005622CD    8D4D 98         LEA   ECX, DWORD PTR SS:
005622D0    FFD6            CALL    ESI
005622D2    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
005622D8    FF15 98134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]   ; MSVBVM60.__vbaFreeStr
005622DE    8D8D 1CFFFFFF   LEA   ECX, DWORD PTR SS:
005622E4    51            PUSH    ECX
005622E5    8D95 2CFFFFFF   LEA   EDX, DWORD PTR SS:
005622EB    52            PUSH    EDX
005622EC    8D85 3CFFFFFF   LEA   EAX, DWORD PTR SS:
005622F2    50            PUSH    EAX
005622F3    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
005622F9    51            PUSH    ECX
005622FA    6A 04         PUSH    4
005622FC    FF15 40104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>] ; MSVBVM60.__vbaFreeVarList
00562302    83C4 14         ADD   ESP, 14
00562305    8B55 98         MOV   EDX, DWORD PTR SS:                  ; 注册码第1部分
00562308    52            PUSH    EDX
00562309    FF15 84124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaR8Str>]       ; MSVBVM60.__vbaR8Str
0056230F    DC1D 406C4000   FCOMP   QWORD PTR DS:                     ; 与8889比较
00562315    DFE0            FSTSW   AX
00562317    F6C4 01         TEST    AH, 1
0056231A    74 13         JE      SHORT 0056232F                              ; 大于等于就跳(要跳)
0056231C    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
00562322    85C0            TEST    EAX, EAX
00562324    0F85 E8110000   JNZ   00563512
0056232A    E9 D1110000   JMP   00563500
0056232F    8D4D A4         LEA   ECX, DWORD PTR SS:                  ; <====注册码第2部分
00562332    898D 14FFFFFF   MOV   DWORD PTR SS:, ECX
00562338    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 4008                  
00562342    4F            DEC   EDI
00562343    57            PUSH    EDI                                       ; 从第EDI-1位取起
00562344    8D95 0CFFFFFF   LEA   EDX, DWORD PTR SS:
0056234A    52            PUSH    EDX                                       ; 注册码
0056234B    8D85 4CFFFFFF   LEA   EAX, DWORD PTR SS:
00562351    50            PUSH    EAX                                       ; 放这里
00562352    FF15 28134000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcLeftCharVar>]   ; 取左边的子串(注册码从右至左第1部分)
00562358    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
0056235E    51            PUSH    ECX
0056235F    FF15 2C104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrVarMove>]; MSVBVM60.__vbaStrVarMove
00562365    8BD0            MOV   EDX, EAX
00562367    8D4D A4         LEA   ECX, DWORD PTR SS:
0056236A    FFD6            CALL    ESI
0056236C    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00562372    FF15 20104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>]   ; MSVBVM60.__vbaFreeVar
00562378    6A 00         PUSH    0
0056237A    6A FF         PUSH    -1
0056237C    68 84AE4100   PUSH    0041AE84                                    ; -
00562381    8B55 A4         MOV   EDX, DWORD PTR SS:
00562384    52            PUSH    EDX
00562385    FF15 34114000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcInStrRev>]      ; 查找“—”在子串中的位置
0056238B    8BF8            MOV   EDI, EAX
0056238D    83FF 05         CMP   EDI, 5
00562390    7D 13         JGE   SHORT 005623A5
00562392    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
00562398    85C0            TEST    EAX, EAX
0056239A    0F85 72110000   JNZ   00563512
005623A0    E9 5B110000   JMP   00563500
005623A5    C785 F4FEFFFF 1>MOV   DWORD PTR SS:, 00422C14            ; UNICODE "&H"
005623AF    C785 ECFEFFFF 0>MOV   DWORD PTR SS:, 8
005623B9    C785 54FFFFFF 0>MOV   DWORD PTR SS:, 80020004
005623C3    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 0A
005623CD    8D4D A4         LEA   ECX, DWORD PTR SS:
005623D0    898D 14FFFFFF   MOV   DWORD PTR SS:, ECX
005623D6    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 4008
005623E0    8D95 4CFFFFFF   LEA   EDX, DWORD PTR SS:
005623E6    52            PUSH    EDX
005623E7    8D47 01         LEA   EAX, DWORD PTR DS:
005623EA    50            PUSH    EAX
005623EB    8D8D 0CFFFFFF   LEA   ECX, DWORD PTR SS:
005623F1    51            PUSH    ECX
005623F2    8D95 3CFFFFFF   LEA   EDX, DWORD PTR SS:
005623F8    52            PUSH    EDX
005623F9    FF15 4C114000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcMidCharVar>]    ; 取注册码从右往左第2部分
005623FF    C785 E4FEFFFF C>MOV   DWORD PTR SS:, 00429EC4
00562409    C785 DCFEFFFF 0>MOV   DWORD PTR SS:, 8
00562413    8D85 ECFEFFFF   LEA   EAX, DWORD PTR SS:
00562419    50            PUSH    EAX
0056241A    8D8D 3CFFFFFF   LEA   ECX, DWORD PTR SS:
00562420    51            PUSH    ECX
00562421    8D95 2CFFFFFF   LEA   EDX, DWORD PTR SS:
00562427    52            PUSH    EDX
00562428    FFD3            CALL    EBX
0056242A    50            PUSH    EAX
0056242B    8D85 DCFEFFFF   LEA   EAX, DWORD PTR SS:
00562431    50            PUSH    EAX
00562432    8D8D 1CFFFFFF   LEA   ECX, DWORD PTR SS:
00562438    51            PUSH    ECX
00562439    FFD3            CALL    EBX
0056243B    50            PUSH    EAX
0056243C    8D95 68FFFFFF   LEA   EDX, DWORD PTR SS:
00562442    52            PUSH    EDX
00562443    FF15 4C124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrVarVal>]   ; MSVBVM60.__vbaStrVarVal
00562449    50            PUSH    EAX
0056244A    FF15 A0134000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcR8ValFromBstr>] ; MSVBVM60.rtcR8ValFromBstr
00562450    83EC 08         SUB   ESP, 8
00562453    DD1C24          FSTP    QWORD PTR SS:
00562456    FF15 C8114000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrR8>]       ; MSVBVM60.__vbaStrR8
0056245C    8BD0            MOV   EDX, EAX
0056245E    8D4D AC         LEA   ECX, DWORD PTR SS:
00562461    FFD6            CALL    ESI
00562463    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00562469    FF15 98134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]   ; MSVBVM60.__vbaFreeStr
0056246F    8D85 1CFFFFFF   LEA   EAX, DWORD PTR SS:
00562475    50            PUSH    EAX
00562476    8D8D 2CFFFFFF   LEA   ECX, DWORD PTR SS:
0056247C    51            PUSH    ECX
0056247D    8D95 3CFFFFFF   LEA   EDX, DWORD PTR SS:
00562483    52            PUSH    EDX
00562484    8D85 4CFFFFFF   LEA   EAX, DWORD PTR SS:
0056248A    50            PUSH    EAX
0056248B    6A 04         PUSH    4
0056248D    FF15 40104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>] ; MSVBVM60.__vbaFreeVarList
00562493    83C4 14         ADD   ESP, 14
00562496    8B4D AC         MOV   ECX, DWORD PTR SS:                  ; 第2部分
00562499    51            PUSH    ECX
0056249A    FF15 84124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaR8Str>]       ; MSVBVM60.__vbaR8Str
005624A0    DC1D 386C4000   FCOMP   QWORD PTR DS:                     ; 与51001比较
005624A6    DFE0            FSTSW   AX
005624A8    F6C4 01         TEST    AH, 1
005624AB    74 65         JE      SHORT 00562512                              ; 大于等于就跳(要跳)
005624AD    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
005624B3    85C0            TEST    EAX, EAX
005624B5    75 12         JNZ   SHORT 005624C9
005624B7    8D95 6CFFFFFF   LEA   EDX, DWORD PTR SS:
005624BD    52            PUSH    EDX
005624BE    68 EC814000   PUSH    004081EC
005624C3    FF15 88124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaNew2>]      ; MSVBVM60.__vbaNew2
005624C9    8BBD 6CFFFFFF   MOV   EDI, DWORD PTR SS:
005624CF    C785 D8FEFFFF 0>MOV   DWORD PTR SS:, 0
005624D9    8B45 DC         MOV   EAX, DWORD PTR SS:
005624DC    50            PUSH    EAX
005624DD    68 C4144200   PUSH    004214C4                                    ; UNICODE ".key"
005624E2    FF15 7C104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>]      ; MSVBVM60.__vbaStrCat
005624E8    8BD0            MOV   EDX, EAX
005624EA    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
005624F0    FFD6            CALL    ESI
005624F2    8B0F            MOV   ECX, DWORD PTR DS:
005624F4    8D95 D4FEFFFF   LEA   EDX, DWORD PTR SS:
005624FA    52            PUSH    EDX
005624FB    8D85 D8FEFFFF   LEA   EAX, DWORD PTR SS:
00562501    50            PUSH    EAX
00562502    8D95 68FFFFFF   LEA   EDX, DWORD PTR SS:
00562508    52            PUSH    EDX
00562509    57            PUSH    EDI
0056250A    FF51 24         CALL    DWORD PTR DS:
0056250D    E9 44100000   JMP   00563556
00562512    8D45 A4         LEA   EAX, DWORD PTR SS:
00562515    8985 14FFFFFF   MOV   DWORD PTR SS:, EAX
0056251B    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 4008
00562525    4F            DEC   EDI
00562526    57            PUSH    EDI
00562527    8D8D 0CFFFFFF   LEA   ECX, DWORD PTR SS:
0056252D    51            PUSH    ECX
0056252E    8D95 4CFFFFFF   LEA   EDX, DWORD PTR SS:
00562534    52            PUSH    EDX
00562535    FF15 28134000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcLeftCharVar>]   ; MSVBVM60.rtcLeftCharVar
0056253B    8D85 4CFFFFFF   LEA   EAX, DWORD PTR SS:
00562541    50            PUSH    EAX
00562542    8B1D 2C104000   MOV   EBX, DWORD PTR DS:[<&MSVBVM60.__vbaStrVarMo>; MSVBVM60.__vbaStrVarMove
00562548    FFD3            CALL    EBX
0056254A    8BD0            MOV   EDX, EAX
0056254C    8D4D A4         LEA   ECX, DWORD PTR SS:
0056254F    FFD6            CALL    ESI
00562551    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00562557    FF15 20104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>]   ; MSVBVM60.__vbaFreeVar
0056255D    6A 00         PUSH    0
0056255F    6A FF         PUSH    -1
00562561    68 84AE4100   PUSH    0041AE84
00562566    8B4D A4         MOV   ECX, DWORD PTR SS:
00562569    51            PUSH    ECX
0056256A    FF15 34114000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcInStrRev>]      ; 在子串中找“-”位置
00562570    8BF8            MOV   EDI, EAX
00562572    C785 54FFFFFF 0>MOV   DWORD PTR SS:, 80020004
0056257C    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 0A
00562586    8D55 A4         LEA   EDX, DWORD PTR SS:
00562589    8995 14FFFFFF   MOV   DWORD PTR SS:, EDX
0056258F    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 4008
00562599    8D85 4CFFFFFF   LEA   EAX, DWORD PTR SS:
0056259F    50            PUSH    EAX
005625A0    8D4F 01         LEA   ECX, DWORD PTR DS:
005625A3    51            PUSH    ECX
005625A4    8D95 0CFFFFFF   LEA   EDX, DWORD PTR SS:
005625AA    52            PUSH    EDX
005625AB    8D85 3CFFFFFF   LEA   EAX, DWORD PTR SS:
005625B1    50            PUSH    EAX
005625B2    FF15 4C114000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcMidCharVar>]    ; 注册码从右至左第3部分
005625B8    8D8D 3CFFFFFF   LEA   ECX, DWORD PTR SS:
005625BE    51            PUSH    ECX
005625BF    FFD3            CALL    EBX
005625C1    8BD0            MOV   EDX, EAX
005625C3    8D4D 94         LEA   ECX, DWORD PTR SS:
005625C6    FFD6            CALL    ESI
005625C8    8D95 3CFFFFFF   LEA   EDX, DWORD PTR SS:
005625CE    52            PUSH    EDX
005625CF    8D85 4CFFFFFF   LEA   EAX, DWORD PTR SS:
005625D5    50            PUSH    EAX
005625D6    6A 02         PUSH    2
005625D8    FF15 40104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>] ; MSVBVM60.__vbaFreeVarList
005625DE    83C4 0C         ADD   ESP, 0C
005625E1    83FF 05         CMP   EDI, 5
005625E4    7D 65         JGE   SHORT 0056264B
005625E6    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
005625EC    85C0            TEST    EAX, EAX
005625EE    75 12         JNZ   SHORT 00562602
005625F0    8D8D 6CFFFFFF   LEA   ECX, DWORD PTR SS:
005625F6    51            PUSH    ECX
005625F7    68 EC814000   PUSH    004081EC
005625FC    FF15 88124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaNew2>]      ; MSVBVM60.__vbaNew2
00562602    8BBD 6CFFFFFF   MOV   EDI, DWORD PTR SS:
00562608    C785 D8FEFFFF 0>MOV   DWORD PTR SS:, 0
00562612    8B55 DC         MOV   EDX, DWORD PTR SS:
00562615    52            PUSH    EDX
00562616    68 C4144200   PUSH    004214C4                                    ; UNICODE ".key"
0056261B    FF15 7C104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>]      ; MSVBVM60.__vbaStrCat
00562621    8BD0            MOV   EDX, EAX
00562623    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00562629    FFD6            CALL    ESI
0056262B    8B07            MOV   EAX, DWORD PTR DS:
0056262D    8D8D D4FEFFFF   LEA   ECX, DWORD PTR SS:
00562633    51            PUSH    ECX
00562634    8D95 D8FEFFFF   LEA   EDX, DWORD PTR SS:
0056263A    52            PUSH    EDX
0056263B    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00562641    51            PUSH    ECX
00562642    57            PUSH    EDI
00562643    FF50 24         CALL    DWORD PTR DS:
00562646    E9 0B0F0000   JMP   00563556
0056264B    8D55 A4         LEA   EDX, DWORD PTR SS:
0056264E    8995 14FFFFFF   MOV   DWORD PTR SS:, EDX
00562654    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 4008
0056265E    4F            DEC   EDI
0056265F    57            PUSH    EDI
00562660    8D85 0CFFFFFF   LEA   EAX, DWORD PTR SS:
00562666    50            PUSH    EAX
00562667    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
0056266D    51            PUSH    ECX
0056266E    FF15 28134000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcLeftCharVar>]   ; 取左边子串(第4部分)
00562674    8D95 4CFFFFFF   LEA   EDX, DWORD PTR SS:
0056267A    52            PUSH    EDX
0056267B    FFD3            CALL    EBX
0056267D    8BD0            MOV   EDX, EAX
0056267F    8D4D A4         LEA   ECX, DWORD PTR SS:
00562682    FFD6            CALL    ESI
00562684    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
0056268A    FF15 20104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>]   ; MSVBVM60.__vbaFreeVar
00562690    8B45 AC         MOV   EAX, DWORD PTR SS:                  ; 第2部分
00562693    50            PUSH    EAX
00562694    FF15 A0134000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcR8ValFromBstr>] ; MSVBVM60.rtcR8ValFromBstr
0056269A    FF15 28114000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFpR8>]      ; MSVBVM60.__vbaFpR8
005626A0    DC1D 386C4000   FCOMP   QWORD PTR DS:                     ; 与51001比较
005626A6    DFE0            FSTSW   AX
005626A8    F6C4 41         TEST    AH, 41
005626AB    C785 2CFEFFFF 0>MOV   DWORD PTR SS:, 1
005626B5    75 0A         JNZ   SHORT 005626C1                              ; 大于就不跳(不跳)
005626B7    C785 2CFEFFFF 0>MOV   DWORD PTR SS:, 0
005626C1    8B4D A4         MOV   ECX, DWORD PTR SS:                  ; 第4部分
005626C4    51            PUSH    ECX
005626C5    8B3D 34104000   MOV   EDI, DWORD PTR DS:[<&MSVBVM60.__vbaLenBstr>>; MSVBVM60.__vbaLenBstr
005626CB    FFD7            CALL    EDI                                       ; 算第4部分长度
005626CD    33DB            XOR   EBX, EBX
005626CF    83F8 04         CMP   EAX, 4                                    ; 与4比较
005626D2    0F9CC3          SETL    BL                                          ; 比4小则BL=1,否则=0
005626D5    8B55 E0         MOV   EDX, DWORD PTR SS:                  ; 用户名
005626D8    52            PUSH    EDX
005626D9    FFD7            CALL    EDI                                       ; 算用户名长度
005626DB    33C9            XOR   ECX, ECX
005626DD    83F8 02         CMP   EAX, 2                                    ; 与2比较
005626E0    0F9CC1          SETL    CL                                          ; 比2小则CL=1,否则CL=0
005626E3    0BD9            OR      EBX, ECX
005626E5    F7DB            NEG   EBX
005626E7    1BDB            SBB   EBX, EBX
005626E9    F7DB            NEG   EBX
005626EB    8B55 A0         MOV   EDX, DWORD PTR SS:                  ; 机器码
005626EE    52            PUSH    EDX
005626EF    FFD7            CALL    EDI                                       ; 算机器码长度
005626F1    33C9            XOR   ECX, ECX
005626F3    83F8 05         CMP   EAX, 5                                    ; 与5比较
005626F6    0F9CC1          SETL    CL                                          ; 比5小则CL=1,否则CL=0
005626F9    0BD9            OR      EBX, ECX
005626FB    F7DB            NEG   EBX
005626FD    1BDB            SBB   EBX, EBX
005626FF    F7DB            NEG   EBX
00562701    0B9D 2CFEFFFF   OR      EBX, DWORD PTR SS:
00562707    0F85 BA140000   JNZ   00563BC7                                    ; 不跳
0056270D    BF 01000000   MOV   EDI, 1
00562712    89BD 14FFFFFF   MOV   DWORD PTR SS:, EDI
00562718    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 2
00562722    8D95 0CFFFFFF   LEA   EDX, DWORD PTR SS:
00562728    8D4D 84         LEA   ECX, DWORD PTR SS:
0056272B    8B1D 14104000   MOV   EBX, DWORD PTR DS:[<&MSVBVM60.__vbaVarMove>>; MSVBVM60.__vbaVarMove
00562731    FFD3            CALL    EBX
00562733    B8 03000000   MOV   EAX, 3
00562738    3BF8            CMP   EDI, EAX
0056273A    0F8F 8B000000   JG      005627CB
00562740    C785 54FFFFFF 0>MOV   DWORD PTR SS:, 1
0056274A    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 2
00562754    8D95 4CFFFFFF   LEA   EDX, DWORD PTR SS:
0056275A    52            PUSH    EDX
0056275B    57            PUSH    EDI
0056275C    8B45 A0         MOV   EAX, DWORD PTR SS:                  ; 机器码
0056275F    50            PUSH    EAX
00562760    FF15 38114000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcMidCharBstr>]   ; 机器码前3位各字符
00562766    8BD0            MOV   EDX, EAX
00562768    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
0056276E    FFD6            CALL    ESI
00562770    50            PUSH    EAX
00562771    FF15 54104000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcAnsiValueBstr>] ; ASIIC
00562777    66:8985 04FFFFF>MOV   WORD PTR SS:, AX
0056277E    C785 FCFEFFFF 0>MOV   DWORD PTR SS:, 2
00562788    8D4D 84         LEA   ECX, DWORD PTR SS:
0056278B    51            PUSH    ECX
0056278C    8D95 FCFEFFFF   LEA   EDX, DWORD PTR SS:
00562792    52            PUSH    EDX
00562793    8D85 3CFFFFFF   LEA   EAX, DWORD PTR SS:
00562799    50            PUSH    EAX
0056279A    FF15 EC124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarAdd>]      ; 累加
005627A0    8BD0            MOV   EDX, EAX
005627A2    8D4D 84         LEA   ECX, DWORD PTR SS:
005627A5    FFD3            CALL    EBX
005627A7    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
005627AD    FF15 98134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]   ; MSVBVM60.__vbaFreeStr
005627B3    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
005627B9    FF15 20104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>]   ; MSVBVM60.__vbaFreeVar
005627BF    B8 01000000   MOV   EAX, 1
005627C4    03F8            ADD   EDI, EAX
005627C6^ E9 68FFFFFF   JMP   00562733                                    ; 以上循环将机器码前3位的ASIIC码累加+1
005627CB    8B4D A0         MOV   ECX, DWORD PTR SS:
005627CE    51            PUSH    ECX
005627CF    FF15 34104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaLenBstr>]   ; MSVBVM60.__vbaLenBstr
005627D5    8985 94FEFFFF   MOV   DWORD PTR SS:, EAX
005627DB    BF 04000000   MOV   EDI, 4
005627E0    3BBD 94FEFFFF   CMP   EDI, DWORD PTR SS:
005627E6    0F8F 8B000000   JG      00562877
005627EC    C785 54FFFFFF 0>MOV   DWORD PTR SS:, 1
005627F6    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 2
00562800    8D95 4CFFFFFF   LEA   EDX, DWORD PTR SS:
00562806    52            PUSH    EDX
00562807    57            PUSH    EDI
00562808    8B45 A0         MOV   EAX, DWORD PTR SS:
0056280B    50            PUSH    EAX
0056280C    FF15 38114000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcMidCharBstr>]   ; 后几位各字符
00562812    8BD0            MOV   EDX, EAX
00562814    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
0056281A    FFD6            CALL    ESI
0056281C    50            PUSH    EAX
0056281D    FF15 54104000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcAnsiValueBstr>] ; ASIIC码
00562823    66:8985 04FFFFF>MOV   WORD PTR SS:, AX
0056282A    C785 FCFEFFFF 0>MOV   DWORD PTR SS:, 2
00562834    8D4D 84         LEA   ECX, DWORD PTR SS:
00562837    51            PUSH    ECX
00562838    8D95 FCFEFFFF   LEA   EDX, DWORD PTR SS:
0056283E    52            PUSH    EDX
0056283F    8D85 3CFFFFFF   LEA   EAX, DWORD PTR SS:
00562845    50            PUSH    EAX
00562846    FF15 EC114000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarMul>]      ; 与上面的和累乘得A
0056284C    8BD0            MOV   EDX, EAX
0056284E    8D4D 84         LEA   ECX, DWORD PTR SS:
00562851    FFD3            CALL    EBX
00562853    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00562859    FF15 98134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]   ; MSVBVM60.__vbaFreeStr
0056285F    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00562865    FF15 20104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>]   ; MSVBVM60.__vbaFreeVar
0056286B    B8 01000000   MOV   EAX, 1
00562870    03F8            ADD   EDI, EAX
00562872^ E9 69FFFFFF   JMP   005627E0
00562877    8D4D 84         LEA   ECX, DWORD PTR SS:
0056287A    51            PUSH    ECX
0056287B    FF15 C4124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaR8Var>]       ; MSVBVM60.__vbaR8Var
00562881    E8 6847EAFF   CALL                         ; A开方
00562886    DD9D C8FEFFFF   FSTP    QWORD PTR SS:
0056288C    6A 05         PUSH    5
0056288E    8B95 CCFEFFFF   MOV   EDX, DWORD PTR SS:
00562894    52            PUSH    EDX
00562895    8B85 C8FEFFFF   MOV   EAX, DWORD PTR SS:
0056289B    50            PUSH    EAX
0056289C    FF15 C8114000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaStrR8>]       ; 转为字串
005628A2    8BD0            MOV   EDX, EAX
005628A4    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
005628AA    FFD6            CALL    ESI
005628AC    50            PUSH    EAX
005628AD    FF15 38134000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcRightCharBstr>] ; 取右边5位
005628B3    8BD0            MOV   EDX, EAX
005628B5    8D8D 64FFFFFF   LEA   ECX, DWORD PTR SS:
005628BB    FFD6            CALL    ESI
005628BD    50            PUSH    EAX
005628BE    FF15 A0134000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcR8ValFromBstr>] ; MSVBVM60.rtcR8ValFromBstr
005628C4    FF15 18134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFpI4>]      ; 转为整数得B
005628CA    8BF8            MOV   EDI, EAX
005628CC    8D4D 84         LEA   ECX, DWORD PTR SS:                  ; A
005628CF    51            PUSH    ECX
005628D0    FF15 C4124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaR8Var>]       ; MSVBVM60.__vbaR8Var
005628D6    E8 1347EAFF   CALL                         ; 开方
005628DB    DC0D 306C4000   FMUL    QWORD PTR DS:                     ; ×11001
005628E1    FF15 44134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaR8IntI4>]   ; 取整得C
005628E7    33F8            XOR   EDI, EAX                                    ; B 、 C 异或
005628E9    8B55 AC         MOV   EDX, DWORD PTR SS:                  ; 注册码从右到左第2部分
005628EC    52            PUSH    EDX
005628ED    FF15 AC124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaI4Str>]       ; MSVBVM60.__vbaI4Str
005628F3    33F8            XOR   EDI, EAX                                    ; 再异或
005628F5    89BD 28FEFFFF   MOV   DWORD PTR SS:, EDI
005628FB    DB85 28FEFFFF   FILD    DWORD PTR SS:
00562901    DD9D 20FEFFFF   FSTP    QWORD PTR SS:
00562907    8B45 AC         MOV   EAX, DWORD PTR SS:
0056290A    50            PUSH    EAX
0056290B    FF15 84124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaR8Str>]       ; MSVBVM60.__vbaR8Str
00562911    DCAD 20FEFFFF   FSUBR   QWORD PTR SS:                      ; 减去“第2部分”,得D
00562917    DD9D 14FFFFFF   FSTP    QWORD PTR SS:
0056291D    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 5
00562927    8D95 0CFFFFFF   LEA   EDX, DWORD PTR SS:
0056292D    8D4D 84         LEA   ECX, DWORD PTR SS:
00562930    FFD3            CALL    EBX
00562932    8D8D 64FFFFFF   LEA   ECX, DWORD PTR SS:
00562938    51            PUSH    ECX
00562939    8D95 68FFFFFF   LEA   EDX, DWORD PTR SS:
0056293F    52            PUSH    EDX
00562940    6A 02         PUSH    2
00562942    FF15 B4124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStrList>] ; MSVBVM60.__vbaFreeStrList
00562948    83C4 0C         ADD   ESP, 0C                                       
0056294B    8B45 E0         MOV   EAX, DWORD PTR SS:                  ; <====注册码第3部分//用户名
0056294E    50            PUSH    EAX
0056294F    FF15 34104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaLenBstr>]   ; 长度
00562955    8985 7CFFFFFF   MOV   DWORD PTR SS:, EAX                  ; [EBP-84]初值为用户名长度
0056295B    8985 8CFEFFFF   MOV   DWORD PTR SS:, EAX
00562961    B8 01000000   MOV   EAX, 1                                    ; 循环变量置1
00562966    8945 9C         MOV   DWORD PTR SS:, EAX
00562969    3B85 8CFEFFFF   CMP   EAX, DWORD PTR SS:               ; 循环变量与长度比较
0056296F    0F8F DB000000   JG      00562A50
00562975    C785 54FFFFFF 0>MOV   DWORD PTR SS:, 1
0056297F    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 2
00562989    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
0056298F    51            PUSH    ECX
00562990    50            PUSH    EAX
00562991    8B55 E0         MOV   EDX, DWORD PTR SS:
00562994    52            PUSH    EDX
00562995    FF15 38114000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcMidCharBstr>]   ; 用户名各字符
0056299B    8BD0            MOV   EDX, EAX
0056299D    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
005629A3    FFD6            CALL    ESI
005629A5    50            PUSH    EAX
005629A6    FF15 54104000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcAnsiValueBstr>] ; ASIIC
005629AC    8985 D8FEFFFF   MOV   DWORD PTR SS:, EAX
005629B2    68 00000040   PUSH    40000000
005629B7    6A 00         PUSH    0
005629B9    DB45 9C         FILD    DWORD PTR SS:                     ; 循环变量
005629BC    DD9D 18FEFFFF   FSTP    QWORD PTR SS:
005629C2    8B85 1CFEFFFF   MOV   EAX, DWORD PTR SS:
005629C8    50            PUSH    EAX
005629C9    8B8D 18FEFFFF   MOV   ECX, DWORD PTR SS:
005629CF    51            PUSH    ECX
005629D0    FF15 C0124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaPowerR8>]   ; 循环变量的平方
005629D6    0FBF85 D8FEFFFF MOVSX   EAX, WORD PTR SS:
005629DD    99            CDQ
005629DE    33C2            XOR   EAX, EDX
005629E0    2BC2            SUB   EAX, EDX
005629E2    0FBFD0          MOVSX   EDX, AX                                     ; EDX=ASIIC的绝对值
005629E5    8995 14FEFFFF   MOV   DWORD PTR SS:, EDX
005629EB    DB85 14FEFFFF   FILD    DWORD PTR SS:                      ; ASIIC的绝对值
005629F1    DD9D 0CFEFFFF   FSTP    QWORD PTR SS:
005629F7    DC8D 0CFEFFFF   FMUL    QWORD PTR SS:                      ; ×所在位数的平方                     
005629FD    DB85 7CFFFFFF   FILD    DWORD PTR SS:
00562A03    DD9D 04FEFFFF   FSTP    QWORD PTR SS:
00562A09    DC85 04FEFFFF   FADD    QWORD PTR SS:                      ; +[EBP-84]
00562A0F    FF15 18134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFpI4>]      ; MSVBVM60.__vbaFpI4
00562A15    8BF8            MOV   EDI, EAX
00562A17    8B45 AC         MOV   EAX, DWORD PTR SS:                  ; 第2部分
00562A1A    50            PUSH    EAX
00562A1B    FF15 AC124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaI4Str>]       ; MSVBVM60.__vbaI4Str
00562A21    33F8            XOR   EDI, EAX                                    ; 上面的结果异或第2部分
00562A23    89BD 7CFFFFFF   MOV   DWORD PTR SS:, EDI                  ; 异或结果存入[EBP-84]
00562A29    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00562A2F    FF15 98134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]   ; MSVBVM60.__vbaFreeStr
00562A35    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00562A3B    FF15 20104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>]   ; MSVBVM60.__vbaFreeVar
00562A41    B9 01000000   MOV   ECX, 1
00562A46    8B45 9C         MOV   EAX, DWORD PTR SS:
00562A49    03C1            ADD   EAX, ECX
00562A4B^ E9 16FFFFFF   JMP   00562966                                    ; 对用户名循环处理,得结果E
00562A50    68 142C4200   PUSH    00422C14                                    ; UNICODE "&H"
00562A55    8B4D 94         MOV   ECX, DWORD PTR SS:                  ; 第3部分
00562A58    51            PUSH    ECX
00562A59    FF15 04124000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcStrReverse>]    ; 注册码第3部分反转
00562A5F    8BD0            MOV   EDX, EAX
00562A61    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00562A67    FFD6            CALL    ESI
00562A69    50            PUSH    EAX
00562A6A    8B3D 7C104000   MOV   EDI, DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>] ; MSVBVM60.__vbaStrCat
00562A70    FFD7            CALL    EDI
00562A72    8BD0            MOV   EDX, EAX
00562A74    8D8D 64FFFFFF   LEA   ECX, DWORD PTR SS:
00562A7A    FFD6            CALL    ESI
00562A7C    50            PUSH    EAX
00562A7D    68 C49E4200   PUSH    00429EC4
00562A82    FFD7            CALL    EDI
00562A84    8BD0            MOV   EDX, EAX
00562A86    8D8D 60FFFFFF   LEA   ECX, DWORD PTR SS:
00562A8C    FFD6            CALL    ESI
00562A8E    50            PUSH    EAX
00562A8F    FF15 A0134000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcR8ValFromBstr>] ; MSVBVM60.rtcR8ValFromBstr
00562A95    DC35 30194000   FDIV    QWORD PTR DS:                     ; 除以2
00562A9B    FF15 18134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFpI4>]      ; 取整
00562AA1    8BF8            MOV   EDI, EAX
00562AA3    33BD 7CFFFFFF   XOR   EDI, DWORD PTR SS:                  ; 异或E
00562AA9    F7DF            NEG   EDI
00562AAB    1BFF            SBB   EDI, EDI
00562AAD    F7DF            NEG   EDI
00562AAF    F7DF            NEG   EDI
00562AB1    8D95 60FFFFFF   LEA   EDX, DWORD PTR SS:
00562AB7    52            PUSH    EDX
00562AB8    8D85 64FFFFFF   LEA   EAX, DWORD PTR SS:
00562ABE    50            PUSH    EAX
00562ABF    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00562AC5    51            PUSH    ECX
00562AC6    6A 03         PUSH    3
00562AC8    FF15 B4124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStrList>] ; MSVBVM60.__vbaFreeStrList
00562ACE    83C4 10         ADD   ESP, 10
00562AD1    66:85FF         TEST    DI, DI
00562AD4    0F84 EB010000   JE      00562CC5                                    ; 异或结果为0就跳,要跳
00562ADA    C785 7CFFFFFF 0>MOV   DWORD PTR SS:, 1
00562AE4    8B55 E0         MOV   EDX, DWORD PTR SS:
00562AE7    52            PUSH    EDX                                       ;
00562AE8    FF15 34104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaLenBstr>]   ; 算用户名长度
00562AEE    BA 01000000   MOV   EDX, 1
00562AF3    8BCA            MOV   ECX, EDX
00562AF5    8BBD 7CFFFFFF   MOV   EDI, DWORD PTR SS:
00562AFB    3BC8            CMP   ECX, EAX
00562AFD    7F 0C         JG      SHORT 00562B0B
00562AFF    03F9            ADD   EDI, ECX
00562B01    89BD 7CFFFFFF   MOV   DWORD PTR SS:, EDI
00562B07    03CA            ADD   ECX, EDX
00562B09^ EB F0         JMP   SHORT 00562AFB                              ; 从1起累加至用户名位数+1
00562B0B    DB85 7CFFFFFF   FILD    DWORD PTR SS:
00562B11    DD9D FCFDFFFF   FSTP    QWORD PTR SS:
00562B17    DD85 FCFDFFFF   FLD   QWORD PTR SS:
00562B1D    E8 CC44EAFF   CALL                         ; 开方
00562B22    DC0D 286C4000   FMUL    QWORD PTR DS:                     ; ×21110
00562B28    D9E1            FABS                                                ; 取绝对值
00562B2A    FF15 44134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaR8IntI4>]   ; MSVBVM60.__vbaR8IntI4
00562B30    8985 7CFFFFFF   MOV   DWORD PTR SS:, EAX
00562B36    8B45 E0         MOV   EAX, DWORD PTR SS:
00562B39    50            PUSH    EAX
00562B3A    FF15 34104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaLenBstr>]   ; MSVBVM60.__vbaLenBstr
00562B40    B9 01000000   MOV   ECX, 1
00562B45    8BF9            MOV   EDI, ECX
00562B47    8B95 7CFFFFFF   MOV   EDX, DWORD PTR SS:
00562B4D    3BF8            CMP   EDI, EAX
00562B4F    7F 0C         JG      SHORT 00562B5D
00562B51    33D7            XOR   EDX, EDI
00562B53    8995 7CFFFFFF   MOV   DWORD PTR SS:, EDX
00562B59    03F9            ADD   EDI, ECX
00562B5B^ EB F0         JMP   SHORT 00562B4D                              ; 循环异或(从1至用户名长度)
00562B5D    C785 54FFFFFF 0>MOV   DWORD PTR SS:, 80020004
00562B67    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 0A
00562B71    8D8D 7CFFFFFF   LEA   ECX, DWORD PTR SS:
00562B77    898D 14FFFFFF   MOV   DWORD PTR SS:, ECX
00562B7D    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 4003
00562B87    8D95 4CFFFFFF   LEA   EDX, DWORD PTR SS:
00562B8D    52            PUSH    EDX                                       ; 10
00562B8E    6A 01         PUSH    1
00562B90    8D85 0CFFFFFF   LEA   EAX, DWORD PTR SS:
00562B96    50            PUSH    EAX
00562B97    8D8D 3CFFFFFF   LEA   ECX, DWORD PTR SS:
00562B9D    51            PUSH    ECX
00562B9E    FF15 4C114000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcMidCharVar>]    ; 转为字串
00562BA4    8D55 84         LEA   EDX, DWORD PTR SS:
00562BA7    52            PUSH    EDX
00562BA8    8D85 3CFFFFFF   LEA   EAX, DWORD PTR SS:
00562BAE    50            PUSH    EAX
00562BAF    8D8D 2CFFFFFF   LEA   ECX, DWORD PTR SS:
00562BB5    51            PUSH    ECX
00562BB6    FF15 CC104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarXor>]      ; MSVBVM60.__vbaVarXor
00562BBC    8BD0            MOV   EDX, EAX
00562BBE    8D4D 84         LEA   ECX, DWORD PTR SS:
00562BC1    FFD3            CALL    EBX
00562BC3    8D95 3CFFFFFF   LEA   EDX, DWORD PTR SS:
00562BC9    52            PUSH    EDX
00562BCA    8D85 4CFFFFFF   LEA   EAX, DWORD PTR SS:
00562BD0    50            PUSH    EAX
00562BD1    6A 02         PUSH    2
00562BD3    FF15 40104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>] ; MSVBVM60.__vbaFreeVarList
00562BD9    83C4 0C         ADD   ESP, 0C
00562BDC    83FF 0A         CMP   EDI, 0A
00562BDF    0F85 CD000000   JNZ   00562CB2
00562BE5    89BD 14FFFFFF   MOV   DWORD PTR SS:, EDI
00562BEB    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 3
00562BF5    8D4D 84         LEA   ECX, DWORD PTR SS:
00562BF8    51            PUSH    ECX
00562BF9    8D95 0CFFFFFF   LEA   EDX, DWORD PTR SS:
00562BFF    52            PUSH    EDX
00562C00    8D85 4CFFFFFF   LEA   EAX, DWORD PTR SS:
00562C06    50            PUSH    EAX
00562C07    FF15 CC104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarXor>]      ; MSVBVM60.__vbaVarXor
00562C0D    8BD0            MOV   EDX, EAX
00562C0F    8D4D 84         LEA   ECX, DWORD PTR SS:
00562C12    FFD3            CALL    EBX
00562C14    C785 78FEFFFF 0>MOV   DWORD PTR SS:, 1
00562C1E    33FF            XOR   EDI, EDI
00562C20    B8 0F000000   MOV   EAX, 0F
00562C25    3BF8            CMP   EDI, EAX
00562C27    7F 37         JG      SHORT 00562C60
00562C29    89BD 14FFFFFF   MOV   DWORD PTR SS:, EDI
00562C2F    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 3
00562C39    8D4D 84         LEA   ECX, DWORD PTR SS:
00562C3C    51            PUSH    ECX
00562C3D    8D95 0CFFFFFF   LEA   EDX, DWORD PTR SS:
00562C43    52            PUSH    EDX
00562C44    8D85 4CFFFFFF   LEA   EAX, DWORD PTR SS:
00562C4A    50            PUSH    EAX
00562C4B    FF15 CC104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarXor>]      ; MSVBVM60.__vbaVarXor
00562C51    8BD0            MOV   EDX, EAX
00562C53    8D4D 84         LEA   ECX, DWORD PTR SS:
00562C56    FFD3            CALL    EBX
00562C58    03BD 78FEFFFF   ADD   EDI, DWORD PTR SS:
00562C5E^ EB C0         JMP   SHORT 00562C20
00562C60    C785 14FFFFFF 5>MOV   DWORD PTR SS:, 10C958
00562C6A    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 8003
00562C74    8D4D 84         LEA   ECX, DWORD PTR SS:
00562C77    51            PUSH    ECX
00562C78    8D95 0CFFFFFF   LEA   EDX, DWORD PTR SS:
00562C7E    52            PUSH    EDX
00562C7F    FF15 84114000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarTstEq>]    ; MSVBVM60.__vbaVarTstEq
00562C85    66:85C0         TEST    AX, AX
00562C88    74 15         JE      SHORT 00562C9F
00562C8A    8D45 84         LEA   EAX, DWORD PTR SS:
00562C8D    50            PUSH    EAX
00562C8E    FF15 C4124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaR8Var>]       ; MSVBVM60.__vbaR8Var
00562C94    DD9D 70FFFFFF   FSTP    QWORD PTR SS:
00562C9A    E9 280F0000   JMP   00563BC7
00562C9F    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
00562CA5    85C0            TEST    EAX, EAX
00562CA7^ 0F85 55F9FFFF   JNZ   00562602
00562CAD^ E9 3EF9FFFF   JMP   005625F0
00562CB2    8B85 6CFFFFFF   MOV   EAX, DWORD PTR SS:
00562CB8    85C0            TEST    EAX, EAX
00562CBA^ 0F85 09F8FFFF   JNZ   005624C9
00562CC0^ E9 F2F7FFFF   JMP   005624B7
00562CC5    BF 01000000   MOV   EDI, 1                                    ; <====第4部分算法
00562CCA    89BD 7CFFFFFF   MOV   DWORD PTR SS:, EDI                  ; 初值为1
00562CD0    8B45 E0         MOV   EAX, DWORD PTR SS:
00562CD3    50            PUSH    EAX
00562CD4    FF15 34104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaLenBstr>]   ; MSVBVM60.__vbaLenBstr
00562CDA    8985 6CFEFFFF   MOV   DWORD PTR SS:, EAX
00562CE0    897D 9C         MOV   DWORD PTR SS:, EDI                  ; 循环变量
00562CE3    3BBD 6CFEFFFF   CMP   EDI, DWORD PTR SS:
00562CE9    0F8F 9F000000   JG      00562D8E
00562CEF    C785 54FFFFFF 0>MOV   DWORD PTR SS:, 1
00562CF9    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 2
00562D03    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00562D09    51            PUSH    ECX
00562D0A    57            PUSH    EDI
00562D0B    8B55 E0         MOV   EDX, DWORD PTR SS:
00562D0E    52            PUSH    EDX
00562D0F    FF15 38114000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcMidCharBstr>]   ; 用户名各字符ASIIC
00562D15    8BD0            MOV   EDX, EAX
00562D17    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00562D1D    FFD6            CALL    ESI
00562D1F    50            PUSH    EAX
00562D20    FF15 54104000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcAnsiValueBstr>] ; MSVBVM60.rtcAnsiValueBstr
00562D26    0FBFC0          MOVSX   EAX, AX
00562D29    99            CDQ
00562D2A    33C2            XOR   EAX, EDX
00562D2C    2BC2            SUB   EAX, EDX
00562D2E    0FBFF8          MOVSX   EDI, AX
00562D31    8B45 E0         MOV   EAX, DWORD PTR SS:
00562D34    50            PUSH    EAX
00562D35    FF15 34104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaLenBstr>]   ; MSVBVM60.__vbaLenBstr
00562D3B    0FAFF8          IMUL    EDI, EAX                                    ; ×长度
00562D3E    8BCF            MOV   ECX, EDI
00562D40    8B7D 9C         MOV   EDI, DWORD PTR SS:
00562D43    0FAFCF          IMUL    ECX, EDI                                    ; ×循环变量
00562D46    8B95 7CFFFFFF   MOV   EDX, DWORD PTR SS:
00562D4C    03CA            ADD   ECX, EDX                                    ; +[EBP-84]
00562D4E    898D F4FDFFFF   MOV   DWORD PTR SS:, ECX
00562D54    8B45 AC         MOV   EAX, DWORD PTR SS:                  ; 第2部分
00562D57    50            PUSH    EAX
00562D58    FF15 AC124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaI4Str>]       ; MSVBVM60.__vbaI4Str
00562D5E    3385 F4FDFFFF   XOR   EAX, DWORD PTR SS:               ; 第2部分异或上面结果
00562D64    8985 7CFFFFFF   MOV   DWORD PTR SS:, EAX                  ; 异或结果存入[EBP-84]
00562D6A    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00562D70    FF15 98134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]   ; MSVBVM60.__vbaFreeStr
00562D76    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00562D7C    FF15 20104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>]   ; MSVBVM60.__vbaFreeVar
00562D82    B8 01000000   MOV   EAX, 1
00562D87    03F8            ADD   EDI, EAX
00562D89^ E9 52FFFFFF   JMP   00562CE0                                    ; 循环,得结果F
00562D8E    8B8D 7CFFFFFF   MOV   ECX, DWORD PTR SS:
00562D94    898D 14FFFFFF   MOV   DWORD PTR SS:, ECX
00562D9A    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 3
00562DA4    8D55 84         LEA   EDX, DWORD PTR SS:
00562DA7    52            PUSH    EDX
00562DA8    8D85 0CFFFFFF   LEA   EAX, DWORD PTR SS:
00562DAE    50            PUSH    EAX
00562DAF    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00562DB5    51            PUSH    ECX
00562DB6    FF15 CC104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarXor>]      ; F与前所得结果D异或
00562DBC    8BD0            MOV   EDX, EAX
00562DBE    8D4D 84         LEA   ECX, DWORD PTR SS:
00562DC1    FFD3            CALL    EBX
00562DC3    C785 54FFFFFF 0>MOV   DWORD PTR SS:, 80020004
00562DCD    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 0A
00562DD7    8D95 7CFFFFFF   LEA   EDX, DWORD PTR SS:
00562DDD    8995 14FFFFFF   MOV   DWORD PTR SS:, EDX
00562DE3    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 4003
00562DED    8D85 4CFFFFFF   LEA   EAX, DWORD PTR SS:
00562DF3    50            PUSH    EAX
00562DF4    6A 02         PUSH    2
00562DF6    8D8D 0CFFFFFF   LEA   ECX, DWORD PTR SS:
00562DFC    51            PUSH    ECX
00562DFD    8D95 3CFFFFFF   LEA   EDX, DWORD PTR SS:                  ; F
00562E03    52            PUSH    EDX
00562E04    8B3D 4C114000   MOV   EDI, DWORD PTR DS:[<&MSVBVM60.rtcMidCharVar>; 从第2位起取10位,得G
00562E0A    FFD7            CALL    EDI
00562E0C    8D45 84         LEA   EAX, DWORD PTR SS:
00562E0F    50            PUSH    EAX
00562E10    8D8D 3CFFFFFF   LEA   ECX, DWORD PTR SS:
00562E16    51            PUSH    ECX
00562E17    8D95 2CFFFFFF   LEA   EDX, DWORD PTR SS:
00562E1D    52            PUSH    EDX
00562E1E    FF15 CC104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarXor>]      ; 再与前面结果异或
00562E24    8BD0            MOV   EDX, EAX
00562E26    8D4D 84         LEA   ECX, DWORD PTR SS:
00562E29    FFD3            CALL    EBX
00562E2B    8D85 3CFFFFFF   LEA   EAX, DWORD PTR SS:
00562E31    50            PUSH    EAX
00562E32    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00562E38    51            PUSH    ECX
00562E39    6A 02         PUSH    2
00562E3B    FF15 40104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>] ; MSVBVM60.__vbaFreeVarList
00562E41    83C4 0C         ADD   ESP, 0C
00562E44    C785 54FFFFFF 0>MOV   DWORD PTR SS:, 80020004
00562E4E    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 0A
00562E58    8D95 7CFFFFFF   LEA   EDX, DWORD PTR SS:
00562E5E    8995 14FFFFFF   MOV   DWORD PTR SS:, EDX
00562E64    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 4003
00562E6E    8D85 4CFFFFFF   LEA   EAX, DWORD PTR SS:
00562E74    50            PUSH    EAX
00562E75    6A 03         PUSH    3
00562E77    8D8D 0CFFFFFF   LEA   ECX, DWORD PTR SS:
00562E7D    51            PUSH    ECX
00562E7E    8D95 3CFFFFFF   LEA   EDX, DWORD PTR SS:
00562E84    52            PUSH    EDX
00562E85    FFD7            CALL    EDI                                       ; F从第3位起取10位
00562E87    8D45 84         LEA   EAX, DWORD PTR SS:
00562E8A    50            PUSH    EAX
00562E8B    8D8D 3CFFFFFF   LEA   ECX, DWORD PTR SS:
00562E91    51            PUSH    ECX
00562E92    8D95 2CFFFFFF   LEA   EDX, DWORD PTR SS:
00562E98    52            PUSH    EDX
00562E99    FF15 CC104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarXor>]      ; 异或
00562E9F    8BD0            MOV   EDX, EAX
00562EA1    8D4D 84         LEA   ECX, DWORD PTR SS:
00562EA4    FFD3            CALL    EBX
00562EA6    8D85 3CFFFFFF   LEA   EAX, DWORD PTR SS:
00562EAC    50            PUSH    EAX
00562EAD    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00562EB3    51            PUSH    ECX
00562EB4    6A 02         PUSH    2
00562EB6    FF15 40104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>] ; MSVBVM60.__vbaFreeVarList
00562EBC    83C4 0C         ADD   ESP, 0C
00562EBF    C785 54FFFFFF 0>MOV   DWORD PTR SS:, 1
00562EC9    C785 4CFFFFFF 0>MOV   DWORD PTR SS:, 2
00562ED3    8D95 7CFFFFFF   LEA   EDX, DWORD PTR SS:
00562ED9    8995 14FFFFFF   MOV   DWORD PTR SS:, EDX
00562EDF    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 4003
00562EE9    8D85 4CFFFFFF   LEA   EAX, DWORD PTR SS:
00562EEF    50            PUSH    EAX
00562EF0    6A 01         PUSH    1
00562EF2    8D8D 0CFFFFFF   LEA   ECX, DWORD PTR SS:
00562EF8    51            PUSH    ECX
00562EF9    8D95 3CFFFFFF   LEA   EDX, DWORD PTR SS:
00562EFF    52            PUSH    EDX
00562F00    FFD7            CALL    EDI                                       ; F从第1位起取1位
00562F02    8D45 84         LEA   EAX, DWORD PTR SS:
00562F05    50            PUSH    EAX
00562F06    8D8D 3CFFFFFF   LEA   ECX, DWORD PTR SS:
00562F0C    51            PUSH    ECX
00562F0D    8D95 2CFFFFFF   LEA   EDX, DWORD PTR SS:
00562F13    52            PUSH    EDX
00562F14    FF15 CC104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarXor>]      ; 异或
00562F1A    8BD0            MOV   EDX, EAX
00562F1C    8D4D 84         LEA   ECX, DWORD PTR SS:
00562F1F    FFD3            CALL    EBX
00562F21    8D85 3CFFFFFF   LEA   EAX, DWORD PTR SS:
00562F27    50            PUSH    EAX
00562F28    8D8D 4CFFFFFF   LEA   ECX, DWORD PTR SS:
00562F2E    51            PUSH    ECX
00562F2F    6A 02         PUSH    2
00562F31    FF15 40104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>] ; MSVBVM60.__vbaFreeVarList
00562F37    83C4 0C         ADD   ESP, 0C
00562F3A    68 142C4200   PUSH    00422C14                                    ; UNICODE "&H"
00562F3F    8B55 A4         MOV   EDX, DWORD PTR SS:                  ; 注册码第4部分
00562F42    52            PUSH    EDX
00562F43    FF15 04124000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcStrReverse>]    ; 反转
00562F49    8BD0            MOV   EDX, EAX
00562F4B    8D8D 68FFFFFF   LEA   ECX, DWORD PTR SS:
00562F51    FFD6            CALL    ESI
00562F53    50            PUSH    EAX
00562F54    8B1D 7C104000   MOV   EBX, DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>] ; MSVBVM60.__vbaStrCat
00562F5A    FFD3            CALL    EBX
00562F5C    8BD0            MOV   EDX, EAX
00562F5E    8D8D 64FFFFFF   LEA   ECX, DWORD PTR SS:
00562F64    FFD6            CALL    ESI
00562F66    50            PUSH    EAX
00562F67    68 C49E4200   PUSH    00429EC4
00562F6C    FFD3            CALL    EBX
00562F6E    8BD0            MOV   EDX, EAX
00562F70    8D8D 60FFFFFF   LEA   ECX, DWORD PTR SS:
00562F76    FFD6            CALL    ESI
00562F78    50            PUSH    EAX
00562F79    FF15 A0134000   CALL    DWORD PTR DS:[<&MSVBVM60.rtcR8ValFromBstr>] ; MSVBVM60.rtcR8ValFromBstr
00562F7F    FF15 18134000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFpI4>]      ; MSVBVM60.__vbaFpI4
00562F85    3385 7CFFFFFF   XOR   EAX, DWORD PTR SS:                  ; 与F异或
00562F8B    8985 14FFFFFF   MOV   DWORD PTR SS:, EAX
00562F91    C785 0CFFFFFF 0>MOV   DWORD PTR SS:, 3
00562F9B    8D85 0CFFFFFF   LEA   EAX, DWORD PTR SS:
00562FA1    50            PUSH    EAX
00562FA2    8D4D 84         LEA   ECX, DWORD PTR SS:
00562FA5    51            PUSH    ECX
00562FA6    8D95 4CFFFFFF   LEA   EDX, DWORD PTR SS:
00562FAC    52            PUSH    EDX
00562FAD    FF15 CC104000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaVarXor>]      ; MSVBVM60.__vbaVarXor
00562FB3    50            PUSH    EAX
00562FB4    FF15 24114000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaBoolVarNull>] ; MSVBVM60.__vbaBoolVarNull
00562FBA    66:8BD8         MOV   BX, AX
00562FBD    8D85 60FFFFFF   LEA   EAX, DWORD PTR SS:
00562FC3    50            PUSH    EAX
00562FC4    8D8D 64FFFFFF   LEA   ECX, DWORD PTR SS:
00562FCA    51            PUSH    ECX
00562FCB    8D95 68FFFFFF   LEA   EDX, DWORD PTR SS:
00562FD1    52            PUSH    EDX
00562FD2    6A 03         PUSH    3
00562FD4    FF15 B4124000   CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFreeStrList>] ; MSVBVM60.__vbaFreeStrList
00562FDA    83C4 10         ADD   ESP, 10
00562FDD    66:85DB         TEST    BX, BX
00562FE0    0F84 87050000   JE      0056356D                                    ; 异或结果为0就跳,要跳
......
4.小结
从上面这段程序可看出,运行程序后它先判断自己有没有被脱壳,被脱壳就调用“快速关机”功能(这本身是该软件的一个功能),然后再计算机器码,并将其变形后写入注册表中,然后查找有没有注册文件X:\FXSYS\FXSYS.KEY,有就对其进行解密(xor 0xfb)并将解密结果存入临时文件X:\FXSYS\FXSYS.TMP中,然后打开FXSYS.TMP文件,将其中的4行内容读出分别进行判断:
第1行=
第2行=机器码
第3行=用户名
第4行=注册码
5.算法总结
注册码格式:第4部分-第3部分-第2部分-第1部分
1)第1部分与0x22b9(十进制数8889)比较大于等于就行,即第1部分≥22B9
2)第2部分要同时满足005624AB和005626B5两处就必须是大于0xC379(十进制数51001)的数
3)机器码前3字符的ASIIC码累加再加1后与机器码从第4位起后的各位字符ASIIC码累乘,得数A
4)A开方取结果右边5位(注意精度,好象是LONG)得数B,A开方结果×11001取整得数C
5)(C XOR D XOR 第2部分)-第2部分,得数D
6)(用户名各字符ASIIC码×所在位数的平方+用户名长度)XOR 第2部分,结果替换“用户名长度”后循环,直到用户名所有字符取完,得结果E
7)E×2转为十六进制数后反转即为注册码第3部分
8)(用户名各字符ASIIC码×用户名长度×所在位数+1)XOR 第2部分,结果替换“1”后循环,直到用户名所有字符取完,得结果F
9)D与F第2位起的10位数异或,再与F第3位起的10位数异或,再与F的第1位数异或,结果转为十六进制数后反转即为注册码的第4部分








--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!


                                                       2007年06月05日 10:42:23

[ 本帖最后由 dewar 于 2007-6-7 11:36 编辑 ]

wan 发表于 2007-6-5 13:51:23

厲害,有時間再慢慢跟著練練

qslfz 发表于 2007-6-7 21:20:53

佩服!!!这软件都搞定了!!!

qslfz 发表于 2007-6-16 21:30:44

老大,看雪不让发注册机,您就发发慈悲在PYG首发下注册机啊!!!

zxwbj 发表于 2007-9-9 19:43:57

厲害,有時間再慢慢跟著練練

dewar 发表于 2007-12-4 20:38:01

出新版本了2.81.
这里热情放送注册号,限10名
要的贴出机器码和注册名

xzqd 发表于 2007-12-5 10:36:16

学习了,有时间试试

=天= 发表于 2007-12-6 15:42:58

最新版本貌拟2.82了..
不过算法好像又改了=.=||

crystalsnail 发表于 2007-12-15 11:19:49

机器码:319145
用户名:crystalsnail
谢谢提供注册码!

dewar 发表于 2007-12-17 11:25:04

原帖由 crystalsnail 于 2007-12-15 11:19 发表 https://www.chinapyg.com/images/common/back.gif
机器码:319145
用户名:crystalsnail
谢谢提供注册码!
注册码:3F5F6H3-E3723-3C73A-27XH
页: [1] 2 3 4
查看完整版本: XX桌面日历2.53算法分析