本篇文章为新生小白学习PE文件之后进行练习所写,肯定会有很多不足之处,欢迎大师傅们点出
原理
普通注入
先看普通型的注入,如下:
普通的dll注入是在目标进程中开辟一处空间,在空间中写入dll文件的名称,再用LoadLibraryA
函数通过查找名称来加载dll,而想在程序里调用LoadLibraryA
的话就得用到CreateRemoteThread
函数,这个函数传递的参数之一就有函数指针,等到CreateRemoteThread
创建新线程之后,就会在新线程中调用这个过度函数,其二的参数就是传给指针的参数
这里插一句,在我多次用x64dbg调试得到的感悟,CreateRemoteThread
这个函数,相当于开辟了一个不知道在哪的空间,在这个地方引用你要传入的函数
反射型注入
反射型dll注入则是将整个DLL文件传到目标进程的空间中,然后通过CreateRemoteThread
调用一段shellcode,将DLL展开,并运行
源码
Injectmain
1 |
|
ReflectLoader
我将一个文件的展开过程分为两部分,一部分是映射文件头和节区段,另一部分是修复重定位表和导入表
1 | // dllmain.cpp : 定义 DLL 应用程序的入口点。 |