昨晚也不是我 发表于 2022-8-13 14:55:55

X86和X64下的IAT注入技术(附工具和源代码)


IAT又叫导入表,是WINDOWS PE文件中的一组数据结构,当EXE可执行程序被加载到地址空间后,
每个导入的DLL模块都有一个对应的导入表,PE加载器会根据导入表来加载进程需要的其他DLL模块。

据此本人根据导入表加载DLL特性,自行编写了一款IAT注入工具。

测试支持平台:WINXP WIN7(32位) WIN7(64位) WIN10 大家可以自行测试WIN8效果

引言:IAT注入程序开发过程有一定难度,需要编程开发者熟悉WINDOWS PE文件结构,可参考《Windows PE权威指南》(非广告目的),并对PE文件导入表结构成员十分熟悉,了解IAT结构组成,清楚OriginalFirstThunk和FirstThunk结构异同,还有关键的RVA和RAW地址转换关系。

程序流程:
1.注入程序将目标PE文件通过内存映射方式映射到内存中
2.判断PE文件特征,并创建新的节区头,填写相关信息
3.申请内存空间,拷贝原始导入表,并在其后构建新的IMAGE_IMPORT_DESCRIPTOR信息
4.修正内存中的映射的PE文件中的关键信息(如节区数,镜像大小,导入表RVA和SIZE等)
5.结束映射,在PE文件末尾写入新的节区(增加一个FileAlignment大小,名为PeerLess区段)
6.被注入DLL文件名必须为(back.dll)需要导出一个名为Inject函数,函数功能自拟。

续言:
程序源代码中对要注入的PE文件有较为充分的检查
1.PE文件基本特征判断
2.PE文件中NT头空间是否足够添加一个节区头
3.新加的节区大小是否大于新构建的导入表所需空间
最后如果提示注入失败,可自己打开dbgview观察错误信息。

备注:
本IAT注入程序经过测试,基本支持绝大多数无壳程序,因为加壳程序会改变PE文件特征,导致程序对关键信息判断不通过,即注入失败,但不会影响原始程序。(本人在XP上发现,如有提示注入成功,立即运行程序出现无效win32程序,可刷新一下稍等几秒在运行程序,即可正常。)
特此声明:由于此程序会对目标PE文件进行修改,建议在备份目标程序的情况下测试bin程序。

请勿使用本程序进行任何恶意目的,如有造成任何经济财产损失与本人无关。

本人所采用的编译环境是vs2013,运行程序可能会提示缺少msvcr120.dll,mfc120u.dll,请大家自行根据操作系统位数下载对应DLL。
最后附上bin程序和完整源代码,供广大技术爱好者相互交流学习(back.dll是测试用例,被加载后运行记事本程序)

回复帖子下载完整源码
**** Hidden Message *****

100000 发表于 2024-4-12 15:17:09

好好学习天天向上hook

pcgg0000 发表于 2024-4-28 14:14:13

呵呵飒飒大
页: [1]
查看完整版本: X86和X64下的IAT注入技术(附工具和源代码)