[VT虚拟化驱动]利用EPT实现无痕HOOK

本文介绍了EPT无痕HOOK的原理,通过修改EPT来实现在虚拟化环境中进行无痕函数HOOK。详细阐述了如何操作EPT,将函数页面复制并设置权限,以及如何处理HOOK和UnHOOK。文章提供了代码示例,包括HOOK.h和EptHook.cpp的编写,以及在VmCall和EptViolation处理中的应用,最后进行了测试验证。
摘要由CSDN通过智能技术生成


一、 原理

EPT无痕HOOK的原理其实很简单,就是操作EPT,把要HOOK的函数的对应的页面的pte属性改成只能读写,不能执行,把函数页面复制一份,在复制出来的页面做HOOK,页面属性为只能执行

执行的原函数页面的时候,会触发EptViolation进入host,把原函数所在页对应pte的物理地址改成HOOK的页面,也就是复制出来的页面,属性是只能执行
读写被HOOK函数页面的时候,会触发EptViolation进入host,把原函数所在页对应pte的物理地址改成原函数的页面,属性是能读写不能执行

为什么不直接HOOK原函数页,读写复制出来的页面呢?
HOOK原函数页,在退出的时候还得改回来,而HOOK复制出来的就不用再去改回来了,直接释放就好

二、代码编写

一些准备

需要一个反汇编库,以便计算HOOK时要修改的指令的总长度,这里HOOK是使用push ret方式,千万不能用jmp或者其他需要读内存页方式来HOOK,否则会一直触发EptViolation,需要12个字节,但不能字节改,

评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吾无法无天

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值