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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Hollow — 여러 인젝션 기법을 지원하는 셸코드 로더 생성기로, 레드팀 작전을 위해 제작되었습니다. | Kitploit
도구/GitHubGitHub/chaelsoo/hollow
Encryption/Decryption ToolsPayload GenerationExploitationIDS/IPS EvasionShellcodePenetration TestingRed TeamingShellcode GenerationPayload DevelopmentBinary Exploitation
GitHubchaelsoo/hollow

Hollow

99251개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

여러 인젝션 기법을 지원하는 셸코드 로더 생성기로, 레드팀 작전을 위해 제작되었습니다.

저장소 보기

Hollow

hollow는 셸코드 로더 생성기입니다. 원시 셸코드 바이너리와 프로필을 입력하면 셸코드가 암호화되어 포함된 컴파일된 Windows PE 로더가 생성됩니다.

시작하기

바이너리는 릴리즈 페이지에서 다운로드하거나 소스에서 빌드할 수 있습니다:

root@kitploit:~
go build -o hollow .

크로스 컴파일을 위해 x86_64-w64-mingw32-gcc가 필요합니다.

Arch Linux: pacman -S mingw-w64-gcc Debian/Ubuntu: apt install gcc-mingw-w64-x86-64

사용법

root@kitploit:~
./hollow -shellcode payload.bin -profile profiles/new_process_injection_sc.json
플래그설명
-shellcode원시 셸코드(.bin) 경로
-profile프로필 JSON 파일 경로
-templates템플릿 디렉터리 (기본값: ./templates)

작동 방식

hollow는 암호화, 대체, 컴파일의 세 단계 파이프라인을 따릅니다.

셸코드는 실행 시마다 무작위로 생성된 키와 IV를 사용하여 AES-256-CBC로 암호화됩니다. 키와 IV는 모두 출력 바이너리 내부에 포함됩니다. 선택한 C 템플릿의 플레이스홀더가 암호화된 셸코드, 키, IV로 대체된 후, 결과물은 MinGW에 의해 스트립되고 정적으로 링크된 PE로 컴파일됩니다.

런타임에 로더는 Windows BCrypt를 사용하여 셸코드를 복호화하고 템플릿이 구현하는 주입 기법을 사용하여 실행합니다.

템플릿

템플릿은 실제 주입 로직을 구현하는 C 소스 파일입니다. 각 템플릿은 templates/ 디렉터리에 있으며, hollow가 컴파일 전에 채워 넣는 플레이스홀더 토큰(${SHELLCODE}, ${KEY}, ${IV}, ${TARGET_PROCESS})을 포함합니다. 프로필을 통해 템플릿을 선택합니다.

hollow에는 6개의 템플릿이 포함되어 있습니다:

자체 템플릿을 작성하여 templates/에 넣을 수 있습니다. 프로필이 해당 템플릿을 가리키면 hollow가 자동으로 인식합니다.

프로필

프로필은 hollow에 사용할 템플릿, 대상 프로세스, 출력 컴파일 방법을 알려주는 JSON 파일입니다. profiles/ 디렉터리에 있으며, 각 작업에 맞게 사용자 지정할 수 있습니다.

root@kitploit:~
{
    "name": "New Process Injection via Direct Syscalls",
    "author": "",
    "template": "new_process_injection_sc",
    "target_process": "C:\\Windows\\System32\\cmd.exe",
    "arch": "x64",
    "compile": {
        "automatic": true,
        "gcc": "x86_64-w64-mingw32-gcc",
        "strip": true,
        "output_type": "exe"
    },
    "output_dir": "./output"
}

output_type은 exe 또는 dll입니다. automatic: false로 설정하면 컴파일 대신 대체된 C 소스를 디스크에 덤프하므로, 빌드 전에 코드를 수정하려는 경우 유용합니다.

출력 파일은 output_dir에 {template}_loader.{exe|dll} 이름으로 기록됩니다.

템플릿 상세

New Process Injection

템플릿: new_process_injection

기법: 새로 생성된 프로세스로의 원격 스레드 주입.

CREATE_BREAKAWAY_FROM_JOB | CREATE_NO_WINDOW 플래그로 대상 프로세스를 생성하고, 초기화를 위해 2초 대기한 후 프로세스 주소 공간에 메모리를 할당하고 복호화된 셸코드를 작성한 뒤, 실행 가능으로 표시하고 이를 가리키는 원격 스레드를 생성합니다. BREAKAWAY 플래그는 로더가 WinRM에서 실행될 때 필요합니다. WinRM은 모든 프로세스를 작업 개체로 래핑합니다. 대상은 전체 실행 파일 경로입니다.

Win32 호출: CreateProcessA, VirtualAllocEx, WriteProcessMemory, VirtualProtectEx, CreateRemoteThread.


New Process Injection via Direct Syscalls

템플릿: new_process_injection_sc

기법: 직접 시스템 콜(Hell's Gate)을 사용하여 새로 생성된 프로세스로의 원격 스레드 주입.

new_process_injection과 동일한 동작이지만, 모든 할당 및 스레딩 호출이 Win32 계층을 완전히 우회합니다. SSN은 런타임에 ntdll에서 확인되며 원시 syscall 명령어를 통해 실행됩니다. 벤치마크 섹션을 참조하세요.


Remote Thread Injection

템플릿: remote_thread_injection

기법: 기존 프로세스로의 클래식 원격 스레드 주입.

CreateToolhelp32Snapshot을 사용하여 이름으로 실행 중인 프로세스를 찾고, 핸들을 연 다음 메모리를 할당하고 셸코드를 작성한 후 원격 스레드를 생성합니다. 새 프로세스가 생성되지 않습니다. explorer.exe와 같은 장기 실행 프로세스에 가장 적합합니다. 대상은 프로세스 이미지 이름이며 전체 경로가 아닙니다.

Win32 호출: OpenProcess, VirtualAllocEx, WriteProcessMemory, VirtualProtectEx, CreateRemoteThread.


Remote Thread Injection via Direct Syscalls

템플릿: remote_thread_injection_sc

기법: 직접 시스템 콜(Hell's Gate)을 사용하여 기존 프로세스로의 클래식 원격 스레드 주입.

remote_thread_injection과 동일한 동작으로 Win32 계층을 우회합니다. 벤치마크 섹션을 참조하세요.


Early Bird APC Injection

템플릿: earlybird_apc

기법: 얼리 버드 APC 주입 (CyberArk, 2018).

대상 프로세스를 일시 중단 상태로 생성하고(CREATE_SUSPENDED | CREATE_BREAKAWAY_FROM_JOB | CREATE_NO_WINDOW), 복호화된 셸코드를 프로세스 주소 공간에 작성한 후 QueueUserAPC를 통해 셸코드를 가리키는 APC(비동기 프로시저 호출)를 주 스레드에 큐에 넣고 ResumeThread로 재개합니다. APC는 프로세스 진입점이 실행되기 전에 발생하므로, 프로세스 내 방어 도구가 초기화되기 전에 셸코드가 실행됩니다. VirtualAllocEx + WriteProcessMemory + CreateRemoteThread 삼중 호출을 완전히 회피합니다.


DLL Sideload

템플릿: dll_sideload

기법: DLL 사이드로딩 / 프로세스 내 셸코드 실행.

EXE 대신 DLL을 생성합니다. DLL_PROCESS_ATTACH 시, 셸코드를 복호화하고 프로세스 내에서 실행하는 스레드가 생성됩니다: VirtualAlloc, memcpy, VirtualProtect, 그 다음 셸코드로의 직접 함수 호출. 호스트 프로세스는 페이로드가 초기화되는 동안(슬라이버 비콘의 경우 약 10초) 계속 살아 있어야 합니다. 누락된 DLL 검색 경로 항목을 통해 합법적인 바이너리가 DLL을 로드할 위치에 DLL을 배치하여 배포합니다.


벤치마크: Win32 vs. 직접 시스템 콜

Windows 10 Build 19041, Windows Defender 실시간 보호 활성화, 정의 버전 1.453.354.0, 17MB Donut 래핑된 Sliver 비콘을 페이로드로 사용:

Trojan:Win64/AsyncRat.RPY!MTB는 클래식 원격 주입 시퀀스인 VirtualAllocEx + WriteProcessMemory + CreateRemoteThread가 Win32 API 계층을 통해 원격 프로세스 핸들에 대해 호출될 때 트리거되는 기계 위협 동작 규칙입니다. Defender는 이 세 호출이 순서대로 나타날 때 작동하는 커널 콜백을 등록합니다.

_sc 템플릿은 해당 Win32 함수를 절대 호출하지 않음으로써 이를 우회합니다. 대신, Hell's Gate를 사용하여 런타임에 ntdll에서 해당 커널 시스템 콜 서비스 번호(SSN)를 직접 확인합니다. 모든 후킹되지 않은 ntdll 스텁은 4바이트 프롤로그 4C 8B D1 B8로 시작하며, SSN은 오프셋 4에 위치합니다. 실제 시스템 콜은 movq %rcx, %r10 / movl ssn(%rip), %eax / syscall / ret만 포함하는 GCC 네이키드 함수이며, 이는 ntdll 스텁 자체가 실행할 정확한 시퀀스입니다. 모니터링되는 Win32 래퍼가 호출되지 않기 때문에 Defender의 콜백이 작동하지 않습니다.

완전한 EDR에 의해 ntdll 스텁이 패치된 시스템(프롤로그가 점프로 대체됨)에서는 깨끗한 스텁 검사가 실패하고 로더가 조기 종료됩니다. Halo's Gate (인접 스텁을 스캔하여 SSN을 추론)는 구현되지 않았습니다.

바이너리 크기

로더 코드는 약 19KB의 오버헤드를 추가합니다. 출력 크기는 기본적으로 입력 셸코드의 크기와 같습니다. 17MB 슬라이버 비콘은 18MB 로더를 생성합니다. 일반적인 Metasploit 셸코드(~200KB)는 약 220KB 로더를 생성합니다.

기여

기여를 환영합니다. 직접 작성한 템플릿을 추가하고 싶거나 기존 템플릿을 개선하고 싶다면 PR을 열어 주세요. 버그를 발견하거나 제안이 있으면 이슈를 열어 주세요.

이 도구의 목표는 로더 개발 프로세스를 더 쉽게 만드는 것이지 완성된 제품이 되는 것이 아닙니다. 새로운 템플릿, 더 나은 프로필, 핵심 기능 개선 모두 환영합니다. hollow는 또한 사람들이 셸코드 로더와 주입 기법의 개념을 이해하는 데 도움을 주기 위해 만들어졌으므로, 명확하고 읽기 쉬운 템플릿 코드는 기능만큼이나 가치 있습니다.

블로그

각 기법의 개념과 hollow의 전체 사용법을 곧 제 블로그에서 자세히 설명할 예정입니다. 계속 지켜봐 주세요.

참고 자료

  • ldrgen by gatari, 셸코드 로더 디자인의 영감 및 참고 자료
도구 다운로드
템플릿기법
new_process_injection새로 생성된 프로세스로의 원격 스레드 주입
new_process_injection_sc동일하나 직접 시스템 콜 사용 (Hell's Gate)
remote_thread_injection기존 프로세스로의 클래식 원격 스레드 주입
remote_thread_injection_sc동일하나 직접 시스템 콜 사용 (Hell's Gate)
earlybird_apc얼리 버드 APC 주입
dll_sideloadDLL 사이드로딩, EXE 대신 DLL 생성
템플릿Defender 동작 경고세션 수립
new_process_injectionTrojan:Win64/AsyncRat.RPY!MTB예
remote_thread_injectionTrojan:Win64/AsyncRat.RPY!MTB예
earlybird_apc없음예
dll_sideload없음예
new_process_injection_sc없음예
remote_thread_injection_sc없음예