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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
moonwalk — PEB WALK 없이 DLL 베이스 주소 찾기 | Kitploit
도구/GitHubGitHub/teach2breach/moonwalk
Post-ExploitationBinary AnalysisLearning & EducationRed TeamingPayload Development
GitHubteach2breach/moonwalk

moonwalk

PEB WALK 없이 DLL 베이스 주소 찾기

저장소 보기
1702121년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

moonwalk: DLL 베이스 주소 파인더

이 Rust 라이브러리 및 CLI 도구는 PEB(Process Environment Block) 워킹을 사용하지 않고 로드된 DLL의 베이스 주소를 찾는 대체 방법을 보여줍니다. 이 기법은 PEB 워킹이 탐지되거나 차단될 수 있는 시나리오에서 특히 유용합니다.

브랜치 차이점

이 저장소에는 서로 다른 접근 방식을 가진 두 개의 브랜치가 있습니다:

메인 브랜치

  • 메모리 검증을 위해 winapi 크레이트와 VirtualQuery를 사용합니다
  • 라이브러리 함수(lib.rs)는 깔끔한 통합을 위해 print 문이 없습니다
  • CLI 도구(main.rs)는 개념 증명을 위한 디버그 출력을 포함합니다
  • 기법을 배우고 이해하는 데 좋습니다

OPSEC 브랜치

  • 외부 의존성 없음 - 완전히 독립적
  • Windows API 호출 없음 - VirtualQuery 대신 예외 처리를 사용한 직접 메모리 접근 방식
  • 라이브러리 함수에 print 문 없음
  • 향상된 스텔스 - API 호출을 하지 않음
  • 임플란트/도구에 더 적합 - 더 적은 흔적을 남기고 탐지하기 더 어려움

두 브랜치 모두 사용해도 안전하지만, OPSEC 브랜치는 API 호출이 모니터링되거나 차단될 수 있는 시나리오에서 추가적인 작전 보안 이점을 제공합니다.

작동 방식

이 프로그램은 스택 워킹 방식을 사용하여 다음과 같이 DLL을 찾습니다:

  1. TEB(Thread Environment Block) 접근:

    • 인라인 어셈블리를 사용하여 GS 세그먼트 레지스터(GS:[0x30])에서 TEB 포인터를 읽습니다
    • TEB에서 스택 베이스(GS:[0x08])와 스택 리미트(GS:[0x10])를 가져옵니다
  2. 스택 워킹:

    • 현재 스택 포인터(RSP)에서 시작합니다
    • 반환 주소를 찾기 위해 스택을 위로 탐색합니다
    • 각 주소가 실행 가능한 메모리인지 확인합니다
    • 메인 브랜치: 메모리 영역 검증에 VirtualQuery를 사용합니다
    • OPSEC 브랜치: 예외 처리를 사용한 직접 메모리 접근 방식을 사용합니다
  3. 모듈 식별:

    • 각 잠재적 반환 주소에 대해 실행 가능한 메모리를 가리키는지 확인합니다
    • 실행 가능한 메모리를 찾으면 역방향으로 탐색하여 PE 헤더를 찾습니다
    • 다음을 확인하여 모듈을 검증합니다:
      • MZ 시그니처(DOS 헤더)
      • PE 시그니처
      • DLL 특성
      • 64비트 아키텍처
      • 익스포트 디렉터리의 모듈 이름
  4. 검증:

    • 익스포트 디렉터리에서 모듈 이름을 확인하여 대상 DLL인지 검증합니다
    • 모든 PE 헤더 구조가 유효한지 확인합니다

왜 이 방식인가?

DLL을 찾는 전통적인 방법은 종종 PEB의 모듈 목록을 워킹하는 것을 포함합니다. 효과적이지만 이 방식은 다음과 같은 문제가 있을 수 있습니다:

  • 보안 소프트웨어에 탐지될 수 있음
  • 특정 환경에서 차단될 수 있음

이 스택 워킹 방식은 다음과 같은 대안을 제공합니다:

  • PEB에 의존하지 않음
  • PEB 워킹이 차단된 환경에서도 작동할 수 있음
  • OPSEC 브랜치: API 호출을 하지 않음

요구 사항

  • Rust(나이틀리 툴체인)
  • Windows x64
  • 메인 브랜치: winapi 크레이트
  • OPSEC 브랜치: 외부 의존성 없음

사용법

라이브러리로 사용

Cargo.toml에 추가하세요:

메인 브랜치:

root@kitploit:~
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git" }

OPSEC 브랜치:

root@kitploit:~
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git", branch = "opsec" }

코드에서의 사용 예시:

root@kitploit:~
use moonwalk::find_dll_base;

fn main() {
    // Find ntdll.dll
    if let Some(ntdll_base) = find_dll_base("ntdll.dll") {
        println!("ntdll.dll base: 0x{:X}", ntdll_base);
    }

    // Case-insensitive, .dll extension optional
    if let Some(kernel32_base) = find_dll_base("KeRNEl32") {
        println!("kernel32.dll base: 0x{:X}", kernel32_base);
    }
}

CLI 도구로 사용

빌드:

root@kitploit:~
cargo build --release

실행:

root@kitploit:~
# Find ntdll.dll (default)
cargo run --release

# Find specific DLL (case insensitive, .dll extension optional)
cargo run --release kernel32.dll
cargo run --release KeRNEl32
cargo run --release USER32

예시

print 문은 더 이상 포함되지 않습니다. 이 이미지는 교육 목적으로 포함되었습니다.

Moonwalk DLL Base Address Finder Demo

참고 사항

  • DLL 이름은 대소문자를 구분하지 않으며 .dll 확장자는 선택 사항입니다
  • 호출 스택에 있는 DLL에서만 작동합니다
  • 메인 브랜치: 안전한 메모리 접근 검증을 위해 VirtualQuery를 사용합니다
  • OPSEC 브랜치: 최대 스텔스를 위해 예외 처리를 사용한 직접 메모리 접근 방식을 사용합니다
  • 두 브랜치 모두 디버그 출력이 없는 깔끔한 라이브러리 인터페이스를 제공합니다
도구 다운로드