# Getting Started — 重現與擴展分析

## Prerequisites

| 工具 | 版本（實測） | 路徑 |
|---|---|---|
| jadx | 1.5.6 | `/opt/homebrew/bin/jadx` |
| apktool | 3.0.3 | `/opt/homebrew/bin/apktool` |
| Java (JDK) | OpenJDK 17.0.20.1 | `/usr/bin/java` |
| git | — | 系統自帶 |
| Python 3 | 3.9+ | 系統自帶（統計腳本用） |

> 工具路徑以 reverse-skill `tool-index.md` 為準（本機已裝，無需 bootstrap）。

## 重現反編譯

```bash
APK="/Volumes/End-Gsme/untra-sound/SonoiQ-2.2.15_260113 (1).apk"
cd /Volumes/End-Gsme/untra-sound/sonoiq-reverse

# Java 反編譯（~3 dex，6025 檔）
jadx -d jadx_out --show-bad-code "$APK"

# 解包（smali + manifest + 資源）
apktool d -f -o apktool_out "$APK"
```

驗證樣本一致：

```bash
shasum -a 256 "$APK"
# 867c136abf74211da7eaa511f0d5a1de022064421d7b2a5410d105f32060a2c1
```

## 資產清單統計

```bash
unzip -l "$APK" > _apk_listing.txt
# 再跑 Python 分類腳本（見 reports/static-analysis-report.md 附錄）
```

## 常用探索命令

```bash
# 找 native 加載點
grep -rn "System.loadLibrary" jadx_out/sources/handprobe jadx_out/sources/jni \
  jadx_out/sources/kernel jadx_out/sources/com/Com --include="*.java"

# 找關鍵字（加密/簽名/證書/網絡）
grep -rln "encrypt\|decrypt\|AES\|RSA\|certificate\|trust" \
  jadx_out/sources/handprobe jadx_out/sources/com/Com --include="*.java"

# 搜 smali（patch 前）
grep -rn "invoke-static.*CheckSign\|checkSign" apktool_out/smali*/ --include="*.smali"
```

## 已知限制

- 僅 arm64-v8a ABI——無 armeabi-v7a 模擬器支持
- `res/` 檔名全面混淆；`assets/` 明文
- 核心算法在 native（`libdoppler` 15.4 MB）——Java 層只有 JNI 簽名；深入需 IDA/Ghidra（reverse-skill `ida-reverse`/`radare2` 路由）
- `LandQ6Activity`/`LandQ62Activity` 帶 `sharedUserId="android.uid.system"`——重打包需系統簽名

## Where to Go Next

- 架構：[architecture.md](architecture.md)
- 模組：[README.md#module-map](../README.md#module-map)
- JNI API：[api.md](api.md)
- 靜態分析報告：[../reports/static-analysis-report.md](../reports/static-analysis-report.md)
