优雅的调试远程线程注入Dll

在编写hook程序时,调试注入的dll一直是一个比较麻烦的事情,通过查找网上的资料以及自己的摸索,现总结出一套比较方便的调试方法,核心是利用Microsoft开发的库Detours其中的一个工具setdll,可以自行编译或者从网上下载

一、利用setdll.exe将需要调试的dll直接写入目标程序的导入表

setdll.exe可以将dll写入目标程序的导入表中,这样程序启动时就会自动加载我们的dll,不用再手动去注入,非常方便进行调试,且一次写入成功后,修改代码重新编译dll不用再次写入。

  • setdll.exe命令行参数
  • 使用方法
    将编译出来的dll、pdb文件、目标程序放在同一目录下,使用命令将dll写入目标exe
    命令:setdll /d:TestDll.dll TargetExe.exe

    写入成功后文件夹中出现的后缀为.exe~的文件为原始文件备份。
    如果出现如下图问题,则是因为setdll要求dll至少导出一个函数,导出一个即可。

二、配置dll项目的调试设置(本地/远程调试都可)

如果是远程调试,则需将Remote Debugger中的文件拷贝至远程主机,在远程主机运行,并在本地VS项目属性-调试中配置IP、链接方式(调试本机上安装的虚拟机用“不带身份验证的远程访问”方式更加方便)。通过配置部署目录还可以更加方便的将编译好的dll直接部署至远程主机
调试工具目录:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Remote Debugger

至此为止也就大功告成了,尽情享受如同调试exe一样调试远程线程注入的dll吧。

文章作者: TechOtaku
文章链接: http://techotaku.me/2018/04/13/如何方便的调试远程线程注入的Dll/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 徒然の博客