论坛首页 安全工具分享区 阅读主题

[原创]利用 API Set 实现无DLL注入的API重定向与劫持

172 浏览 21 回复
#1 楼主 2026-06-01 21:08:44
本文将深入探讨一种利用Windows内部机制——API Set Map——来实现对目标进程API调用的重定向与劫持的技术。与传统的DLL注入或IAT Hook不同,此方法通过修改进程PEB中指向API Set Map的指针,并替换映射表内容,使得加载器在解析某些API Set(如api-ms-win-core-heap-l1-1.dll)时,将其重定向到我们指定的恶意/自定义DLL。在深入探讨技术细节之前,我们首先需要理解API Sets是什么。
Windows为了更好地进行模块化和代码重构,引入了API Sets机制。简单来说,很多我们熟知的系统DLL(如kernel32.dll, advapi32.dll)中的API,实际上并不直接在这些DLL中实现。相反,它们会通过API Sets这种“虚拟DLL”(名字通常以api-ms-win-开头,如api-ms-win-core-heap-l1-1.0.dll)进行一层抽象和重定向。
每个进程的PEB(Process Environment Block)中,都有一个指针(通常是PEB->ApiSetMap,在PoC中通过peb->Reserved9[0]访问,这是一个未公开但相对稳定的结构成员)指向当前进程的API Set Map数据。这个Map就像一张“寻路图”,告诉加载器:当遇到一个api-ms-win-开头的虚拟DLL导入时,应该去哪个真实的物理DLL(如ntdll.dll, kernelbase.dll)中寻找对应的API实现。
这个Map数据最初来源于系统文件%SystemRoot%\System32\ApiSetSchema.dll,它本身不包含可执行代码,而是一个包含映射规则的数据库。我们的目标是:当目标进程(例如notepad.exe)尝试调用api-ms-win-core-heap-l1-1.dll中的函数(如HeapAlloc, HeapFree等)时,让它实际上去加载并执行我们自定义的fake.dll中的同名函数。
实现这一点的关键在于:
控制目标进程的ApiSetMap指针: 我们需要在目标进程的PEB中,将ApiSetMap指针指向我们精心构造的一个伪造的Map数据。
伪造ApiSetMap数据: 在这个伪造的Map数据中,我们将api-ms-win-core-heap-l1-1这个条目指向的真实DLL修改为fake.dll。fake.dll是我们想要注入逻辑的地方。它需要导出与api-ms-win-core-heap-l1-1.dll中原始API同名同签名的函数。例如:当notepad.exe启动后,由于ApiSetMap被修改,当它(或其加载的任何模块)尝试从api-ms-win-core-heap-l1-1.dll导入HeapAlloc时,加载器会错误地认为HeapAlloc位于fake.dll中,从而加载fake.dll并调用fake.dll中的MyHeapAlloc。API Set作为Windows内部的一个重要组件,为系统提供了灵活性和模块化。然而,任何可以被修改的内部数据结构都可能成为攻击者的目标。通过篡改进程PEB中的ApiSetMap,我们展示了一种相对底层且可能更隐蔽的API重定向和代码执行技术。
mainfakedll代码步骤详解:

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-286823.htm
#2 2026-06-01 21:08:44
学习学习
#3 2026-06-01 21:08:44
看下是新技术不
#4 2026-06-01 21:08:44
m
#5 2026-06-01 21:08:44
学习了
#6 2026-06-01 21:08:44
学习了
#7 2026-06-01 21:08:44
学习
#8 2026-06-01 21:08:44
学海无崖
#9 2026-06-01 21:08:44
不错
#10 2026-06-01 21:08:44
学习学习
#11 2026-06-01 21:08:44
不错
#12 2026-06-01 21:08:44
注入新姿势吗
#13 2026-06-01 21:08:44
mark
#14 2026-06-01 21:08:44
学习学习
#15 2026-06-01 21:08:44
学习学习
#16 2026-06-01 21:08:44
感谢分享!
‹ 上一页 1 2 下一页 ›

请登录后参与讨论

立即登录 注册账号