posts - 319, comments - 22, trackbacks - 0, articles - 11
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

用OllDbg中断在dll的入口

Posted on 2011-08-10 07:11 RTY 阅读(857) 评论(0)  编辑 收藏 引用 所属分类: 编程常识C/C++Windows
用OllDbg中断在dll的入口


http://www.pediy.com/bbshtml/bbs7/pediy7-613.htm


标 题: 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为我们考虑得实在周到。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中断在那里,这样我们可以少飞许多手脚。



只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理