本会动态

TP的学习笔记:用映射MDL方式实现安全的Hook
发布时间:{$itemInfo['publish_time']|date='Y-m-d H:i:s',_ _ _买球软件是一家有着数十年历史的娱乐公司,豪华高端大气上档次,是众多玩家流连忘返的24小时不夜城.手机买球软件包括各地方的土著游戏,一切尽在娱乐之中.外围买球软件贵宾通道专属玩家,存款、取款、优惠更快速到账,更快速有效地解决您的问题!}##}来源:买球软件-手机买球软件-外围买球软件点击:7

  发表于 2015-8-28 21:26:31

  本文将提及到两种Inline Hook,分别是修改头五个字节的jmp Hook以及修改Call指令后4个字节的Call Hook。特点在于没有内嵌汇编,纯C的代码。

  首先先谈Head Inline Hook。

  1.写入保护。写入保护位于cr0寄存器第15位,为一代表开启,为零代表关闭。但实验证明修改cr0寄存器属于危险行为,而且在不使用类似于__writecr0之类的WDK内置宏的情况下,是需要内嵌汇编的。这里将使用映射MDL的方式实现绕过写入保护。

  2.指令屑。其实这已经不能算是问题了,因为有反汇编引擎。但如果仅仅修改5个字节,虽然执行不存在问题,但像WinDbg之类的软件查看函数就会出现异常,而且,假设要对一个不能只Patch5个字节的函数来说,我们Hook之后,别的驱动想对这个函数进行Call Hook就会出现问题。所以,还得把剩余的字节全部填充NOP指令才行。

  说白了这里只是补充了第一期TP的学习笔记中《TP的学习笔记:实现安全Inline Hook模块+动态确定SSDT服务号(NT5)》一文的代码而已。并且还修正了NT6系列操作系统蓝屏的问题,也补充了修复指令屑BUG的问题。接下来是Call Hook。其实Call Hook就没啥说的了,同样是把暴力修改cr0寄存器改成了映射MDL,不过我发现上次的TP的学习笔记中使用自旋锁是没必要的,因此改良后代码是这样的:

  {//因为CALL用的是相对偏移所以我们还需要进行计算相对偏移

  希望这篇文章发表后,我不会再看到那些改cr0的Hook代码了。。。。。。

  , 积分 4, 距离下一级还需 28 积分