135HACK 发表于 2007-9-15 00:36:33

XX桌面日历2.53算法分析

作者:dewar

【文章标题】: 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

135HACK 发表于 2007-9-15 00:37:28

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部分

hmily 发表于 2007-9-19 08:45:20

好详细。。。。。。。。。。。

kiss-you 发表于 2007-9-19 09:49:12

楼主直接写个注册机就好了。

路过人间 发表于 2008-2-15 21:35:54

分析得很清楚啊 现在新版的算法又变了 我怎么总是跟到死循环里啊 帮忙指点一下 谢谢了
页: [1]
查看完整版本: XX桌面日历2.53算法分析