Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
IconJector — 使用图标将 DLL 注入到 explorer 进程中 | Kitploit
工具/GitHubGitHub/d419h/iconjector
漏洞利用后渗透利用社会工程学红队Payload 开发对抗性攻击
GitHubd419h/iconjector

IconJector

使用图标将 DLL 注入到 explorer 进程中

查看仓库
415491年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

IconJector

这是一种 Windows Explorer DLL 注入技术,利用了 Windows 上的更改图标对话框。

它可以诱骗用户将恶意 DLL 加载到其 explorer 进程中:

https://github.com/0xda568/IconJector/assets/61665703/06428402-764c-4279-b762-1d01082552c8

此外,它还可以用于从另一个进程将 DLL 注入 explorer:

https://github.com/0xda568/IconJector/assets/61665703/bbf53775-ad8d-422b-b186-663ff5074976

它是如何工作的?

除了包含代码之外,DLL 还用于存储图标等资源。在演示中,您可以看到默认图标存储在 shell32.dll 中:

image

实际上,在现代 Windows 版本中,它们存储在 shell32.dll.mui 中,但仍显示为 shell32.dll

为了让 explorer 进程能够在对话框中显示存储在 DLL 中的所有图标,它需要将 DLL 加载到内存中以便进行解析。

此外,Windows 中的 DLL 能够定义一个可选的 DllMain 函数,该函数在使用 LoadLibrary 和 FreeLibrary 函数加载或卸载 DLL 时被调用。

root@kitploit:~
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.
}

这意味着,如果 explorer 加载了带有 DllMain 函数的 DLL,那么 DllMain 函数中定义的代码将在 explorer 的内存中执行。

而这正是这里所做的事情。除此之外,该 DLL 还被伪装成一个图标:

图标

这个“图标”实际上是一个带有 .ico 扩展名的简单 DLL 文件,它会打开计算器应用,其中包含使用 Resource Hacker 添加的图标资源。 (也可以在 Visual Studio 中添加该图标)

在文件夹视图中,该图标的外观存在一些异常。我已在两个不同的 Windows 10 版本(最新版和较旧版)以及 Windows 11 上对此进行了测试。

Windows 10

在这两个 Windows 10 版本中,当扩展名改为 .ico 时,存储在 DLL 内部的图标都不会显示。

win10 dll

然而,在最新的 Windows 10 版本上,它确实可以正常工作,直到我尝试在照片应用中打开这个“图标”。此后,我一直无法复现它。

new win10 icon

Windows 11

在 Windows 11 上,这个伪装的 DLL 在 Explorer 视图中看起来就像普通图标一样。然而,当在照片应用中打开它时,会显示一个错误。

https://github.com/0xda568/IconJector/assets/61665703/748c1012-1d2c-47dd-915f-860ffc6d1b05

以编程方式注入 DLL

除了诱骗用户手动加载 DLL 之外,攻击者还可以选择使用此技术以编程方式将 DLL 文件注入 explorer 进程:

首先,在临时目录中创建一个文件夹,并使用 SHObjectProperties 打开该文件夹的属性。为了独立于系统语言获取窗口句柄,EnumWindows 与一个回调函数一起使用,该回调函数检查每个打开的窗口中是否包含那个独特的文件夹名称。

callback function

通过属性页面,调用更改图标对话框,其句柄也通过 EnumWindows 获取。最后,将图标路径更改为一个 DLL(在本例中带有 .ico 扩展名),这会使 explorer 在按下“确定”按钮后加载该 DLL。

为什么?

这是一种非常隐蔽的向 Explorer 进程注入 DLL 的方式,因为它没有使用通常的 DLL 注入 API。不过,它确实会产生两个短暂的弹窗,但并不会太扰人。因此,威胁行为者可以将其用作 AV 规避技术,通过合法的 explorer 进程执行代码,或加载 UMD rootkit。

此外,传播伪装成 .ico 文件的 DLL 可能是一个有趣的攻击向量。

所使用的工具

为了获取正确的窗口句柄,我使用了 Spy++,这是一个随 Visual Studio 一起安装的工具。

spy++

致谢

非常感谢微软的 Bill G. 提供了漂亮的文件夹图标!

谢谢你,互联网上的无名人士,提供了漂亮的注入图标!

下载工具