用ollyDbg尋找VB程式的註冊核心的一點思路
用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
相關文章
- 叮!給你尋找最優解的思路2019-03-04
- 一個程式猿的2023總結:《尋找》2023-12-11
- 如何尋找優質的資料標註公司?2023-02-06
- 研究網路卡地址註冊時的一點思考2019-04-30
- 開源用於尋找系外行星的程式碼2018-04-05
- 為IMT業務尋找下一個核心頻段2020-09-06
- Util應用框架核心(三) - 服務註冊器2023-10-31框架
- 註冊中心 Eureka 原始碼解析 —— 應用例項註冊發現(一)之註冊2019-03-03原始碼
- 一個思路,利用T檢驗去尋找量化交易CTA趨勢2019-12-19
- The Data Way Vol.7|從故事裡尋找開源的『核心』2021-12-09
- Dynamics CRM 用程式碼註冊Plugin Step2018-07-20Plugin
- 尋找有生命的行星2021-09-09
- 登入註冊的測試用例2020-12-16
- 存在多個不同註冊中心的時候,如何平滑的統一註冊中心?2021-05-27
- 當你按下方向鍵,電視是如何尋找下一個焦點的2023-02-15
- BeanDefinition註冊流程、spring 擴充套件點一(NamespaceHandler)2019-03-26BeanSpring套件namespace
- win10系統下提示無法註冊VB指令碼DLL檔案的解決方法2018-08-02Win10指令碼
- oracle的靜態註冊和動態註冊2024-11-11Oracle
- 尋找陣列的中心索引2020-10-16陣列索引
- 聊一聊RocketMQ的註冊中心NameServer2020-09-03MQServer
- 將windows應用程式註冊為windows服務2020-04-05Windows
- 程式設計題:尋找木頭2021-10-30程式設計
- 小程式導航來了,快速尋找屬於你的小程式2019-05-11
- 強大的程式碼編輯器Sublime Text for Mac註冊啟用版2023-11-27Mac
- 註冊頁面測試點2018-08-07
- WPF中 ContextMenu 尋找父物體的一種方案2023-12-28Context
- 尋找社友之前發過的一篇文章2021-06-09
- 【GoLang 那點事】gRPC 註冊中心,常用的註冊中心你懂了嗎?AP 還是 CP(七)2019-10-08GolangRPC
- 【SpringBoot】服務對註冊中心的註冊時機2024-05-25Spring Boot
- 解讀容器的 2020:尋找雲原生的下一站2021-01-15
- 如何在《詭祕之主》中尋找爽點2020-03-30
- 尋找連結串列相交結點問題2022-11-25
- JavaScript核心程式設計(一點點補充)2021-09-09JavaScript程式設計
- 尋找真凶2020-12-23
- leetcode 287 尋找重複的數2024-03-17LeetCode
- LeetCode:尋找丟失的數字2020-12-11LeetCode
- sublime text for Mac註冊啟用 sublime text4註冊碼2023-10-11Mac
- 把一個程式註冊成系統服務2020-04-04
- 尋找寫程式碼感覺(十四)之 新增功能的開發2022-02-04