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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
dexfinder — 크로스 플랫폼 APK/DEX 메서드 파인더: 호출 체인 추적, ProGuard 난독 해제 및 숨겨진 API 탐지 기능 | Kitploit
도구/GitHubGitHub/junelegency/dexfinder
Android SecurityStatic AnalysisVulnerability AnalysisCode AnalysisReverse EngineeringInformation GatheringDevSecOpsMobile SecurityBinary Analysis
GitHubjunelegency/dexfinder

dexfinder

크로스 플랫폼 APK/DEX 메서드 파인더: 호출 체인 추적, ProGuard 난독 해제 및 숨겨진 API 탐지 기능

9210215개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

dexfinder

영어 | 중국어 | 웹사이트 dexfinder demo


웹사이트: junelegency.github.io/dexfinder

크로스 플랫폼 APK/DEX 메서드 및 필드 참조 파인더로, 호출 체인 추적, ProGuard/R8 디오브퓨스케이션, Android 숨은 API 탐지를 지원합니다.

Android의 veridex 도구에서 영감을 받아 Go로 재구현되었으며, 향상된 기능을 제공합니다: 더 빠른 리플렉션 탐지, 호출 체인 추적(veridex는 한 단계만 표시), 유연한 출력 형식.

기능

  • APK/DEX/JAR 스캐닝 — DEX 바이트코드를 파싱하여 모든 메서드/필드/문자열 참조를 추출합니다.
  • 다중 형식 쿼리 — Java 이름, DEX/JNI 시그니처 또는 간단한 키워드로 검색합니다.
  • 호출 체인 추적 — N단계 깊이까지 호출자를 추적하며, 병합 트리 또는 플랫 리스트, 사이클 감지 지원.
  • ProGuard/R8 디오브퓨스케이션 — mapping.txt를 로드하여 난독화된 이름과 함께 원래 이름을 표시합니다.
  • 숨은 API 탐지 — hiddenapi-flags.csv를 로드하여 차단/지원되지 않는 API를 탐지합니다.
  • 리플렉션 탐지 — 클래스와 문자열을 교차 매칭하여 리플렉션 기반 숨은 API 사용을 찾습니다.
  • 유연한 출력 — text/json/model/html/sarif, 트리/리스트 레이아웃, java/dex 이름 스타일 — 모두 직교적으로 조합 가능.
  • 컬러 터미널 출력 — 태그, 트리 연결선, API 레벨에 대해 자동 감지된 ANSI 색상 사용.
  • APK 비교 — 두 APK/DEX 버전을 비교하여 추가/제거/변경된 API 참조를 탐지합니다.
  • HTML 보고서 — 접이식 트리, 검색, 다크 테마가 포함된 독립형 인터랙티브 HTML.
  • SARIF 출력 — GitHub 코드 스캐닝, VS Code, CI 파이프라인을 위한 SARIF 2.1.0.
  • CI 통합 — --fail-on blocked 플래그로 제한된 API가 발견되면 0이 아닌 종료 코드 반환.
  • 설정 파일 — 프로젝트 기본값을 위한 .dexfinder.yaml, CLI 플래그로 재정의 가능.
  • 외부 의존성 없음 — 순수 Go, 자체 포함 DEX 파서.
  • 크로스 플랫폼 — macOS (Intel/Apple Silicon), Linux (amd64/arm64), Windows

설치

Homebrew (macOS / Linux):```bash brew install junelegency/tap/dexfinder

**스크립트** (auto-detects OS/arch):```bash
curl -sSL https://raw.githubusercontent.com/JuneLeGency/dexfinder/main/install.sh | bash

Go 설치:```bash go install github.com/JuneLeGency/dexfinder/cmd/dexfinder@latest

**바이너리**: [Releases](https://github.com/JuneLeGency/dexfinder/releases)에서 다운로드하세요.

## 빠른 시작```bash
# Show APK overview
dexfinder --dex-file app.apk --stats

# Find all calls to getDeviceId (IMEI)
dexfinder --dex-file app.apk --query "getDeviceId"

# Trace call chains as merged tree
dexfinder --dex-file app.apk --query "getDeviceId" --trace

# Trace as flat call stacks (Java crash style)
dexfinder --dex-file app.apk --query "getDeviceId" --trace --layout list

# Exact JNI signature query
dexfinder --dex-file app.apk \
  --query "Landroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String;" \
  --trace --depth 8

# Hidden API detection
dexfinder --dex-file app.apk --api-flags hiddenapi-flags.csv

쿼리 형식

--query 플래그는 여러 입력 스타일을 허용합니다. dexfinder는 이들 간을 자동 감지 및 변환합니다.

형식예시동작
간단한 이름getDeviceId모든 API에서 퍼지 부분 문자열 일치
Java 클래스android.telephony.TelephonyManager해당 클래스의 모든 메서드/필드
Java 클래스#메서드android.telephony.TelephonyManager#getDeviceId해당 메서드의 모든 오버로드
Java 전체 시그니처...TelephonyManager#getDeviceId()정확한 일치 + 오버로드 폴백
DEX/JNI 시그니처Landroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String;정확한 일치만

All equivalent — find requestLocationUpdates in LocationManager:

dexfinder --dex-file app.apk --query "requestLocationUpdates" dexfinder --dex-file app.apk --query "android.location.LocationManager#requestLocationUpdates" dexfinder --dex-file app.apk --query "Landroid/location/LocationManager;->requestLocationUpdates(Ljava/lang/String;JFLandroid/location/LocationListener;)V"

## 출력 제어

세 개의 독립적인 축, 자유롭게 조합 가능:```
--format  (text / json / model / html / sarif)    what to output
--layout  (tree / list)                           how to arrange traces
--style   (java / dex)                            how to display names
--color   (auto / always / never)                 terminal colors

--format

값설명
text색상 태그가 포함된 일반 텍스트 출력 (기본값)
jsonJSON — 트리/리스트 레이아웃으로 스캔 결과 또는 추적
modelMethodInfo/FieldInfo 타입이 포함된 구조화된 JSON (IDE/CI용)
html접을 수 있는 트리와 검색 기능이 포함된 독립형 HTML 보고서
sarifSARIF 2.1.0 정적 분석 형식 (GitHub / VS Code)

--layout (--trace와 함께 사용)

값설명
tree병합된 트리 — 공유 호출 경로가 하나의 트리로 축소됨 (기본값)
list플랫 리스트 — 각 고유 호출 체인이 독립적인 스택으로 표시됨

--style

값예제사용 사례
javacom.example.Foo.method(Foo.java)사람이 읽기 쉬운 (기본값)
dexFoo.method(Ljava/lang/String;)V정확한 서명 분석

--scope (검색 범위)

쿼리가 어떤 종류의 참조와 일치하는지 제어합니다. 결과를 이해하는 데 중요합니다.

값검색 대상답변하는 질문출력 태그
all호출 대상 API + 필드 + 코드 문자열"이 API를 호출하는 곳은?" (기본값)[METHOD] [FIELD] [STRING]
calleeinvoke-* / get/put 명령어의 대상 API 서명만"이 특정 메서드/필드를 호출하는 곳은?"[METHOD] [FIELD]
caller호출 메서드의 서명만"이 메서드가 내부적으로 호출하는 것은?"[CALLER→]
stringconst-string 명령어의 문자열 상수"이 문자열이 코드에서 사용된 위치는?"[STRING]
string-table코드 문자열 + 전체 DEX 문자열 테이블"이 문자열이 DEX 내 어디에 존재하는가?" (주석, 죽은 코드 포함)[STRING] [STRING_TABLE]
everything위의 모든 항목 결합전체 그림모든 태그

호출 대상과 호출자 이해하기:``` scope=callee: "Who calls finish()?" onCreate ──calls──→ finish() ← these callers are shown onResume ──calls──→ finish()

scope=caller: "What does finish() call internally?" finish() ──calls──→ Log.i() ← these callees are shown finish() ──calls──→ super.finish()

`--scope=all` (기본값) = `callee` + `string`. `caller` 방향은 기본적으로 제외됩니다. 이는 근본적으로 다른 질문에 답하기 때문입니다. 필요할 때는 명시적으로 `--scope=caller` 또는 `--scope=everything`을 사용하세요.

**출력 태그 이해:**

| 태그 | 의미 |
|---|---|
| `[METHOD]` | 쿼리와 일치하는 **호출되는** 메서드 (callee 일치). 들여쓰기된 줄은 호출자(caller)입니다. |
| `[FIELD]` | 쿼리와 일치하는 **접근되는** 필드. 들여쓰기된 줄은 접근자(accessor)입니다. |
| `[CALLER→]` | 쿼리와 일치하는 **호출하는 메서드**. 들여쓰기된 줄은 호출하는 API를 보여줍니다. |
| `[STRING]` | 코드의 문자열 상수가 쿼리와 일치합니다. 들여쓰기된 줄은 사용된 위치입니다. |
| `[STRING_TABLE]` | DEX 문자열 테이블에 존재하지만 코드에 `const-string` 참조가 없는 문자열 (어노테이션에 있거나, R8에 의해 최적화 제거되었을 수 있음) |

## 예제
도구 다운로드