🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
在上一章《驱动开发:内核LDE64引擎计算汇编长度》
中,LyShark
教大家如何通过LDE64
引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中的InlineHook
函数挂钩其实与应用层一致,都是使用劫持执行流
并跳转到我们自己的函数上来做处理,唯一的不同的是内核Hook
只针对内核API
函数,但由于其身处在最底层
所以一旦被挂钩其整个应用层都将会受到影响,这就直接决定了在内核层挂钩的效果是应用层无法比拟的,对于安全从业者来说学会使用内核挂钩也是很重要。
挂钩的原理可以总结为,通过MmGetSystemRoutineAddress
得到原函数地址,然后保存该函数的前15
个字节的指令,将自己的MyPsLookupProcessByProcessId
代理函数地址写出到原始函数上,此时如果有API被调用则默认会转向到我们自己的函数上面执行,恢复原理则是将提前保存好的前15个原始字节写回则恢复原函数的调用。
原理很简单,基本上InlineHook
类的代码都是一个样子,如下是一段完整的挂钩PsLookupProcessByProcessId
的驱动程序,当程序被加载时则默认会保护lyshark.exe
进程,使其无法被用户使用任务管理器结束掉。
// 署名权
// right to sign one's name on a piece of work
// PowerBy: