查看單個文章
舊 2006-05-25, 03:48 PM   #3 (permalink)
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 金幣
預設

在我們選項這個函數後,右邊的訊息框中會出現 Number of arguments: 4(有四個參數)的字樣。OllyDbg 會根據函數尾部的RET 10語句來正確識別參數的數量。RET nnn
是使用PASCAL使用約定的函數的典型特徵。(參數被放壓入推疊中,第一個參數會被最後一個壓壓入推疊中,函數使用完畢後,參數會被遺棄)。大多數的 Windows API 函數都是
PASCAL形式的。

下一步,我們要設定棧中參數的個數。在這個例子中,不必做進行這個操作,因為OllyDbg已經知道了MessageBoxW函數的參數數量。但是,如果您願意的話,也可以按下左邊的複選框,改變成您認為合適的參數數量

現在填寫參數列表。這個對話視窗中支持至多10個參數. 參數可以是任何有效的陳述式,而不必使用暫存器。如果操作數指向了記憶體,則參數右邊的緩衝區視窗會顯示記憶體中的資料。Loaddll.exe 有10個大小為1K的緩衝區,這些緩衝區被標記為Arg1 .. Arg10,,您可以方便自由的使用它們。 另外,對話視窗還支持兩個偽變數:由loaddll.exe新增的父視窗關鍵句, 以及loaddll的實例關鍵句。為了方便您的使用,在您第一次使用使用輸出函數時,OllyDbg就已經將這兩個偽變數加到了歷史列表中去了。

MessageBoxW e函數需要4個參數:


?父視窗關鍵句。 這裡我們選項 ;handle of owner window. Here, we simply select ;
?在訊息框中UNICODE文本的位址。選項Arg2並按Enter鍵。緩衝區視窗會以16進制的格式顯現記憶體中的緩衝區。這個緩衝區啟始化全是0。點擊第一個字元,並按快捷鍵
Ctrl+E(另外, 也可以從表單中選項「二進制〔Binary〕|編輯〔Edit〕」)。這時會出現一個對話視窗,在對話視窗中按鍵輸入「Text in box」或者其他希望顯示的字串串;

?訊息框標題的UNICODE文本的位址。選項Arg3並在Unicode格式的記憶體中寫上「Box title」;
?訊息框的風格。使用常量MB_xxx進行組合.OllyDbg 可以識別這些常量。在這裡我們按鍵輸入:MB_OK|MB_ICONEXCLAMATION。

這裡不需要暫存器參數。

現在我們準備使用輸出函數。選項「在使用時隱藏〔Hide on call〕」意思是說,當函數執行時對話視窗將會從螢幕消失。當我們執行一個會執行很長時間的函數,或者設定了斷點的時候,這個選項非常的有用。您也可以手動關閉對話視窗。當函數執行完畢後,OllyDbg會重新自動開啟。「使用輸出函數」對話視窗。選項「在使用後暫停〔Pause after call〕」意思是說,在執行完函數後,loaddll將會被暫停。

按「使用〔Call〕按鈕」後,OllyDbg 會自動制作備份所有的記憶體、校驗、參數、暫存器等訊息。並隱藏對話視窗,然後使用 MessageBoxW 函數。和期望的一樣,訊息框在螢幕中出現了:
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1630 篇, 收花: 3204 次
有 2 位會員向 psac 送花:
Jamaalacugs (2018-04-20),Jamaalacugs (2018-04-20)
感謝您發表一篇好文章