飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3570|回复: 5

[原创] **背词王 3.7算法分析

[复制链接]

该用户从未签到

发表于 2008-8-7 10:36:21 | 显示全部楼层 |阅读模式
【破文标题】**背词王 3.7算法分析
【破文作者】dgrzh(交响诗篇)
破解工具】OD PEiD
【破解平台】XP SP2
【软件名称】**背词王 3.7
【保护方式】序列号
【破解声明】新手,不对之处还请大家多多指教~
【破解过程】PEiD查没壳,编程语言Microsoft Visual Basic 5.0 / 6.0

运行程序,右健点-菜单-用户设置-版本注册  显示:
       前码:      后码:
注册  91275844    12345678(前码是程序自动显示的,输入12345678假后码)
                   注册按钮<-点这里(提示:注册码错误)
用字符串查找,没有找到任何可用的线索,于是查找-当前模块中的名称,找到MSVBVM60.__vbaStrCmp,在每个参考上设置断点。
下好断点,F9运行                                               
0068382F     .  FF15 C0104000    call dword ptr ds:[<&MSVBVM60.__vbaStrCmp>]      ;  断在这里,然后一路F8      
00683835     .  8BF8             mov edi,eax
00683837     .  8D95 C4FEFFFF    lea edx,dword ptr ss:[ebp-13C]                  
0068383D     .  F7DF             neg edi
0068383F     .  8D85 C8FEFFFF    lea eax,dword ptr ss:[ebp-138]
00683845     .  52               push edx
00683846     .  1BFF             sbb edi,edi
00683848     .  8D8D CCFEFFFF    lea ecx,dword ptr ss:[ebp-134]
0068384E     .  50               push eax
0068384F     .  51               push ecx
00683850     .  F7DF             neg edi
00683852     .  6A 03            push 3
00683854     .  F7DF             neg edi
省略代码
...................................................................................
...................................................................................
7339DE99      8945 E4            mov dword ptr ss:[ebp-1C],eax
7339DE9C      85C0               test eax,eax
7339DE9E      7C 51              jl short MSVBVM60.7339DEF1
7339DEA0      6A 00              push 0
7339DEA2      6A 00              push 0
7339DEA4      68 69100000        push 1069
7339DEA9      FF15 C8103973      call dword ptr ds:[<&KERNEL32.GetCurrentThreadId>; kernel32.GetCurrentThreadId
7339DEAF      50                 push eax
7339DEB0      FF15 28163973      call dword ptr ds:[<&USER32.PostThreadMessageA>] ; USER32.PostThreadMessageA
7339DEB6      8D45 9C            lea eax,dword ptr ss:[ebp-64]
7339DEB9      50                 push eax
7339DEBA      8BCE               mov ecx,esi
7339DEBC      E8 6159FFFF        call MSVBVM60.73393822
7339DEC1      85C0               test eax,eax
7339DEC3      74 14              je short MSVBVM60.7339DED9
7339DEC5      8B45 9C            mov eax,dword ptr ss:[ebp-64]
7339DEC8      8B88 20050000      mov ecx,dword ptr ds:[eax+520]
7339DECE      85C9               test ecx,ecx
7339DED0      74 07              je short MSVBVM60.7339DED9
7339DED2      6A FF              push -1
7339DED4      E8 366C0000        call MSVBVM60.733A4B0F                              ;  F8来到这里程序运行起来。
右健点-菜单-用户设置-版本注册  显示:
       前码:      后码:
注册  91275844    12345678(前码是程序自动显示的,输入12345678假后码)
                   注册按钮<-点这里
........................................................................................................
00687667   .  FF15 C0104000 call    dword ptr [<&MSVBVM60.__vbaStrCm>;  MSVBVM60.__vbaStrCmp  断在这里
0068766D   .  8BF0          mov     esi, eax
0068766F   .  8D4D D8       lea     ecx, dword ptr [ebp-28]
00687672   .  F7DE          neg     esi
00687674   .  1BF6          sbb     esi, esi
00687676   .  F7DE          neg     esi
00687678   .  F7DE          neg     esi
0068767A   .  FF15 B8114000 call    dword ptr [<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStr
......................................................................................................
看堆栈显示:
0012D7EC   001F3C44  UNICODE "15527657"
0012D7F0   001F3BE4  UNICODE "12345678"
明码比较,关键地方找到了。其实下好断点,按两次F9也会断在这里,但是程序就没有响应。OD就无法继续调试。
取消00687667处的断点,来到段首
006872A6     .  68 96204000      push <jmp.&MSVBVM60.__vbaExceptHandler>   这里下F2断点
下好断点后,重载OD,F9一次断在0068382F这里,一路F8重复上面过程,来到7339DED4程序运行起来
输入假后码,点注册后断在006872A6这里(其实在按一次F9也会断在这里,但是程序就没有响应。不明白为什么。)
====================================================
====================================================
006872A6     .  68 96204000      push <jmp.&MSVBVM60.__vbaExceptHandler>          ; 断在这里
006872AB     .  64:A1 00000000   mov eax,dword ptr fs:[0]
006872B1     .  50               push eax
006872B2     .  64:8925 00000000 mov dword ptr fs:[0],esp
006872B9     .  81EC 28010000    sub esp,128
006872BF     .  53               push ebx
006872C0     .  56               push esi
006872C1     .  57               push edi
006872C2     .  8965 F8          mov dword ptr ss:[ebp-8],esp
006872C5     .  C745 FC A01D4000 mov dword ptr ss:[ebp-4],Super背?00401DA0
006872CC     .  A1 D0D06800      mov eax,dword ptr ds:[68D0D0]
006872D1     .  33FF             xor edi,edi
006872D3     .  3BC7             cmp eax,edi                                      ;  (初始化 cpu 选择状态)
006872D5     .  897D E8          mov dword ptr ss:[ebp-18],edi
006872D8     .  897D E4          mov dword ptr ss:[ebp-1C],edi
006872DB     .  897D D8          mov dword ptr ss:[ebp-28],edi
006872DE     .  897D D4          mov dword ptr ss:[ebp-2C],edi
006872E1     .  897D D0          mov dword ptr ss:[ebp-30],edi
006872E4     .  897D C0          mov dword ptr ss:[ebp-40],edi
006872E7     .  897D B0          mov dword ptr ss:[ebp-50],edi
006872EA     .  897D A0          mov dword ptr ss:[ebp-60],edi
006872ED     .  897D 90          mov dword ptr ss:[ebp-70],edi
006872F0     .  897D 80          mov dword ptr ss:[ebp-80],edi
006872F3     .  89BD 70FFFFFF    mov dword ptr ss:[ebp-90],edi
006872F9     .  89BD 60FFFFFF    mov dword ptr ss:[ebp-A0],edi
006872FF     .  89BD 50FFFFFF    mov dword ptr ss:[ebp-B0],edi
00687305     .  89BD 40FFFFFF    mov dword ptr ss:[ebp-C0],edi
0068730B     .  89BD 20FFFFFF    mov dword ptr ss:[ebp-E0],edi
00687311     .  89BD F0FEFFFF    mov dword ptr ss:[ebp-110],edi
00687317     .  75 10            jnz short Super背?00687329
00687319     .  68 D0D06800      push Super背?0068D0D0
0068731E     .  68 60FF4200      push Super背?0042FF60
00687323     .  FF15 48114000    call dword ptr ds:[<&MSVBVM60.__vbaNew2>]        ;  MSVBVM60.__vbaNew2
00687329     >  8B35 D0D06800    mov esi,dword ptr ds:[68D0D0]
0068732F     .  8D4D D8          lea ecx,dword ptr ss:[ebp-28]
00687332     .  51               push ecx
00687333     .  56               push esi
00687334     .  8B06             mov eax,dword ptr ds:[esi]
00687336     .  FF90 F8060000    call dword ptr ds:[eax+6F8]                       ;  将硬盘序列号转换为前码91275844
0068733C     .  3BC7             cmp eax,edi
0068733E     .  DBE2             fclex
00687340     .  7D 12            jge short Super背?00687354
00687342     .  68 F8060000      push 6F8
00687347     .  68 B8344300      push Super背?004334B8
0068734C     .  56               push esi
0068734D     .  50               push eax
0068734E     .  FF15 5C104000    call dword ptr ds:[<&MSVBVM60.__vbaHresultCheckO>;  MSVBVM60.__vbaHresultCheckObj
00687354     >  8B55 D8          mov edx,dword ptr ss:[ebp-28]                    ;  前码
00687357     .  8D4D E4          lea ecx,dword ptr ss:[ebp-1C]
0068735A     .  897D D8          mov dword ptr ss:[ebp-28],edi
0068735D     .  FF15 94114000    call dword ptr ds:[<&MSVBVM60.__vbaStrMove>]     ;  MSVBVM60.__vbaStrMove
00687363     .  8B55 E4          mov edx,dword ptr ss:[ebp-1C]                    ;  前码
00687366     .  52               push edx
00687367     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]     ;  MSVBVM60.__vbaLenBstr
0068736D     .  8BC8             mov ecx,eax                                      ;  前码长度
0068736F     .  FF15 C8104000    call dword ptr ds:[<&MSVBVM60.__vbaI2I4>]        ;  MSVBVM60.__vbaI2I4
00687375     .  8B1D 3C104000    mov ebx,dword ptr ds:[<&MSVBVM60.#516>]          ;  MSVBVM60.rtcAnsiValueBstr
0068737B     .  8985 DCFEFFFF    mov dword ptr ss:[ebp-124],eax
00687381     .  BE 01000000      mov esi,1
00687386     >  66:3BB5 DCFEFFFF cmp si,word ptr ss:[ebp-124]                     ;   计数值同前码长度比较
0068738D     .  0F8F 87000000    jg Super背?0068741A                              ;   计数值大于前码长度跳出循环
00687393     .  8D45 E4          lea eax,dword ptr ss:[ebp-1C]
00687396     .  8D4D C0          lea ecx,dword ptr ss:[ebp-40]
00687399     .  0FBFD6           movsx edx,si
0068739C     .  8985 48FFFFFF    mov dword ptr ss:[ebp-B8],eax
006873A2     .  51               push ecx
006873A3     .  8D85 40FFFFFF    lea eax,dword ptr ss:[ebp-C0]
006873A9     .  52               push edx
006873AA     .  8D4D B0          lea ecx,dword ptr ss:[ebp-50]
006873AD     .  50               push eax
006873AE     .  51               push ecx
006873AF     .  C745 C8 01000000 mov dword ptr ss:[ebp-38],1
006873B6     .  C745 C0 02000000 mov dword ptr ss:[ebp-40],2
006873BD     .  C785 40FFFFFF 08>mov dword ptr ss:[ebp-C0],4008
006873C7     .  FF15 AC104000    call dword ptr ds:[<&MSVBVM60.#632>]             ;  MSVBVM60.rtcMidCharVar
006873CD     .  8D55 B0          lea edx,dword ptr ss:[ebp-50]
006873D0     .  8D45 D8          lea eax,dword ptr ss:[ebp-28]
006873D3     .  52               push edx
006873D4     .  50               push eax
006873D5     .  FF15 30114000    call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]   ;  逐位取前码的值并转换为它的ASCII码值
006873DB     .  50               push eax                                         ;  
006873DC     .  FFD3             call ebx                                         ;  
006873DE     .  66:03C7          add ax,di                                        ;  将每位ASCII码值累加结果送ax
006873E1     .  8D4D D8          lea ecx,dword ptr ss:[ebp-28]
006873E4     .  0F80 28030000    jo Super背?00687712
006873EA     .  8BF8             mov edi,eax                                      ;  累加结果
006873EC     .  FF15 B8114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]     ;  MSVBVM60.__vbaFreeStr
006873F2     .  8D4D B0          lea ecx,dword ptr ss:[ebp-50]
006873F5     .  8D55 C0          lea edx,dword ptr ss:[ebp-40]
006873F8     .  51               push ecx
006873F9     .  52               push edx
006873FA     .  6A 02            push 2
006873FC     .  FF15 30104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>] ;  MSVBVM60.__vbaFreeVarList
00687402     .  B8 01000000      mov eax,1                                        ;   计数器赋值为1
00687407     .  83C4 0C          add esp,0C
0068740A     .  66:03C6          add ax,si                                        ;  每循环一次计数值加1
0068740D     .  0F80 FF020000    jo Super背?00687712
00687413     .  8BF0             mov esi,eax                                      ;  
00687415     .^ E9 6CFFFFFF      jmp Super背?00687386
0068741A     >  66:8BC7          mov ax,di                                        ;  累加结果
0068741D     .  66:B9 0900       mov cx,9                                         ;  
00687421     .  66:6BC0 13       imul ax,ax,13                                       累加结果乘以13送ax
00687425     .  0F80 E7020000    jo Super背?00687712
0068742B     .  66:99            cwd
0068742D     .  66:F7F9          idiv cx                                          ;  
00687430     .  8955 DC          mov dword ptr ss:[ebp-24],edx                       ax除9取余存入ss:[ebp-24]中
00687433     .  8B55 E4          mov edx,dword ptr ss:[ebp-1C]
00687436     .  52               push edx                                         ;  前码
00687437     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]     ;  前码长度
0068743D     .  8BC8             mov ecx,eax                                      ;  
0068743F     .  FF15 C8104000    call dword ptr ds:[<&MSVBVM60.__vbaI2I4>]        ;  MSVBVM60.__vbaI2I4
00687445     .  8985 D4FEFFFF    mov dword ptr ss:[ebp-12C],eax
0068744B     .  BE 01000000      mov esi,1
00687450     >  66:3BB5 D4FEFFFF cmp si,word ptr ss:[ebp-12C]                     ;  计数值同前码长度比较
00687457     .  0F8F A9010000    jg Super背?00687606                              ;   大于前码长度跳出循环
0068745D     .  8B45 E8          mov eax,dword ptr ss:[ebp-18]
00687460     .  8D4D E4          lea ecx,dword ptr ss:[ebp-1C]
00687463     .  0FBFFE           movsx edi,si
00687466     .  8D55 C0          lea edx,dword ptr ss:[ebp-40]
00687469     .  8985 F8FEFFFF    mov dword ptr ss:[ebp-108],eax
0068746F     .  898D 48FFFFFF    mov dword ptr ss:[ebp-B8],ecx
00687475     .  52               push edx
00687476     .  8D85 40FFFFFF    lea eax,dword ptr ss:[ebp-C0]
0068747C     .  57               push edi
0068747D     .  8D4D B0          lea ecx,dword ptr ss:[ebp-50]
00687480     .  50               push eax
00687481     .  51               push ecx
00687482     .  C785 F0FEFFFF 08>mov dword ptr ss:[ebp-110],8
0068748C     .  C745 C8 01000000 mov dword ptr ss:[ebp-38],1
00687493     .  C745 C0 02000000 mov dword ptr ss:[ebp-40],2
0068749A     .  C785 40FFFFFF 08>mov dword ptr ss:[ebp-C0],4008
006874A4     .  FF15 AC104000    call dword ptr ds:[<&MSVBVM60.#632>]             ;  MSVBVM60.rtcMidCharVar
006874AA     .  8D55 E4          lea edx,dword ptr ss:[ebp-1C]
006874AD     .  8D45 A0          lea eax,dword ptr ss:[ebp-60]
006874B0     .  8995 28FFFFFF    mov dword ptr ss:[ebp-D8],edx
006874B6     .  50               push eax
006874B7     .  8D8D 20FFFFFF    lea ecx,dword ptr ss:[ebp-E0]
006874BD     .  57               push edi
006874BE     .  8D55 90          lea edx,dword ptr ss:[ebp-70]
006874C1     .  51               push ecx
006874C2     .  52               push edx
006874C3     .  C745 A8 01000000 mov dword ptr ss:[ebp-58],1
006874CA     .  C745 A0 02000000 mov dword ptr ss:[ebp-60],2
006874D1     .  C785 20FFFFFF 08>mov dword ptr ss:[ebp-E0],4008
006874DB     .  FF15 AC104000    call dword ptr ds:[<&MSVBVM60.#632>]             ;  MSVBVM60.rtcMidCharVar
006874E1     .  8B3D 30114000    mov edi,dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>>;  MSVBVM60.__vbaStrVarVal
006874E7     .  8D45 90          lea eax,dword ptr ss:[ebp-70]
006874EA     .  8D4D D4          lea ecx,dword ptr ss:[ebp-2C]
006874ED     .  50               push eax
006874EE     .  51               push ecx
006874EF     .  FFD7             call edi                                         ;  逐位取前码的ASCII码值
006874F1     .  50               push eax                                         ;  
006874F2     .  FFD3             call ebx
006874F4     .  66:8BD0          mov dx,ax                                        ;  
006874F7     .  8D45 B0          lea eax,dword ptr ss:[ebp-50]
006874FA     .  8D4D D8          lea ecx,dword ptr ss:[ebp-28]
006874FD     .  50               push eax
006874FE     .  51               push ecx
006874FF     .  66:8995 CAFEFFFF mov word ptr ss:[ebp-136],dx                     ;  
00687506     .  FFD7             call edi                                         ;  <&MSVBVM60.__vbaStrVarVal>
00687508     .  50               push eax                                         ;  
00687509     .  FFD3             call ebx
0068750B     .  66:8B8D CAFEFFFF mov cx,word ptr ss:[ebp-136]                     ;  
00687512     .  C745 80 02000000 mov dword ptr ss:[ebp-80],2
00687519     .  66:0FAFC8        imul cx,ax                                       ;  将取出的ASCII码值自乘
0068751D     .  66:8BC6          mov ax,si                                        ;  计数值当前值
00687520     .  0F80 EC010000    jo Super背?00687712
00687526     .  66:6BC0 03       imul ax,ax,3                                     ;  当前值乘3送ax
0068752A     .  0F80 E2010000    jo Super背?00687712
00687530     .  66:99            cwd
00687532     .  66:2BC2          sub ax,dx
00687535     .  66:D1F8          sar ax,1                                         ;  ax除2得到商
00687538     .  66:03C8          add cx,ax                                        ;  自乘值加商送cx
0068753B     .  0F80 D1010000    jo Super背?00687712
00687541     .  66:034D DC       add cx,word ptr ss:[ebp-24]                      ;  cx加上ss:[ebp-24]中的值
00687545     .  0F80 C7010000    jo Super背?00687712
0068754B     .  66:8BC1          mov ax,cx
0068754E     .  66:B9 0A00       mov cx,0A
00687552     .  66:99            cwd
00687554     .  66:F7F9          idiv cx                                          ;  将每一位结果除A取余
00687557     .  8D85 70FFFFFF    lea eax,dword ptr ss:[ebp-90]
0068755D     .  66:8955 88       mov word ptr ss:[ebp-78],dx
00687561     .  8D55 80          lea edx,dword ptr ss:[ebp-80]
00687564     .  52               push edx
00687565     .  50               push eax
00687566     .  FF15 7C114000    call dword ptr ds:[<&MSVBVM60.#613>]             ;  
0068756C     .  8D8D 70FFFFFF    lea ecx,dword ptr ss:[ebp-90]
00687572     .  8D95 60FFFFFF    lea edx,dword ptr ss:[ebp-A0]
00687578     .  51               push ecx
00687579     .  52               push edx
0068757A     .  FF15 A4104000    call dword ptr ds:[<&MSVBVM60.#520>]             ;  MSVBVM60.rtcTrimVar
00687580     .  8D85 F0FEFFFF    lea eax,dword ptr ss:[ebp-110]
00687586     .  8D8D 60FFFFFF    lea ecx,dword ptr ss:[ebp-A0]
0068758C     .  50               push eax
0068758D     .  51               push ecx
0068758E     .  8D95 50FFFFFF    lea edx,dword ptr ss:[ebp-B0]
00687594     .  52               push edx
00687595     .  FF15 34114000    call dword ptr ds:[<&MSVBVM60.__vbaVarCat>]      ;  MSVBVM60.__vbaVarCat
0068759B     .  50               push eax                                         ;  
0068759C     .  FF15 20104000    call dword ptr ds:[<&MSVBVM60.__vbaStrVarMove>]  ;  将余数连接起来就得到真正后码
006875A2     .  8BD0             mov edx,eax                                      ;  
006875A4     .  8D4D E8          lea ecx,dword ptr ss:[ebp-18]
006875A7     .  FF15 94114000    call dword ptr ds:[<&MSVBVM60.__vbaStrMove>]     ;  MSVBVM60.__vbaStrMove
006875AD     .  8D45 D4          lea eax,dword ptr ss:[ebp-2C]
006875B0     .  8D4D D8          lea ecx,dword ptr ss:[ebp-28]
006875B3     .  50               push eax
006875B4     .  51               push ecx
006875B5     .  6A 02            push 2
006875B7     .  FF15 58114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>] ;  
006875BD     .  8D95 50FFFFFF    lea edx,dword ptr ss:[ebp-B0]
006875C3     .  8D85 60FFFFFF    lea eax,dword ptr ss:[ebp-A0]
006875C9     .  52               push edx
006875CA     .  8D8D 70FFFFFF    lea ecx,dword ptr ss:[ebp-90]
006875D0     .  50               push eax
006875D1     .  8D55 80          lea edx,dword ptr ss:[ebp-80]
006875D4     .  51               push ecx
006875D5     .  8D45 90          lea eax,dword ptr ss:[ebp-70]
006875D8     .  52               push edx
006875D9     .  8D4D A0          lea ecx,dword ptr ss:[ebp-60]
006875DC     .  50               push eax
006875DD     .  8D55 B0          lea edx,dword ptr ss:[ebp-50]
006875E0     .  51               push ecx
006875E1     .  8D45 C0          lea eax,dword ptr ss:[ebp-40]
006875E4     .  52               push edx
006875E5     .  50               push eax
006875E6     .  6A 08            push 8
006875E8     .  FF15 30104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>] ;  获得注册码长度
006875EE     .  B8 01000000      mov eax,1                                        ;  计数器赋值为1
006875F3     .  83C4 30          add esp,30
006875F6     .  66:03C6          add ax,si                                        ;  每循环一次计数值加1
006875F9     .  0F80 13010000    jo Super背?00687712
006875FF     .  8BF0             mov esi,eax                                      ;  
00687601     .^ E9 4AFEFFFF      jmp Super背?00687450                              ;  
00687606     >  A1 D0D06800      mov eax,dword ptr ds:[68D0D0]
0068760B     .  85C0             test eax,eax
0068760D     .  75 15            jnz short Super背?00687624
0068760F     .  68 D0D06800      push Super背?0068D0D0
00687614     .  68 60FF4200      push Super背?0042FF60
00687619     .  FF15 48114000    call dword ptr ds:[<&MSVBVM60.__vbaNew2>]        ;  MSVBVM60.__vbaNew2
0068761F     .  A1 D0D06800      mov eax,dword ptr ds:[68D0D0]
00687624     >  8B08             mov ecx,dword ptr ds:[eax]
00687626     .  50               push eax
00687627     .  FF91 14030000    call dword ptr ds:[ecx+314]
0068762D     .  8D55 D0          lea edx,dword ptr ss:[ebp-30]
00687630     .  50               push eax
00687631     .  52               push edx
00687632     .  FF15 84104000    call dword ptr ds:[<&MSVBVM60.__vbaObjSet>]      ;  MSVBVM60.__vbaObjSet
00687638     .  8BF0             mov esi,eax
0068763A     .  8D4D D8          lea ecx,dword ptr ss:[ebp-28]
0068763D     .  51               push ecx
0068763E     .  56               push esi
0068763F     .  8B06             mov eax,dword ptr ds:[esi]
00687641     .  FF90 A0000000    call dword ptr ds:[eax+A0]
00687647     .  85C0             test eax,eax
00687649     .  DBE2             fclex
0068764B     .  7D 12            jge short Super背?0068765F
0068764D     .  68 A0000000      push 0A0
00687652     .  68 543E4300      push Super背?00433E54
00687657     .  56               push esi
00687658     .  50               push eax
00687659     .  FF15 5C104000    call dword ptr ds:[<&MSVBVM60.__vbaHresultCheckO>;  MSVBVM60.__vbaHresultCheckObj
0068765F     >  8B55 D8          mov edx,dword ptr ss:[ebp-28]                    ;   12345678
00687662     .  8B45 E8          mov eax,dword ptr ss:[ebp-18]                    ;   15527657
00687665     .  52               push edx
00687666     .  50               push eax
00687667     .  FF15 C0104000    call dword ptr ds:[<&MSVBVM60.__vbaStrCmp>]      ;  注册码后码真假比较
0068766D     .  8BF0             mov esi,eax                                      ;   不等eax=-1
0068766F     .  8D4D D8          lea ecx,dword ptr ss:[ebp-28]
00687672     .  F7DE             neg esi
00687674     .  1BF6             sbb esi,esi
00687676     .  F7DE             neg esi
00687678     .  F7DE             neg esi
0068767A     .  FF15 B8114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]     ;  MSVBVM60.__vbaFreeStr
00687680     .  8D4D D0          lea ecx,dword ptr ss:[ebp-30]
00687683     .  FF15 BC114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeObj>]     ;  MSVBVM60.__vbaFreeObj
00687689     .  66:F7DE          neg si
0068768C     .  1BF6             sbb esi,esi
0068768E     .  68 FD766800      push Super背?006876FD
00687693     .  F7DE             neg esi
00687695     .  4E               dec esi
00687696     .  8975 E0          mov dword ptr ss:[ebp-20],esi
00687699     .  EB 51            jmp short Super背?006876EC
0068769B     .  8D4D D4          lea ecx,dword ptr ss:[ebp-2C]
0068769E     .  8D55 D8          lea edx,dword ptr ss:[ebp-28]
006876A1     .  51               push ecx
006876A2     .  52               push edx
006876A3     .  6A 02            push 2
006876A5     .  FF15 58114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>] ;  MSVBVM60.__vbaFreeStrList
006876AB     .  83C4 0C          add esp,0C
006876AE     .  8D4D D0          lea ecx,dword ptr ss:[ebp-30]
006876B1     .  FF15 BC114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeObj>]     ;  MSVBVM60.__vbaFreeObj
006876B7     .  8D85 50FFFFFF    lea eax,dword ptr ss:[ebp-B0]
006876BD     .  8D8D 60FFFFFF    lea ecx,dword ptr ss:[ebp-A0]
006876C3     .  50               push eax
006876C4     .  8D95 70FFFFFF    lea edx,dword ptr ss:[ebp-90]
006876CA     .  51               push ecx
006876CB     .  8D45 80          lea eax,dword ptr ss:[ebp-80]
006876CE     .  52               push edx
006876CF     .  8D4D 90          lea ecx,dword ptr ss:[ebp-70]
006876D2     .  50               push eax
006876D3     .  8D55 A0          lea edx,dword ptr ss:[ebp-60]
006876D6     .  51               push ecx
006876D7     .  8D45 B0          lea eax,dword ptr ss:[ebp-50]
006876DA     .  52               push edx
006876DB     .  8D4D C0          lea ecx,dword ptr ss:[ebp-40]
006876DE     .  50               push eax
006876DF     .  51               push ecx
006876E0     .  6A 08            push 8
006876E2     .  FF15 30104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>] ;  MSVBVM60.__vbaFreeVarList
006876E8     .  83C4 24          add esp,24
006876EB     .  C3               retn
006876EC     >  8B35 B8114000    mov esi,dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]  ;  MSVBVM60.__vbaFreeStr
006876F2     .  8D4D E8          lea ecx,dword ptr ss:[ebp-18]
006876F5     .  FFD6             call esi                                         ;  <&MSVBVM60.__vbaFreeStr>
006876F7     .  8D4D E4          lea ecx,dword ptr ss:[ebp-1C]
006876FA     .  FFD6             call esi                                         ;  <&MSVBVM60.__vbaFreeStr>
006876FC     .  C3               retn
006876FD   .  8B4D F0       mov     ecx, dword ptr [ebp-10]
00687700   .  66:8B45 E0    mov     ax, word ptr [ebp-20]
00687704   .  5F            pop     edi
00687705   .  5E            pop     esi
00687706   .  64:890D 00000>mov     dword ptr fs:[0], ecx
0068770D   .  5B            pop     ebx
0068770E   .  8BE5          mov     esp, ebp
00687710   .  5D            pop     ebp
00687711   .  C3            retn
==================================================
==================================================
0067C716   .  68 96204000   push    <jmp.&MSVBVM60.__vbaExceptHandle>;  SE 处理程序安装
0067C71B   .  64:A1 0000000>mov     eax, dword ptr fs:[0]
0067C721   .  50            push    eax
0067C722   .  64:8925 00000>mov     dword ptr fs:[0], esp
0067C729   .  83EC 28       sub     esp, 28
0067C72C   .  53            push    ebx
0067C72D   .  56            push    esi
0067C72E   .  57            push    edi
0067C72F   .  8965 F4       mov     dword ptr [ebp-C], esp
0067C732   .  C745 F8 30184>mov     dword ptr [ebp-8], 00401830
0067C739   .  8B7D 08       mov     edi, dword ptr [ebp+8]
0067C73C   .  8BC7          mov     eax, edi
0067C73E   .  83E0 01       and     eax, 1
0067C741   .  8945 FC       mov     dword ptr [ebp-4], eax
0067C744   .  83E7 FE       and     edi, FFFFFFFE
0067C747   .  57            push    edi
0067C748   .  897D 08       mov     dword ptr [ebp+8], edi
0067C74B   .  8B0F          mov     ecx, dword ptr [edi]
0067C74D   .  FF51 04       call    dword ptr [ecx+4]
0067C750   .  33DB          xor     ebx, ebx
0067C752   .  895D E8       mov     dword ptr [ebp-18], ebx
0067C755   .  895D E4       mov     dword ptr [ebp-1C], ebx
0067C758   .  895D E0       mov     dword ptr [ebp-20], ebx
0067C75B   .  895D DC       mov     dword ptr [ebp-24], ebx
0067C75E   .  895D D8       mov     dword ptr [ebp-28], ebx
0067C761   .  E8 3AAB0000   call    006872A0                         ;  这就是关键call
0067C766   .  66:85C0       test    ax, ax                           ;  ax=0跳向失败
0067C769   .  0F84 04010000 je      0067C873                         ;  关键跳转,不能跳
0067C76F   .  8B35 54114000 mov     esi, dword ptr [<&MSVBVM60.__vba>;  MSVBVM60.__vbaStrCopy
0067C775   .  BA 103E4300   mov     edx, 00433E10
0067C77A   .  8D4D E8       lea     ecx, dword ptr [ebp-18]
0067C77D   .  FFD6          call    esi                              ;  <&MSVBVM60.__vbaStrCopy>
0067C77F   .  8B17          mov     edx, dword ptr [edi]
0067C781   .  8D45 E8       lea     eax, dword ptr [ebp-18]
0067C784   .  50            push    eax
0067C785   .  57            push    edi
0067C786   .  FF92 40070000 call    dword ptr [edx+740]
0067C78C   .  8D4D E8       lea     ecx, dword ptr [ebp-18]
0067C78F   .  FF15 B8114000 call    dword ptr [<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStr
0067C795   .  8B0F          mov     ecx, dword ptr [edi]
0067C797   .  57            push    edi
0067C798   .  FF91 14030000 call    dword ptr [ecx+314]
0067C79E   .  8D55 D8       lea     edx, dword ptr [ebp-28]
0067C7A1   .  50            push    eax
0067C7A2   .  52            push    edx
0067C7A3   .  FF15 84104000 call    dword ptr [<&MSVBVM60.__vbaObjSe>;  MSVBVM60.__vbaObjSet
0067C7A9   .  8BF8          mov     edi, eax
0067C7AB   .  8D4D E8       lea     ecx, dword ptr [ebp-18]
0067C7AE   .  51            push    ecx
0067C7AF   .  57            push    edi
0067C7B0   .  8B07          mov     eax, dword ptr [edi]
0067C7B2   .  FF90 A0000000 call    dword ptr [eax+A0]
0067C7B8   .  3BC3          cmp     eax, ebx
0067C7BA   .  DBE2          fclex
0067C7BC   .  7D 12         jge     short 0067C7D0
0067C7BE   .  68 A0000000   push    0A0
0067C7C3   .  68 543E4300   push    00433E54
0067C7C8   .  57            push    edi
0067C7C9   .  50            push    eax
0067C7CA   .  FF15 5C104000 call    dword ptr [<&MSVBVM60.__vbaHresu>;  MSVBVM60.__vbaHresultCheckObj
0067C7D0   >  8B55 E8       mov     edx, dword ptr [ebp-18]
0067C7D3   .  8D4D DC       lea     ecx, dword ptr [ebp-24]
0067C7D6   .  895D E8       mov     dword ptr [ebp-18], ebx
0067C7D9   .  FF15 94114000 call    dword ptr [<&MSVBVM60.__vbaStrMo>;  MSVBVM60.__vbaStrMove
0067C7DF   .  BA 483E4300   mov     edx, 00433E48                    ;  UNICODE "value"
0067C7E4   .  8D4D E0       lea     ecx, dword ptr [ebp-20]
0067C7E7   .  FFD6          call    esi
0067C7E9   .  BA 303E4300   mov     edx, 00433E30                    ;  UNICODE "register"
0067C7EE   .  8D4D E4       lea     ecx, dword ptr [ebp-1C]
0067C7F1   .  FFD6          call    esi
0067C7F3   .  8D55 DC       lea     edx, dword ptr [ebp-24]
0067C7F6   .  8D45 E0       lea     eax, dword ptr [ebp-20]
0067C7F9   .  52            push    edx
0067C7FA   .  8D4D E4       lea     ecx, dword ptr [ebp-1C]
0067C7FD   .  50            push    eax
0067C7FE   .  51            push    ecx
0067C7FF   .  E8 FCA40000   call    00686D00
0067C804   .  8B3D 58114000 mov     edi, dword ptr [<&MSVBVM60.__vba>;  MSVBVM60.__vbaFreeStrList
0067C80A   .  8D55 DC       lea     edx, dword ptr [ebp-24]
0067C80D   .  8D45 E0       lea     eax, dword ptr [ebp-20]
0067C810   .  52            push    edx
0067C811   .  8D4D E4       lea     ecx, dword ptr [ebp-1C]
0067C814   .  50            push    eax
0067C815   .  51            push    ecx
0067C816   .  6A 03         push    3
0067C818   .  FFD7          call    edi                              ;  <&MSVBVM60.__vbaFreeStrList>
0067C81A   .  83C4 10       add     esp, 10
0067C81D   .  8D4D D8       lea     ecx, dword ptr [ebp-28]
0067C820   .  FF15 BC114000 call    dword ptr [<&MSVBVM60.__vbaFreeO>;  MSVBVM60.__vbaFreeObj
0067C826   .  BA 14384300   mov     edx, 00433814
0067C82B   .  8D4D E0       lea     ecx, dword ptr [ebp-20]
0067C82E   .  FFD6          call    esi
0067C830   .  BA 683E4300   mov     edx, 00433E68                    ;  UNICODE "rflag"
0067C835   .  8D4D E4       lea     ecx, dword ptr [ebp-1C]
0067C838   .  FFD6          call    esi
0067C83A   .  BA 58394300   mov     edx, 00433958                    ;  UNICODE "Security"
0067C83F   .  8D4D E8       lea     ecx, dword ptr [ebp-18]
0067C842   .  FFD6          call    esi
0067C844   .  8D55 E0       lea     edx, dword ptr [ebp-20]
0067C847   .  8D45 E4       lea     eax, dword ptr [ebp-1C]
0067C84A   .  52            push    edx
0067C84B   .  8D4D E8       lea     ecx, dword ptr [ebp-18]
0067C84E   .  50            push    eax
0067C84F   .  51            push    ecx
0067C850   .  E8 ABA40000   call    00686D00
0067C855   .  8D55 E0       lea     edx, dword ptr [ebp-20]
0067C858   .  8D45 E4       lea     eax, dword ptr [ebp-1C]
0067C85B   .  52            push    edx
0067C85C   .  8D4D E8       lea     ecx, dword ptr [ebp-18]
0067C85F   .  50            push    eax
0067C860   .  51            push    ecx
0067C861   .  6A 03         push    3
0067C863   .  FFD7          call    edi
0067C865   .  83C4 10       add     esp, 10
0067C868   .  66:C705 50D06>mov     word ptr [68D050], 0FFFF
0067C871   .  EB 24         jmp     short 0067C897
0067C873   >  BA 783E4300   mov     edx, 00433E78
0067C878   .  8D4D E8       lea     ecx, dword ptr [ebp-18]
0067C87B   .  FF15 54114000 call    dword ptr [<&MSVBVM60.__vbaStrCo>;  MSVBVM60.__vbaStrCopy
0067C881   .  8B17          mov     edx, dword ptr [edi]
0067C883   .  8D45 E8       lea     eax, dword ptr [ebp-18]
0067C886   .  50            push    eax
0067C887   .  57            push    edi
0067C888   .  FF92 40070000 call    dword ptr [edx+740]
0067C88E   .  8D4D E8       lea     ecx, dword ptr [ebp-18]
0067C891   .  FF15 B8114000 call    dword ptr [<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStr
0067C897   >  895D FC       mov     dword ptr [ebp-4], ebx
0067C89A   .  68 C7C86700   push    0067C8C7
0067C89F   .  EB 25         jmp     short 0067C8C6
0067C8A1   .  8D4D DC       lea     ecx, dword ptr [ebp-24]
0067C8A4   .  8D55 E0       lea     edx, dword ptr [ebp-20]
0067C8A7   .  51            push    ecx
0067C8A8   .  8D45 E4       lea     eax, dword ptr [ebp-1C]
0067C8AB   .  52            push    edx
0067C8AC   .  8D4D E8       lea     ecx, dword ptr [ebp-18]
0067C8AF   .  50            push    eax
0067C8B0   .  51            push    ecx
0067C8B1   .  6A 04         push    4
0067C8B3   .  FF15 58114000 call    dword ptr [<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStrList
0067C8B9   .  83C4 14       add     esp, 14
0067C8BC   .  8D4D D8       lea     ecx, dword ptr [ebp-28]
0067C8BF   .  FF15 BC114000 call    dword ptr [<&MSVBVM60.__vbaFreeO>;  MSVBVM60.__vbaFreeObj
0067C8C5   .  C3            retn
0067C8C6   >  C3            retn                                     ;  RET 用作跳转到 0067C8C7
0067C8C7   >  8B45 08       mov     eax, dword ptr [ebp+8]
0067C8CA   .  50            push    eax
0067C8CB   .  8B10          mov     edx, dword ptr [eax]
0067C8CD   .  FF52 08       call    dword ptr [edx+8]
0067C8D0   .  8B45 FC       mov     eax, dword ptr [ebp-4]
0067C8D3   .  8B4D EC       mov     ecx, dword ptr [ebp-14]
0067C8D6   .  5F            pop     edi
0067C8D7   .  5E            pop     esi
0067C8D8   .  64:890D 00000>mov     dword ptr fs:[0], ecx
0067C8DF   .  5B            pop     ebx
0067C8E0   .  8BE5          mov     esp, ebp
0067C8E2   .  5D            pop     ebp
0067C8E3   .  C2 0400       retn    4
==================================================
==================================================
00687336     .  FF90 F8060000    call dword ptr ds:[eax+6F8]      将硬盘序列号转换为91275844
....................................................................................................
00431986     . /E9 05172500      jmp Super背?00683090
0043198B       |00               db 00
0043198C       |00               db 00
0043198D       |00               db 00
0043198E       |00               db 00
0043198F       |00               db 00
00431990       |54D16800         dd Super背?0068D154
省略代码
..............................................................
..............................................................
00683090     > \55               push ebp
00683091     .  8BEC             mov ebp,esp
00683093     .  83EC 0C          sub esp,0C
00683096     .  68 96204000      push <jmp.&MSVBVM60.__vbaExceptHandler>          ;  SE 句柄安装
0068309B     .  64:A1 00000000   mov eax,dword ptr fs:[0]
006830A1     .  50               push eax
006830A2     .  64:8925 00000000 mov dword ptr fs:[0],esp
006830A9     .  81EC A8000000    sub esp,0A8
006830AF     .  53               push ebx
006830B0     .  56               push esi
006830B1     .  57               push edi
006830B2     .  8965 F4          mov dword ptr ss:[ebp-C],esp
006830B5     .  C745 F8 701B4000 mov dword ptr ss:[ebp-8],Super背?00401B70
006830BC     .  33DB             xor ebx,ebx
006830BE     .  895D FC          mov dword ptr ss:[ebp-4],ebx
006830C1     .  8B45 08          mov eax,dword ptr ss:[ebp+8]
006830C4     .  50               push eax
006830C5     .  8B08             mov ecx,dword ptr ds:[eax]
006830C7     .  FF51 04          call dword ptr ds:[ecx+4]
006830CA     .  8B55 0C          mov edx,dword ptr ss:[ebp+C]
006830CD     .  8D45 C4          lea eax,dword ptr ss:[ebp-3C]
006830D0     .  53               push ebx
006830D1     .  50               push eax
006830D2     .  895D E8          mov dword ptr ss:[ebp-18],ebx
006830D5     .  895D E4          mov dword ptr ss:[ebp-1C],ebx
006830D8     .  895D E0          mov dword ptr ss:[ebp-20],ebx
006830DB     .  895D DC          mov dword ptr ss:[ebp-24],ebx
006830DE     .  895D D8          mov dword ptr ss:[ebp-28],ebx
006830E1     .  895D D4          mov dword ptr ss:[ebp-2C],ebx
006830E4     .  895D C4          mov dword ptr ss:[ebp-3C],ebx
006830E7     .  895D B4          mov dword ptr ss:[ebp-4C],ebx
006830EA     .  895D A4          mov dword ptr ss:[ebp-5C],ebx
006830ED     .  895D 94          mov dword ptr ss:[ebp-6C],ebx
006830F0     .  895D 84          mov dword ptr ss:[ebp-7C],ebx
006830F3     .  899D 74FFFFFF    mov dword ptr ss:[ebp-8C],ebx
006830F9     .  899D 54FFFFFF    mov dword ptr ss:[ebp-AC],ebx
006830FF     .  891A             mov dword ptr ds:[edx],ebx
00683101     .  FF15 24114000    call dword ptr ds:[<&MSVBVM60.#608>]             ;  MSVBVM60.rtcVarBstrFromAnsi
00683107     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]                       
0068310A     .  8D55 B4          lea edx,dword ptr ss:[ebp-4C]
0068310D     .  51               push ecx
0068310E     .  68 00040000      push 400
00683113     .  52               push edx
00683114     .  FF15 1C114000    call dword ptr ds:[<&MSVBVM60.#607>]             ;  MSVBVM60.rtcStringVar
0068311A     .  8B3D 20104000    mov edi,dword ptr ds:[<&MSVBVM60.__vbaStrVarMove>;  MSVBVM60.__vbaStrVarMove
00683120     .  8D45 B4          lea eax,dword ptr ss:[ebp-4C]
00683123     .  50               push eax
00683124     .  FFD7             call edi                                         ;  <&MSVBVM60.__vbaStrVarMove>
00683126     .  8B35 94114000    mov esi,dword ptr ds:[<&MSVBVM60.__vbaStrMove>]  ;  MSVBVM60.__vbaStrMove
0068312C     .  8BD0             mov edx,eax
0068312E     .  8D4D E0          lea ecx,dword ptr ss:[ebp-20]
00683131     .  FFD6             call esi                                         ;  <&MSVBVM60.__vbaStrMove>
00683133     .  8D4D B4          lea ecx,dword ptr ss:[ebp-4C]
00683136     .  8D55 C4          lea edx,dword ptr ss:[ebp-3C]
00683139     .  51               push ecx
0068313A     .  52               push edx
0068313B     .  6A 02            push 2
0068313D     .  FF15 30104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>] ;  MSVBVM60.__vbaFreeVarList
00683143     .  8B45 E0          mov eax,dword ptr ss:[ebp-20]
00683146     .  83C4 0C          add esp,0C
00683149     .  8D4D D8          lea ecx,dword ptr ss:[ebp-28]
0068314C     .  50               push eax
0068314D     .  51               push ecx
0068314E     .  FF15 74114000    call dword ptr ds:[<&MSVBVM60.__vbaStrToAnsi>]   ;  MSVBVM60.__vbaStrToAnsi
00683154     .  50               push eax
00683155     .  E8 6606DBFF      call Super背?004337C0
0068315A     .  DDD8             fstp st
0068315C     .  FF15 58104000    call dword ptr ds:[<&MSVBVM60.__vbaSetSystemErro>;  MSVBVM60.__vbaSetSystemError
00683162     .  8B55 D8          mov edx,dword ptr ss:[ebp-28]                    ;  获得硬盘序列号(ASCII "            5MT1A8DX")
00683165     .  8D45 E0          lea eax,dword ptr ss:[ebp-20]
00683168     .  52               push edx
00683169     .  50               push eax
0068316A     .  FF15 0C114000    call dword ptr ds:[<&MSVBVM60.__vbaStrToUnicode>>;  eax= (ASCII "            5MT1A8DX")
00683170     .  8D4D D8          lea ecx,dword ptr ss:[ebp-28]
00683173     .  FF15 B8114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]     ;  MSVBVM60.__vbaFreeStr
00683179     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]
0068317C     .  53               push ebx
0068317D     .  51               push ecx
0068317E     .  FF15 24114000    call dword ptr ds:[<&MSVBVM60.#608>]             ;  MSVBVM60.rtcVarBstrFromAnsi
00683184     .  53               push ebx
00683185     .  6A FF            push -1
00683187     .  6A 01            push 1
00683189     .  8D55 C4          lea edx,dword ptr ss:[ebp-3C]
0068318C     .  68 881E4300      push Super背?00431E88
00683191     .  8D45 D8          lea eax,dword ptr ss:[ebp-28]
00683194     .  52               push edx
00683195     .  50               push eax
00683196     .  FF15 30114000    call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]   ;  MSVBVM60.__vbaStrVarVal
0068319C     .  50               push eax
0068319D     .  8B4D E0          mov ecx,dword ptr ss:[ebp-20]                    ;  ecx= (UNICODE "            5MT1A8DX")
006831A0     .  51               push ecx
006831A1     .  FF15 10114000    call dword ptr ds:[<&MSVBVM60.#712>]             ;  MSVBVM60.rtcReplace
006831A7     .  8945 BC          mov dword ptr ss:[ebp-44],eax                    ;  eax= (UNICODE "            5MT1A8DX")
006831AA     .  8D55 B4          lea edx,dword ptr ss:[ebp-4C]
006831AD     .  8D45 A4          lea eax,dword ptr ss:[ebp-5C]
006831B0     .  52               push edx
006831B1     .  50               push eax
006831B2     .  C745 B4 08000000 mov dword ptr ss:[ebp-4C],8
006831B9     .  FF15 A4104000    call dword ptr ds:[<&MSVBVM60.#520>]             ;  MSVBVM60.rtcTrimVar
006831BF     .  8D4D A4          lea ecx,dword ptr ss:[ebp-5C]
006831C2     .  51               push ecx
006831C3     .  FFD7             call edi                                         ;  <&MSVBVM60.__vbaStrVarMove>
006831C5     .  8BD0             mov edx,eax                                      ;  eax=(UNICODE "5MT1A8DX")
006831C7     .  8D4D E0          lea ecx,dword ptr ss:[ebp-20]
006831CA     .  FFD6             call esi                                         ;  <&MSVBVM60.__vbaStrMove>
006831CC     .  8D4D D8          lea ecx,dword ptr ss:[ebp-28]
006831CF     .  FF15 B8114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]     ;  MSVBVM60.__vbaFreeStr
006831D5     .  8D55 A4          lea edx,dword ptr ss:[ebp-5C]
006831D8     .  8D45 B4          lea eax,dword ptr ss:[ebp-4C]
006831DB     .  52               push edx
006831DC     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]
006831DF     .  50               push eax
006831E0     .  51               push ecx
006831E1     .  6A 03            push 3
006831E3     .  FF15 30104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>] ;  MSVBVM60.__vbaFreeVarList
006831E9     .  8B1D 1C104000    mov ebx,dword ptr ds:[<&MSVBVM60.__vbaFreeVar>]  ;  MSVBVM60.__vbaFreeVar
006831EF     .  83C4 10          add esp,10
006831F2     >  8B55 E0          mov edx,dword ptr ss:[ebp-20]                    ;   保存当前硬盘序列号
006831F5     .  52               push edx                                         ;  
006831F6     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]     ;  当前硬盘序列号长度
006831FC     .  85C0             test eax,eax                                     ;  检查长度是否为0为0跳出循环
006831FE     .  0F8E CB000000    jle Super背?006832CF
00683204     .  8D8D 74FFFFFF    lea ecx,dword ptr ss:[ebp-8C]
0068320A     .  6A 01            push 1
0068320C     .  8D55 C4          lea edx,dword ptr ss:[ebp-3C]
0068320F     .  8D45 E0          lea eax,dword ptr ss:[ebp-20]
00683212     .  51               push ecx
00683213     .  52               push edx
00683214     .  8985 7CFFFFFF    mov dword ptr ss:[ebp-84],eax
0068321A     .  C785 74FFFFFF 08>mov dword ptr ss:[ebp-8C],4008
00683224     .  FF15 88114000    call dword ptr ds:[<&MSVBVM60.#617>]             ;  MSVBVM60.rtcLeftCharVar
0068322A     .  8B45 E4          mov eax,dword ptr ss:[ebp-1C]                       
0068322D     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]
00683230     .  50               push eax
00683231     .  8D55 D8          lea edx,dword ptr ss:[ebp-28]
00683234     .  51               push ecx
00683235     .  52               push edx
00683236     .  FF15 30114000    call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]   ;  逐位取硬盘序列号的ASCII码值存入eax
0068323C     .  50               push eax                                         ;  
0068323D     .  FF15 3C104000    call dword ptr ds:[<&MSVBVM60.#516>]             ;  MSVBVM60.rtcAnsiValueBstr
00683243     .  66:99            cwd
00683245     .  66:B9 0A00       mov cx,0A
00683249     .  66:F7F9          idiv cx                                          ;  将取得值除A取余
0068324C     .  52               push edx
0068324D     .  FF15 04104000    call dword ptr ds:[<&MSVBVM60.__vbaStrI2>]       ;  将余数转换成它的ASCII码值
00683253     .  8BD0             mov edx,eax                                      ;  
00683255     .  8D4D D4          lea ecx,dword ptr ss:[ebp-2C]
00683258     .  FFD6             call esi
0068325A     .  50               push eax
0068325B     .  FF15 50104000    call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]      ;  将余数连接起来得到新的数值串
00683261     .  8BD0             mov edx,eax                                      ;  
00683263     .  8D4D E4          lea ecx,dword ptr ss:[ebp-1C]
00683266     .  FFD6             call esi
00683268     .  8D55 D4          lea edx,dword ptr ss:[ebp-2C]
0068326B     .  8D45 D8          lea eax,dword ptr ss:[ebp-28]
0068326E     .  52               push edx
0068326F     .  50               push eax
00683270     .  6A 02            push 2
00683272     .  FF15 58114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>] ;  MSVBVM60.__vbaFreeStrList
00683278     .  83C4 0C          add esp,0C
0068327B     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]
0068327E     .  FFD3             call ebx
00683280     .  8B55 E0          mov edx,dword ptr ss:[ebp-20]                    ;  保存当前的硬盘序列号
00683283     .  8D4D E0          lea ecx,dword ptr ss:[ebp-20]
00683286     .  52               push edx
00683287     .  898D 7CFFFFFF    mov dword ptr ss:[ebp-84],ecx
0068328D     .  C785 74FFFFFF 08>mov dword ptr ss:[ebp-8C],4008
00683297     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]     ;  当前硬盘序列号长度
0068329D     .  83E8 01          sub eax,1                                        ;  当前长度减1
006832A0     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]
006832A3     .  0F80 F5010000    jo Super背?0068349E
006832A9     .  50               push eax
006832AA     .  8D85 74FFFFFF    lea eax,dword ptr ss:[ebp-8C]
006832B0     .  50               push eax
006832B1     .  51               push ecx
006832B2     .  FF15 98114000    call dword ptr ds:[<&MSVBVM60.#619>]             ;  MSVBVM60.rtcRightCharVar
006832B8     .  8D55 C4          lea edx,dword ptr ss:[ebp-3C]
006832BB     .  52               push edx
006832BC     .  FFD7             call edi                                         ;  保存当前硬盘序列号
006832BE     .  8BD0             mov edx,eax                                      ;  
006832C0     .  8D4D E0          lea ecx,dword ptr ss:[ebp-20]                    ;  
006832C3     .  FFD6             call esi
006832C5     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]
006832C8     .  FFD3             call ebx
006832CA     .^ E9 23FFFFFF      jmp Super背?006831F2
006832CF     >  8B45 E4          mov eax,dword ptr ss:[ebp-1C]                    ;  保存当前的新数值串
006832D2     .  50               push eax
006832D3     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]     ;  当前新数值串的长度
006832D9     .  85C0             test eax,eax                                     ;   检查长度是否为0为0跳出循环
006832DB     .  0F8E 28010000    jle Super背?00683409
006832E1     .  8B4D E8          mov ecx,dword ptr ss:[ebp-18]
006832E4     .  8D85 74FFFFFF    lea eax,dword ptr ss:[ebp-8C]
006832EA     .  898D 5CFFFFFF    mov dword ptr ss:[ebp-A4],ecx
006832F0     .  6A 01            push 1
006832F2     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]
006832F5     .  8D55 E4          lea edx,dword ptr ss:[ebp-1C]
006832F8     .  50               push eax
006832F9     .  51               push ecx
006832FA     .  C785 54FFFFFF 08>mov dword ptr ss:[ebp-AC],8
00683304     .  8995 7CFFFFFF    mov dword ptr ss:[ebp-84],edx
0068330A     .  C785 74FFFFFF 08>mov dword ptr ss:[ebp-8C],4008
00683314     .  FF15 88114000    call dword ptr ds:[<&MSVBVM60.#617>]             ;  MSVBVM60.rtcLeftCharVar
0068331A     .  8D55 C4          lea edx,dword ptr ss:[ebp-3C]
0068331D     .  8D45 D8          lea eax,dword ptr ss:[ebp-28]
00683320     .  52               push edx
00683321     .  50               push eax
00683322     .  FF15 30114000    call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]   ;  MSVBVM60.__vbaStrVarVal
00683328     .  50               push eax                                         ;  
00683329     .  FF15 C0114000    call dword ptr ds:[<&MSVBVM60.#581>]             ;  逐位取新数值的实数到(ST0)
0068332F     .  DC0D 681B4000    fmul qword ptr ds:[401B68]                          (ST0)乘以ds:[401B68]的值将结果送(ST0)
00683335     .  DFE0             fstsw ax                                         ;  
00683337     .  A8 0D            test al,0D
00683339     .  0F85 5A010000    jnz Super背?00683499
0068333F     .  FF15 84114000    call dword ptr ds:[<&MSVBVM60.__vbaFpI4>]        ;  将(ST0)十进制值转换为它的十六进制值
00683345     .  99               cdq                                              ;  
00683346     .  B9 0A000000      mov ecx,0A
0068334B     .  C745 B4 03000000 mov dword ptr ss:[ebp-4C],3
00683352     .  F7F9             idiv ecx                                         ;  将十六进制值除A取余
00683354     .  8D45 A4          lea eax,dword ptr ss:[ebp-5C]
00683357     .  8955 BC          mov dword ptr ss:[ebp-44],edx
0068335A     .  8D55 B4          lea edx,dword ptr ss:[ebp-4C]
0068335D     .  52               push edx
0068335E     .  50               push eax
0068335F     .  FF15 7C114000    call dword ptr ds:[<&MSVBVM60.#613>]             ;  MSVBVM60.rtcVarStrFromVar
00683365     .  8D4D A4          lea ecx,dword ptr ss:[ebp-5C]
00683368     .  8D55 94          lea edx,dword ptr ss:[ebp-6C]
0068336B     .  51               push ecx
0068336C     .  52               push edx
0068336D     .  FF15 A4104000    call dword ptr ds:[<&MSVBVM60.#520>]             ;  MSVBVM60.rtcTrimVar
00683373     .  8D85 54FFFFFF    lea eax,dword ptr ss:[ebp-AC]
00683379     .  8D4D 94          lea ecx,dword ptr ss:[ebp-6C]
0068337C     .  50               push eax
0068337D     .  8D55 84          lea edx,dword ptr ss:[ebp-7C]
00683380     .  51               push ecx
00683381     .  52               push edx
00683382     .  FF15 34114000    call dword ptr ds:[<&MSVBVM60.__vbaVarCat>]      ;  MSVBVM60.__vbaVarCat
00683388     .  50               push eax
00683389     .  FFD7             call edi                                            将余数连接起来得到前码
0068338B     .  8BD0             mov edx,eax
0068338D     .  8D4D E8          lea ecx,dword ptr ss:[ebp-18]
00683390     .  FFD6             call esi
00683392     .  8D4D D8          lea ecx,dword ptr ss:[ebp-28]
00683395     .  FF15 B8114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]     ;  MSVBVM60.__vbaFreeStr
0068339B     .  8D45 84          lea eax,dword ptr ss:[ebp-7C]
0068339E     .  8D4D 94          lea ecx,dword ptr ss:[ebp-6C]
006833A1     .  50               push eax
006833A2     .  8D55 A4          lea edx,dword ptr ss:[ebp-5C]
006833A5     .  51               push ecx
006833A6     .  8D45 B4          lea eax,dword ptr ss:[ebp-4C]
006833A9     .  52               push edx
006833AA     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]
006833AD     .  50               push eax
006833AE     .  51               push ecx
006833AF     .  6A 05            push 5
006833B1     .  FF15 30104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>] ;  MSVBVM60.__vbaFreeVarList
006833B7     .  8B45 E4          mov eax,dword ptr ss:[ebp-1C]                    ;  获得当前的新数值串
006833BA     .  83C4 18          add esp,18
006833BD     .  8D55 E4          lea edx,dword ptr ss:[ebp-1C]
006833C0     .  C785 74FFFFFF 08>mov dword ptr ss:[ebp-8C],4008
006833CA     .  50               push eax
006833CB     .  8995 7CFFFFFF    mov dword ptr ss:[ebp-84],edx
006833D1     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]     ;  获得当前的新数值串长度
006833D7     .  83E8 01          sub eax,1                                           当前长度减1
006833DA     .  8D8D 74FFFFFF    lea ecx,dword ptr ss:[ebp-8C]
006833E0     .  0F80 B8000000    jo Super背?0068349E
006833E6     .  50               push eax
006833E7     .  8D55 C4          lea edx,dword ptr ss:[ebp-3C]
006833EA     .  51               push ecx
006833EB     .  52               push edx
006833EC     .  FF15 98114000    call dword ptr ds:[<&MSVBVM60.#619>]             ;  MSVBVM60.rtcRightCharVar
006833F2     .  8D45 C4          lea eax,dword ptr ss:[ebp-3C]
006833F5     .  50               push eax
006833F6     .  FFD7             call edi                                         ;  获得当前的新数值串
006833F8     .  8BD0             mov edx,eax
006833FA     .  8D4D E4          lea ecx,dword ptr ss:[ebp-1C]
006833FD     .  FFD6             call esi
006833FF     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]
00683402     .  FFD3             call ebx
00683404     .^ E9 C6FEFFFF      jmp Super背?006832CF                              ;  
00683409     >  8B55 E8          mov edx,dword ptr ss:[ebp-18]                     ;  显示前码
0068340C     .  8D4D DC          lea ecx,dword ptr ss:[ebp-24]
0068340F     .  FF15 54114000    call dword ptr ds:[<&MSVBVM60.__vbaStrCopy>]     ;  MSVBVM60.__vbaStrCopy
00683415     .  9B               wait
00683416     .  68 72346800      push Super背?00683472
0068341B     .  EB 3F            jmp short Super背?0068345C
0068341D     .  F645 FC 04       test byte ptr ss:[ebp-4],4
00683421     .  74 09            je short Super背?0068342C
00683423     .  8D4D DC          lea ecx,dword ptr ss:[ebp-24]
00683426     .  FF15 B8114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]     ;  MSVBVM60.__vbaFreeStr
0068342C     >  8D4D D4          lea ecx,dword ptr ss:[ebp-2C]
0068342F     .  8D55 D8          lea edx,dword ptr ss:[ebp-28]
00683432     .  51               push ecx
00683433     .  52               push edx
00683434     .  6A 02            push 2
00683436     .  FF15 58114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>] ;  MSVBVM60.__vbaFreeStrList
0068343C     .  8D45 84          lea eax,dword ptr ss:[ebp-7C]
0068343F     .  8D4D 94          lea ecx,dword ptr ss:[ebp-6C]
00683442     .  50               push eax
00683443     .  8D55 A4          lea edx,dword ptr ss:[ebp-5C]
00683446     .  51               push ecx
00683447     .  8D45 B4          lea eax,dword ptr ss:[ebp-4C]
0068344A     .  52               push edx
0068344B     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]
0068344E     .  50               push eax
0068344F     .  51               push ecx
00683450     .  6A 05            push 5
00683452     .  FF15 30104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>] ;  MSVBVM60.__vbaFreeVarList
00683458     .  83C4 24          add esp,24
0068345B     .  C3               retn
0068345C     >  8B35 B8114000    mov esi,dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]  ;  MSVBVM60.__vbaFreeStr
00683462     .  8D4D E8          lea ecx,dword ptr ss:[ebp-18]
00683465     .  FFD6             call esi                                         ;  <&MSVBVM60.__vbaFreeStr>
00683467     .  8D4D E4          lea ecx,dword ptr ss:[ebp-1C]
0068346A     .  FFD6             call esi                                         ;  <&MSVBVM60.__vbaFreeStr>
0068346C     .  8D4D E0          lea ecx,dword ptr ss:[ebp-20]
0068346F     .  FFD6             call esi                                         ;  <&MSVBVM60.__vbaFreeStr>
00683471     .  C3               retn
00683472     .  8B45 08          mov eax,dword ptr ss:[ebp+8]
00683475     .  50               push eax
00683476     .  8B10             mov edx,dword ptr ds:[eax]
00683478     .  FF52 08          call dword ptr ds:[edx+8]
0068347B     .  8B45 0C          mov eax,dword ptr ss:[ebp+C]
0068347E     .  8B4D DC          mov ecx,dword ptr ss:[ebp-24]
00683481     .  8908             mov dword ptr ds:[eax],ecx
00683483     .  8B45 FC          mov eax,dword ptr ss:[ebp-4]
00683486     .  8B4D EC          mov ecx,dword ptr ss:[ebp-14]
00683489     .  5F               pop edi
0068348A     .  5E               pop esi
0068348B     .  64:890D 00000000 mov dword ptr fs:[0],ecx
00683492     .  5B               pop ebx
00683493     .  8BE5             mov esp,ebp
00683495     .  5D               pop ebp
00683496     .  C2 0800          retn 8
00683499     >^ E9 FEEBD7FF      jmp <jmp.&MSVBVM60.__vbaFPException>

算法总结:
计算前码:  首先获得硬盘序列号5MT1A8DX,循环逐位取序列号的ASCII码值除A取余,最后将余数连接起来得到37495688.
           循环逐位取37495688的值送入(st0)并乘以ds:[401B68]的值(我这里是3),得到十进制值,将(ST0)十进制值
            转换为它的十六进制值除A取余,最后将余数连接起来得到91275844,这就是前码.
  
计算后码:1.循环逐位取91275844的值,转换为它的ASCII码值,然后累加得到1A8在乘以13得到1F78除9取余存入ss:[ebp-24]中.
         2.循环逐位取91275844的ASCII码值,自乘,同时计数,将它取第一位数,计数为1,每循环一次计数值加1,将当前计
           数值乘3除2得到商加上自乘值和ss:[ebp-24]中的值,除A取余,最后将余数连接起来就得到15527657,这就是后码.

[ 本帖最后由 交响诗篇 于 2008-8-7 10:42 编辑 ]
PYG19周年生日快乐!

该用户从未签到

发表于 2008-8-7 18:47:50 | 显示全部楼层
/:good   VB的不好分析 /:good
PYG19周年生日快乐!
  • TA的每日心情
    郁闷
    2016-6-2 14:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2008-8-9 21:58:16 | 显示全部楼层
    正在学习VB,谢谢
    VB可以用VBExplorer找关键点

    [ 本帖最后由 指舞瞬间 于 2008-8-9 21:59 编辑 ]
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-8-10 15:45:18 | 显示全部楼层
    楼主好文 ,学习了!谢谢分享!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-8-22 00:11:49 | 显示全部楼层
    牛!!!!!!!!!!!!!!!!!!!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-9-4 07:03:54 | 显示全部楼层
    学习了!谢谢分享!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表