7C93C33D E8 344EFEFF call ntdll.LdrpCallInitRoutine
7C921176 n> 55 push ebp
7C921177 8BEC mov ebp,esp
7C921179 56 push esi
7C92117A 57 push edi
7C92117B 53 push ebx
7C92117C 8BF4 mov esi,esp
7C92117E FF75 14 push dword ptr ss:[ebp+14]
7C921181 FF75 10 push dword ptr ss:[ebp+10]
7C921184 FF75 0C push dword ptr ss:[ebp+C]
7C921187 FF55 08 call dword ptr ss:[ebp+8] ; IMAGEHLP.<ModuleEntryPoint>
7C92118A 8BE6 mov esp,esi
7C92118C 5B pop ebx
7C92118D 5F pop edi
7C92118E 5E pop esi
7C92118F 5D pop ebp
7C921190 C2 1000 retn 10
标 题: Diy OllyDbg's Loaddll.exe
作 者: jingulong
时 间: 2005-08-13,13:02:49
链 接: http://bbs.pediy.com/showthread.php?t=16140
目的:用OllDbg中断在dll的入口
一、编写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为我们考虑得实在周到。Thanks
Diy 过程:
1. 把ImportTable中的GetCommandLineA改成GetProcAddress
2. Patch
为:
并在Patcharea(410298)处键入:
以完成原语句的功能。这里程序中原来没有的字符串(如“GetCommandLineA”)等在data区或rsrc区段空白处录入。
3.Patch
为 call 4102B5,并在4102B5开始写入如下代码:
以上代码完成的主要任务是hook dll entrypoint,当程序查到入口处是调试点dll oep 时通知plugin设置断点,使OllyDbg中断在那里,这样我们可以少飞许多手脚。
btw:
Fly说“不是”。这里算是一篇“是”的说明吧。
http://bbs.pediy.com/showthread.php?s=&threadid=16082 |