-
Notifications
You must be signed in to change notification settings - Fork 0
Android Workflow
VenomHook은 APK에서 native library 추출, AndroidManifest 감사, Java native method · JNI bridge 분석, jadx 디컴파일 결과의 코드 레벨 감사, apktool smali 위에서 폴백 감사, .so 문자열 카테고리화, audit finding, 자동 PoC 생성을 수집할 수 있습니다.
전체 흐름은 venomhook scan-apk 단일 명령으로 호출되며 내부적으로 analyze_apk 10-step 파이프라인을 실행합니다. 각 단계는 stderr에 [N/10] step ... 라이브 출력으로 진행을 표시합니다 (--quiet로 억제 가능).
[1/10] APK 메타데이터 추출 apk_extractor — ABI 매트릭스
[2/10] .so 추출 (auto / --apk-lib basename / --apk-lib all)
[3/10] BinaryMeta 추출 lief — BinaryMeta + .rodata strings
[4/10] AndroidManifest decode apktool — manifest + apktool.yml + res/xml/* + smali_classes*/
[5/10] DEX → Java 디컴파일 jadx — Java sources + native method 선언 (timeout 시 partial 결과 활용)
[6/10] JNI bridge correlation Java_<class>_<method> ↔ 모든 분석된 .so의 exports
[7/10] Manifest 감사 + PoC MANIFEST-001..010 룰 → ManifestFinding[] + PoCArtifact[]
[8/10] Code 감사 (Java) CODE-001..006 룰 (jadx 위) → CodeFinding[]
[9/10] smali 폴백 감사 (Tier 1) smali_classes*/ 위에서 CODE-001/003/005/006 — jadx 실패해도 결함 산출
[10/10] 네이티브 string categorize .so strings → NativeStringHints (8 buckets) + 심볼 attribution
각 단계는 도구 누락 시 warning만 남기고 다음 단계로 계속 진행합니다 (--strict-tools로 실패 처리 가능).
APK 안의 lib/<abi>/*.so를 추출한 뒤 native pipeline으로 넘깁니다.
venomhook offset-static \
--apk ./sample/myapp.apk \
--abi arm64-v8a \
--ghidra-headless analyzeHeadless \
--ghidra-script ./ghidra_scripts/export_staticmeta.py \
--out ./reports/hook/myapp.json옵션:
| Option | Meaning |
|---|---|
--abi auto |
arm64-v8a, armeabi-v7a, x86_64, x86 순서로 자동 선택 |
--apk-lib libfoo.so |
특정 native library 선택 |
--apk-extract-dir ./out/lib |
추출 위치 지정 |
생성된 HookSpec target은 보통 디바이스에서 로드되는 module 이름인 libfoo.so 형태입니다.
venomhook offset-hook \
--hookspec ./reports/hook/myapp.json \
--target libfoo.so \
--out-script ./frida_scripts/myapp.jsAndroid 디바이스에서 실행:
frida -U -f com.example.app -l ./frida_scripts/myapp.js --no-pause실행 중인 앱에 attach:
frida -U -n com.example.app -l ./frida_scripts/myapp.jsvenomhook scan-apk는 APK metadata, manifest, Java/smali 코드 감사, JNI bridge, native string hints, PoC를 한 명령으로 수행합니다. (android-audit는 동일한 동작의 호환 별칭입니다.)
venomhook scan-apk \
--apk ./sample/myapp.apk \
--out-dir ./out_android \
--report-json ./out_android/analysis.json \
--code-audit-json ./out_android/code_audit.json \
--out-html ./out_android/audit.html \
--poc-bundle-dir ./out_android/pocs펜테스트 워크플로우에서는 HTML 보고서 (--out-html)가 가장 빠른 진입점입니다. 같은 디렉터리에 PoC 번들을 함께 export하면 HTML 카드의 PoC 링크가 디스크의 실제 .sh / .frida.js 파일로 직접 연결됩니다.
apktool 또는 jadx가 없으면 가능한 단계만 warning으로 남기고 계속 진행합니다. 도구 누락을 실패로 처리하려면 --strict-tools를 추가합니다. jadx가 없거나 타임아웃되어도 **apktool smali 기반 폴백 감사 (Step 9)**가 동작하므로 일부 코드 결함은 여전히 산출됩니다.
jadx 연동은 jadx-gui.exe가 아니라 jadx/jadx-cli command를 실행하는 방식입니다. Windows에서 GUI jadx만 사용 중이라면 Java tier 코드 감사는 수행되지 않지만 smali tier는 동작합니다. CLI wrapper 경로 지정: --jadx-path C:\Tools\jadx\bin\jadx.bat.
KakaoTalk / 금융앱처럼 200MB+ multi-DEX + Kotlin coroutines + R8 난독화된 APK는 jadx 기본 600초 타임아웃을 초과합니다. 처리 옵션:
| 옵션 | 효과 |
|---|---|
--jadx-timeout 1800 |
타임아웃 1800초로 연장 |
--jadx-fast |
jadx -m simple 모드 — deobfuscation 패스 생략, 30~50% wall-clock 단축 |
--jadx-threads N |
jadx 병렬도 조절 (기본 4) |
타임아웃이 발생해도 jadx가 디스크에 쓴 .java는 보존되며, partial 결과로 Java tier 감사를 진행합니다 (HTML 보고서에 "⚠ 부분 결과" 배너 표시). jadx가 완전 실패하더라도 smali tier가 코드 결함을 산출하므로 펜테스트 보고서가 절대 비지 않습니다.
venomhook scan-apk \
--apk ./big-app.apk \
--out-dir ./out_big \
--jadx-timeout 1800 --jadx-fast --jadx-threads 8 \
--out-html ./out_big/audit.htmlJava/smali 코드 감사와 JNI bridge 분석이 필요 없으면 --no-jadx를 사용합니다. apktool은 그대로 실행되므로 smali tier 폴백 감사는 여전히 수행됩니다.
venomhook scan-apk \
--apk ./sample/myapp.apk \
--no-jadx \
--out-dir ./out_audit \
--audit-json ./out_audit/audit.json \
--poc-json ./out_audit/pocs.jsonCI gate 예시:
venomhook scan-apk \
--apk ./sample/myapp.apk \
--no-jadx \
--quiet \
--severity-threshold high
echo "exit=$?" # high 이상 finding이 있으면 2같은 APK를 반복 분석할 때 SQLite cache로 apktool, jadx, native metadata extraction 재실행을 줄일 수 있습니다.
venomhook scan-apk --apk app.apk --cache-dir ./.venomhook-cache \
--report-json out/analysis.json
venomhook scan-apk --apk app.apk --cache-dir ./.venomhook-cache \
--report-json out/analysis.json캐시 확인과 비교:
venomhook android-cache-list --cache-dir ./.venomhook-cache
venomhook android-cache-list --cache-dir ./.venomhook-cache --json | jq
venomhook android-cache-diff --cache-dir ./.venomhook-cache \
--old sha256:<v1_hash> --new sha256:<v2_hash> \
--json out/regression.json회귀 gate:
venomhook android-cache-diff --cache-dir ./.venomhook-cache \
--old sha256:<baseline_hash> --new sha256:<current_hash> \
--exit-on-changes
echo "exit=$?" # finding, PoC, export, bridge, package 변경 시 2