Lompat ke konten
dokumentasi.id
Commit dd5271a
v2
Star6,4 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

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-17. Untuk pemakaian langsung dari source, skrip apkleaks.py di akar repository memanggil main dari apkleaks.cli. apkleaks.py:1-5

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-65

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.
Fig. 1: Dari argv ke berkas hasilargument() 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-41 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-30 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()

FlagNama panjangrequiredNilai bila kosongAtribut tujuan
-f--fileTrue— (wajib diisi)self.file
-o--outputFalsejalur acak dari tempfile.mkstempself.output
-p--patternFalseconfig/regexes.jsonself.pattern
-a--argsFalseNoneself.disarg
--jsontidak ada aliasFalseFalseself.json

Keempat argumen pertama bertipe str. --json tidak bertipe string karena memakai action="store_true", jadi nilainya boolean. apkleaks/cli.py:24-28

-f/--file adalah satu-satunya argumen wajib. Tanpa flag ini argparse menghentikan proses sebelum APKLeaks dibentuk. apkleaks/cli.py:24 Nilai berkasnya langsung dijadikan path absolut dengan os.path.realpath. apkleaks/apkleaks.py:27

-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-34 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:35 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:29 Saat decompile() berjalan, string itu dipecah dengan re.split(r"\s|=", self.disarg) lalu disambungkan ke argumen jadx. apkleaks/apkleaks.py:93 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-65

$ 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:103

$ 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:111

$ apkleaks -f /path/to/file.apk -a "--deobf --log-level DEBUG"

⚠️ Nilai -a/--args diteruskan 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-115