利用page hook对密匙进行保存和访问控制

本文介绍了如何使用Page Hook技术来监控和控制对关键数据的读/写/执行访问,以避免内存扫描。通过钩子IDT表并处理页错误,可以区分执行访问和读/写访问,并利用Pentium的TLB体系结构来伪造这些访问。同时,通过TDI创建自定义协议,隐藏内核中的解密过程和密钥,以迷惑动态调试器。附有Page Hook和TDI代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记得去年看到过一篇文章 是关于page hook 来对关键数据和执行代码进行访问控制 ,用来实现躲避内存扫描,原理简单如下,首先利用hook idt表,对页出错处理进行监控,对于页交换在这里进行控制, 首先进行对页的读/写/执行访问控制

在页错误处理程序中, 可以使用保存过
的指令指针(IP)和错误处理地址. 如果指令指针和错误处理地址相同, 那么这就是一个执行访问.否则,
这是一个读/写访问. 当操作系统在内存管理中使用存在位, 我们也需要区分我们内存挂钩过的页出错

如何"伪造"执行访问和读/写访问(并以最小的性能消耗完成这些).
在这方面,Pentium的TLB体系机构前来援助. Petium分开处理TLB, 一个TLB用作指令, 另一个用作数据.
正如之前提到的, 当虚拟内存启用时, TLB缓存虚拟地址到物理页帧的映射. 通常ITLB和DTLB是同步的,
对于一个给定的页保存相同的物理映射. 虽然TLB主要是由硬件控制的, 但还有几种软件控制它的机制.                                          
      
  - 重新导入CR3, 致使除了全局入口之外的所有的TLB入口被清除.
    这样的情况典型地发生在上下文环境切换时.
  - invlpg指令造成某个特定的TLB入口被清除.
  - 执行数据访问指令致使DTLB被导入访问过的数据页的映射.
  - 执行一个调用致使ITLB被导入包含响应这个调用所执行的代码页的映射.

我们能过滤读/写访问和执行访问并通过破坏TLB的同步访问来伪造它们, 这样ITLB和DTLB
保存一个不同的从虚拟地址到物理地址的映射

(关于这篇文章原名 《Raising The Bar For Windows Rootkit Detection 》google上搜索估计会有不少 

这样就可以每次对于访问进行控制

当我们把钥匙保存在内核其中的时候用它来进行访问控制 通过访问控制也就只有我们自己所规定的域能看到 我们所希望看到钥匙。不过对于传送来说 我们经常使用的ws2_32,使用户调用 不方便与内核的访问控制 我们可以是使用tdi从购我们的自己的协议,把明文直接传给用户,在内核中隐藏解密过程和钥匙,这样来迷惑动态调试器,我对调试器的结构并不是很了解 个人感觉这样是可行的 对执行和读取访问域的控制 对于不是我们所规定的域的时候 我们可以把它指向一个用来迷惑或者无关的数据或代码段,来实现对动态调试的anti

另外要说的是 原文中有一处错误 invlpg 应该是 invlpg [xxx]而不是invlpg xxx

当时所写的关于page hook的测试代码

http://files.myopera.com/xyooyy/files/page_hook.rar

一个tdi代码

http://files.myopera.com/xyooyy/files/socket.rar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值