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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
rhabdomancer — 이진 파일에서 잠재적으로 안전하지 않은 API 함수 호출을 찾아내는 취약점 연구 보조 도구. | Kitploit
도구/GitHubGitHub/0xdea/rhabdomancer
Static AnalysisVulnerability AnalysisReverse EngineeringBinary Analysis
GitHub0xdea/rhabdomancer

rhabdomancer

이진 파일에서 잠재적으로 안전하지 않은 API 함수 호출을 찾아내는 취약점 연구 보조 도구.

저장소 보기
13115291일 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
웹사이트
공유

rhabdomancer

build doc

"익스플로잇 가능한 버그로 가는 길은 익스플로잇 불가능한 버그로 포장되어 있다."

-- Mark Dowd

Rhabdomancer는 바이너리 파일에서 잠재적으로 안전하지 않은 API 함수 호출을 찾아내는 매우 빠른 IDA 헤드리스 플러그인입니다. 감사자는 이러한 후보 지점에서 역추적하여 신뢰할 수 없는 입력에 접근할 수 있는 경로를 찾을 수 있습니다.

기능

  • IDA 9.x와 idalib-rs Rust 바인딩 덕분에 매우 빠른 헤드리스 사용자 경험을 제공합니다.
  • IDA가 구현하는 모든 아키텍처용으로 컴파일된 C/C++ 바이너리 타깃을 지원합니다.
  • 잘못된 API 함수 호출 위치가 stdout에 출력되고 IDB에 표시됩니다.
    • IDA가 인식하는 라이브러리 코드(예: FLIRT 시그니처로 매칭된 정적 링크 런타임)의 호출 위치는 (lib)로 표시됩니다.
    • 스텁을 통한 호출(예: ELF 바이너리의 .plt 항목 또는 PE 및 Mach-O 바이너리의 임포트 스텁, thunk로 나열됨)은 호출자까지 역추적됩니다.
    • ELF 바이너리에서 함수는 동일한 호출 위치와 함께 의도적으로 두 번 나열됩니다: 한 번은 .plt 스텁 (thunk로 표시됨)으로, 한 번은 임포트로 나열됩니다. 각 호출 위치는 IDB에 한 번만 표시됩니다.
  • 알려진 잘못된 API 함수는 심각도 등급으로 그룹화되어 감사 작업의 우선순위를 정하는 데 도움을 줍니다.
    • [BAD 0] 높은 우선순위 - 일반적으로 안전하지 않다고 간주되는 함수.
    • [BAD 1] 중간 우선순위 - 안전하지 않은 사용 사례를 확인해야 하는 흥미로운 함수.
    • [BAD 2] 낮은 우선순위 - 이 함수와 관련된 코드 경로를 주의 깊게 확인해야 함.
  • 알려진 잘못된 API 함수 목록은 내장되어 있으며 conf/rhabdomancer.toml을 기반으로 한 구성 파일로 쉽게 사용자 정의할 수 있습니다.
  • 함수 이름은 다음 장식 없이 매칭됩니다: 선행 점과 밑줄(예: _strcpy), 라이브러리 별칭의 접두사 (예: Universal CRT의 __o_malloc, glibc의 __libc_system 및 __GI___snprintf), 그리고 스텁 및 그러한 별칭에 한해 IDA가 이미 사용 중인 이름에 추가하는 숫자 접미사(예: memset_0).

[!NOTE] 강화된 함수(예: _FORTIFY_SOURCE로 빌드할 때 strcpy 대신 사용되는 __strcpy_chk)는 나열된 함수의 검사된 변형이므로 의도적으로 매칭되지 않습니다. 해당 호출도 표시하려면 사용자 정의 구성에 명시적으로 추가하십시오(예: strcpy와 동일한 우선순위로 "__strcpy_chk").

기사

  • https://hex-rays.com/blog/streamlining-vulnerability-research-idalib-rust-bindings
  • https://hnsecurity.it/blog/streamlining-vulnerability-research-with-ida-pro-and-rust

참고 항목

  • https://github.com/0xdea/ghidra-scripts/blob/main/Rhabdomancer.java
  • https://docs.hex-rays.com/release-notes/9_0#headless-processing-with-idalib
  • https://github.com/idalib-rs/idalib
  • https://books.google.it/books/about/The_Art_of_Software_Security_Assessment.html

설치

최신 릴리스를 얻는 가장 쉬운 방법은 crates.io를 이용하는 것입니다:

  1. IDA를 다운로드, 설치 및 구성합니다(https://hex-rays.com/ida-pro 참조).
  2. LLVM/Clang을 설치합니다(https://rust-lang.github.io/rust-bindgen/requirements.html 참조).
  3. Linux/macOS에서는 다음과 같이 설치합니다:
    export IDADIR=/path/to/ida # if not set, the build script will check common locations
    cargo install rhabdomancer --locked
    
    Windows에서는 대신 다음 명령을 사용하세요:
    $env:LIBCLANG_PATH="\path\to\clang+llvm\bin"
    $env:PATH="\path\to\ida;$env:PATH"
    $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations
    cargo install rhabdomancer --locked
    

컴파일

또는 소스에서 빌드할 수 있습니다:

  1. IDA를 다운로드, 설치 및 구성합니다(https://hex-rays.com/ida-pro 참조).
  2. LLVM/Clang을 설치합니다(https://rust-lang.github.io/rust-bindgen/requirements.html 참조).
  3. Linux/macOS에서는 다음과 같이 컴파일합니다:
    git clone --depth 1 https://github.com/0xdea/rhabdomancer
    cd rhabdomancer
    export IDADIR=/path/to/ida # if not set, the build script will check common locations
    cargo build --release --locked
    
    Windows에서는 대신 다음 명령을 사용하세요:
    git clone --depth 1 https://github.com/0xdea/rhabdomancer
    cd rhabdomancer
    $env:LIBCLANG_PATH="\path\to\clang+llvm\bin"
    $env:PATH="\path\to\ida;$env:PATH"
    $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations
    cargo build --release --locked
    

사용법

  1. IDA가 유효한 라이선스로 올바르게 구성되어 있는지 확인하세요.
  2. 선택적으로 알려진 악성 API 함수 목록을 사용자 지정할 수 있습니다: conf/rhabdomancer.toml을 복사하고(정확한 내장 목록을 위해 설치된 버전과 일치하는 태그를 선택하세요), 복사본을 편집한 뒤, RHABDOMANCER_CONFIG 환경 변수를 해당 경로로 설정하세요. 파일은 high, medium, low 배열을 정의해야 하며, 다른 키는 없어야 합니다. 그렇지 않으면 빌드 시점에 conf/rhabdomancer.toml에서 바이너리에 내장된 내장 목록이 사용됩니다 (해당 파일을 편집하려면 재빌드가 필요합니다).
  3. IDA 설치가 비표준 위치에 있는 경우 IDADIR 환경 변수가 설정되어 있는지 확인하세요.
  4. 다음과 같이 실행하세요:
    rhabdomancer <binary_file>
    
    기존 .i64 IDB 파일이 있으면 업데이트됩니다. 그렇지 않으면 새 IDB 파일이 생성됩니다.
  5. 생성된 .i64 IDB 파일을 IDA로 엽니다.
  6. View > Open subviews > Bookmarks를 선택합니다.
  7. 결과가 IDA 창에 편리하게 모여 있는 것을 즐기세요.

[!NOTE] Rhabdomancer는 표시된 호출 위치에 주석도 추가합니다. 북마크와 주석 모두 [BAD n] <function_name> 형식으로 태그되며, 여기서 n은 우선순위 등급(0 = 높음, 1 = 중간, 2 = 낮음)이므로 스크립트가 IDB에서 이를 검색할 수 있습니다. 이 형식은 릴리스 간에 안정적입니다.

호환성

공식적으로는 최신 IDA 릴리스만 지원되지만, 이전 버전에서도 작동할 수 있습니다. 다음 표는 각 IDA 버전에 대한 최신 호환 릴리스를 요약한 것입니다:

IDA 버전최신 호환 릴리스
v9.0.240925v0.2.4
v9.0.241217v0.3.5
v9.1.250226v0.6.2
v9.2.250908v0.7.6
v9.3.260213v0.8.1
v9.3.260327v0.9.0
v9.3.260421v0.9.3
v9.4.260714현재 릴리스
v9.4.260915현재 릴리스

[!NOTE] 추가 정보는 idalib-rs 문서를 확인하세요.

크레딧

이 프로젝트의 개발은 다음 조직들의 지원을 받았습니다:

  • HN Security
  • Hex-Rays (그들의 Contributor Program을 통해)

변경 로그

  • CHANGELOG.md

TODO

  • 알려진 악성 API 함수 목록을 더욱 풍부하게 합니다(https://github.com/0xdea/semgrep-rules 참조).
  • .plt 세그먼트 외부의 thunk를 통한 호출을 추적합니다(예: MSVC 증분 링크 j_ thunk).
  • IDA가 인식한 라이브러리 코드에서 호출 위치 표시를 건너뛰는 것을 고려합니다(현재는 (lib)로만 표시됨).
  • 자동화된 파싱 및 분석을 용이하게 하기 위해 직렬화된 출력을 구현합니다.
  • VulFi 및 VulnFanatic 스타일의 기본 규칙 세트를 구현합니다.
도구 다운로드