windbg调试驱动不用替换调试机器驱动的方法

      开发windows驱动,通常调试驱动的方法是在主机上编写代码编译通过,将sys和inf拿到被调试机台上安装测试,主机通过windbg连上调试机台。当代码有改动时,将编译好的驱动再拿到被调试机台上安装测试。每次都拷贝到调试机台上安装驱动这个动作有点繁琐,一次操作最快也需要一两分钟,一个大型的驱动从开始开发都开发结束,中间可能有长达上千次的调试过程。光这个复制安装动作就有2000多分钟,这是一笔巨大的时间开支。

       有没有好的方法可以节省这个时间呢,答案是有的。

       这篇文章就介绍一个省去每次的拷贝动作,让在主机上编译好驱动就可以直接在调试机上进行调试的方法。

       方法的核心是需要用到windbg的 .kdfiles命令。

       .kdfiles命令是什么呢?这里给出官方介绍链接:https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/-kdfiles--set-driver-replacement-map-

        一句话总结在本方法此命令的作用就是通过在主机上设定一个驱动映射的配置文件,重启调试机时windbg会自动将调试机上的某个驱动给替换成主机上指定的驱动。

        假设驱动编译出来的sys文件为: D:\DriverStudy\debug\test.sys,驱动一般安装后会在system32\drivers目录下。则此方法的配置步骤为:

        1、在调试主机上编写一个ini配置文件,比如取名叫  drv_map.ini,放在D:\DriverStudy 目录下(具体位置可以放在你电脑上任意位置)。

       2、drv_map.ini配置文件内容如下:

map
\Systemroot\system32\drivers\test.sys
D:\DriverStudy\debug\test.sys

       3、调试主机上新增一个环境变量,环境变量名:_NT_KD_FILES,值填写drv_map.ini所在的目录,我的环境如下图所示:

    4、windbg通过网络连接连上调试机。

    5、每次编译好驱动后,直接重启调试机,重启后系统就会加载新编译出来的驱动了。成功加载驱动时会输出如下信息:

 KDFILES: Replacing '\SystemRoot\system32\DRIVERS\test.sys' with 'D:\DriverStudy\debug\test.sys'.  File size 394KB.
KdPullRemoteFile(FFFFDC0F6D668380): About to overwrite \SystemRoot\system32\DRIVERS\test.sys and preallocate to 62690
KdPullRemoteFile(FFFFDC0F6D668380): Return from ZwCreateFile with status 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
郁金香VC++过驱动保护全套 免key版 天異赤提供 教程下载地址获取方法: 第一步:打开下方链接,填写QQ邮箱,系统会往QQ邮箱发一封确认订阅邮件 第二步:打开QQ邮箱查看邮件,确认订阅,订阅成功后系统会自动把下载地址和解压密码一起发送到你QQ邮箱http://list.qq.com/cgi-bin/qf_invite?id=585e150c59f30e1213af9a9352367711b2e45c217582cf35 最近时间有些多,一时对网络游戏的保护机制感兴趣了,来研究了一下,听说QQ系列的TesSafe.sys 有些强,于是拿来看看驱动都做了些什 么.以下是对DNF和QQffo(自由幻想)研究结果(xp sp2) 在网上找了些TesSafe的资料,说TesSafe并不怎么样 现在这个版本保护的结果为:任务管理器中可以看到游戏进程,但OD和CE看不见,更不用说什么调试了,iceword可以 看到EPROCSS,但WSysCheck看 郁金香驱动 不见,自己写程序,也不能注入受保护的游戏进程. 可见,NtOpenProcess被Hook了,恢复SSDT后,没有任何效果,可见是inline hook , 用一般的软件检测一下,没有发现inline hook,看来hook得比较深,在网上一找资料才发现,原来的确够隐藏的 郁金香驱动 以下是上一个TesSafe版本的分析结果 从网上找出来的资料,TesSafe.sys保护原理(DNF的保护,我听说,QQ系列游戏的保护机制都是一样的) ================================================================= 保护得比较没有意思,强度也不高.可能隐藏性稍好一些. 用IDA反汇编TesSafe.sys可以看到: 这个驱动一加载,ExAllocPoolWithTag分配了一块内存,然后将一个函数写进这块内存,接着做好保护,然后 PsCreateSystemThread()创建的 郁金香驱动 线程调用ZwUnloadDriver将驱动卸载。虽 然驱动被卸载了,但是ExAllocPoolWithTag分配的内存仍然在起作用。 具体来看它如何进行保护: 郁金香驱动 先是得到了ObOpenObjectByPointer的地址,然后在 NtOpenProcess中搜索0xe8 ,也就是跳转指令,直到遇见RET为止。 一但得到0xe8,比较后面的四个字节,如果转换后为 ObOpenObjectByPointer的地址,就把这个地址用自己代理函数的地址转换后替换掉,达到 保护自己的目的。 郁金香驱动WinDbg看了看,果然在我的机器上:0x80570e41这个在 NtOpenProcess中的区域被TesSafe.sys修改,原来这里是:80570e41 e87c8dffff call nt!ObOpenObjectByPointer (80569bc2) 系统通过ObOpenObjectByPointer来通过 EPROCESS得到Handle返回给调用者。TENCENT在这里下了一个跳转:(TesSafe.sys加载后。)80570e41 e826542a78 call f881626c 很明显,系统执行到这里就会调用0x6881626c的函数,也就是 TesSafe.sys的 ObOpenObjectByPointer代理函数。这 样,Client.exe就会在这里被过滤掉,从而让R3程序无法得到QQT的句柄,从而保护进程。 郁金香驱动 ================================================================================= 我手头拿到的版本是2008年8月5号的,把TesSafe逆出来一看,比上个版本有所加强. 在这个新版本中,TesSafe一共InLine Hook了六个函数,我只逆出并恢复了五个 其中: 1. KeAttachProcess NtOpenProcess NtOpenThread 这三个函数的HOOK方式与上一个版本一样,就是上面蓝色字体的方法,把本应该call ObOpenObjectByPointe的代码修改成了call他自己的代码, 然后在他自己的代码中处理保护的进程 上面三个函数,原来正常的代码为 80581ce3 e8a658ffff call nt!ObOpenObjectByPointer (8057758e) 被HOOK后的代码变成了 call a8724af4(TesSafe自己搞出来的函数) lkd> u a8724af

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

danxuezx

如果对你有用是我的快乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值