4
Penggunaan CLI
APKLeaks dijalankan lewat satu perintah yang menerima satu berkas APK. Nama perintah apkleaks dipasang oleh entry point [project.scripts] di pyproject.toml:16-171. Untuk pemakaian langsung dari source, skrip apkleaks.py di akar repository memanggil main dari apkleaks.cli. apkleaks.py:1-52
Bentuk paling ringkas adalah apkleaks -f file.apk, yaitu hanya mengisi satu argumen wajib. Empat argumen lain opsional dan boleh ditinggalkan. README menampilkan ketiga varian pemanggilan: dari paket terpasang, dari source, dan dari Docker. README.md:59-653
Alur dari Argumen ke Hasil
Diagram berikut menunjukkan perjalanan satu baris perintah sampai menjadi berkas hasil.
graph TD
CMD["apkleaks -f file.apk -o out.txt -p rules.json -a '--deobf' --json"] --> PARSE["argument()"]
PARSE --> NS["Namespace: file, output, pattern, args, json"]
PARSE -.-> MISSING["-f/--file kosong: argparse berhenti"]
NS --> INIT["APKLeaks.__init__"]
INIT --> FILE["self.file = os.path.realpath(args.file)"]
INIT --> OUT["self.output: --output atau tempfile.mkstemp"]
INIT --> PAT["self.pattern: --pattern atau config/regexes.json"]
FILE --> RUN["main: integrity, decompile, scanning"]
RUN --> RESULT["berkas hasil pemindaian"]
style MISSING fill:#dc2626,color:#fff
style NS fill:#8b5cf6,color:#fff
style FILE fill:#8b5cf6,color:#fff
style OUT fill:#f59e0b,color:#000
style PAT fill:#f59e0b,color:#000
style RUN fill:#2d7d46,color:#fff
style RESULT fill:#336791,color:#fff
%% fig: Dari argv ke berkas hasil
%% desc: argument() membaca kelima flag menjadi satu Namespace, konstruktor APKLeaks memetakannya ke atribut, lalu main menjalankan tiga tahap sampai menghasilkan berkas.main() memanggil header(), lalu argument() untuk membaca argumen, kemudian membentuk instans APKLeaks(args). Setelah itu ia menjalankan integrity(), decompile(), scanning(), dan selalu menutup dengan cleanup() di blok finally. apkleaks/cli.py:32-414 Urutan tiap tahap dibahas di Alur Eksekusi CLI.
argument() membangun argparse.ArgumentParser, mendaftarkan kelima argumen, lalu mengembalikan hasil parse_args() berupa Namespace datar. apkleaks/cli.py:22-305 Kelas APKLeaks membaca Namespace itu di konstruktornya, sehingga nama atribut di tabel berikut adalah nama yang benar-benar dipakai. APKLeaks sendiri dijelaskan di Siklus Hidup Kelas APKLeaks.
Argumen yang Diterima argument()
| Flag | Nama panjang | required | Nilai bila kosong | Atribut tujuan |
|---|---|---|---|---|
-f | --file | True | — (wajib diisi) | self.file |
-o | --output | False | jalur acak dari tempfile.mkstemp | self.output |
-p | --pattern | False | config/regexes.json | self.pattern |
-a | --args | False | None | self.disarg |
--json | tidak ada alias | False | False | self.json |
Keempat argumen pertama bertipe str. --json tidak bertipe string karena memakai action="store_true", jadi nilainya boolean. apkleaks/cli.py:24-286
-f/--file adalah satu-satunya argumen wajib. Tanpa flag ini argparse menghentikan proses sebelum APKLeaks dibentuk. apkleaks/cli.py:247 Nilai berkasnya langsung dijadikan path absolut dengan os.path.realpath. apkleaks/apkleaks.py:278
-o/--output menentukan berkas tujuan. Bila tidak diisi, APKLeaks membuat berkas sementara dengan tempfile.mkstemp, memakai suffix .json atau .txt mengikuti nilai --json, lalu membuka berkas itu dalam mode "w" untuk JSON atau "a" untuk teks. apkleaks/apkleaks.py:33-349 Rincian isi berkas ada di Format Keluaran Hasil Pemindaian.
-p/--pattern menunjuk berkas JSON berisi pola pencarian. Bila args.pattern is None, self.pattern diarahkan ke config/regexes.json di dalam paket. apkleaks/apkleaks.py:3510 Cara menyusun berkas pola sendiri ada di Kustomisasi Pola Sendiri.
-a/--args adalah string mentah yang disimpan pada self.disarg tanpa diurai oleh argparse. apkleaks/apkleaks.py:2911 Saat decompile() berjalan, string itu dipecah dengan re.split(r"\s|=", self.disarg) lalu disambungkan ke argumen jadx. apkleaks/apkleaks.py:9312 Daftar argumen disassembler yang lazim dipakai dibahas di Opsi CLI dan Argumen Disassembler.
Contoh Pemakaian
Pemindaian dasar hanya butuh -f. Nilai bisa berupa path relatif maupun absolut seperti pada contoh README. README.md:59-653
$ apkleaks -f ~/path/to/file.apk
# from Source
$ python3 apkleaks.py -f ~/path/to/file.apk
# or with Docker
$ docker run -it --rm -v /tmp:/tmp dwisiswant0/apkleaks:latest -f /tmp/file.apk
Ketiga argumen opsional dapat digabung dalam satu perintah. Contoh README memasangkan pola kustom dengan berkas keluaran yang eksplisit. README.md:10313
$ apkleaks -f /path/to/file.apk -p rules.json -o ~/Documents/apkleaks-results.txt
Untuk meneruskan opsi ke disassembler, bungkus seluruh nilainya dalam satu tanda kutip setelah -a. README.md:11114
$ apkleaks -f /path/to/file.apk -a "--deobf --log-level DEBUG"
⚠️ Nilai
-a/--argsditeruskan ke disassembler, sehingga dapat bertabrakan dengan argumen default yang sudah dipakai APKLeaks. README meminta pembaca memperhatikan argumen default tersebut agar tidak bentrok. README.md:114-11515