用ollyDbg尋找VB程式的註冊核心的一點思路

看雪資料發表於2003-06-20

 

用ollyDbg尋找VB程式的註冊核心的一點思路
   --北森職業規劃人才測評軟體 專業版破解手記


物件:北森職業規劃人才測評軟體 專業版2003
作者:lordor[CCG][BCG][DFCG]
Mail:lordor@sina.com
QQ:88378557
目的:屬技術交流,無其它目的,請不要任意散佈或用用商業用途。初學破解,如有不對的地方歡迎批評指出。
工具:ollydbg1.09C,fi301


一、分析一下,VB編寫程式,用Messagebox提示出錯,用W32Dasm找不到一點提示,ok,那就用VB殺手-ollyDbg來尋找註冊核跟我來。

二、首先載入程式,ctrl+A分析程式,剛開始時是停在程式入口點,現在向上看,可以看到VB的很多函式,如下:

00401519      25            DB 25                                    ;  CHAR '%'
0040151A   .  50            PUSH EAX
0040151B   >  1040 00       ADC BYTE PTR DS:[EAX],AL
0040151E   .- FF25 B8104000 JMP DWORD PTR DS:[<&MSVBVM60.EVENT_SINK_>;  MSVBVM60.EVENT_SINK_QueryInterface
00401524   .- FF25 8C104000 JMP DWORD PTR DS:[<&MSVBVM60.EVENT_SINK_>;  MSVBVM60.EVENT_SINK_AddRef
0040152A   .- FF25 A8104000 JMP DWORD PTR DS:[<&MSVBVM60.EVENT_SINK_>;  MSVBVM60.EVENT_SINK_Release
00401530   .- FF25 60104000 JMP DWORD PTR DS:[<&MSVBVM60.#303>]      ;  MSVBVM60.GetMemStr
00401536   .- FF25 74104000 JMP DWORD PTR DS:[<&MSVBVM60.#309>]      ;  MSVBVM60.PutMemStr
0040153C   .- FF25 4C104000 JMP DWORD PTR DS:[<&MSVBVM60.#300>]      ;  MSVBVM60.GetMem2
00401542   .- FF25 70104000 JMP DWORD PTR DS:[<&MSVBVM60.#306>]      ;  MSVBVM60.PutMem2
00401548   .- FF25 6C104000 JMP DWORD PTR DS:[<&MSVBVM60.#304>]      ;  MSVBVM60.GetMemVar
0040154E   .- FF25 B4104000 JMP DWORD PTR DS:[<&MSVBVM60.#310>]      ;  MSVBVM60.PutMemVar
00401554   .- FF25 C0104000 JMP DWORD PTR DS:[<&MSVBVM60.#312>]      ;  MSVBVM60.SetMemVar
0040155A   $- FF25 1C114000 JMP DWORD PTR DS:[<&MSVBVM60.#100>]      ;  MSVBVM60.ThunRTMain
職業規劃.<Mod> $  68 CC2D4000   PUSH 職業規劃.00402DCC

三、這是函式匯入表,好像所有的VB程式都有這樣的VB函式。仔細找rtcMsgBox函式,在這裡
0040145E   .- FF25 58104000 JMP DWORD PTR DS:[<&MSVBVM60.#595>]      ;  MSVBVM60.rtcMsgBox
在這一行點選右健,選擇"follow"項,會進入(MSVBVM6.0.DLL)如下:

MSVBVM60.>  55              PUSH EBP   ==>在這按F2下斷
73472097    8BEC            MOV EBP,ESP
73472099    83EC 4C         SUB ESP,4C
7347209C    8B4D 14         MOV ECX,DWORD PTR SS:[EBP+14]
7347209F    53              PUSH EBX

四、F2下斷,F9執行,在註冊框中點選確定,會欄下來,發現會進入MSVBVM6的領空,好,再按alt+k,看看l呼叫段程式碼,如下:

Call stack of main thread
Address    Stack      Procedure                             Called from                   Frame
0012F3B4   0041E99F   ? MSVBVM60.rtcMsgBox                  職業規劃.0041E999


五、雙擊called from“職業規劃.0041E999”,來到如下,職業規劃的領空:


0041E98A   .  51            PUSH ECX
0041E98B   .  8D85 78FFFFFF LEA EAX,DWORD PTR SS:[EBP-88]
0041E991   .  52            PUSH EDX
0041E992   .  50            PUSH EAX
0041E993   .  8D4D 88       LEA ECX,DWORD PTR SS:[EBP-78]
0041E996   .  6A 00         PUSH 0
0041E998   .  51            PUSH ECX                                 ;  出錯
0041E999   .  FF15 58104000 CALL DWORD PTR DS:[<&MSVBVM60.#595>]     ;  MSVBVM60.rtcMsgBox
0041E99F   .  8D95 08FFFFFF LEA EDX,DWORD PTR SS:[EBP-F8]


六、這段程式碼就是跳出錯框,現在找到關鍵核心了,向上看看,是從那裡跳來的,來到如下:


0041E2B5   . /7D 12         JGE SHORT 職業規劃.0041E2C9
0041E2B7   . |68 A0000000   PUSH 0A0
0041E2BC   . |68 A05E4000   PUSH 職業規劃.00405EA0
0041E2C1   . |53            PUSH EBX
0041E2C2   . |50            PUSH EAX
0041E2C3   . |FF15 40104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHresu>;  MSVBVM60.__vbaHresultCheckObj
0041E2C9   > \8B06          MOV EAX,DWORD PTR DS:[ESI]
0041E2CB   .  56            PUSH ESI
0041E2CC   .  FF90 00030000 CALL DWORD PTR DS:[EAX+300]
0041E2D2   .  8D4D B0       LEA ECX,DWORD PTR SS:[EBP-50]
0041E2D5   .  50            PUSH EAX
0041E2D6   .  51            PUSH ECX
0041E2D7   .  FF15 54104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaObjSe>;  MSVBVM60.__vbaObjSet
0041E2DD   .  8BD8          MOV EBX,EAX
0041E2DF   .  8D45 D0       LEA EAX,DWORD PTR SS:[EBP-30]
0041E2E2   .  50            PUSH EAX
0041E2E3   .  53            PUSH EBX
0041E2E4   .  8B13          MOV EDX,DWORD PTR DS:[EBX]
0041E2E6   .  FF92 A0000000 CALL DWORD PTR DS:[EDX+A0]               ;  取得註冊碼
0041E2EC   .  85C0          TEST EAX,EAX
0041E2EE   .  DBE2          FCLEX
0041E2F0   .  7D 12         JGE SHORT 職業規劃.0041E304
0041E2F2   .  68 A0000000   PUSH 0A0
0041E2F7   .  68 A05E4000   PUSH 職業規劃.00405EA0
0041E2FC   .  53            PUSH EBX
0041E2FD   .  50            PUSH EAX
0041E2FE   .  FF15 40104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHresu>;  MSVBVM60.__vbaHresultCheckObj
0041E304   >  8B4D D0       MOV ECX,DWORD PTR SS:[EBP-30]            ;  註冊碼入ecx
0041E307   .  51            PUSH ECX
0041E308   .  FF15 14104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLenBs>;  MSVBVM60.__vbaLenBstr
0041E30E   .  8B55 D4       MOV EDX,DWORD PTR SS:[EBP-2C]
0041E311   .  33DB          XOR EBX,EBX
0041E313   .  83F8 1F       CMP EAX,1F                               ;  比較註冊碼長度是否為1f,即31位
0041E316   .  52            PUSH EDX
0041E317   .  0F9CC3        SETL BL
0041E31A   .  F7DB          NEG EBX
0041E31C   .  FF15 14104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLenBs>;  MSVBVM60.__vbaLenBstr
0041E322   .  33C9          XOR ECX,ECX
0041E324   .  83F8 1A       CMP EAX,1A                               ;  比較註冊碼長度是否為1a,即26位
0041E327   .  8D55 D0       LEA EDX,DWORD PTR SS:[EBP-30]
0041E32A   .  8D45 D4       LEA EAX,DWORD PTR SS:[EBP-2C]
0041E32D   .  0F9FC1        SETG CL
0041E330   .  52            PUSH EDX
0041E331   .  50            PUSH EAX
0041E332   .  F7D9          NEG ECX
0041E334   .  6A 02         PUSH 2
0041E336   .  23D9          AND EBX,ECX
0041E338   .  FF15 0C114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStrList
0041E33E   .  8D4D B0       LEA ECX,DWORD PTR SS:[EBP-50]
0041E341   .  8D55 B4       LEA EDX,DWORD PTR SS:[EBP-4C]
0041E344   .  51            PUSH ECX
0041E345   .  52            PUSH EDX
0041E346   .  6A 02         PUSH 2
0041E348   .  FF15 24104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>;  MSVBVM60.__vbaFreeObjList
0041E34E   .  83C4 18       ADD ESP,18
0041E351   .  66:85DB       TEST BX,BX
0041E354   .  0F84 BE050000 JE 職業規劃.0041E918                     ;  關鍵跳轉,在這裡nop掉即可破解
0041E35A   .  8B06          MOV EAX,DWORD PTR DS:[ESI]
0041E35C   .  56            PUSH ESI
0041E35D   .  FF90 0C030000 CALL DWORD PTR DS:[EAX+30C]
0041E363   .  8D4D B4       LEA ECX,DWORD PTR SS:[EBP-4C]
0041E366   .  50            PUSH EAX
0041E367   .  51            PUSH ECX
0041E368   .  FF15 54104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaObjSe>;  MSVBVM60.__vbaObjSet
0041E36E   .  8BD8          MOV EBX,EAX
0041E370   .  8D45 D4       LEA EAX,DWORD PTR SS:[EBP-2C]
0041E373   .  50            PUSH EAX
0041E374   .  53            PUSH EBX
0041E375   .  8B13          MOV EDX,DWORD PTR DS:[EBX]
0041E377   .  FF92 A0000000 CALL DWORD PTR DS:[EDX+A0]

---------------------------------------

總結:
把0041E354處的nop掉即可破解。
其實VB程式也沒有什麼好怕的,好東西大家分享,如有更好方法,請告知我。


cracked by lordor[CCG][BCG][DFCG]
03.6.20


相關文章