欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]Windows注入篇之内核感染导入表注入X64[高清有码]

[原创]Windows注入篇之内核感染导入表注入X64[高清有码]

续着上一篇APC注入,由于没有实现64位,这里换种方式去搞64位,现在关于感染导入表的文章很多具体我就不深入去描述了,大致总结下要注意哪些要点吧:

1). 导入表注入场景有限制,就是所有东西都只能在DllMain里调用,对代码的要求很高,不像APC那样时机比较靠后加载之后还能通过ShellCode去调用导出函数。

2). 导入表注入容易被还原,只要比较原始文件发现不一样就说明被改了,时机可以用进程/模块回调去捕捉。

3). 用导入表注入方式注入的模块要求有:

    1. 必须要导出某个函数,并且在新构造的导入表项IID OriginalFirstThunk 指定你要导入的那个函数,这里我用0x80000001表示导入"序号为1"的导出函数。

    2. 对于Windows自带的一些exe,通常其都带有绑定输入表,这个东西是为了优化加速进程启动的,如果新构造的IID中指定的导入函数在Bound Import Table 中不存在,那么进程启动的时候将会崩溃,为了避免这种情况可以给其清空。当然这从某种意义上来说是废掉了优化进程启动的这个功能。

    3. 由于所有资源都必须在DllMain中调用,我们知道这里是ntdll!LdrRunInitial*即ntdll加载导入表的时机,这里有很多锁,例如ntdll!LdrpLoadLock...

4). 导入表注入方式的模块一旦加载失败,那么将会引起崩溃弹窗,有很多原因会造成这个现象,特别是某些杀软在动态链接库加载的时机Patch了该模块。

5). 当没有其他人也用这种方式改导入表时,新IID放置于导入表最前面一项,加载时机应该会在kernel32/kernelbase之后就进行加载。由于时机过早各方面都得注意。

6). 64位进程如果进程加载基地址超过了32位,那么新导入表的内存就不能申请在32位地址空间下,因为导入表偏移RVA只有4字节......反之,如果进程加载基地址是32位地址,那么内存同样也不能申请在64位地址空间......再有,尽量不要在进程基地址之前申请,这样算偏移是负数......


不多说,上代码,Win7 x64自测没问题,其他平台还希望大家帮忙测试下啦,跟上一篇文章一样,动态库也是直接放入C:\下,所有进程都注入。





上传的附件 KernelImportInject.zip
UserMapDll.zip

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功