2
Arsitektur dan Peta Modul
Paket apkleaks dipecah menjadi empat modul dengan arah dependensi satu arah: cli.py memanggil apkleaks.py, apkleaks.py memakai utils.py, dan colors.py berdiri di ujung sebagai modul daun. Skrip apkleaks.py di akar repository tidak menyimpan logika apa pun; berkas itu hanya mengimpor main dari apkleaks.cli lalu menjalankannya. Halaman ini memetakan batas tanggung jawab tiap modul, sedangkan urutan pemanggilan rinci ada di Alur Pemindaian. apkleaks.py:2-51
Peta ketergantungan antar modul
graph TD
root["apkleaks.py (akar repository)"] -->|"main()"| cli["apkleaks/cli.py"]
cli -->|"APKLeaks(args)"| core["apkleaks/apkleaks.py :: APKLeaks"]
cli -->|"color"| colors["apkleaks/colors.py :: color"]
core -->|"util.finder, util.writeln, util.write"| utils["apkleaks/utils.py :: util"]
core -->|"color"| colors
utils -->|"color"| colors
core -.->|"APK(self.file)"| ext1["pyaxmlparser.APK"]
core -.->|"os.system(jadx ...)"| ext2["binary jadx"]
core -.->|"json.load"| ext3["config/regexes.json"]
style root fill:#2d7d46,color:#fff
style cli fill:#f59e0b,color:#000
style core fill:#336791,color:#fff
style utils fill:#8b5cf6,color:#fff
style colors fill:#f59e0b,color:#000
%% fig: Peta ketergantungan modul apkleaks
%% desc: Panah penuh menunjukkan impor internal antar modul, panah putus-putus menunjukkan ketergantungan eksternal yang dipakai APKLeaks saat berjalan.Bentuk graf di atas menegaskan tidak ada impor balik: utils.py tidak mengenal APKLeaks, dan colors.py tidak mengimpor modul apa pun dari paket ini.
Batas tanggung jawab tiap modul
| Berkas | Tanggung jawab | Identifier kunci |
|---|---|---|
./apkleaks.py | entrypoint tipis, tidak memuat logika | main |
apkleaks/cli.py | antarmuka baris perintah: banner versi, parsing argumen, orkestrasi langkah inti | header, argument, main |
apkleaks/apkleaks.py | mesin inti, pemilik seluruh state dan semua akses ke berkas | APKLeaks |
apkleaks/utils.py | utilitas statis: cetak berwarna dan pencarian regex | util.write, util.writeln, util.finder |
apkleaks/colors.py | konstanta escape ANSI untuk pewarnaan keluaran | color.HEADER sampai color.UNDERLINE |
Isi colors.py hanya kelas color berisi delapan konstanta tanpa metode, sehingga modul ini murni data dan aman diimpor siapa pun. apkleaks/colors.py:3-115
cli.py tidak memegang state: main membuat satu objek APKLeaks, memanggil integrity, decompile, dan scanning di dalam blok try, lalu selalu menutup dengan cleanup di blok finally. apkleaks/cli.py:32-412 Semua state—fileout, tempdir, out_json, scanned—hidup di dalam instance APKLeaks; rinciannya dibahas di Siklus Hidup Objek APKLeaks.
Sebaliknya, seluruh isi utils.py adalah @staticmethod, jadi util dapat dipanggil tanpa instance dan tidak menyimpan apa pun antar panggilan. apkleaks/utils.py:8-314
Dua fungsi di cli.py menyiapkan masukan bagi APKLeaks. header menentukan versi lewat tiga jalur cadangan: importlib.metadata, lalu pkg_resources, lalu berkas VERSION di akar proyek. apkleaks/cli.py:10-206 argument mendefinisikan lima opsi argparse; satu-satunya yang wajib adalah -f/--file. apkleaks/cli.py:22-307 Rincian tiap opsi dibahas di Argumen CLI.
Arah dependensi internal
| Berkas | Impor internal | Keterangan |
|---|---|---|
apkleaks/cli.py | apkleaks.apkleaks, apkleaks.colors | memakai APKLeaks dan color untuk banner |
apkleaks/apkleaks.py | apkleaks.colors, apkleaks.utils | memakai color untuk pewarnaan dan util untuk cetak serta finder |
apkleaks/utils.py | apkleaks.colors | hanya untuk col.ENDC di util.write |
apkleaks/colors.py | — | tidak mengimpor apa pun |
Ketergantungan eksternal
Ada tiga ketergantungan di luar paket, dan semuanya disentuh oleh apkleaks/apkleaks.py:
pyaxmlparser.APK, dipakai lewatapk_infountuk membaca metadata berkas APK. apkleaks/apkleaks.py:41-4211- binary
jadxyang dicari denganwhich("jadx")dan, bila tidak ditemukan, diarahkan kejadx/bin/jadxdi dalam proyek. apkleaks/apkleaks.py:24-393 - berkas pola
config/regexes.jsonyang menjadi nilai bawaanself.pattern. apkleaks/apkleaks.py:24-393
integrity memeriksa keberadaan binary jadx terlebih dahulu, lalu memastikan args.file benar-benar sebuah berkas; bila bukan, proses berhenti dengan pesan It's not a valid file!. apkleaks/apkleaks.py:55-5712 apkleaks/apkleaks.py:78-8713
⚠️ Ketika binary jadx tidak ditemukan dan pengguna menyetujui unduhan,
dependenciesmengambil zip darihttps://github.com/skylot/jadx/releases/download/v1.2.0/jadx-1.2.0.zip, mengekstraknya ke direktorijadxdi akar proyek, lalu memanggilos.chmod(self.jadx, 33268). Versi jadx ter-pin pada rilis 1.2.0 dan tidak ada verifikasi checksum atas isi zip tersebut. apkleaks/apkleaks.py:44-5314
Sisi eksekusi juga berada di modul inti: decompile merangkai daftar argumen, meng-escape tiap argumen dengan shlex.quote, lalu menjalankannya lewat os.system. apkleaks/apkleaks.py:89-9815 Perilaku jadx dan argumen disassembler dibahas di Dekomplikasi dan jadx.
scanning membaca berkas pola, lalu menjalankan satu threading.Thread per pola dengan target extract; cleanup menghapus self.tempdir memakai shutil.rmtree dan hanya menulis JSON bila self.scanned bernilai benar. apkleaks/apkleaks.py:117-13816 apkleaks/apkleaks.py:140-14917 Mekanisme pencocokan pola dijelaskan di Mesin Pemindaian Pola.