標 題: Diy OllyDbg's Loaddll.exe發帖人:jingulong時 間: 2005-08-13 13:02 原文鏈接:http://bbs.pediy.com/showthread.php?threadid=16140 詳細信息:
目的:用OllDbg中斷在dll的入口程序下載:http://bbs.pediy.com/showthread.php?s=&threadid=16082 一、編寫plugin :1. DllEntryPoint如圖: 2.ODBG_Plugininit如圖:新啟一個線程,由此線程的函數WinMain創建一個(隱藏)窗口。 3.窗口回調函數如圖: 至此,plugin設計完成,它所起的作用是:1. 當得到WM_USER消息時返回dll入口地址(在MyLdrpCallInitRoutine中)2. 當得到WM_USER+1消息時在wParam指示的地址(就是你調試點dll入口點)設置臨時斷點(Tempbreakpoint)。二、 在dll的加載進程中與plugin通訊。 為此,可以寫一個加載程序(就好像DLL_Loader),我這里選擇diy llyDbg配套的loaddll.exe,因為只有它可與OD“無縫對接”。用LordPE打開程序看看結構,當看到它的ExportTable時,感覺實在妙!下面是其截圖: 每個導出函數名稱叫人看了都如此受用,特別是PatchArea!Oleh Yuschuk為我們考慮得實在周到。ThanksDiy 過程:1. 把ImportTable中的GetCommandLineA改成GetProcAddress2. Patch 為: 并在Patcharea(410298)處鍵入: 以完成原語句的功能。這里程序中原來沒有的字符串(如“GetCommandLineA”)等在data區或rsrc區段空白處錄入。3.Patch 為 call 4102B5,并在4102B5開始寫入如下代碼: 以上代碼完成的主要任務是hook dll entrypoint,當程序查到入口處是調試點dll oep 時通知plugin設置斷點,使OllyDbg中斷在那里,這樣我們可以少飛許多手腳。
Powered by: C++博客 Copyright © RTY