用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,看看誰调用段代码,如下:
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