论坛: 编程破解 标题: [转帖]菜鸟算法练习破文五 复制本贴地址    
作者: yongmin [yongmin]    论坛用户   登录
【破文标题】菜鸟maomaoma的算法练习破文五
【破文作者】maomaoma
【作者邮箱】
【作者主页】无
【破解工具】OD、PEiD
【破解平台】winxp
【软件名称】**休闲五子棋
【软件大小】926K
【原版下载】
【保护方式】无
【软件简介】五子棋游戏
【破解声明】我是菜鸟,学写破文,还请大侠多多指教:)
【 关键词 】  VB    VBExplorer    浮点运算    硬件写入(用关键词我觉得方便大家整理查阅)
------------------------------------------------------------------------
【破解过程】

1、PEiD扫描该软件,为Microsoft Visual Basic 5.0 / 6.0编译
2、VBExplorer反编译,得注册过程起始地址00464FD0
3、OD载入,Ctrl+G,跟随至00464FD0,F2下断点,F9运行,OD断下

(1)真假码比较

00464FD0    55              push    ebp                              ; OD断在此处
00464FD1    8BEC            mov    ebp, esp
00464FD3    83EC 0C        sub    esp, 0C
00464FD6    68 16164000    push    <jmp.&MSVBVM60.__vbaExceptHandle>
00464FDB    64:A1 00000000  mov    eax, fs:[0]
00464FE1    50              push    eax
00464FE2    64:8925 0000000>mov    fs:[0], esp
00464FE9    81EC 1C010000  sub    esp, 11C
00464FEF    53              push    ebx
00464FF0    56              push    esi
00464FF1    57              push    edi
00464FF2    8965 F4        mov    [ebp-C], esp
00464FF5    C745 F8 0016400>mov    dword ptr [ebp-8], 00401600
00464FFC    8B75 08        mov    esi, [ebp+8]
00464FFF    8BC6            mov    eax, esi
00465001    83E0 01        and    eax, 1
00465004    8945 FC        mov    [ebp-4], eax
00465007    83E6 FE        and    esi, FFFFFFFE
0046500A    56              push    esi
0046500B    8975 08        mov    [ebp+8], esi
0046500E    8B0E            mov    ecx, [esi]
00465010    FF51 04        call    [ecx+4]
00465013    8B15 5C704600  mov    edx, [46705C]
00465019    8B0D 58704600  mov    ecx, [467058]                    ; 真注册码入ECX
0046501F    33C0            xor    eax, eax
00465021    3BD1            cmp    edx, ecx
00465023    8945 E8        mov    [ebp-18], eax
00465026    8945 E4        mov    [ebp-1C], eax
00465029    8945 E0        mov    [ebp-20], eax
0046502C    8945 DC        mov    [ebp-24], eax
0046502F    8945 CC        mov    [ebp-34], eax
00465032    8945 BC        mov    [ebp-44], eax
00465035    8945 AC        mov    [ebp-54], eax
00465038    8945 9C        mov    [ebp-64], eax
0046503B    8945 8C        mov    [ebp-74], eax
0046503E    8985 7CFFFFFF  mov    [ebp-84], eax
00465044    8985 6CFFFFFF  mov    [ebp-94], eax
0046504A    8985 5CFFFFFF  mov    [ebp-A4], eax
00465050    8985 4CFFFFFF  mov    [ebp-B4], eax
00465056    8985 3CFFFFFF  mov    [ebp-C4], eax
0046505C    8985 2CFFFFFF  mov    [ebp-D4], eax
00465062    0F84 C8090000  je      00465A30
00465068    8B06            mov    eax, [esi]
0046506A    56              push    esi
0046506B    FF90 00030000  call    [eax+300]
00465071    8B1D 7C104000  mov    ebx, [<&MSVBVM60.__vbaObjSet>]  ; MSVBVM60.__vbaObjSet
00465077    8D4D E0        lea    ecx, [ebp-20]
0046507A    50              push    eax
0046507B    51              push    ecx
0046507C    FFD3            call    ebx
0046507E    8BF8            mov    edi, eax
00465080    8D45 E8        lea    eax, [ebp-18]
00465083    50              push    eax
00465084    57              push    edi
00465085    8B17            mov    edx, [edi]
00465087    FF92 A0000000  call    [edx+A0]                        ; 取假码
0046508D    85C0            test    eax, eax
0046508F    DBE2            fclex
00465091    7D 12          jge    short 004650A5
00465093    68 A0000000    push    0A0
00465098    68 2C134500    push    0045132C
0046509D    57              push    edi
0046509E    50              push    eax
0046509F    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
004650A5    8B4D E8        mov    ecx, [ebp-18]
004650A8    51              push    ecx
004650A9    68 04064500    push    00450604
004650AE    FF15 BC104000  call    [<&MSVBVM60.__vbaStrCmp>]        ; MSVBVM60.__vbaStrCmp
004650B4    8BF8            mov    edi, eax
004650B6    8D4D E8        lea    ecx, [ebp-18]
004650B9    F7DF            neg    edi
004650BB    1BFF            sbb    edi, edi
004650BD    F7DF            neg    edi
004650BF    F7DF            neg    edi
004650C1    FF15 BC114000  call    [<&MSVBVM60.__vbaFreeStr>]      ; MSVBVM60.__vbaFreeStr
004650C7    8D4D E0        lea    ecx, [ebp-20]
004650CA    FF15 B8114000  call    [<&MSVBVM60.__vbaFreeObj>]      ; MSVBVM60.__vbaFreeObj
004650D0    66:85FF        test    di, di
004650D3    0F84 22080000  je      004658FB
004650D9    8B16            mov    edx, [esi]
004650DB    56              push    esi
004650DC    FF92 00030000  call    [edx+300]
004650E2    50              push    eax
004650E3    8D45 E0        lea    eax, [ebp-20]
004650E6    50              push    eax
004650E7    FFD3            call    ebx
004650E9    8BF8            mov    edi, eax
004650EB    8D55 E8        lea    edx, [ebp-18]
004650EE    52              push    edx
004650EF    57              push    edi
004650F0    8B0F            mov    ecx, [edi]
004650F2    FF91 A0000000  call    [ecx+A0]                        ; 取假码
004650F8    85C0            test    eax, eax
004650FA    DBE2            fclex
004650FC    7D 12          jge    short 00465110
004650FE    68 A0000000    push    0A0
00465103    68 2C134500    push    0045132C
00465108    57              push    edi
00465109    50              push    eax
0046510A    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
00465110    8B45 E8        mov    eax, [ebp-18]
00465113    C745 E8 0000000>mov    dword ptr [ebp-18], 0
0046511A    8945 D4        mov    [ebp-2C], eax
0046511D    8D45 CC        lea    eax, [ebp-34]
00465120    50              push    eax
00465121    C745 CC 0800000>mov    dword ptr [ebp-34], 8
00465128    FF15 C4104000  call    [<&MSVBVM60.#561>]              ; MSVBVM60.rtcIsNumeric
0046512E    66:8BF8        mov    di, ax
00465131    8D4D E0        lea    ecx, [ebp-20]
00465134    F7D7            not    edi
00465136    FF15 B8114000  call    [<&MSVBVM60.__vbaFreeObj>]      ; MSVBVM60.__vbaFreeObj
0046513C    8D4D CC        lea    ecx, [ebp-34]
0046513F    FF15 24104000  call    [<&MSVBVM60.__vbaFreeVar>]      ; MSVBVM60.__vbaFreeVar
00465145    66:85FF        test    di, di
00465148    0F84 9D010000  je      004652EB
0046514E    BF 0A000000    mov    edi, 0A
00465153    B8 04000280    mov    eax, 80020004
00465158    897D 9C        mov    [ebp-64], edi
0046515B    897D AC        mov    [ebp-54], edi
0046515E    8B3D 80114000  mov    edi, [<&MSVBVM60.__vbaVarDup>]  ; MSVBVM60.__vbaVarDup
00465164    8D95 3CFFFFFF  lea    edx, [ebp-C4]
0046516A    8D4D BC        lea    ecx, [ebp-44]
0046516D    8945 A4        mov    [ebp-5C], eax
00465170    8945 B4        mov    [ebp-4C], eax
00465173    C785 44FFFFFF 3>mov    dword ptr [ebp-BC], 0045093C
0046517D    C785 3CFFFFFF 0>mov    dword ptr [ebp-C4], 8
00465187    FFD7            call    edi
00465189    8D95 4CFFFFFF  lea    edx, [ebp-B4]
0046518F    8D4D CC        lea    ecx, [ebp-34]
00465192    C785 54FFFFFF 4>mov    dword ptr [ebp-AC], 00451340
0046519C    C785 4CFFFFFF 0>mov    dword ptr [ebp-B4], 8
004651A6    FFD7            call    edi
004651A8    8D4D 9C        lea    ecx, [ebp-64]
004651AB    8D55 AC        lea    edx, [ebp-54]
004651AE    51              push    ecx
004651AF    8D45 BC        lea    eax, [ebp-44]
004651B2    52              push    edx
004651B3    50              push    eax
004651B4    8D4D CC        lea    ecx, [ebp-34]
004651B7    6A 30          push    30
004651B9    51              push    ecx
004651BA    FF15 80104000  call    [<&MSVBVM60.#595>]              ; MSVBVM60.rtcMsgBox
004651C0    8D55 9C        lea    edx, [ebp-64]
004651C3    8D45 AC        lea    eax, [ebp-54]
004651C6    52              push    edx
004651C7    8D4D BC        lea    ecx, [ebp-44]
004651CA    50              push    eax
004651CB    8D55 CC        lea    edx, [ebp-34]
004651CE    51              push    ecx
004651CF    52              push    edx
004651D0    6A 04          push    4
004651D2    FF15 38104000  call    [<&MSVBVM60.__vbaFreeVarList>]  ; MSVBVM60.__vbaFreeVarList
004651D8    8B06            mov    eax, [esi]
004651DA    83C4 14        add    esp, 14
004651DD    56              push    esi
004651DE    FF90 00030000  call    [eax+300]
004651E4    8D4D E0        lea    ecx, [ebp-20]
004651E7    50              push    eax
004651E8    51              push    ecx
004651E9    FFD3            call    ebx
004651EB    8BF8            mov    edi, eax
004651ED    57              push    edi
004651EE    8B17            mov    edx, [edi]
004651F0    FF92 04020000  call    [edx+204]
004651F6    85C0            test    eax, eax
004651F8    DBE2            fclex
004651FA    7D 12          jge    short 0046520E
004651FC    68 04020000    push    204
00465201    68 2C134500    push    0045132C
00465206    57              push    edi
00465207    50              push    eax
00465208    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
0046520E    8D4D E0        lea    ecx, [ebp-20]
00465211    FF15 B8114000  call    [<&MSVBVM60.__vbaFreeObj>]      ; MSVBVM60.__vbaFreeObj
00465217    8B06            mov    eax, [esi]
00465219    56              push    esi
0046521A    FF90 00030000  call    [eax+300]
00465220    8D4D E0        lea    ecx, [ebp-20]
00465223    50              push    eax
00465224    51              push    ecx
00465225    FFD3            call    ebx
00465227    8BF8            mov    edi, eax
00465229    6A 00          push    0
0046522B    57              push    edi
0046522C    8B17            mov    edx, [edi]
0046522E    FF92 14010000  call    [edx+114]
00465234    85C0            test    eax, eax
00465236    DBE2            fclex
00465238    7D 12          jge    short 0046524C
0046523A    68 14010000    push    114
0046523F    68 2C134500    push    0045132C
00465244    57              push    edi
00465245    50              push    eax
00465246    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
0046524C    8D4D E0        lea    ecx, [ebp-20]
0046524F    FF15 B8114000  call    [<&MSVBVM60.__vbaFreeObj>]      ; MSVBVM60.__vbaFreeObj
00465255    8B06            mov    eax, [esi]
00465257    56              push    esi
00465258    FF90 00030000  call    [eax+300]
0046525E    8D4D DC        lea    ecx, [ebp-24]
00465261    50              push    eax
00465262    51              push    ecx
00465263    FFD3            call    ebx
00465265    8B16            mov    edx, [esi]
00465267    56              push    esi
00465268    8BF8            mov    edi, eax
0046526A    FF92 00030000  call    [edx+300]
00465270    50              push    eax
00465271    8D45 E0        lea    eax, [ebp-20]
00465274    50              push    eax
00465275    FFD3            call    ebx
00465277    8BF0            mov    esi, eax
00465279    8D55 E8        lea    edx, [ebp-18]
0046527C    52              push    edx
0046527D    56              push    esi
0046527E    8B0E            mov    ecx, [esi]
00465280    FF91 A0000000  call    [ecx+A0]
00465286    85C0            test    eax, eax
00465288    DBE2            fclex
0046528A    7D 12          jge    short 0046529E
0046528C    68 A0000000    push    0A0
00465291    68 2C134500    push    0045132C
00465296    56              push    esi
00465297    50              push    eax
00465298    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
0046529E    8B45 E8        mov    eax, [ebp-18]
004652A1    8B37            mov    esi, [edi]
004652A3    50              push    eax
004652A4    FF15 28104000  call    [<&MSVBVM60.__vbaLenBstr>]      ; MSVBVM60.__vbaLenBstr
004652AA    50              push    eax
004652AB    57              push    edi
004652AC    FF96 1C010000  call    [esi+11C]
004652B2    85C0            test    eax, eax
004652B4    DBE2            fclex
004652B6    7D 12          jge    short 004652CA
004652B8    68 1C010000    push    11C
004652BD    68 2C134500    push    0045132C
004652C2    57              push    edi
004652C3    50              push    eax
004652C4    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
004652CA    8D4D E8        lea    ecx, [ebp-18]
004652CD    FF15 BC114000  call    [<&MSVBVM60.__vbaFreeStr>]      ; MSVBVM60.__vbaFreeStr
004652D3    8D4D DC        lea    ecx, [ebp-24]
004652D6    8D55 E0        lea    edx, [ebp-20]
004652D9    51              push    ecx
004652DA    52              push    edx
004652DB    6A 02          push    2
004652DD    FF15 4C104000  call    [<&MSVBVM60.__vbaFreeObjList>]  ; MSVBVM60.__vbaFreeObjList
004652E3    83C4 0C        add    esp, 0C
004652E6    E9 43070000    jmp    00465A2E
004652EB    8B06            mov    eax, [esi]
004652ED    56              push    esi
004652EE    FF90 00030000  call    [eax+300]
004652F4    8D4D E0        lea    ecx, [ebp-20]
004652F7    50              push    eax
004652F8    51              push    ecx
004652F9    FFD3            call    ebx
004652FB    8BF8            mov    edi, eax
004652FD    8D45 E8        lea    eax, [ebp-18]
00465300    50              push    eax
00465301    57              push    edi
00465302    8B17            mov    edx, [edi]
00465304    FF92 A0000000  call    [edx+A0]                        ; 取假码
0046530A    85C0            test    eax, eax
0046530C    DBE2            fclex
0046530E    7D 12          jge    short 00465322
00465310    68 A0000000    push    0A0
00465315    68 2C134500    push    0045132C
0046531A    57              push    edi
0046531B    50              push    eax
0046531C    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
00465322    8B4D E8        mov    ecx, [ebp-18]
00465325    51              push    ecx
00465326    FF15 40114000  call    [<&MSVBVM60.__vbaR8Str>]        ; MSVBVM60.__vbaR8Str
0046532C    DB05 58704600  fild    dword ptr [467058]              ; 真码装入st0
00465332    DD9D E0FEFFFF  fstp    qword ptr [ebp-120]              ; 真码装入st7
00465338    DC9D E0FEFFFF  fcomp  qword ptr [ebp-120]              ; 真假码比较
0046533E    DFE0            fstsw  ax                              ; 保存状态子到AX
00465340    F6C4 40        test    ah, 40
00465343    74 07          je      short 0046534C
00465345    BF 01000000    mov    edi, 1
0046534A    EB 02          jmp    short 0046534E
0046534C    33FF            xor    edi, edi
0046534E    8D4D E8        lea    ecx, [ebp-18]
00465351    FF15 BC114000  call    [<&MSVBVM60.__vbaFreeStr>]      ; MSVBVM60.__vbaFreeStr
00465357    8D4D E0        lea    ecx, [ebp-20]
0046535A    FF15 B8114000  call    [<&MSVBVM60.__vbaFreeObj>]      ; MSVBVM60.__vbaFreeObj
00465360    F7DF            neg    edi
00465362    66:85FF        test    di, di
00465365    0F84 71030000  je      004656DC
0046536B    A1 68744600    mov    eax, [467468]
00465370    85C0            test    eax, eax
00465372    75 10          jnz    short 00465384
00465374    68 68744600    push    00467468                        ; ASCII ",沐"
00465379    68 F4084500    push    004508F4
0046537E    FF15 44114000  call    [<&MSVBVM60.__vbaNew2>]          ; MSVBVM60.__vbaNew2
00465384    8B3D 68744600  mov    edi, [467468]
0046538A    8D45 E0        lea    eax, [ebp-20]
0046538D    50              push    eax
0046538E    57              push    edi
0046538F    8B17            mov    edx, [edi]
00465391    FF52 14        call    [edx+14]
00465394    85C0            test    eax, eax
00465396    DBE2            fclex
00465398    7D 0F          jge    short 004653A9
0046539A    6A 14          push    14
0046539C    68 90054500    push    00450590
004653A1    57              push    edi
004653A2    50              push    eax
004653A3    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
004653A9    8B45 E0        mov    eax, [ebp-20]
004653AC    8D55 E8        lea    edx, [ebp-18]
004653AF    52              push    edx
004653B0    50              push    eax
004653B1    8B08            mov    ecx, [eax]
004653B3    8BF8            mov    edi, eax
004653B5    FF51 58        call    [ecx+58]
004653B8    85C0            test    eax, eax
004653BA    DBE2            fclex
004653BC    7D 0F          jge    short 004653CD
004653BE    6A 58          push    58
004653C0    68 04094500    push    00450904
004653C5    57              push    edi
004653C6    50              push    eax
004653C7    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
004653CD    8B06            mov    eax, [esi]
004653CF    56              push    esi
004653D0    FF90 00030000  call    [eax+300]
004653D6    8D4D DC        lea    ecx, [ebp-24]
004653D9    50              push    eax
004653DA    51              push    ecx
004653DB    FFD3            call    ebx
004653DD    8BF8            mov    edi, eax
004653DF    8D45 E4        lea    eax, [ebp-1C]
004653E2    50              push    eax
004653E3    57              push    edi
004653E4    8B17            mov    edx, [edi]
004653E6    FF92 A0000000  call    [edx+A0]
004653EC    85C0            test    eax, eax
004653EE    DBE2            fclex
004653F0    7D 12          jge    short 00465404
004653F2    68 A0000000    push    0A0
004653F7    68 2C134500    push    0045132C
004653FC    57              push    edi
004653FD    50              push    eax
004653FE    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
00465404    8B4D E4        mov    ecx, [ebp-1C]
00465407    8B55 E8        mov    edx, [ebp-18]
0046540A    51              push    ecx
0046540B    68 5C0A4500    push    00450A5C                        ; hawk wzq ma
00465410    68 500A4500    push    00450A50                        ; zc
00465415    52              push    edx
00465416    FF15 08104000  call    [<&MSVBVM60.#690>]              ; MSVBVM60.rtcSaveSetting
0046541C    8D45 E4        lea    eax, [ebp-1C]
0046541F    8D4D E8        lea    ecx, [ebp-18]
00465422    50              push    eax
00465423    51              push    ecx
00465424    6A 02          push    2
00465426    FF15 5C114000  call    [<&MSVBVM60.__vbaFreeStrList>]  ; MSVBVM60.__vbaFreeStrList
0046542C    8D55 DC        lea    edx, [ebp-24]
0046542F    8D45 E0        lea    eax, [ebp-20]
00465432    52              push    edx
00465433    50              push    eax
00465434    6A 02          push    2
00465436    FF15 4C104000  call    [<&MSVBVM60.__vbaFreeObjList>]  ; MSVBVM60.__vbaFreeObjList
0046543C    83C4 18        add    esp, 18
0046543F    BF 0A000000    mov    edi, 0A
00465444    8D4D CC        lea    ecx, [ebp-34]
00465447    57              push    edi
00465448    51              push    ecx
00465449    FF15 18114000  call    [<&MSVBVM60.#608>]              ; MSVBVM60.rtcVarBstrFromAnsi
0046544F    8D55 AC        lea    edx, [ebp-54]
00465452    57              push    edi
00465453    52              push    edx
00465454    FF15 18114000  call    [<&MSVBVM60.#608>]              ; MSVBVM60.rtcVarBstrFromAnsi
0046545A    89BD 5CFFFFFF  mov    [ebp-A4], edi
00465460    89BD 6CFFFFFF  mov    [ebp-94], edi
00465466    B8 04000280    mov    eax, 80020004
0046546B    BF 08000000    mov    edi, 8
00465470    8D95 2CFFFFFF  lea    edx, [ebp-D4]
00465476    8D8D 7CFFFFFF  lea    ecx, [ebp-84]
0046547C    8985 64FFFFFF  mov    [ebp-9C], eax
00465482    8985 74FFFFFF  mov    [ebp-8C], eax
00465488    C785 34FFFFFF C>mov    dword ptr [ebp-CC], 004505C8    ; ASCII "�c:y"
00465492    89BD 2CFFFFFF  mov    [ebp-D4], edi
00465498    FF15 80114000  call    [<&MSVBVM60.__vbaVarDup>]        ; MSVBVM60.__vbaVarDup
0046549E    8D85 5CFFFFFF  lea    eax, [ebp-A4]
004654A4    8D8D 6CFFFFFF  lea    ecx, [ebp-94]
004654AA    50              push    eax
004654AB    8D95 7CFFFFFF  lea    edx, [ebp-84]
004654B1    51              push    ecx
004654B2    52              push    edx
004654B3    8D85 4CFFFFFF  lea    eax, [ebp-B4]
004654B9    6A 40          push    40
004654BB    8D4D CC        lea    ecx, [ebp-34]
004654BE    50              push    eax
004654BF    8D55 BC        lea    edx, [ebp-44]
004654C2    89BD 4CFFFFFF  mov    [ebp-B4], edi
004654C8    89BD 3CFFFFFF  mov    [ebp-C4], edi
004654CE    8B3D 7C114000  mov    edi, [<&MSVBVM60.__vbaVarAdd>]  ; MSVBVM60.__vbaVarAdd
004654D4    51              push    ecx
004654D5    52              push    edx
004654D6    C785 54FFFFFF 6>mov    dword ptr [ebp-AC], 00451368
004654E0    C785 44FFFFFF 7>mov    dword ptr [ebp-BC], 00451378
004654EA    FFD7            call    edi
004654EC    50              push    eax
004654ED    8D45 AC        lea    eax, [ebp-54]
004654F0    8D4D 9C        lea    ecx, [ebp-64]
004654F3    50              push    eax
004654F4    51              push    ecx
004654F5    FFD7            call    edi
004654F7    50              push    eax
004654F8    8D95 3CFFFFFF  lea    edx, [ebp-C4]
004654FE    8D45 8C        lea    eax, [ebp-74]
00465501    52              push    edx
00465502    50              push    eax
00465503    FFD7            call    edi
00465505    50              push    eax
00465506    FF15 80104000  call    [<&MSVBVM60.#595>]              ; MSVBVM60.rtcMsgBox
0046550C    8D8D 5CFFFFFF  lea    ecx, [ebp-A4]
00465512    8D95 6CFFFFFF  lea    edx, [ebp-94]
00465518    51              push    ecx
00465519    8D85 7CFFFFFF  lea    eax, [ebp-84]
0046551F    52              push    edx
00465520    8D4D 8C        lea    ecx, [ebp-74]
00465523    50              push    eax
00465524    51              push    ecx
00465525    8D55 9C        lea    edx, [ebp-64]
00465528    8D45 AC        lea    eax, [ebp-54]
0046552B    52              push    edx
0046552C    8D4D BC        lea    ecx, [ebp-44]
0046552F    50              push    eax
00465530    8D55 CC        lea    edx, [ebp-34]
00465533    51              push    ecx
00465534    52              push    edx
00465535    6A 08          push    8
00465537    FF15 38104000  call    [<&MSVBVM60.__vbaFreeVarList>]  ; MSVBVM60.__vbaFreeVarList
0046553D    A1 10704600    mov    eax, [467010]
00465542    83C4 24        add    esp, 24
00465545    85C0            test    eax, eax
00465547    75 10          jnz    short 00465559
00465549    68 10704600    push    00467010
0046554E    68 F4F04400    push    0044F0F4
00465553    FF15 44114000  call    [<&MSVBVM60.__vbaNew2>]          ; MSVBVM60.__vbaNew2
00465559    A1 10704600    mov    eax, [467010]
0046555E    8985 F8FEFFFF  mov    [ebp-108], eax
00465564    A1 68744600    mov    eax, [467468]
00465569    85C0            test    eax, eax
0046556B    75 10          jnz    short 0046557D
0046556D    68 68744600    push    00467468                        ; ASCII ",沐"
00465572    68 F4084500    push    004508F4
00465577    FF15 44114000  call    [<&MSVBVM60.__vbaNew2>]          ; MSVBVM60.__vbaNew2
0046557D    8B3D 68744600  mov    edi, [467468]
00465583    8D55 E0        lea    edx, [ebp-20]
00465586    52              push    edx
00465587    57              push    edi
00465588    8B0F            mov    ecx, [edi]
0046558A    FF51 14        call    [ecx+14]
0046558D    85C0            test    eax, eax
0046558F    DBE2            fclex
00465591    7D 0F          jge    short 004655A2
00465593    6A 14          push    14
00465595    68 90054500    push    00450590
0046559A    57              push    edi
0046559B    50              push    eax
0046559C    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
004655A2    8B45 E0        mov    eax, [ebp-20]
004655A5    8D55 E8        lea    edx, [ebp-18]
004655A8    52              push    edx
004655A9    50              push    eax
004655AA    8B08            mov    ecx, [eax]
004655AC    8BF8            mov    edi, eax
004655AE    FF51 60        call    [ecx+60]
004655B1    85C0            test    eax, eax
004655B3    DBE2            fclex
004655B5    7D 0F          jge    short 004655C6
004655B7    6A 60          push    60
004655B9    68 04094500    push    00450904
004655BE    57              push    edi
004655BF    50              push    eax
004655C0    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
004655C6    8B4D E8        mov    ecx, [ebp-18]
004655C9    8B85 F8FEFFFF  mov    eax, [ebp-108]
004655CF    51              push    ecx
004655D0    68 800A4500    push    00450A80                        ; UNICODE "========>"
004655D5    8B38            mov    edi, [eax]
004655D7    FF15 58104000  call    [<&MSVBVM60.__vbaStrCat>]        ; MSVBVM60.__vbaStrCat
004655DD    8BD0            mov    edx, eax
004655DF    8D4D E4        lea    ecx, [ebp-1C]
004655E2    FF15 94114000  call    [<&MSVBVM60.__vbaStrMove>]      ; MSVBVM60.__vbaStrMove
004655E8    8BD7            mov    edx, edi
004655EA    8BBD F8FEFFFF  mov    edi, [ebp-108]
004655F0    50              push    eax
004655F1    57              push    edi
004655F2    FF52 54        call    [edx+54]
004655F5    85C0            test    eax, eax
004655F7    DBE2            fclex
004655F9    7D 0F          jge    short 0046560A
004655FB    6A 54          push    54
004655FD    68 64014500    push    00450164
00465602    57              push    edi
00465603    50              push    eax
00465604    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
0046560A    8D45 E4        lea    eax, [ebp-1C]
0046560D    8D4D E8        lea    ecx, [ebp-18]
00465610    50              push    eax
00465611    51              push    ecx
00465612    6A 02          push    2
00465614    FF15 5C114000  call    [<&MSVBVM60.__vbaFreeStrList>]  ; MSVBVM60.__vbaFreeStrList
0046561A    83C4 0C        add    esp, 0C
0046561D    8D4D E0        lea    ecx, [ebp-20]
00465620    FF15 B8114000  call    [<&MSVBVM60.__vbaFreeObj>]      ; MSVBVM60.__vbaFreeObj
00465626    8B16            mov    edx, [esi]
00465628    56              push    esi
00465629    FF92 00030000  call    [edx+300]
0046562F    50              push    eax
00465630    8D45 E0        lea    eax, [ebp-20]
00465633    50              push    eax
00465634    FFD3            call    ebx
00465636    8BF8            mov    edi, eax
00465638    8D55 E8        lea    edx, [ebp-18]
0046563B    52              push    edx
0046563C    57              push    edi
0046563D    8B0F            mov    ecx, [edi]
0046563F    FF91 A0000000  call    [ecx+A0]
00465645    85C0            test    eax, eax
00465647    DBE2            fclex
00465649    7D 12          jge    short 0046565D
0046564B    68 A0000000    push    0A0
00465650    68 2C134500    push    0045132C
00465655    57              push    edi
00465656    50              push    eax
00465657    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
0046565D    8B45 E8        mov    eax, [ebp-18]
00465660    50              push    eax
00465661    FF15 58114000  call    [<&MSVBVM60.__vbaI4Str>]        ; MSVBVM60.__vbaI4Str
00465667    8D4D E8        lea    ecx, [ebp-18]
0046566A    A3 5C704600    mov    [46705C], eax
0046566F    FF15 BC114000  call    [<&MSVBVM60.__vbaFreeStr>]      ; MSVBVM60.__vbaFreeStr
00465675    8B1D B8114000  mov    ebx, [<&MSVBVM60.__vbaFreeObj>]  ; MSVBVM60.__vbaFreeObj
0046567B    8D4D E0        lea    ecx, [ebp-20]
0046567E    FFD3            call    ebx
00465680    A1 68744600    mov    eax, [467468]
00465685    85C0            test    eax, eax
00465687    75 10          jnz    short 00465699
00465689    68 68744600    push    00467468                        ; ASCII ",沐"
0046568E    68 F4084500    push    004508F4
00465693    FF15 44114000  call    [<&MSVBVM60.__vbaNew2>]          ; MSVBVM60.__vbaNew2
00465699    8B3D 68744600  mov    edi, [467468]
0046569F    8D4D E0        lea    ecx, [ebp-20]
004656A2    56              push    esi
004656A3    51              push    ecx
004656A4    8B17            mov    edx, [edi]
004656A6    8995 D8FEFFFF  mov    [ebp-128], edx
004656AC    FF15 88104000  call    [<&MSVBVM60.__vbaObjSetAddref>]  ; MSVBVM60.__vbaObjSetAddref
004656B2    8B95 D8FEFFFF  mov    edx, [ebp-128]
004656B8    50              push    eax
004656B9    57              push    edi
004656BA    FF52 10        call    [edx+10]
004656BD    85C0            test    eax, eax
004656BF    DBE2            fclex
004656C1    7D 0F          jge    short 004656D2
004656C3    6A 10          push    10
004656C5    68 90054500    push    00450590
004656CA    57              push    edi
004656CB    50              push    eax
004656CC    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
004656D2    8D4D E0        lea    ecx, [ebp-20]
004656D5    FFD3            call    ebx
004656D7    E9 52030000    jmp    00465A2E
004656DC    8B06            mov    eax, [esi]
004656DE    56              push    esi
004656DF    FF90 00030000  call    [eax+300]
004656E5    8D4D E0        lea    ecx, [ebp-20]
004656E8    50              push    eax
004656E9    51              push    ecx
004656EA    FFD3            call    ebx
004656EC    8BF8            mov    edi, eax
004656EE    8D45 E8        lea    eax, [ebp-18]
004656F1    50              push    eax
004656F2    57              push    edi
004656F3    8B17            mov    edx, [edi]
004656F5    FF92 A0000000  call    [edx+A0]                        ; 取假码
004656FB    85C0            test    eax, eax
004656FD    DBE2            fclex
004656FF    7D 12          jge    short 00465713
00465701    68 A0000000    push    0A0
00465706    68 2C134500    push    0045132C
0046570B    57              push    edi
0046570C    50              push    eax
0046570D    FF15 60104000  call    [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
00465713    8B4D E8        mov    ecx, [ebp-18]
00465716    51              push    ecx
00465717    FF15 40114000  call    [<&MSVBVM60.__vbaR8Str>]        ; MSVBVM60.__vbaR8Str
0046571D    DB05 58704600  fild    dword ptr [467058]              ; 真码装入st0
00465723    DD9D D0FEFFFF  fstp    qword ptr [ebp-130]              ; 真码装入st7
00465729    DC9D D0FEFFFF  fcomp  qword ptr [ebp-130]              ; 真假码比较
0046572F    DFE0            fstsw  ax                              ; 保存状态子到AX
00465731    F6C4 40        test    ah, 40
00465734    75 07          jnz    short 0046573D
00465736    B8 01000000    mov    eax, 1
0046573B    EB 02          jmp    short 0046573F
0046573D    33C0            xor    eax, eax
0046573F    F7D8            neg    eax
00465741    8D4D E8        lea    ecx, [ebp-18]
00465744    8BF8            mov    edi, eax
00465746    FF15 BC114000  call    [<&MSVBVM60.__vbaFreeStr>]      ; MSVBVM60.__vbaFreeStr
0046574C    8D4D E0        lea    ecx, [ebp-20]
0046574F    FF15 B8114000  call    [<&MSVBVM60.__vbaFreeObj>]      ; MSVBVM60.__vbaFreeObj
00465755    66:85FF        test    di, di
00465758    0F84 D0020000  je      00465A2E
0046575E    BF 0A000000    mov    edi, 0A
00465763    B8 04000280    mov    eax, 80020004
00465768    897D 9C        mov    [ebp-64], edi
0046576B    897D AC        mov    [ebp-54], edi
0046576E    8B3D 80114000  mov    edi, [<&MSVBVM60.__vbaVarDup>]  ; MSVBVM60.__vbaVarDup
00465774    8D95 3CFFFFFF  lea    edx, [ebp-C4]
0046577A    8D4D BC        lea    ecx, [ebp-44]
0046577D    8945 A4        mov    [ebp-5C], eax
00465780    8945 B4        mov    [ebp-4C], eax
00465783    C785 44FFFFFF 3>mov    dword ptr [ebp-BC], 0045093C
0046578D    C785 3CFFFFFF 0>mov    dword ptr [ebp-C4], 8
00465797    FFD7            call    edi
00465799    8D95 4CFFFFFF  lea    edx, [ebp-B4]
0046579F    8D4D CC        lea    ecx, [ebp-34]
004657A2    C785 54FFFFFF 4>mov    dword ptr [ebp-AC], 00451340
004657AC    C785 4CFFFFFF 0>mov    dword ptr [ebp-B4], 8
004657B6    FFD7            call    edi
004657B8    8D55 9C        lea    edx, [ebp-64]
004657BB    8D45 AC        lea    eax, [ebp-54]
004657BE    52              push    edx
004657BF    8D4D BC        lea    ecx, [ebp-44]
004657C2    50              push    eax
004657C3    51              push    ecx
004657C4    8D55 CC        lea    edx, [ebp-34]
004657C7    6A 30          push    30
004657C9    52              push    edx
004657CA    FF15 80104000  call    [<&MSVBVM60.#595>]              ; MSVBVM60.rtcMsgBox
004657D0    8D45 9C        lea    eax, [ebp-64]
004657D3    8D4D AC        lea    ecx, [ebp-54]
004657D6    50              push    eax
004657D7    8D55 BC        lea    edx, [ebp-44]
004657DA    51              push    ecx
004657DB    8D45 CC        lea    eax, [ebp-34]
004657DE    52              push    edx
004657DF    50              push    eax
004657E0    6A 04          push    4


(2)追踪真注册码来源

1、根据第一步,得知真码保存于内存[467058],ctrl+F2重新运行程序,在数据窗口,Ctrl+G跟随至00467058,下硬件写入断点
2、F9运行,程序断在系统领空,alt+F9,返回到程序领空如下位置处

0045614D    A3 58704600    mov    [467058], eax                    ; eax值(即真码十六进制值)保存于内存00467058处
00456152    FFD6            call    esi
00456154    A1 68744600    mov    eax, [467468]
00456159    85C0            test    eax, eax
0045615B    75 10          jnz    short 0045616D

3、向上查看,在

0045612D    E8 0EEA0000    call    00464B40                        ;
00456132    8BC8            mov    ecx, eax

0045612D处下断点

4、重新运行程序,程序断下

0045612D    E8 0EEA0000    call    00464B40                        ; OD断在此处,此处为机器码计算call
00456132    8BC8            mov    ecx, eax
00456134    FF15 74104000  call    [<&MSVBVM60.__vbaI4Abs>]        ; MSVBVM60.__vbaI4Abs
0045613A    99              cdq
0045613B    2BC2            sub    eax, edx                        ; eax=eax-edx
0045613D    8D4D D4        lea    ecx, [ebp-2C]
00456140    D1F8            sar    eax, 1                          ; eax算术右移
00456142    2D 0EFB2D01    sub    eax, 12DFB0E                    ; eax=eax-12DFB0E
00456147    0F80 45150000  jo      00457692                        ; 溢出则跳至程序出错处理部分
0045614D    A3 58704600    mov    [467058], eax                    ; eax值(即真码十六进制值)保存于内存00467058处备用






------------------------------------------------------------------------
【破解总结】

1、注册码在程序运行后由机器码计算而来,并保存于内存中;
2、真假码浮点运算比较;
3、注册码以明码形式保存于注册表中。
------------------------------------------------------------------------
【版权声明】本文系作者原创, 转载请注明作者并保持文章的完整, 谢谢!


地主 发表时间: 06-12-24 23:22

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号