1
Ringkasan Proyek
APKLeaks adalah CLI pemindai berkas APK: ia mendekomplikasi APK, lalu mencocokkan isi hasil dekompilasi dengan sekumpulan regex untuk menarik URI, endpoint, dan secret. Halaman ini adalah pintu masuk dokumentasi: di sini hanya dibahas identitas paket, ketergantungan utama, dan peta modul tingkat atas. Rincian perilaku ada di halaman lain yang ditautkan pada tiap bagian.
Nama, versi, dan deskripsi proyek konsisten di tiga tempat. Berkas README.md menyebut "Scanning APK file for URIs, endpoints & secrets." (README.md:51), metadata [project] mengulang deskripsi yang sama (pyproject.toml:1-142), dan banner header() mencetak versi plus tagline itu ke stderr (apkleaks/cli.py:10-203).
Identitas dan ketergantungan
| Butir | Nilai | Rujukan |
|---|---|---|
| Nama paket | apkleaks | pyproject.toml:1-34 |
| Versi | v2.6.3, dibaca dinamis dari berkas VERSION | VERSION:1-1, pyproject.toml:22-245 |
| Versi Python | >=3.8 | pyproject.toml:136 |
| Lisensi | Apache License 2.0 | pyproject.toml:127 |
| Status | Development Status :: 3 - Alpha | pyproject.toml:78 |
| Titik masuk skrip | apkleaks = "apkleaks.cli:main" | pyproject.toml:16-179 |
| Dependensi Python | pyaxmlparser>=0.3.24, satu-satunya isi requirements.txt | requirements.txt:110 |
| Perkakas eksternal | jadx untuk dekompilasi; image Docker menambahkan openjdk-17-jre-headless dan unzip | apkleaks/apkleaks.py:3611, Dockerfile:7-16 |
pyaxmlparser diimpor sebagai APK dan dipakai apk_info() untuk membaca metadata paket APK (apkleaks/apkleaks.py:1912). jadx dicari lebih dulu lewat which("jadx"); bila tidak ditemukan, objek memakai path cadangan jadx/bin/jadx di direktori induk paket (apkleaks/apkleaks.py:3611). Angka versi v2.6.3 juga dipakai Makefile untuk nama paket dan tag image (Makefile:1-5).
Peta modul tingkat atas
Struktur repository tipis: satu berkas pembungkus di akar, empat modul Python di dalam paket apkleaks/, dan dua berkas JSON pola di config/. Diagram berikut menunjukkan ketergantungan antar bagian tersebut, termasuk cabang ketika jadx tidak tersedia.
graph TD
entry["apkleaks.py"]
cli["apkleaks.cli: main"]
args["argument"]
core["class APKLeaks"]
util["class util"]
colors["class color"]
regex["config/regexes.json"]
jadx["jadx"]
tmp["self.tempdir"]
out["self.fileout"]
missing["Can't find jadx binary."]
entry --> cli
cli --> args
args --> core
core --> jadx
jadx --> tmp
core --> regex
tmp --> util
util --> core
core --> out
core --> colors
core -.-> missing
missing -.-> jadx
style cli fill:#2d7d46,color:#fff
style core fill:#f59e0b,color:#000
style regex fill:#f59e0b,color:#000
style tmp fill:#8b5cf6,color:#fff
style util fill:#8b5cf6,color:#fff
style out fill:#336791,color:#fff
style missing fill:#dc2626,color:#fff
%% fig: Peta modul APKLeaks
%% desc: Titik masuk memanggil class APKLeaks, yang menyentuh jadx, tempdir, katalog pola, dan berkas keluaran; cabang merah menandai kondisi jadx tidak ditemukan.| Modul | Isi | Peran | Rujukan |
|---|---|---|---|
apkleaks.py | 5 baris, hanya from apkleaks.cli import main | pembungkus executable | apkleaks.py:1-513 |
apkleaks/cli.py | header(), argument(), main() | parsing argumen dan urutan pemanggilan | apkleaks/cli.py:22-4114 |
apkleaks/apkleaks.py | class APKLeaks dengan 7 method | inti pemindaian | apkleaks/apkleaks.py:24-3915 |
apkleaks/utils.py | class util | helper tulis berwarna dan finder | apkleaks/utils.py:7-3116 |
apkleaks/colors.py | class color | konstanta kode ANSI | apkleaks/colors.py:3-1017 |
config/regexes.json | 53 entri pola; nilai boleh string atau list string | katalog pola bawaan | config/regexes.json:1-6218 |
config/notkeyhacks.json | 9 entri pola, termasuk Adjust_Config bertipe list | dikemas sebagai package data, tetapi tidak dirujuk oleh self.pattern | config/notkeyhacks.json:1-1419, apkleaks/apkleaks.py:3520 |
main() menjalankan urutan tetap: header(), argument(), lalu integrity(), decompile(), scanning(), dan akhirnya cleanup() di blok finally (apkleaks/cli.py:32-4121). Method scanning() membaca self.pattern dengan json.load, lalu menjalankan satu threading.Thread per pola menuju extract (apkleaks/apkleaks.py:117-13822). Objek util menjadi satu-satunya jalur finder yang menelusuri self.tempdir (apkleaks/utils.py:17-3123). Alur lengkapnya dibahas di Alur Pemindaian, sedangkan siklus atribut objek ada di Siklus Hidup Objek APKLeaks.
Kedua berkas JSON di config/ ikut terdistribusi karena [tool.setuptools.package-data] memakai pola "*" = ["*.json"] dan packages.find menyertakan config* (pyproject.toml:26-3024). Katalog pola dijelaskan per entri di Katalog Pola Bawaan; cara mengisi berkas pola sendiri ada di Pola Kustom.
Kondisi awal dan keluaran sementara
Konstruktor APKLeaks langsung membuat direktori sementara dan membuka berkas keluaran, sebelum APK disentuh sama sekali. Prefix yang dipakai "apkleaks-", dan bila -o tidak diberikan nama berkas hasil berasal dari tempfile.mkstemp dengan suffix .json atau .txt (apkleaks/apkleaks.py:25-3925).
⚠️
cleanup()menghapusself.tempdirdenganshutil.rmtree, lalu hanya menyimpan hasil bilaself.scannedbernilai benar; jika tidak, berkas keluaran dihapus lewatos.remove(apkleaks/apkleaks.py:140-14926). Pemindaian yang tidak menemukan apa pun tetap meninggalkan jejak sementara sampai proses selesai.
Kondisi awal jadx diperiksa integrity(): bila binary tidak ada, CLI menawarkan unduhan jadx-1.2.0.zip lewat dependencies() (apkleaks/apkleaks.py:44-5727). Detail pemasangan dan argumennya ada di Instalasi dan Ketergantungan serta Dekomplikasi dan jadx.
Bacaan lanjutan
- Arsitektur dan Peta Modul untuk hubungan antar kelas secara rinci.
- Argumen CLI untuk kelima opsi
-f,-o,-p,-a, dan--json. - Format Keluaran untuk bentuk berkas teks dan JSON.
- Mesin Pemindaian Pola untuk cara
findermencocokkan baris. - Build dan Rilis untuk alur
make build-packagedanmake build-images.