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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
rustdllproxy — Generate Proxy DLLs in Rust | Kitploit
도구/GitHubGitHub/johnswiftc/rustdllproxy
Payload GenerationPersistence MechanismsPost-ExploitationPenetration TestingRed TeamingPayload Development
GitHubjohnswiftc/rustdllproxy

rustdllproxy

Generate Proxy DLLs in Rust

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

rustdllproxy


Windows 애플리케이션용 프록시 DLL을 쉽게 생성하고 개발할 수 있는 Rust 크레이트 유틸리티입니다.

설치

root@kitploit:~
cargo install rustdllproxy

호환성

이 크레이트는 현재 표준 DLL PE 형식만 지원합니다.

현재 제한 사항

  • 사용자 지정 코드로 함수를 후킹할 때 함수 시그니처를 알아야 합니다
    • 이는 Ghidra와 같은 디스어셈블러 및 리버스 엔지니어링 도구를 사용하여 확인할 수 있습니다.

명령어

Rustdllproxy는 두 가지 하위 명령어를 제공합니다:

명령어용도
rustdllproxy new하나 이상의 기존 DLL에서 새 프록시 cdylib 크레이트를 생성합니다.
rustdllproxy build.def 파일을 src/lib.rs와 동기화하고 크레이트를 빌드합니다.
root@kitploit:~
rustdllproxy --help        # 최상위 도움말
rustdllproxy new --help    # 생성 플래그
rustdllproxy build --help  # 빌드 플래그

새 크레이트 만들기

전략에 관한 간단한 참고 사항

크레이트를 생성하기 전에 프록시가 어떻게 동작하길 원하는지 결정하세요. 일반적인 패턴은 검색 순서 하이재킹(search order hijacking)입니다. 이 경우 먼저 대상 DLL의 이름을 target_.dll 같은 이름으로 바꾼 다음 컴파일된 프록시를 target.dll로 사용합니다. 이렇게 하면 binary -> target.dll -> target_.dll 흐름이 만들어집니다.

사용 사례에 따라 여러 가지 방법이 있습니다. 그러나 프록시 대상이 되는 기본 DLL의 이름을 바꿔야 한다면 생성된 .def 파일을 그에 맞게 업데이트하세요.


root@kitploit:~
rustdllproxy new -p path/to/target_.dll -n my_proxy

팁: rustdllproxy는 clap으로 빌드된 CLI입니다. 모든 옵션과 플래그를 보려면 rustdllproxy --help를 실행하세요.

후크 작성하기

매크로 라이브러리는 prehook, posthook, fullhook의 세 가지 주요 후크 유형을 지원합니다.

후크 구현 단계

  1. #[no_mangle] 지시문을 후크 매크로로 바꾸세요. (//<dllname>.dll 끝 주석은 그대로 두세요)

    root@kitploit:~
    #[prehook("dllbeingproxied.dll", "function_name")] //dllbeingproxied.dll
    
  2. 함수 시그니처를 작성하세요. (입력을 수정하려면 mut로 선언하세요)

  3. rustdllproxy build로 빌드하세요.

후크 유형

prehook

원본 함수 이전에 코드를 실행합니다. 기능을 추가하거나 입력 변수를 수정할 수 있습니다.

root@kitploit:~
#[prehook("target.dll", "my_function")] //target.dll
fn my_function(mut param1: i32, mut param2: &str) {
    // Your code here - executes before original function
    param1 *= 2;  // Modify parameters if needed
}

posthook

원본 함수 이후에 코드를 실행합니다. 매직 ret 변수를 사용하여 반환 값을 확인하고 수정합니다.

root@kitploit:~
#[posthook("target.dll", "calculate")] //target.dll
fn calculate(input: i32) -> i32 {
    // Original function executes first
    // Then your code runs with access to 'ret'
    ret = ret * 2;  // Modify return value
}

참고: ret 변수는 자동으로 가변(mutable)으로 정의됩니다. 필요하지 않으면 참조할 필요가 없습니다.

fullhook

함수 실행에 대한 완전한 제어를 제공합니다. 반환 값과 함수 호출을 수동으로 관리합니다.

root@kitploit:~
#[fullhook("target.dll", "do_multi_add")] //target.dll
fn do_multi_add(mut a: i32, mut b: i32, mut c: i32) -> i32 {
    // Pre-processing
    a += 10;
    b += 20;

    // Call original function with magic func()
    let mut return_value: i32 = func(a, b, c);

    // Post-processing
    return_value *= 2;

    // Must explicitly return the value
    return_value
}

크레이트 빌드하기

프록시 크레이트 디렉터리에서 실행하세요. (또는 첫 번째 인자로 전달하세요):

root@kitploit:~
rustdllproxy build [PATH] [--profile <name>] [--no-build] [-- <extra cargo args>]

주의 사항

  • .def 파일은 빌드할 때마다 완전히 다시 생성되므로 수동 변경 사항은 덮어써집니다. rustdllproxy가 빌드하는 방식을 수동으로 변경해야 한다면 cargo를 사용하여 이를 수행할 수 있습니다.
  • 빌드 시스템은 빌드 전에 기본 DLL의 이름을 알아내기 위해 생성된 주석, .def 내보내기 및 후크 이름에 의존합니다. 정보가 충분하지 않으면 이를 복구하는 방법을 설명하는 오류가 발생합니다.

예제 워크플로

DLL 검색 순서 하이재킹을 통해 오피스 소프트웨어에서 사용되는 office.dll을 수정하려고 한다고 가정해 보겠습니다:

1단계: 원본 DLL 준비

root@kitploit:~
# 원본 DLL 이름 변경
mv office.dll office_.dll

2단계: 프록시 크레이트 생성

root@kitploit:~
rustdllproxy new -p office_.dll -n office_proxy

3단계: 후크 구현

root@kitploit:~
#[prehook("office_.dll", "open_window")] //office_.dll
fn open_window() {
    // Your custom code here...
    println!("Window is about to open!");
}

4단계: 빌드 및 배포

root@kitploit:~
cd office_proxy
rustdllproxy build

빌드 파일은 /target 아래에 있습니다.

DLL 번들링 고려 사항

단일 크레이트로 여러 대상 DLL을 프록시할 수 있습니다. 이 기능은 거의 사용되지 않으며 몇 가지 중요한 주의 사항이 있습니다.

여러 DLL을 번들링하는 경우:

  • 내보내기 순서로 인해 함수 서수(ordinal)가 변경될 수 있습니다
  • 현대 소프트웨어는 호환성을 위해 내보내기 이름을 사용하므로 문제가 되는 경우는 거의 없습니다.
  • 주로 분석 및 사용자 지정 애플리케이션 개발에 유용합니다.

변경 로그

릴리스 노트는 CHANGELOG.md에 있습니다.

기여

기여를 환영합니다! 이슈와 풀 리퀘스트를 자유롭게 제출해 주세요.

도구 다운로드
플래그기본값효과
PATH.프록시 크레이트 루트 경로.
--profile <name>releaseCargo 빌드 프로필 (release, dev, 사용자 지정).
--no-buildoff.def 파일을 다시 생성하지만 cargo build는 건너뜁니다.
-- <args>—cargo build에 그대로 전달됩니다.