交通法規考試系統2005 破解簡析

看雪資料發表於2004-12-11

交通法規考試系統2005 破解簡析
工具: od , VB反編譯器
宣告:高手略過…… 破VB一個字煩.
交通法規考試系統2005 分北京版本,與全國版,破了任何一個,都開始用任何一個~對作者衝擊很大,簡單的分析一下;有錯誤的地方,感謝指出.
軟體介紹:是浮游工作室的主打產品,對使用者透過駕駛執照的理論考試有巨大的幫助,根據兩年來大量使用者的反饋,使用本軟體進行備考,可以明顯縮短備考時間,消除機考的緊張感,並讓您輕鬆透過理論考試。 
註冊事件入口:
0045E250    > \55                push ebp
0045E251    .  8BEC              mov ebp,esp
0045E253    .  83EC 14           sub esp,14
0045E256    .  68 762A4000       push <jmp.&MSVBVM60.__vbaExceptHandler>  ;  SE handler installation
0045E25B    .  64:A1 00000000    mov eax,dword ptr fs:[0]
0045E261    .  50                push eax
0045E262    .  64:8925 00000000  mov dword ptr fs:[0],esp
0045E269    .  81EC E8000000     sub esp,0E8
……找到關鍵CALL:
0045E4AD    .  8D4D C0           lea ecx,dword ptr ss:[ebp-40]
0045E4B0    .  51                push ecx               ;指向假註冊嗎
0045E4B1    .  8D55 C4           lea edx,dword ptr ss:[ebp-3C]
0045E4B4    .  52                push edx               ;指向使用者名稱
0045E4B5    .  E8 160AFDFF       call TranExam.0042EED
……函式入口:
0042EED0    $  55                push ebp
0042EED1    .  8BEC              mov ebp,esp
0042EED3    .  83EC 08           sub esp,8
…… 
q        i     w      e         i         x        u       e    長度為:8

71       69    77      65       69       78        75     65     ;16進位制                     

113      105   119     101      105      120       117     101   ;10進位制

10.6301 10.247 10.9087 10.04988 10.24695 10.95445  10.81665 10.049876 ;平方根
 
第一個迴圈,8次:
0042EF6B    .  BE 01000000       mov esi,1                                ;  esi 計數器=1
0042EF70    .  8975 E8           mov dword ptr ss:[ebp-18],esi            ;  [ebp-18] =esi=1
0042EF73    >  3BF0              cmp esi,eax                              ;  eax=8,esi=1
0042EF75    .  0F8F C5020000     jg TranExam.0042F240                     ;當esi大與eax,跳出迴圈
0042EF7B    .  8B45 08           mov eax,dword ptr ss:[ebp+8]             ;  (*[ebp-8])=qiweixue(0x1747e4)
0042EF7E    .  8D8D 78FFFFFF     lea ecx,dword ptr ss:[ebp-88]            ;  [ebp-88]=0
0042EF84    .  8985 40FFFFFF     mov dword ptr ss:[ebp-C0],eax            ;  (*[ebp-c0])=qiweixue(0x1747e4)
0042EF8A    .  51                push ecx
0042EF8B    .  8D95 38FFFFFF     lea edx,dword ptr ss:[ebp-C8]            ;  [ebp-c8]=0
0042EF91    .  56                push esi                                 ;  esi=1 記數為1
0042EF92    .  8D85 68FFFFFF     lea eax,dword ptr ss:[ebp-98]            ;  [ebp-98]=0
0042EF98    .  52                push edx
0042EF99    .  50                push eax
0042EF9A    .  C745 80 01000000  mov dword ptr ss:[ebp-80],1              ;  [ebp-80]=1
0042EFA1    .  C785 78FFFFFF 020>mov dword ptr ss:[ebp-88],2              ;  [ebp-88]=2
0042EFAB    .  C785 38FFFFFF 084>mov dword ptr ss:[ebp-C8],4008
0042EFB5    .  FF15 BC104000     call dword ptr ds:[<&MSVBVM60.#632>]     ;  MSVBVM60.rtcMidCharVar
0042EFBB    .  8D8D 68FFFFFF     lea ecx,dword ptr ss:[ebp-98]
0042EFC1    .  8D55 A8           lea edx,dword ptr ss:[ebp-58]
0042EFC4    .  51                push ecx
0042EFC5    .  52                push edx
0042EFC6    .  FFD3              call ebx
0042EFC8    .  50                push eax
0042EFC9    .  FF15 40104000     call dword ptr ds:[<&MSVBVM60.#516>]     ;  MSVBVM60.rtcAnsiValueBstr
0042EFCF    .  8BC8              mov ecx,eax                              ;  返回 q 的ASC=71
0042EFD1    .  FFD7              call edi                                 ;  取絕對值
0042EFD3    .  0FBFC0            movsx eax,ax
0042EFD6    .  8985 C8FEFFFF     mov dword ptr ss:[ebp-138],eax           ;  [ebp-138]=71
0042EFDC    .  DB85 C8FEFFFF     fild dword ptr ss:[ebp-138]              ;  取實數 q的113
0042EFE2    .  DD9D C0FEFFFF     fstp qword ptr ss:[ebp-140]              ;  [ebp-140]為0
0042EFE8    .  8B8D C4FEFFFF     mov ecx,dword ptr ss:[ebp-13C]           ;  [ebp-13c]=405c4000
0042EFEE    .  8B95 C0FEFFFF     mov edx,dword ptr ss:[ebp-140]
0042EFF4    .  51                push ecx
0042EFF5    .  52                push edx
0042EFF6    .  FF15 D4114000     call dword ptr ds:[<&MSVBVM60.#614>]     ;  MSVBVM60.rtcSqr
0042EFFC    .  8B45 08           mov eax,dword ptr ss:[ebp+8]             ;  qiweixue
0042EFFF    .  8D4D 98           lea ecx,dword ptr ss:[ebp-68]            ;  [ebp-68]=0
0042F002    .  DD9D 18FFFFFF     fstp qword ptr ss:[ebp-E8]               ;  [ebp-e8]=78d2d036
0042F008    .  8985 60FFFFFF     mov dword ptr ss:[ebp-A0],eax            ;  (*[ebp-a0])=qiweixue
0042F00E    .  51                push ecx
0042F00F    .  8D95 58FFFFFF     lea edx,dword ptr ss:[ebp-A8]            ;  [ebp-a8]= 0
0042F015    .  56                push esi
0042F016    .  8D45 88           lea eax,dword ptr ss:[ebp-78]            ;  [ebp-78]=0
0042F019    .  52                push edx
0042F01A    .  50                push eax
0042F01B    .  C745 A0 01000000  mov dword ptr ss:[ebp-60],1
0042F022    .  C745 98 02000000  mov dword ptr ss:[ebp-68],2
0042F029    .  C785 58FFFFFF 084>mov dword ptr ss:[ebp-A8],4008
0042F033    .  FF15 BC104000     call dword ptr ds:[<&MSVBVM60.#632>]     ;  MSVBVM60.rtcMidCharVar
0042F039    .  8D4D 88           lea ecx,dword ptr ss:[ebp-78]
0042F03C    .  8D55 AC           lea edx,dword ptr ss:[ebp-54]
0042F03F    .  51                push ecx
0042F040    .  52                push edx
0042F041    .  FFD3              call ebx
0042F043    .  50                push eax
0042F044    .  FF15 40104000     call dword ptr ds:[<&MSVBVM60.#516>]     ;  MSVBVM60.rtcAnsiValueBstr
0042F04A    .  8BC8              mov ecx,eax
0042F04C    .  FFD7              call edi
0042F04E    .  0FBFC0            movsx eax,ax
0042F051    .  0FAFC6            imul eax,esi                             ;  使用者名稱*計數數值
0042F054    .  0F80 54060000     jo TranExam.0042F6AE                     ;  溢位就error
0042F05A    .  0FAFC6            imul eax,esi                             ;eax=eax*esi
0042F05D    .  8B4D E4           mov ecx,dword ptr ss:[ebp-1C]
0042F060    .  0F80 48060000     jo TranExam.0042F6AE                     ;溢位就跳死
0042F066    .  03C1              add eax,ecx                              ;eax=eax+ecx
0042F068    .  0F80 40060000     jo TranExam.0042F6AE                     ;溢位就跳死
0042F06E    .  8985 BCFEFFFF     mov dword ptr ss:[ebp-144],eax
0042F074    .  DB85 BCFEFFFF     fild dword ptr ss:[ebp-144]              ;浮點計算   
0042F07A    .  DD9D B4FEFFFF     fstp qword ptr ss:[ebp-14C]
0042F080    .  DB45 E8           fild dword ptr ss:[ebp-18]
0042F083    .  DD9D ACFEFFFF     fstp qword ptr ss:[ebp-154]
0042F089    .  DD85 ACFEFFFF     fld qword ptr ss:[ebp-154]
0042F08F    .  DC8D 18FFFFFF     fmul qword ptr ss:[ebp-E8]
0042F095    .  DC05 50124000     fadd qword ptr ds:[401250]
0042F09B    .  DC8D B4FEFFFF     fmul qword ptr ss:[ebp-14C]
0042F0A1    .  DFE0              fstsw ax
0042F0A3    .  A8 0D             test al,0D                               ;al與od比較
0042F0A5    .  0F85 FE050000     jnz TranExam.0042F6A9                    ;  跳就overflow的
0042F0AB    .  FF15 E8114000     call dword ptr ds:[<&MSVBVM60.__vbaFpI4>>;  MSVBVM60.__vbaFpI4
0042F0B1    .  99                cdq                                      ;  eax=522
0042F0B2    .  B9 10270000       mov ecx,2710                             ;  ecx=2710
0042F0B7    .  F7F9              idiv ecx                                 ;除以2710
0042F0B9    .  8955 E4           mov dword ptr ss:[ebp-1C],edx            ;  [ebp-1c]=00000522
0042F0BC    .  8D55 A8           lea edx,dword ptr ss:[ebp-58]
0042F0BF    .  8D45 AC           lea eax,dword ptr ss:[ebp-54]
0042F0C2    .  52                push edx
0042F0C3    .  50                push eax
0042F0C4    .  6A 02             push 2
0042F0C6    .  FF15 98114000     call dword ptr ds:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStrList
0042F0CC    .  8D8D 68FFFFFF     lea ecx,dword ptr ss:[ebp-98]
0042F0D2    .  8D95 78FFFFFF     lea edx,dword ptr ss:[ebp-88]
0042F0D8    .  51                push ecx
0042F0D9    .  8D45 88           lea eax,dword ptr ss:[ebp-78]
0042F0DC    .  52                push edx
0042F0DD    .  8D4D 98           lea ecx,dword ptr ss:[ebp-68]
0042F0E0    .  50                push eax
0042F0E1    .  51                push ecx
0042F0E2    .  6A 04             push 4
0042F0E4    .  FF15 34104000     call dword ptr ds:[<&MSVBVM60.__vbaFreeV>;  MSVBVM60.__vbaFreeVarList
0042F0EA    .  8B55 08           mov edx,dword ptr ss:[ebp+8]
0042F0ED    .  83C4 20           add esp,20
0042F0F0    .  8D45 98           lea eax,dword ptr ss:[ebp-68]
0042F0F3    .  8995 60FFFFFF     mov dword ptr ss:[ebp-A0],edx
0042F0F9    .  50                push eax
0042F0FA    .  8D8D 58FFFFFF     lea ecx,dword ptr ss:[ebp-A8]
0042F100    .  56                push esi
0042F101    .  8D55 88           lea edx,dword ptr ss:[ebp-78]
0042F104    .  51                push ecx
0042F105    .  52                push edx
0042F106    .  C745 A0 01000000  mov dword ptr ss:[ebp-60],1
0042F10D    .  C745 98 02000000  mov dword ptr ss:[ebp-68],2
……
0042F21B    .  99                cdq
0042F21C    .  B9 A0860100       mov ecx,186A0
0042F221    .  F7F9              idiv ecx                                 ;  除以 186a0
0042F223    .  B8 01000000       mov eax,1
0042F228    .  03C6              add eax,esi                              ;  esi計數加一
0042F22A    .  0F80 7E040000     jo TranExam.0042F6AE
0042F230    .  8BF0              mov esi,eax
0042F232    .  8B45 DC           mov eax,dword ptr ss:[ebp-24]            ;  eax=8 要8次迴圈
0042F235    .  8975 E8           mov dword ptr ss:[ebp-18],esi
0042F238    .  8955 D8           mov dword ptr ss:[ebp-28],edx            ;  [ebp-28]=3025
0042F23B    .^ E9 33FDFFFF       jmp TranExam.0042EF73
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二個迴圈4次:
0042F240    >  8B3D 94114000     mov edi,dword ptr ds:[<&MSVBVM60.__vbaSt>;  MSVBVM60.__vbaStrCopy
0042F246    .  8B1D 2C104000     mov ebx,dword ptr ds:[<&MSVBVM60.__vbaSt>;  MSVBVM60.__vbaStrVarMove
0042F24C    .  33F6              xor esi,esi
0042F24E    >  B8 04000000       mov eax,4                                ;  eax=4 迴圈4次
0042F253    .  3BF0              cmp esi,eax
0042F255    .  0F8F 8C000000     jg TranExam.0042F2E7                     ;條件成立調處迴圈
0042F25B    .  8BD6              mov edx,esi
0042F25D    .  8B45 E4           mov eax,dword ptr ss:[ebp-1C]            ;  [ebp-1c]=1A8D
0042F260    .  0FAFD6            imul edx,esi                             ;  edx=esi*edx
0042F263    .  0F80 45040000     jo TranExam.0042F6AE
0042F269    .  0FAFD6            imul edx,esi                             ;  edx=esi*edx
0042F26C    .  0F80 3C040000     jo TranExam.0042F6AE
0042F272    .  83C0 1F           add eax,1F                               ;  eax=eax+1f
0042F275    .  0F80 33040000     jo TranExam.0042F6AE
0042F27B    .  03D0              add edx,eax                              ;  edx=edx+eax
0042F27D    .  0F80 2B040000     jo TranExam.0042F6AE                     ;  error verflow
0042F283    .  81E2 7F000080     and edx,8000007F                         ;  edx=edx+8000007f
0042F289    .  79 05             jns short TranExam.0042F290
0042F28B    .  4A                dec edx
0042F28C    .  83CA 80           or edx,FFFFFF80
0042F28F    .  42                inc edx
0042F290    >  8D4D 98           lea ecx,dword ptr ss:[ebp-68]            ;  [ebp-68]=0
0042F293    .  52                push edx                                 ;  edx=2c
0042F294    .  51                push ecx                                 ;  ecx=0
0042F295    .  FF15 48114000     call dword ptr ds:[<&MSVBVM60.#608>]     ;  MSVBVM60.rtcVarBstrFromAnsi
0042F29B    .  83FE 11           cmp esi,11
0042F29E    .  72 06             jb short TranExam.0042F2A6
0042F2A0    .  FF15 CC104000     call dword ptr ds:[<&MSVBVM60.__vbaGener>;  MSVBVM60.__vbaGenerateBoundsError
0042F2A6    >  8D55 98           lea edx,dword ptr ss:[ebp-68]            ;  [ebp-68]=120008
0042F2A9    .  52                push edx
0042F2AA    .  FFD3              call ebx
0042F2AC    .  8BD0              mov edx,eax
0042F2AE    .  8D4D AC           lea ecx,dword ptr ss:[ebp-54]            ;  [ebp-54]=0
0042F2B1    .  FF15 04124000     call dword ptr ds:[<&MSVBVM60.__vbaStrMo>;  MSVBVM60.__vbaStrMove
0042F2B7    .  8BD0              mov edx,eax
0042F2B9    .  8B45 C4           mov eax,dword ptr ss:[ebp-3C]
0042F2BC    .  8D0CB0            lea ecx,dword ptr ds:[eax+esi*4]
0042F2BF    .  FFD7              call edi
0042F2C1    .  8D4D AC           lea ecx,dword ptr ss:[ebp-54]
0042F2C4    .  FF15 30124000     call dword ptr ds:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStr
0042F2CA    .  8D4D 98           lea ecx,dword ptr ss:[ebp-68]
0042F2CD    .  FF15 1C104000     call dword ptr ds:[<&MSVBVM60.__vbaFreeV>;  MSVBVM60.__vbaFreeVar
0042F2D3    .  B8 01000000       mov eax,1
0042F2D8    .  03C6              add eax,esi                              ;  esi=esi+1  迴圈
0042F2DA    .  0F80 CE030000     jo TranExam.0042F6AE
0042F2E0    .  8BF0              mov esi,eax
0042F2E2    .^ E9 67FFFFFF       jmp TranExam.0042F24E                    ;  迴圈
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三個迴圈也迴圈4次:
0042F2E7    >  BE 05000000       mov esi,5                                ;  esi=5
0042F2EC    >  B8 09000000       mov eax,9                                ;  eax=9
0042F2F1    .  3BF0              cmp esi,eax
0042F2F3    .  0F8F 8C000000     jg TranExam.0042F385                     ;  比較迴圈 ,當esi大於eax是跳出迴圈
0042F2F9    .  8BCE              mov ecx,esi                              ;  cx=5
0042F2FB    .  8B55 E0           mov edx,dword ptr ss:[ebp-20]            ;  [ebp-20]=0
0042F2FE    .  0FAFCE            imul ecx,esi                             ;  ecx=ecx*esi
0042F301    .  0F80 A7030000     jo TranExam.0042F6AE                     ;  溢位就死
0042F307    .  0FAFCE            imul ecx,esi                             ;  ecx=ecx*esi
0042F30A    .  0F80 9E030000     jo TranExam.0042F6AE                     ;  溢位就死
0042F310    .  83C2 1F           add edx,1F                               ;  edx=edx+1f
0042F313    .  0F80 95030000     jo TranExam.0042F6AE
0042F319    .  03CA              add ecx,edx                              ;  ecx=ecx+edx
0042F31B    .  0F80 8D030000     jo TranExam.0042F6AE                     ;  溢位就死
0042F321    .  81E1 7F000080     and ecx,8000007F                         ;   ecx=ecx^8000007f
0042F327    .  79 05             jns short TranExam.0042F32E              ;  S=1 借位就跳
0042F329    .  49                dec ecx
0042F32A    .  83C9 80           or ecx,FFFFFF80
0042F32D    .  41                inc ecx
0042F32E    >  8D45 98           lea eax,dword ptr ss:[ebp-68]            ;  [ebp-68]=0
0042F331    .  51                push ecx
0042F332    .  50                push eax
0042F333    .  FF15 48114000     call dword ptr ds:[<&MSVBVM60.#608>]     ;  MSVBVM60.rtcVarBstrFromAnsi
0042F339    .  83FE 11           cmp esi,11                               ;  比較 esi與11,小就跳
0042F33C    .  72 06             jb short TranExam.0042F344
0042F33E    .  FF15 CC104000     call dword ptr ds:[<&MSVBVM60.__vbaGener>;  MSVBVM60.__vbaGenerateBoundsError
0042F344    >  8D4D 98           lea ecx,dword ptr ss:[ebp-68]
0042F347    .  51                push ecx
0042F348    .  FFD3              call ebx
0042F34A    .  8BD0              mov edx,eax
0042F34C    .  8D4D AC           lea ecx,dword ptr ss:[ebp-54]
0042F34F    .  FF15 04124000     call dword ptr ds:[<&MSVBVM60.__vbaStrMo>;  MSVBVM60.__vbaStrMove
0042F355    .  8BD0              mov edx,eax
0042F357    .  8B45 C4           mov eax,dword ptr ss:[ebp-3C]
0042F35A    .  8D0CB0            lea ecx,dword ptr ds:[eax+esi*4]
0042F35D    .  FFD7              call edi
0042F35F    .  8D4D AC           lea ecx,dword ptr ss:[ebp-54]
0042F362    .  FF15 30124000     call dword ptr ds:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStr
0042F368    .  8D4D 98           lea ecx,dword ptr ss:[ebp-68]
0042F36B    .  FF15 1C104000     call dword ptr ds:[<&MSVBVM60.__vbaFreeV>;  MSVBVM60.__vbaFreeVar
0042F371    .  B8 01000000       mov eax,1
0042F376    .  03C6              add eax,esi                              ;  esi=esi +1
0042F378    .  0F80 30030000     jo TranExam.0042F6AE
0042F37E    .  8BF0              mov esi,eax
0042F380    .^ E9 67FFFFFF       jmp TranExam.0042F2EC                    ;  迴圈
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四個迴圈e-a=4次迴圈:

0042F385    >  BE 0A000000       mov esi,0A                               ;   esi=0A
0042F38A    >  B8 0E000000       mov eax,0E                               ;  eax=0e
0042F38F    .  3BF0              cmp esi,eax                              ;  當esi大於eax的時候就調處迴圈
0042F391    .  0F8F 8C000000     jg TranExam.0042F423
0042F397    .  8BCE              mov ecx,esi
0042F399    .  8B55 D8           mov edx,dword ptr ss:[ebp-28]            ;  [ebp-28]=4b22
0042F39C    .  0FAFCE            imul ecx,esi                             ;  ecx=ecx*esi
0042F39F    .  0F80 09030000     jo TranExam.0042F6AE                     ;  溢位就死
0042F3A5    .  0FAFCE            imul ecx,esi                             ;  ecx=ecx*esi
0042F3A8    .  0F80 00030000     jo TranExam.0042F6AE                     ;  溢位就死
0042F3AE    .  83C2 1F           add edx,1F                               ;  edx=edx+1f
0042F3B1    .  0F80 F7020000     jo TranExam.0042F6AE                     ;  溢位就死
0042F3B7    .  03CA              add ecx,edx                              ;  ecx=ecx+edx
0042F3B9    .  0F80 EF020000     jo TranExam.0042F6AE                     ;  溢位就死
0042F3BF    .  81E1 7F000080     and ecx,8000007F                         ;   ecx=ecx^8000007f
0042F3C5    .  79 05             jns short TranExam.0042F3CC              ;  S=1 借位就跳
0042F3C7    .  49                dec ecx
0042F3C8    .  83C9 80           or ecx,FFFFFF80
0042F3CB    .  41                inc ecx
0042F3CC    >  8D45 98           lea eax,dword ptr ss:[ebp-68]
0042F3CF    .  51                push ecx
0042F3D0    .  50                push eax
0042F3D1    .  FF15 48114000     call dword ptr ds:[<&MSVBVM60.#608>]     ;  MSVBVM60.rtcVarBstrFromAnsi
0042F3D7    .  83FE 11           cmp esi,11                               ;  比較 esi與11,小就跳
0042F3DA    .  72 06             jb short TranExam.0042F3E2
0042F3DC    .  FF15 CC104000     call dword ptr ds:[<&MSVBVM60.__vbaGener>;  MSVBVM60.__vbaGenerateBoundsError
0042F3E2    >  8D4D 98           lea ecx,dword ptr ss:[ebp-68]
0042F3E5    .  51                push ecx
0042F3E6    .  FFD3              call ebx
0042F3E8    .  8BD0              mov edx,eax
0042F3EA    .  8D4D AC           lea ecx,dword ptr ss:[ebp-54]
0042F3ED    .  FF15 04124000     call dword ptr ds:[<&MSVBVM60.__vbaStrMo>;  MSVBVM60.__vbaStrMove
0042F3F3    .  8BD0              mov edx,eax
0042F3F5    .  8B45 C4           mov eax,dword ptr ss:[ebp-3C]
0042F3F8    .  8D0CB0            lea ecx,dword ptr ds:[eax+esi*4]
0042F3FB    .  FFD7              call edi
0042F3FD    .  8D4D AC           lea ecx,dword ptr ss:[ebp-54]
0042F400    .  FF15 30124000     call dword ptr ds:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStr
0042F406    .  8D4D 98           lea ecx,dword ptr ss:[ebp-68]
0042F409    .  FF15 1C104000     call dword ptr ds:[<&MSVBVM60.__vbaFreeV>;  MSVBVM60.__vbaFreeVar
0042F40F    .  B8 01000000       mov eax,1
0042F414    .  03C6              add eax,esi                              ;  esi=esi+1,計數加一
0042F416    .  0F80 92020000     jo TranExam.0042F6AE
0042F41C    .  8BF0              mov esi,eax
0042F41E    .^ E9 67FFFFFF       jmp TranExam.0042F38A                    ;  迴圈
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第5個迴圈,迴圈0E次:
0042F423    >  8B3D D0104000     mov edi,dword ptr ds:[<&MSVBVM60.__vbaSt>;  MSVBVM60.__vbaStrCmp
0042F429    .  33F6              xor esi,esi                              ;  esi=0
0042F42B    >  B8 0E000000       mov eax,0E                               ;  eax=0e
0042F430    .  3BF0              cmp esi,eax
0042F432    .  0F8F 93010000     jg TranExam.0042F5CB                     ;  當esi大於eax,跳出迴圈;
0042F438    >  8B1D CC104000     mov ebx,dword ptr ds:[<&MSVBVM60.__vbaGe>;  MSVBVM60.__vbaGenerateBoundsError
0042F43E    .  83FE 11           cmp esi,11                               ;  esi與11比較,大與11就BoundsError
0042F441    .  72 02             jb short TranExam.0042F445
0042F443    .  FFD3              call ebx                                 ;  <&MSVBVM60.__vbaGenerateBoundsError>
0042F445    >  83FE 11           cmp esi,11                               
0042F448    .  72 1E             jb short TranExam.0042F468               ;小與下跳
0042F44A    .  FFD3              call ebx 
0042F44C    .  83FE 11           cmp esi,11
0042F44F    .  72 17             jb short TranExam.0042F468
0042F451    .  FFD3              call ebx
0042F453    .  83FE 11           cmp esi,11
0042F456    .  72 10             jb short TranExam.0042F468
0042F458    .  FFD3              call ebx
0042F45A    .  83FE 11           cmp esi,11
0042F45D    .  72 09             jb short TranExam.0042F468
0042F45F    .  FFD3              call ebx
0042F461    .  83FE 11           cmp esi,11
0042F464    .  72 02             jb short TranExam.0042F468
0042F466    .  FFD3              call ebx
0042F468    >  8B4D C4           mov ecx,dword ptr ss:[ebp-3C]
0042F46B    .  8B14B1            mov edx,dword ptr ds:[ecx+esi*4]
0042F46E    .  52                push edx
0042F46F    .  68 28AD4000       push TranExam.0040AD28
0042F474    .  FFD7              call edi
0042F476    .  33DB              xor ebx,ebx
0042F478    .  85C0              test eax,eax
0042F47A    .  8B45 C4           mov eax,dword ptr ss:[ebp-3C]
0042F47D    .  0F9EC3            setle bl
0042F480    .  8B0CB0            mov ecx,dword ptr ds:[eax+esi*4]
0042F483    .  51                push ecx
0042F484    .  68 20AD4000       push TranExam.0040AD20
0042F489    .  FFD7              call edi
0042F48B    .  33D2              xor edx,edx
0042F48D    .  85C0              test eax,eax
0042F48F    .  8B45 C4           mov eax,dword ptr ss:[ebp-3C]
0042F492    .  0F9DC2            setge dl
0042F495    .  8B0CB0            mov ecx,dword ptr ds:[eax+esi*4]
0042F498    .  23DA              and ebx,edx
0042F49A    .  F7DB              neg ebx
0042F49C    .  1BDB              sbb ebx,ebx
0042F49E    .  51                push ecx
0042F49F    .  68 18AD4000       push TranExam.0040AD18
0042F4A4    .  F7DB              neg ebx
0042F4A6    .  FFD7              call edi
0042F4A8    .  8B55 C4           mov edx,dword ptr ss:[ebp-3C]
0042F4AB    .  899D 78FEFFFF     mov dword ptr ss:[ebp-188],ebx
0042F4B1    .  33DB              xor ebx,ebx
0042F4B3    .  85C0              test eax,eax
0042F4B5    .  8B04B2            mov eax,dword ptr ds:[edx+esi*4]
0042F4B8    .  50                push eax
0042F4B9    .  68 10AD4000       push TranExam.0040AD10
0042F4BE    .  0F9EC3            setle bl
……
0042F5B2    .^ E9 81FEFFFF       jmp TranExam.0042F438
0042F5B7    >  B8 01000000       mov eax,1
0042F5BC    .  03C6              add eax,esi            ;esi=esi+1
0042F5BE    .  0F80 EA000000     jo TranExam.0042F6AE
0042F5C4    .  8BF0              mov esi,eax
0042F5C6    .^ E9 60FEFFFF       jmp TranExam.0042F42B ;向上迴圈

到這裡第六次迴圈,迴圈0E次: 
0042F5CB    >  33F6              xor esi,esi           ;esi=0
0042F5CD    >  8B1D 54104000     mov ebx,dword ptr ds:[<&MSVBVM60.__vbaSt>;  MSVBVM60.__vbaStrCat
0042F5D3    .  BF 01000000       mov edi,1             ;edi=1 
0042F5D8    >  B8 0E000000       mov eax,0E            ;eax=0E
0042F5DD    .  3BF0              cmp esi,eax           
0042F5DF    .  7F 31             jg short TranExam.0042F612 ;大於就跳出迴圈
0042F5E1    .  83FE 11           cmp esi,11
0042F5E4    .  72 06             jb short TranExam.0042F5EC
0042F5E6    .  FF15 CC104000     call dword ptr ds:[<&MSVBVM60.__vbaGener>;  MSVBVM60.__vbaGenerateBoundsError
0042F5EC    >  8B55 C4           mov edx,dword ptr ss:[ebp-3C]
0042F5EF    .  8B4D EC           mov ecx,dword ptr ss:[ebp-14]
0042F5F2    .  51                push ecx
0042F5F3    .  8B04B2            mov eax,dword ptr ds:[edx+esi*4]   ;陣列地址
0042F5F6    .  50                push eax
0042F5F7    .  FFD3              call ebx
0042F5F9    .  8BD0              mov edx,eax
0042F5FB    .  8D4D EC           lea ecx,dword ptr ss:[ebp-14]
0042F5FE    .  FF15 04124000     call dword ptr ds:[<&MSVBVM60.__vbaStrMo>;  MSVBVM60.__vbaStrMove
0042F604    .  8BCF              mov ecx,edi
0042F606    .  03CE              add ecx,esi
0042F608    .  0F80 A0000000     jo TranExam.0042F6AE        ;溢位就跳死
0042F60E    .  8BF1              mov esi,ecx
0042F610    .^ EB C6             jmp short TranExam.0042F5D8 ;迴圈
第五次與第六次的迴圈運算好像與資料邊界檢測有關…………
最後把正確的註冊碼搬來搬去,終於把註冊嗎放到了:0017473C 

0017473C   4B 00 53 00 34 00 47 00 6C 00 6C 00 47 00 46 00  K.S.4.G.l.l.G.F.
0017474C   6F 00 48 00 73 00 74 00 74 00 56 00 79 00 00 00  o.H.s.t.t.V.y...
……
到這裡真假註冊嗎放在暫存器內比較(弱點):
0042F61A    .  50                push eax ;
0042F61B    .  51                push ecx ;
0042F61C    .  6A 00             push 0
0042F61E    .  FF15 D0114000     call dword ptr ds:[<&MSVBVM60.__vbaStrCo>;  MSVBVM60.__vbaStrComp ;比較

比較完畢,不立即判斷,先回收資源,直到這裡:

0045E4DF    .  66:85FF           test di,di
0045E4E2    .  B9 04000280       mov ecx,80020004
0045E4E7    .  894D 80           mov dword ptr ss:[ebp-80],ecx
……
0045E501    .  0F84 27020000     je TranExam.0045E72E  ===這是關鍵跳,即便改了它,還是不能註冊成功,從這裡爆破不行~
它的爆破點很多,每一個功能類都要爆破,很麻煩!
最後一個很用的東西:
qiweixue 
KS4GllGFoHsttVy
註冊完畢,輸入到登錄檔,每次啟動啟動,都先比較登錄檔的註冊嗎。
HKEY_LOCAL_MACHINE\SOFTWARE\CNSOFT4U
hongriver REG_SZ  KS4GllGFoHsttVy
redriver  REG_SZ   qiweixue
偷個懶,序號產生器不逆了vb的看了就麻煩。
作者:qIwEiXuE

相關文章