模块注入到进程的方法有很多,想一一写例子,学习一下,也练习一下!
首先先从IAT表注入开始吧!
如果了解PE文件的格式的话,原理很简单。当一个模块被系统加载起来后,会遍历模块的导入表,将静态导入的函数地址填充到导入表中,以便进程执行起来后,调用到该模块时,能够使用导入函数。要获取导入函数地址,首先要将导出该函数的模块加载起来。
那方法来了,我们是否可以在进程启动时,在必然被加载的模块(比如exe模块,ntdll.dll,kernel32.dll等)导入表被系统遍历之前(注意了,一定是导入表被遍历之前。),将导入表修改一下,添加进我们的模块,并且将相应的IAT的数据添加进来。这样,当系统遍历到该模块的导入表时,遍历到我们自己的模块的导入表项,它就会将我们的模块加载起来,并且将模块导出函数的地址填到我们自己组织的导入表函数项中。
如下是PE文件中导入表的结构:
首先按照上述的结构,为我们的DLL准备一个导入表(我们以修改Test.exe的导入表,注入Dll.dll模块为例):
typedef struct _IMAGE_