进程注入和HOOK原理
进程注入分类
静态注入—进程创建完成前注入
(1)导入表注入
(2)dll劫持注入
(3)注册表注入
动态注入一进程运行过程中进行注
(1)远程线程注入
(2)消息钩子注入
(3) apc注入
(4) iat(导入表函数)劫持注入
静态注入——导入表注入


静态注入—dll劫持注入

dll劫持技术:当一个可执行文件运行时,windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的dll,并将它们映射到进程的地址空间中。由于输入表中只包含dl名而没有它的路径名,因此加载程序必须在磁盘上搜索dll文件。
首先会尝试从当前程序所在的目录加载dl,如果没找到,则在windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。用这个特点,先伪造一个系统同名的dll,提供同样的输出表,每个输出函数转向真正的系统dll.程序调用系统dll时会先调用当前目录下伪造的dll,完成相关功能后,再跳到系统dll同名函数里执行。这个过程用个形象的词来描述就是系统dll被劫持了。如果想办法把应用程序所依赖的在搜索路径的dll,放置个同名dll到比这个路径更优先的目录去,则这个刻意放置的同名dll会被加载
静态注入—注册表注入
window的每个gui程序,在启动的时候,都会扫描注册表的applinit_dlls项,看看其中有没有指定的目标库,如果有,那就再程序运行时,主动加载。利用这一特性,就可以完成注入。但是仅限于加载了user32.dl的目标。
windows游戏都会加载user32.dl

动态注入一远程线程注入
windows提供了CreateRemorteThread函数,允许一个进程在另一个进程上创建线程,通过巧妙使用该函数 可以把指定的dll加载到其他的进程

常见的利用createremotethread来实现远程线程注入的方式有两种:
1.定义远程线程入口地址为loadlibraryw并将需要加载的模块路径作为参数传入
2.编写shellcode并将远程线程入口地址定义为shelicode的执行地址。在shellcode中调用map到目标进程中的dll入口函数
动态注入一消息钩子注入


动态注入一APC注入

动态注入一IAT(导入表函数)注入劫持注入

代码HOOK
inline Hook
虚表 Hook
IAT(导入表)Hook
内核API Hook(SSDT SSSDT)
inline Hook


虚表 Hook

IAT(导入表)Hook

内核API Hook(SSDT SSSDT)

更新: 2025-03-15 15:29:21
原文: https://www.yuque.com/yuhui.net/network/ootzbgmqwyoedfsc

评论(0)
暂无评论