欢迎来到可可资源网 免费分享实用的学习资源及技术教程  技术爱好者的栖息之地
✌可可资源网✌
当前位置:首页 > 易语言源码 > 正文

【易首发】Hook一个API就可以实现Hook亿个API吗?

编辑:可可日期:2022-02-11 11:52:56浏览:9490分类:易语言源码下载地址

前言:之前有人发过:【首发但非原创】支持x64,反一切R3下的常规Hook,完全基于Baby大佬的KiFastSystemCall,本质上,这个是直接调用Wow64SystemService(x86命令)->Wow64Transition(x86命令)->KiFastSystemCall(x64命令)实现API命令的底层调用(这种方法可以被称为一种“天堂之门”,实际上是在调用syscall stub)实际上,这种方法并不是完全的不能Hook,而是对它的Hook成本极高,存在一些操作难度。本程序只是一个小小的测试Demo,但是基本上已经可以实现具体的使用(如果想要了解更多可以参考ScyllaHide的原理)温馨提示:本程序当且仅当在x64系统下有效,x86系统请不要尝试,否则会引起程序错误!本代码编写环境:win11,加上本人汇编能力有限,可能存在一些不兼容的情况,具体可自行测试。正文:在开始谈论我们的Hook之前,我们先来了解了解NtReadVirtualMemory的实际工作原理(注意:下面的讨论全部基于x64系统,R3下NtReadVirtualMemory和ZwReadVirtualMemory的定义完全相同):这个call跟进去是一行很简单的汇编(本质上,这个就是Wow64SystemService函数,这个将调用信息跳转到wow64cpu.dll,注意,wow64cpu已经不是x32的Dll,是一个x64的Dll):接着便来到了Wow64Transition(jmp 0033:wow64cpu.dll+6009这个将会跳转到wow64cpu.dll+6009这行命令,0033:这个会将段寄存器CS改为0033,CPU的汇编执行模式也被调整为x64汇编的模式):接着wow64cpu会对内核调用号进行判断,然后包装参数。最后终于看到真正的x64的ntdll,由它call内核:我们很容易想到:对于x86程序,我们其实可以通过Hook Wow64Transition来实现一个大Hook。具体Hook代码很简单:基本Hook处理代码如下:具体原理可以使用CE查看,可以想想我为什么这样写,也可以自己实现个更好的。Demo测试结果(我好像只Hook了一处,实际上我可能Hook了几乎所以的API,但是这个NtRaiseException命令似乎修复了我们的Hook,这里我没有深入研究,具体可以自己研究):如果屏蔽掉我们的测试部分代码,程序很快就会因为拦截到过多的消息函数而堆栈崩溃(如何优化请自行思考):

引用模块

引用支持库

源码文件名支持库文件名支持库标识
EasyHook.e系统核心支持库 5.7d09f2340818511d396f6aaf844c7e325

下载地址

转载:感谢您对可可资源网网站平台的认可,以及对我们原创作品以及文章资源的青睐,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“来源可可资源网”。https://www.100keke.cn/9184a15150bb.html