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