Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
IconJector — 아이콘을 사용하여 탐색기 프로세스에 DLL 주입 | Kitploit
도구/GitHubGitHub/d419h/iconjector
ExploitationPost-ExploitationSocial EngineeringRed TeamingPayload DevelopmentAdversarial Attack
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은 아이콘으로 위장되고 있습니다:

아이콘

"아이콘"은 실제로 Resource Hacker를 사용하여 추가된 아이콘 리소스로 계산기 앱을 여는 .ico 확장자를 가진 단순한 DLL 파일입니다. (아이콘은 Visual Studio에서도 추가할 수 있습니다)

폴더 보기에서 아이콘 표시에는 몇 가지 이상 징후가 있습니다. 저는 두 가지 다른 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 확장자를 가짐), 확인 버튼을 누르면 탐색기가 DLL을 로드하게 됩니다.

왜?

이것은 일반적인 DLL 인젝션 API를 사용하지 않기 때문에 탐색기 프로세스에 DLL을 주입하는 매우 은밀한 방법입니다. 다만 두 개의 짧은 팝업이 표시되기는 하지만 그리 거슬리지는 않습니다. 따라서 위협 행위자가 정상적인 탐색기 프로세스를 통해 코드를 실행하거나 UMD 루트킷을 로드하기 위한 AV 우회 기술로 사용될 수 있습니다.

또한 .ico 파일로 위장한 DLL을 유포하는 것은 흥미로운 공격 벡터가 될 수 있습니다.

사용된 도구

올바른 창 핸들을 얻기 위해 Visual Studio와 함께 설치되는 도구인 Spy++를 사용했습니다.

spy++

크레딧

아름다운 폴더 아이콘을 제공한 Microsoft의 Bill G.에게 감사드립니다!

아름다운 인젝션 아이콘을 제공한 인터넷의 익명의 분에게도 감사드립니다!

도구 다운로드