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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/thoxy67/zig-pe
ExploitationPost-ExploitationPenetration TestingRed TeamingPayload DevelopmentBinary Exploitation
GitHubthoxy67/zig-pe

zig-pe

Zig로 작성된 반사적 PE 로더. 네이티브 및 .NET PE 파일을 메모리에서 직접 로드하고 실행합니다.

저장소 보기
67756개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

zig-pe

Zig로 작성된 반사형 PE 로더입니다. 네이티브 및 .NET PE 파일을 메모리에서 직접 로드하고 실행합니다.

기능

PE 로딩 파이프라인

  • DOS 및 NT 헤더 파싱 (런타임에 PE32 및 PE32+)
  • 할당된 메모리에 섹션 매핑
  • 임포트 해석 (이름 및 순서, PE32 4바이트 / PE32+ 8바이트 썽크)
  • 베이스 재배치 적용 (HIGHLOW, DIR64, ARM_MOV32, THUMB_MOV32)
  • 지연 임포트 해석 (DataDirectory[13], 최신 RVA 형식)
  • 예외 처리기 등록 (RtlAddFunctionTable, x64/ARM64 전용)
  • 섹션별 메모리 보호 설정
  • TLS 콜백 호출 (DLL_PROCESS_ATTACH)
  • CreateThread를 통한 진입점 실행
  • 정리 (예외 테이블 등록 해제, 메모리 해제)

고급 보안 기능

  • 보안 쿠키 초기화 (__security_cookie for /GS 버퍼 보안)
  • CFG (Control Flow Guard) - SetProcessValidCallTargets를 통해 유효한 호출 대상 등록
  • SxS / 활성화 컨텍스트 - GUI 애플리케이션을 위한 포함된 매니페스트 활성화
  • 바운드 임포트 디렉터리 무효화

내보내기 테이블 해석

로드된 PE 이미지에서 내보내기를 해석하기 위한 유틸리티 함수:

  • getExportByName(base, ntheaders, name) — 이름으로 해석
  • getExportByOrdinal(base, ntheaders, ordinal) — 순서로 해석

전달된 내보내기를 자동으로 처리하여 대상 DLL을 로드합니다 (예: "NTDLL.RtlAllocateHeap"은 ntdll.dll의 실제 함수로 해석됨).

API 세트 해석

PEB ApiSetMap을 사용하여 Windows API 세트(api-ms-win-*, ext-ms-win-*)를 실제 호스트 DLL로 자동 해석합니다. 이를 통해 가상 API 세트 DLL에서 임포트하는 PE를 로드할 수 있습니다.

유틸리티 함수

  • utils.detect_platform(buffer) — PE가 32비트인지 64비트인지 감지
  • utils.is_dotnet_assembly(ntheaders) — PE가 .NET 어셈블리인지 확인
  • utils.getDotNetVersion(buffer) — 메타데이터에서 .NET 런타임 버전 문자열 추출
  • utils.rvaToFileOffset(buffer, rva) — RVA를 원시 파일 오프셋으로 변환

호환성

  • 네이티브 컴파일 바이너리 실행 (x86, x86_64, ARM, ARM64)
  • CLR 호스팅을 통한 .NET 컴파일 바이너리 실행
  • 네이티브 및 .NET 실행 파일 모두에 명령줄 인수 전달
  • 아키텍처 검증 (PE 비트는 호스트 프로세스와 일치해야 함)

지원되는 머신 유형

사전 요구 사항

  • Zig 컴파일러 (최신 버전 권장)
  • Windows OS (프로젝트에서 Windows 전용 API 사용)

프로젝트 빌드

  1. 저장소를 클론합니다:

    root@kitploit:~
    git clone https://github.com/Thoxy67/zig-pe.git
    cd zig-pe
    
  2. 프로젝트를 빌드합니다:

    root@kitploit:~
    zig build
    

빌드 옵션

root@kitploit:~
zig build -Ddotnet=false  # .NET 지원 비활성화 (기본값: 활성화)

빌드 대상

root@kitploit:~
zig build                 # 모든 대상 빌드
zig build run-putty64     # 64비트 네이티브 PE 예제 실행
zig build run-putty32     # 32비트 네이티브 PE 예제 실행
zig build run-dotnet      # .NET 어셈블리 예제 실행
zig build test            # 단위 테스트 실행

사용법

기본 사용법 (임베디드 PE)

root@kitploit:~
const pe = @import("pe");

pub fn main() !void {
    // Load and execute an embedded PE file
    try pe.RunPE.init(@embedFile("bin/app.exe")).run();
}

명령줄 인수 포함

root@kitploit:~
const pe = @import("pe");

pub fn main() !void {
    var loader = pe.RunPE.init(@embedFile("bin/app.exe"));
    try loader.runWithArgs(&.{ "arg1", "arg2", "arg3" });
}

파일에서 로드

root@kitploit:~
const std = @import("std");
const pe = @import("pe");

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();
    const allocator = gpa.allocator();

    const file_content = try std.fs.cwd().readFileAlloc(
        allocator,
        "path/to/executable.exe",
        std.math.maxInt(usize),
    );
    defer allocator.free(file_content);

    try pe.RunPE.init(file_content).run();
}

로드된 PE에서 내보내기 해석

root@kitploit:~
const pe = @import("pe");

// After loading a DLL into memory...
const base: [*]const u8 = @ptrCast(loaded_base);
const ntheaders = // ... get NT headers

// Resolve by name
if (pe.getExportByName(base, ntheaders, "ExportedFunction")) |func_ptr| {
    const func: *const fn () void = @ptrCast(@alignCast(func_ptr));
    func();
}

// Resolve by ordinal
if (pe.getExportByOrdinal(base, ntheaders, 42)) |func_ptr| {
    // Use the function pointer
}

인수 전달 방식

  • 네이티브 PE: 인수는 PEB CommandLine을 패치하여 전달되므로 GetCommandLineW()가 제공된 인수를 반환합니다.
  • .NET 어셈블리: 인수는 CLR 호출을 통해 Main(string[] args)에 직접 전달됩니다.

보안 고려 사항

이 프로젝트는 임의 코드를 로드하고 실행하는 작업을 포함하므로 잠재적으로 위험할 수 있습니다. 신뢰할 수 있는 PE 파일에 대해서만 제어된 환경에서 이 로더를 사용하십시오. 저자는 이 소프트웨어의 오용이나 손해에 대해 책임을 지지 않습니다.

기여

zig-pe에 대한 기여를 환영합니다! 풀 리퀘스트를 제출하거나, 이슈를 생성하거나, 널리 알려 주시기 바랍니다.

  1. 프로젝트 포크
  2. 기능 브랜치 생성 (git checkout -b feature/AmazingFeature)
  3. 변경 사항 커밋 (git commit -m 'Add some AmazingFeature')
  4. 브랜치 푸시 (git push origin feature/AmazingFeature)
  5. 풀 리퀘스트 열기

라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하십시오.

감사의 말

  • Zig 프로그래밍 언어 커뮤니티
  • PE 파일 형식 문서화에 기여한 분들

면책 조항

이 프로젝트는 교육 목적으로만 제공됩니다. PE 파일을 로드하고 실행하기 전에 필요한 권한과 허가가 있는지 확인하십시오.

도구 다운로드
아키텍처머신 코드비트 수
i3860x014c32비트
AMD640x866464비트
IA640x020064비트
ARM (ARMNT)0x01C432비트
ARM640xAA6464비트