
이진 파일에서 잠재적으로 안전하지 않은 API 함수 호출을 찾아내는 취약점 연구 보조 도구.
"익스플로잇 가능한 버그로 가는 길은 익스플로잇 불가능한 버그로 포장되어 있다."
-- Mark Dowd
Rhabdomancer는 바이너리 파일에서 잠재적으로 안전하지 않은 API 함수 호출을 찾아내는 매우 빠른 IDA 헤드리스 플러그인입니다. 감사자는 이러한 후보 지점에서 역추적하여 신뢰할 수 없는 입력에 접근할 수 있는 경로를 찾을 수 있습니다.

(lib)로
표시됩니다..plt 항목 또는 PE 및 Mach-O 바이너리의 임포트 스텁,
thunk로 나열됨)은 호출자까지 역추적됩니다..plt 스텁
(thunk로 표시됨)으로, 한 번은 임포트로 나열됩니다. 각 호출 위치는 IDB에 한 번만 표시됩니다.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").
최신 릴리스를 얻는 가장 쉬운 방법은 crates.io를 이용하는 것입니다:
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
또는 소스에서 빌드할 수 있습니다:
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
conf/rhabdomancer.toml을 복사하고(정확한 내장 목록을 위해 설치된 버전과 일치하는 태그를 선택하세요), 복사본을 편집한 뒤, RHABDOMANCER_CONFIG
환경 변수를 해당 경로로 설정하세요. 파일은 high, medium, low 배열을 정의해야 하며, 다른 키는 없어야 합니다.
그렇지 않으면 빌드 시점에 conf/rhabdomancer.toml에서 바이너리에 내장된 내장 목록이 사용됩니다
(해당 파일을 편집하려면 재빌드가 필요합니다).IDADIR 환경 변수가 설정되어 있는지 확인하세요.rhabdomancer <binary_file>
기존 .i64 IDB 파일이 있으면 업데이트됩니다. 그렇지 않으면 새 IDB 파일이 생성됩니다..i64 IDB 파일을 IDA로 엽니다.View > Open subviews > Bookmarks를 선택합니다.[!NOTE] Rhabdomancer는 표시된 호출 위치에 주석도 추가합니다. 북마크와 주석 모두
[BAD n] <function_name>형식으로 태그되며, 여기서n은 우선순위 등급(0 = 높음, 1 = 중간, 2 = 낮음)이므로 스크립트가 IDB에서 이를 검색할 수 있습니다. 이 형식은 릴리스 간에 안정적입니다.
공식적으로는 최신 IDA 릴리스만 지원되지만, 이전 버전에서도 작동할 수 있습니다. 다음 표는 각 IDA 버전에 대한 최신 호환 릴리스를 요약한 것입니다:
| IDA 버전 | 최신 호환 릴리스 |
|---|---|
| v9.0.240925 | v0.2.4 |
| v9.0.241217 | v0.3.5 |
| v9.1.250226 | v0.6.2 |
| v9.2.250908 | v0.7.6 |
| v9.3.260213 | v0.8.1 |
| v9.3.260327 | v0.9.0 |
| v9.3.260421 | v0.9.3 |
| v9.4.260714 | 현재 릴리스 |
| v9.4.260915 | 현재 릴리스 |
[!NOTE] 추가 정보는 idalib-rs 문서를 확인하세요.
이 프로젝트의 개발은 다음 조직들의 지원을 받았습니다:
.plt 세그먼트 외부의 thunk를 통한 호출을 추적합니다(예: MSVC 증분 링크 j_ thunk).(lib)로만 표시됨).