Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
IconJector — アイコンを使用してエクスプローラープロセスにDLLを注入する | Kitploit
ツール/GitHubGitHub/d419h/iconjector
エクスプロイトポストエクスプロイトソーシャルエンジニアリングレッドチーミングペイロード開発敵対的攻撃
GitHubd419h/iconjector

IconJector

アイコンを使用してエクスプローラープロセスにDLLを注入する

リポジトリを見る
415491年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

IconJector

これは、Windowsのアイコン変更ダイアログを利用した、Windows ExplorerへのDLLインジェクション技術です。

ユーザーを騙して、悪意のあるDLLをエクスプローラプロセスに読み込ませることができます:

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

さらに、別のプロセスからエクスプローラへDLLを注入するためにも使用できます:

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

仕組みは?

DLLはコードを含むだけでなく、アイコンのようなリソースを保存するためにも使用されます。デモでは、デフォルトのアイコンがshell32.dllに保存されていることがわかります:

image

実際には、最新のWindowsバージョンでは、それらはshell32.dll.muiに保存されていますが、それでもshell32.dllとして表示されます

エクスプローラプロセスがダイアログ内の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.
}

つまり、DllMain関数を持つDLLがエクスプローラによって読み込まれると、DllMain関数で定義されたコードがエクスプローラのメモリ内で実行されることになります。

そして、これこそがまさにここで行われていることです。さらに、DLLはアイコンとして偽装されています:

アイコン

「アイコン」は実際には.ico拡張子を持つ単純なDLLファイルであり、Resource Hackerを使用して追加されたアイコンリソースとともに電卓アプリを開きます。(アイコンはVisual Studioでも追加できます)

フォルダビューでのアイコンの表示にはいくつかの異常があります。私は2つの異なるWindows 10バージョン(最新版とより古いバージョン)とWindows 11でこれをテストしました。

Windows 10

両方のWindows 10バージョンで、拡張子が.icoに変更されたとき、DLL内に保存されたアイコンは表示されませんでした

win10 dll

ただし、最新のWindows 10バージョンでは、フォトアプリで「アイコン」を開こうとするまでは動作しました。それ以来、それを再現することはできていません。

new win10 icon

Windows 11

Windows 11では、偽装されたDLLはエクスプローラビューで通常のアイコンと同様に表示されました。ただし、フォトアプリで開くとエラーが表示されます。

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

プログラムによるDLLの注入

ユーザーを騙して手動でDLLを読み込ませることに加えて、攻撃者はこの技術を使用してDLLファイルをエクスプローラプロセスにプログラム的に注入するオプションもあります:

まず、一時ディレクトリにフォルダが作成され、SHObjectPropertiesを使用してフォルダのプロパティが開かれます。システム言語に依存せずにウィンドウのハンドルを取得するために、開いているすべてのウィンドウで一意のフォルダ名をチェックするコールバック関数とともにEnumWindowsが使用されます。

callback function

プロパティページを通じてアイコン変更ダイアログが呼び出され、そのハンドルもEnumWindowsで取得されます。最後に、アイコンパスがDLL(この場合は.ico拡張子を持つ)に変更され、OKボタンが押された後にエクスプローラがDLLを読み込むことになります。

なぜ?

これは、通常のDLLインジェクションAPIを使用しないため、ExplorerプロセスにDLLを注入する非常にステルスな方法です。ただし、2つの短いポップアップが表示されますが、それほど邪魔にはなりません。そのため、脅威アクターが正当なエクスプローラプロセスを介してコードを実行したり、UMDルートキットを読み込んだりするためのAV回避技術として使用される可能性があります。

また、.icoファイルに偽装したDLLを拡散することは、興味深い攻撃ベクトルになる可能性があります。

使用したツール

正しいウィンドウハンドルを取得するために、Visual StudioとともにインストールされるツールであるSpy++を使用しました。

spy++

クレジット

美しいフォルダアイコンを提供してくれたMicrosoftのBill G.氏に感謝します!

美しいインジェクションアイコンを提供してくれた、インターネット上の名無しの人物に感謝します!

ツールをダウンロード