文章总结: 文档介绍了一种名为’图标喷射器’的DLL注入技术,利用Windows’更改图标’对话框诱骗用户将恶意DLL加载到资源管理器进程中。这种技术通过创建伪装成图标的DLL文件,当资源管理器加载该DLL以显示图标时,DllMain函数中的恶意代码会在资源管理器进程中执行。攻击者还可以编程方式实现此注入,绕过常见DLL注入API检测,使恶意代码能在合法进程中执行。这种隐蔽的攻击方式可能被用于绕过杀毒软件检测或加载UMDrootkit。
综合评分: 89
文章分类: 漏洞分析,渗透测试,恶意软件,免杀,实战经验
使用图标将 DLL 注入到资源管理器进程中。
TtTeam
2025年12月11日 15:13
广东
图标喷射器
这是一种利用 Windows 系统中的“更改图标”对话框进行 Windows 资源管理器 DLL 注入的技术。
它可以诱骗用户将恶意 DLL 加载到资源管理器进程中
除了包含代码外,DLL 还用于存储图标等资源。在演示中可以看到,默认图标存储在 shell32.dll 中:
实际上,在现代 Windows 版本中,它们存储在shell32.dll.mui中,但它仍然显示为 shell32.dll。
为了使资源管理器进程能够在对话框中显示 DLL 中存储的所有图标,它需要将 DLL 加载到内存中以便进行解析。
此外,Windows 中的 DLL 可以定义一个可选的DllMain函数,该函数在使用 LoadLibrary 和 FreeLibrary 函数加载或卸载 DLL 时调用。
BOOL WINAPI DllMain( HINSTANCE hinstDLL, // handle to DLL module DWORD fdwReason, // reason for calling function LPVOID lpvReserved ) // reserved{ // Perform actions based on the reason for calling. switch( fdwReason ) { case DLL_PROCESS_ATTACH: // Initialize once for each new process. // Return FALSE to fail DLL load. break; case DLL_THREAD_ATTACH: // Do thread-specific initialization. break; case DLL_THREAD_DETACH: // Do thread-specific cleanup. break; case DLL_PROCESS_DETACH:
if (lpvReserved != nullptr) { break; // do not do cleanup if process termination scenario }
// Perform any necessary cleanup. break; } return TRUE; // Successful DLL_PROCESS_ATTACH.}
这意味着,如果资源管理器加载了带有 DllMain 函数的 DLL,则 DllMain 函数中定义的代码将在资源管理器的内存中执行。
而这正是这里正在做的。除此之外,该DLL文件还被伪装成一个图标:
图标
这个“图标”实际上是一个简单的 DLL 文件,扩展名为 .ico,它使用 Resource Hacker 添加的图标资源打开计算器应用程序。(也可以在 Visual Studio 中添加该图标)
文件夹视图中的图标显示存在一些异常。我已经在两个不同的 Windows 10 版本(最新版本和旧版本)以及 Windows 11 上进行了测试。
Windows 10
在两个 Windows 10 版本中,当文件扩展名更改为 .ico 时,DLL 中存储的图标均无法显示。
然而,在最新的 Windows 10 版本上,它确实有效,直到我尝试在照片应用中打开“图标”。从那以后,我就无法重现这个问题了。
以编程方式注入 DLL
除了诱骗用户手动加载 DLL 之外,攻击者还可以选择使用此技术以编程方式将 DLL 文件注入到资源管理器进程中:
首先,在临时目录中创建一个文件夹,并使用 SHObjectProperties 打开该文件夹的属性。为了获取窗口句柄而不考虑系统语言,使用 EnumWindows 函数,并配合一个回调函数,该函数会检查每个打开的窗口中文件夹名称是否不同。
通过属性页,可以调用更改图标对话框,该对话框的句柄也通过 EnumWindows 函数获取。最后,将图标路径更改为 DLL 文件(本例中为 .ico 扩展名),这样在单击“确定”按钮后,资源管理器就会加载该 DLL 文件。
这是一种非常隐蔽的向资源管理器进程注入 DLL 的方法,因为它不使用常见的 DLL 注入 API。虽然它会弹出两个短暂的窗口,但并不太令人反感。因此,攻击者可以利用这种方法绕过杀毒软件,通过合法的资源管理器进程执行代码或加载 UMD rootkit。
此外,传播伪装成 .ico 文件的 DLL 文件可能是一种有趣的攻击途径。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:TtTeam 《使用图标将 DLL 注入到资源管理器进程中。》