2
Arsitektur
apkleaks membagi pekerjaannya ke empat modul: entry point apkleaks.py di akar repository, lapisan antarmuka apkleaks/cli.py, orkestrator apkleaks/apkleaks.py dengan kelas APKLeaks, serta dua modul pendukung apkleaks/utils.py dan apkleaks/colors.py. Berkas apkleaks.py di akar hanya memanggil main dari apkleaks.cli, sehingga seluruh logika berada di dalam paket apkleaks — apkleaks.py:1-51.
Peta Ketergantungan Modul
graph TD
entry["apkleaks.py"] -->|"main()"| cli["apkleaks/cli.py"]
cli -->|"APKLeaks(args)"| leak["apkleaks/apkleaks.py<br/>class APKLeaks"]
cli -->|"col.HEADER"| colors["apkleaks/colors.py<br/>class color"]
leak -->|"util.finder"| utils["apkleaks/utils.py<br/>class util"]
leak -->|"col.*"| colors
utils -->|"col.ENDC"| colors
leak -->|"open(self.pattern)"| config["config/regexes.json"]
leak -->|"os.system"| jadx["jadx binary"]
jadx --> tempdir["tempdir"]
utils -->|"os.walk"| tempdir
style config fill:#f59e0b,color:#000
style jadx fill:#f59e0b,color:#000
style tempdir fill:#336791,color:#fff
style utils fill:#8b5cf6,color:#fff
style colors fill:#8b5cf6,color:#fff
%% fig: Ketergantungan empat modul apkleaks
%% desc: Entry point meneruskan ke cli, cli membuat APKLeaks, lalu APKLeaks memakai utils dan colors untuk membaca hasil decompile di tempdir.Arah panah adalah arah impor, dan tidak ada impor balik yang membentuk siklus: apkleaks/cli.py mengimpor APKLeaks serta color — apkleaks/cli.py:7-82. apkleaks/apkleaks.py mengimpor color dan util — apkleaks/apkleaks.py:21-223. apkleaks/utils.py hanya mengimpor color dari apkleaks.colors — apkleaks/utils.py:54. Modul colors.py berada di ujung bawah rantai karena tidak mengimpor apa pun dari paket ini.
Modul dan Tanggung Jawab
| Modul | Simbol kunci | Tanggung jawab | Rujukan |
|---|---|---|---|
apkleaks.py (akar) | main | meneruskan eksekusi ke apkleaks.cli.main | apkleaks.py:1-51 |
apkleaks/cli.py | header, argument, main | mencetak banner, mem-parsing argumen, merangkai urutan pemanggilan | apkleaks/cli.py:32-415 |
apkleaks/apkleaks.py | APKLeaks | menyimpan state pemindaian dan menjalankan langkah per langkah | apkleaks/apkleaks.py:25-396 |
apkleaks/utils.py | util | menulis ke stdout berwarna dan menjalankan pencarian regex | apkleaks/utils.py:7-317 |
apkleaks/colors.py | color | menyediakan konstanta ANSI | apkleaks/colors.py:3-118 |
Kelas APKLeaks menyimpan seluruh konfigurasi pada __init__: self.file hasil os.path.realpath, self.json, self.disarg, self.tempdir, self.output, dan self.pattern — apkleaks/apkleaks.py:25-396. Karena semua state ada di atribut instance, modul lain tidak perlu menyimpan status pemindaian sendiri.
apkleaks/cli.py adalah satu-satunya modul yang mengetahui urutan eksekusi. header() mencetak banner memakai col.HEADER sebelum argumen diproses — apkleaks/cli.py:10-209. Rincian langkah yang dirangkai main dibahas di Alur Eksekusi CLI.
Ketergantungan di Luar Kode Python
Tiga ketergantungan tidak berbentuk modul Python, tetapi tetap menentukan arsitektur karena dirujuk langsung oleh APKLeaks.
| Ketergantungan | Cara diperoleh | Rujukan |
|---|---|---|
config/regexes.json | default self.pattern ke <induk main_dir>/config/regexes.json, dibaca lewat open(self.pattern) | apkleaks/apkleaks.py:25-396 |
binary jadx | which("jadx"), dengan fallback ke jadx/bin/jadx di dalam repository | apkleaks/apkleaks.py:25-396 |
tempdir | tempfile.mkdtemp(prefix="apkleaks-"), menjadi target -d saat decompile dan akar os.walk saat pencarian | apkleaks/apkleaks.py:89-9810 |
Saat scanning berjalan, isi config/regexes.json di-json.load sekali, lalu tiap kunci diiterasi; nilai yang berupa list diulang per elemen — apkleaks/apkleaks.py:117-12511. Setiap pola dijalankan pada threading.Thread tersendiri yang memanggil self.extract(name, util.finder(...)), sehingga jumlah thread mengikuti jumlah pola, bukan jumlah berkas — apkleaks/apkleaks.py:129-13612.
⚠️
decompilemenyusun perintah sebagai string dan menjalankannya lewatos.system(comm), dengan tiap argumen dibungkusshlex.quotelalu seluruh tanda kutip tunggal diganti kutip ganda — apkleaks/apkleaks.py:89-9810. Perintah ini tetap dieksekusi oleh shell, danself.disargberasal dari opsi-ayang diisi pengguna.
⚠️
cleanupmenghapusself.tempdirdenganshutil.rmtree; bila tidak ada satu pun pola yang cocok (self.scannedmasihFalse), berkasself.outputjuga dihapus denganos.remove— apkleaks/apkleaks.py:140-14913.
Batas Halaman Lanjutan
Halaman ini hanya memetakan pembagian modul. Urutan pemanggilan integrity, decompile, scanning, dan cleanup dari main dijelaskan di Alur Eksekusi CLI. Perilaku tiap metode APKLeaks dijelaskan di Siklus Hidup Kelas APKLeaks. Isi util.finder dan konstanta color dijelaskan di Mesin Pencarian Regex dan Keluaran Warna.