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

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

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

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.
Fig. 1: Peta ketergantungan modul apkleaksPanah 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

BerkasTanggung jawabIdentifier kunci
./apkleaks.pyentrypoint tipis, tidak memuat logikamain
apkleaks/cli.pyantarmuka baris perintah: banner versi, parsing argumen, orkestrasi langkah intiheader, argument, main
apkleaks/apkleaks.pymesin inti, pemilik seluruh state dan semua akses ke berkasAPKLeaks
apkleaks/utils.pyutilitas statis: cetak berwarna dan pencarian regexutil.write, util.writeln, util.finder
apkleaks/colors.pykonstanta escape ANSI untuk pewarnaan keluarancolor.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-11

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-41 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-31

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-20 argument mendefinisikan lima opsi argparse; satu-satunya yang wajib adalah -f/--file. apkleaks/cli.py:22-30 Rincian tiap opsi dibahas di Argumen CLI.

Arah dependensi internal

BerkasImpor internalKeterangan
apkleaks/cli.pyapkleaks.apkleaks, apkleaks.colorsmemakai APKLeaks dan color untuk banner
apkleaks/apkleaks.pyapkleaks.colors, apkleaks.utilsmemakai color untuk pewarnaan dan util untuk cetak serta finder
apkleaks/utils.pyapkleaks.colorshanya 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:

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-57 apkleaks/apkleaks.py:78-87

⚠️ Ketika binary jadx tidak ditemukan dan pengguna menyetujui unduhan, dependencies mengambil zip dari https://github.com/skylot/jadx/releases/download/v1.2.0/jadx-1.2.0.zip, mengekstraknya ke direktori jadx di akar proyek, lalu memanggil os.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-53

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-98 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-138 apkleaks/apkleaks.py:140-149 Mekanisme pencocokan pola dijelaskan di Mesin Pemindaian Pola.