史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 多媒體影音轉檔燒錄技術文件
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2006-07-10, 02:54 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 linux - VB程式分析方法及修改例 (「萬能分析中斷點」、啟動form修改,form隱藏)

VB程式的分析一直較為麻煩。用OD打開VB程式後,游標停在程式入口點,如下所示:
00406BDC > $ 68 20614600 push 00466120
00406BE1 . E8 EEFFFFFF call <jmp.&MSVBVM60.#100>
按F8鍵也不能實現步進跟蹤,程式直接進入程式界面。
進入程式界面後,對於按鈕事件可設置按鈕事件中斷點來確定按鈕事件的入口點。但對於程式啟動時的初始過程就難以跟蹤,同時程式中除了一些按鈕外,還有一些lable事件(即點一個label後,執行一段程式)很難用事件中斷點來斷。
為了能跟蹤程式啟動時在formload中執行的一些初始化操作,以及對每一個動作(按鈕動作、label點擊動作)等全部進行跟蹤,可以採用以下笨辦法:

找到以下結構的跳轉語句:注意,關鍵特徵是在sub dword ptr [esp+4],後有JMP,而且這種語句總是好多組在一起的。
00467600 . 816C24 04 37000000 sub dword ptr [esp+4], 37
00467608 . E9 03313B00 jmp 0081A710
0046760D . 816C24 04 3B000000 sub dword ptr [esp+4], 3B
00467615 . E9 06323B00 jmp 0081A820
0046761A . 816C24 04 4B000000 sub dword ptr [esp+4], 4B
00467622 . E9 E9323B00 jmp 0081A910
00467627 . 816C24 04 4F000000 sub dword ptr [esp+4], 4F
0046762F . E9 2C413B00 jmp 0081B760
00467634 . 816C24 04 43000000 sub dword ptr [esp+4], 43
0046763C . E9 DF413B00 jmp 0081B820
00467641 . 816C24 04 43000000 sub dword ptr [esp+4], 43
00467649 . E9 D25A3B00 jmp 0081D120
0046764E . 816C24 04 47000000 sub dword ptr [esp+4], 47
00467656 . E9 755B3B00 jmp 0081D1D0

在程式開頭部分,有不少這樣的結構JMP,注意在不連續的地方可能都會找到這種結構的JMP(估計是一個FORM中的事件放在一起,不同的FORM就放在不同的地方了)。

接下來就是有點耐心,將這種結構跳轉的JMP全部設置中斷點。

好了。接下F9吧。程式的每一步都在你的掌控中了。


實例1:改變程式啟動時顯示的FORM的順序:

一個學習軟件,啟動時要先選擇用戶,然後才能進入學習。它設計的目的是這個軟件在同一台電腦上可由不同的人用來學習,每人的學習記錄分別儲存。
但一般情況下,這台電腦也就是自己用這個軟件來學習,因此,改造一下,讓它啟動後直接進入學習界面。

好,動手!

對每一個sub dword ptr [esp+4], + JMP結構的JMP全部設置中斷點。
按下F9,一步一步跟蹤,看那一步執行後顯示用戶選擇界面,然後按下用戶確定鍵後,程式停在那裡:

.
46B2CD jmp 7A2156 在此按F9後,顯示用戶選擇界面
.
.

46B2D8 jmp 7A2290 選擇用戶後,停在此處。在此按F9後,顯示學習界面
.
.
就在這裡下手:
將46B2CD jmp 7A2156 改為 jmp 7A2290

重新啟動一下,哈哈,直接進入學習界面。

需要注意的是,這種修改啟動form的方法不一定能全部成功,因為可能會跳過一些初始化過程,因而造成後面的程式不能正常執行。



實例2:讓程式實現自己註冊,你都不用輸入什麼,按註冊鍵後,程式自己將正確的註冊碼寫入註冊文件

對上面說到的學習軟件進行分析,發現它竟採用明碼方式顯示註冊碼的字元串。而且輸入註冊碼後,不管註冊碼是否正確,都寫入註冊文件。

思路:在獲得輸入假碼的地方,換為程式自己產生的真碼。這樣程式就自動將真碼寫入註冊文件了。

動手:按「註冊」後,程式停下,按F8跟蹤:(注意這個「註冊」按鈕不是按鈕,只是一個label,一般用按鈕事件方法不能斷下來)

00765F71 . 8B35 C4608900 mov esi, [8960C4]
00765F77 . 8D4D CC lea ecx, [ebp-34]
00765F7A . 51 push ecx
00765F7B . 56 push esi
00765F7C . 8B06 mov eax, [esi]
00765F7E . FF90 04070000 call [eax+704] 關鍵CALL,根據機器碼產生註冊碼明碼
00765F84 . 8B45 D4 mov eax, [ebp-2C] F8執行這一句後,EAX暫存器中顯示出註冊碼了
00765F87 . 8945 E8 mov [ebp-18], eax

好了,按F9,顯示註冊界面。
輸入假碼。
按「註冊」按鈕(這個是真的按鈕了)。程式停下,按F8跟蹤:


007E7919 . FF15 6C104000 call [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
007E791F > \83EC 10 sub esp, 10
007E7922 . 8B45 E8 mov eax, [ebp-18] F8執行這一句後,EAX暫存器中顯示出辦入的假碼 這就是關鍵點了。
007E7925 . 8BD4 mov edx, esp
007E7927 . B9 08000000 mov ecx, 8

哈哈,以上兩段代碼都是將註冊碼放入EAX!

動手:對007E791F處的代碼修改如下:
007E7919 . FF15 6C104000 call [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
007E791F > E9 4CE60A00 jmp 00895F70 跳去新增的代碼,產生真註冊碼
007E7924 90 nop
007E7925 > 8BD4 mov edx, esp
007E7927 . B9 08000000 mov ecx, 8
.
.
.


在程式最後的空白處增加以下代碼:
00895F70 > \56 push esi
00895F71 . 8B35 C4608900 mov esi, [8960C4]
00895F77 . 8D4D CC lea ecx, [ebp-34]
00895F7A . 51 push ecx
00895F7B . 56 push esi
00895F7C . 8B06 mov eax, [esi]
00895F7E . FF90 04070000 call [eax+704] 呼叫註冊碼產生
00895F84 . 8B45 D4 mov eax, [ebp-2C] 產生的真碼放入EAX
00895F87 . 8945 E8 mov [ebp-18], eax
00895F8A . 5E pop esi
00895F8B . 83EC 10 sub esp, 10
00895F8E .^ E9 9219F5FF jmp 007E7925 返回原程式段,此時真碼就已放入EAX了

嘿嘿!重新啟動程式看看:是不是「未註冊」已變為「已註冊」,所有的限制已取消了。

註:這個軟件的新版已不再採用產生明碼註冊碼的方式了。這個老版留做記念。


實例3:改變程式啟動form順序,隱藏一些form(用VBExplorer配合)

還是前面的程式,增加自己註冊功能後,想做成個專門的註冊程式,不需要什麼學習界面。
按實例1方法,在進入學習界面後,點「註冊」,停在了下面:

46FF5D jmp 7F2BC2 在此按F9後,顯示註冊界面。

好了,按實例1中找到的啟動畫面顯示處,進行修改:

將:46B2CD jmp 7A2156 修改為 jmp 7F2BC2

不好,怎麼啟動程式後,不僅顯示了註冊界面,還顯示了用戶選擇界面,想了多種跳轉修改,還是要顯示用戶選擇。
鬱悶!

先是自己用VB做了兩個FORM,一個是可顯示的,一個的顯示內容設置為隱藏。然後分析兩個form的資料結構,發現隱藏的form資料結構中的資料多了幾個資料。看來想修改用戶選擇界面form的隱藏內容是不太可能了(因為要增加資料項)。

這下動用VBExplorer了。
用VBExplorer打開程式,找到用戶選擇的form,檢視它的內容,將top 設置為-5,left設置為-5,height設置為1,width設置為1,將視窗顯示方式設置為manual,存盤。

再啟動程式,嘿!這個用戶選擇界面終於消失了(它只是1*1大小,而且是放在了左上角顯示器之外了,當然看不見了 ^D^)


附實例4:利用VBExplorer改變程式對像放置位置

奇跡智慧式英語用來背單詞還是很優秀的,但原版程式有個BUG:一啟動就將系統音量調整到最大。真是很煩人的。

這個好辦,找到啟動時設置音量的代碼,nop就行了。
但剩下的問題還有:程式音量調整按鈕的音量指示還在音量最大處,想調音量時,一點指示器,音量又調到最大了。看來需要將這個指示器的初始位置調整一下了:

用VBExplorer打開程式,找到用於音量指示的image,將其left內容調整到一個適當值即可。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 11:55 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1