找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

6301

积分

0

好友

791

主题
发表于 2025-12-13 07:01:24 | 查看: 350| 回复: 0

图标喷射器攻击示意图

“图标喷射器”(Icon Dropper)是一种利用 Windows 系统“更改图标”对话框进行 DLL 注入的攻击技术,能够将恶意代码加载到资源管理器(explorer.exe)进程中。

除了常见的函数库功能,DLL 文件也常用于存储图标等资源。在系统中查看文件夹或文件的属性时,默认图标通常来自 shell32.dll。

系统默认图标来源

实际上,在现代 Windows 版本中,这些图标资源更多存储在 shell32.dll.mui 这类资源文件中,但系统界面仍会将其显示为来自 shell32.dll。

为了让资源管理器进程能在“更改图标”对话框中完整显示某个 DLL文件 内存储的所有图标,它必须先将该 DLL 加载到自身进程的内存空间中进行解析。

关键点在于,Windows 系统中的 DLL 可以定义一个可选的 DllMain 函数。当使用 LoadLibrary 或 FreeLibrary 函数加载或卸载 DLL 时,系统会自动调用此函数。这意味着攻击者可以将任意代码写入 DllMain,一旦资源管理器加载了此DLL,代码便在其进程上下文中执行。

以下是一个典型的 DllMain 函数框架:

BOOL WINAPI DllMain(
    HINSTANCE hinstDLL,  // handle to DLL module
    DWORD fdwReason,     // reason for calling function
    LPVOID lpvReserved ) // reserved
{
    // 根据调用原因执行相应操作
    switch( fdwReason )
    {
        case DLL_PROCESS_ATTACH:
            // 为新进程初始化
            // 返回 FALSE 会导致 DLL 加载失败
            break;
        case DLL_THREAD_ATTACH:
            // 执行线程特定的初始化
            break;
        case DLL_THREAD_DETACH:
            // 执行线程特定的清理
            break;
        case DLL_PROCESS_DETACH:
            if (lpvReserved != nullptr)
            {
                break; // 进程终止场景下不执行清理
            }
            // 执行必要的清理工作
            break;
    }
    return TRUE; // 成功完成 DLL_PROCESS_ATTACH
}

在此攻击演示中,攻击者正是利用了这一点。他们将一个能打开计算器程序(calc.exe)的 DLL 文件,通过 Resource Hacker 或 Visual Studio 等工具添加了一个图标资源,并将其文件扩展名伪装成了 .ico。

伪装成ICO的DLL文件

在文件夹视图中,此类伪装文件的图标显示可能异常。测试发现,在部分 Windows 10 版本中,当 DLL 扩展名被改为 .ico 后,其内部存储的图标可能无法正常显示。

以编程方式实现自动注入

除了诱骗用户手动在属性对话框中加载恶意 DLL,攻击者还可以通过编程方式自动化完成整个进程注入过程:

  1. 弹出属性窗口:在临时目录创建一个文件夹,然后使用 SHObjectProperties API 自动打开该文件夹的“属性”对话框。为了跨语言获取此窗口句柄,可以使用 EnumWindows 函数配合回调函数,遍历所有窗口并识别出标题包含该文件夹名称的属性窗口。
  2. 导航至图标页:通过获取的属性窗口句柄,进一步触发并定位到“更改图标”子对话框,同样使用 EnumWindows 来获取其窗口句柄。
  3. 触发加载:将对话框中的图标路径设置为恶意 DLL 文件(伪装成 .ico),然后模拟点击“确定”按钮。这一操作会促使资源管理器立即加载并解析该 DLL,从而执行其中的 DllMain 代码。

编程注入流程示意

这是一种相对隐蔽的 DLL 注入方式,因为它没有直接调用 CreateRemoteThread、SetWindowsHookEx 等常见的注入 API。虽然过程中会短暂弹出两个窗口,但不太引人注意。攻击者可能利用此技术绕过某些安全软件的检测,通过合法的资源管理器进程执行恶意代码,甚至加载内核级 rootkit。

此外,将恶意 DLL 伪装成 .ico 图标文件进行传播,也为 安全研究 和攻击防御提供了新的思考维度。




上一篇:Nginx+LVS+Keepalived架构实战:百万级并发场景下的高可用负载均衡方案
下一篇:Docker Compose一键部署Arya:基于Vue2与Vditor的在线Markdown编辑器解决方案
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-9-29 02:59 , Processed in 0.484409 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表