Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
ReflectivePluginLoader — Windows x64용 리플렉티브 PE 매퍼 및 회피 강화 모듈 스톰핑 엔진 | Kitploit
도구/GitHubGitHub/racoten/reflectivepluginloader
Defensive ToolsPersistence MechanismsReverse EngineeringShellcodePost-ExploitationMalware AnalysisLearning & EducationRed TeamingPayload DevelopmentBinary Exploitation
GitHubracoten/reflectivepluginloader
821161일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

ReflectivePluginLoader

Windows x64용 리플렉티브 PE 매퍼 및 회피 강화 모듈 스톰핑 엔진

저장소 보기

ReflectivePluginLoader

License: MIT

Windows x64용 최소한의 리플렉티브 PE 매퍼 및 모듈 스톰핑 엔진으로, 깔끔한 IPlugin ABI를 기반으로 구축되었습니다. 메모리 내 바이트 버퍼에서 DLL을 매핑하고, 익스포트를 해석한 뒤 플러그인 함수를 호출합니다 — 익명 메모리(고전적 리플렉티브 로드)에서든, 정상적으로 로드된 희생 DLL 내부(모듈 스톰핑)에서든 말입니다.

모듈 스톰핑 경로는 회피 강화되어 있습니다: 섹션별 보호(no RWX), 프라이빗 매핑 정리, 원본 바이트 복원, 힙 스크러빙. 정리 후 pe-sieve, Moneta, hollows_hunter, BeaconEye, YARA로 스캔한 결과 스톰핑된 모듈에서 아무런 탐지도 나오지 않습니다.

빠른 시작

CMake 3.15+와 Windows에서 MSVC, Clang, 또는 MinGW 중 하나가 필요합니다.

# Configure (defaults to Release)
cmake -B build -G Ninja

# Build
cmake --build build

# The build produces:
#   build/Modules/CmdPlugin/cmdplugin.dll   (example plugin)
#   build/Testing/harness.exe               (test harness)

디버그 빌드에서 전체 진단 출력을 사용하려면:

cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build

사용법

클래식 반사 로드

.\harness.exe cmdplugin.dll whoami

VirtualAlloc된 메모리에 플러그인을 매핑합니다. PEB 항목도, 로더 알림도 없습니다.

모듈 스톰핑

.\harness.exe cmdplugin.dll whoami --stomp xpsservices.dll
.\harness.exe cmdplugin.dll "dir C:\" --stomp mscms.dll

sacrificial DLL을 LoadLibrary를 통해 정상적으로 로드한 다음, 그 .text를 플러그인으로 연속적인 이미지로서 덮어씁니다. 실행은 sacrificial DLL의 주소 공간에서 발생합니다 — 호출 스택과 모듈 목록은 해당 코드를 sacrificial 모듈에 귀속시킵니다.

하네스는 정리 후 일시 중지되므로, 프로세스에 대해 메모리 스캐너를 실행할 수 있습니다.

모듈 스톰핑의 작동 방식

1. MapImage(plugin)               private reflective mapping
2. LoadLibrary(sacrificial)       legitimate load, PEB entry
3. Save original .text bytes      for later restoration
4. Copy plugin image -> .text     contiguous image preserves RIP-relative offsets
5. Relocate stomped code          fix addresses for new base
6. Patch entry point              mov eax,1; ret (safe FreeLibrary)
7. Per-section protections        RX / R / RW per section (never RWX)
8. Resolve exports                from private mapping, return stomped addresses
9. Free private mapping           eliminates floating PE artifact
10. Execute plugin                code runs inside "sacrificial.dll"

정리 (회피)

11. Restore original .text bytes  sacrificial code back in place
12. FreeLibrary(sacrificial)      unloads the module
13. LoadLibrary(sacrificial)      fresh load = clean file-backed pages
14. Scrub heap buffers            zero saved bytes + raw DLL data

정리 후, 희생 DLL은 정상적으로 로드된 모듈과 구별할 수 없습니다. 페이지는 파일 기반(프라이빗이 아님)이며, 내용은 디스크상의 파일과 일치하고, 힙에 PE 아티팩트가 남지 않습니다.

회피 기법

IOC완화
RWX 메모리 영역섹션별 보호: .text RX, .rdata R, .data RW
프라이빗 실행 가능 메모리(플로팅 PE)내보내기 확인 후 프라이빗 매핑을 VirtualFree
수정된 모듈 코드원본 .text 바이트를 복원한 뒤, 깨끗한 파일 기반 페이지를 위해 FreeLibrary + LoadLibrary
힙에 있는 PE 헤더해제 전에 원시 DLL 버퍼와 저장된 바이트를 memset(0)
언로드 시 DllMain 크래시덮어쓰기 전에 진입점을 mov eax,1; ret로 패치

프로젝트 구조

ReflectivePluginLoader/
├── CMakeLists.txt
├── Include/
│   ├── IPlugin.h                      Plugin ABI (TaskApi, IPlugin)
│   ├── ReflectiveLoaderEngine.h       PE mapper + export resolver
│   └── StompedLoaderEngine.h          Module stomping engine
├── Modules/
│   └── CmdPlugin/
│       ├── cmdplugin.cpp              Command execution plugin
│       └── CMakeLists.txt
├── Testing/
│   ├── main.cpp                       Test harness
│   └── CMakeLists.txt
└── Tools/
    └── file2hex.py                    DLL to C byte array converter

플러그인 작성하기

  1. Modules/ 아래에 디렉터리를 만들고 IPlugin.h를 포함하세요.
  2. IPlugin 인터페이스를 구현하세요:
#include "IPlugin.h"

class MyPlugin : public IPlugin {
public:
    void init()                  const override { /* setup */ }
    void execute(TaskApi* task)  const override { /* work  */ }
    void cleanup()               const override { /* tear  */ }
};
  1. 다섯 개의 진입점(create_plugin, destroy_plugin, plugin_init, plugin_exec, plugin_cleanup)을 내보냅니다. CRT 안전 할당을 위해 HeapAlloc + placement new를 사용하십시오.

  2. CMakeLists.txt를 추가하고 루트에서 add_subdirectory()로 등록하십시오.

희생 DLL 선택

희생 DLL의 .text 섹션은 플러그인의 가상 이미지 크기보다 커야 합니다. 프로세스에서 활발히 사용되거나 런타임에 무결성 검사를 받지 않아야 합니다.

좋은 후보: xpsservices.dll (1.8 MB .text), mscms.dll, colorui.dll, npmproxy.dll

나쁜 후보: ntdll.dll, kernel32.dll (활발히 사용됨), clr.dll (무결성 검사됨)

제한 사항

  • 지원됨: 기본 재배치, 임포트 해석, 섹션별 보호, 연속 이미지 스톰핑, 페이지 복원을 포함한 전체 정리
  • 지원되지 않음: TLS 콜백, 지연 로드 임포트, 포워딩된 익스포트, CFG, SEH 테이블 등록
  • 스톰핑: 전체 플러그인 가상 이미지가 희생 .text 섹션에 맞아야 함

변경 사항 (v2.0 — 회피 강화)

이 릴리스는 원래 개념 증명을 처음부터 다시 작성한 것입니다:

  • 모듈 스톰핑 엔진 (StompedLoaderEngine.h) — 전체 회피 정리를 포함한 연속 이미지 스톰핑
  • 섹션별 메모리 보호 — .text RX, .rdata R, .data RW; 더 이상 RWX 영역 없음
  • 프라이빗 페이지 제거 — FreeLibrary + LoadLibrary 사이클이 사유화된 페이지를 깨끗한 파일 기반 페이지로 대체
  • 힙 스크러빙 — 스캔 윈도우 전에 원시 DLL 바이트와 저장된 원본 .text를 0으로 초기화
  • 진입점 패칭 — mov eax,1; ret가 FreeLibrary 중 DllMain 충돌을 방지
  • 프라이빗 매핑 정리 — 익스포트 해석 후 반사 매핑을 VirtualFree (부유 PE 제거)
  • 반사 로더 재작성 (ReflectiveLoaderEngine.h) — 입력 버퍼에서 직접 매핑, 중간 VirtualAlloc 복사 없음
  • 플러그인 ABI 정리 (IPlugin.h) — 사용하지 않는 헬퍼(BeaconCout, CStrLenA, PluginAlloc, PluginFree) 제거
  • CmdPlugin 정리 — 모든 마커 문자열과 디버그 아티팩트 제거
  • 테스트 하네스 재작성 (main.cpp) — NDEBUG를 통한 조건부 컴파일; Release 빌드는 명령 출력과 스캔 명령만 표시
  • CMake 기본값 — 기본적으로 Release 빌드 유형, 플러그인 DLL에 -nostartfiles (반사 로드 코드에 CRT 없음)

스캐너 결과 (정리 후)

image

참고 자료

  • stephenfewer/ReflectiveDLLInjection
  • ired.team - Module Stomping
  • fancycode/MemoryModule
  • PE Format (Microsoft)
  • forrest-orr/moneta
  • hasherezade/pe-sieve

라이선스

MIT

도구 다운로드