1.什么是注入?
所谓注入就是在第三方进程不知道或者不允许的情况下将模块或者代码写入对方进程空间,并设法执行的技术。
在安全领域,"注入"是非常重要的的一种技术手段,注入与反注入也一直处于不断变化的,而且也愈来愈激烈地对抗。
已知的注入方式:
远程线程注入、APC注入、消息钩子注入、注册表注入、导入表注入、输出发注入等等。
看一下上图。之前我们说的是,B进程帮A进程创建了一个线程。可是执行的是A进程中的代码,如果我们能执行自己的代码是不是就可以为所欲为了? 那么怎么实现呢?通常我们把要实现的功能封装到一个dll里,然后想办法让A进程加载这个dll。
我们知道我们在B中创建一个远程线程,让A进程中某个函数执行。B进程中要提供一个函数就是
ThreadProc()线程函数(在创建远程线程中我们知道我们创建远程线程需要线程函数地址——就是图中lpStartAddress所需参数)。我们看一下文档。
DWORD WINAPI ThreadProc(
_In_ LPVOID lpParameter
);
他需要的是一个四字节的参数,还有一个四字节的返回值。所以只要提供的线程函数符合这个格式就可以执行。所以我们可以让他执行另外一个函数,只要是结构一样就可以执行。
2.远程线程注入的流程:
在创建CreateRemoteThrea