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

4.2

Format Keluaran Hasil Pemindaian

APKLeaks menyimpan hasil pemindaian ke satu berkas keluaran. Flag --json memilih format, sedangkan -o memilih path berkasnya. Bila -o tidak diberikan, program membuat berkas sementara dengan prefix apkleaks- dan suffix .json atau .txt sesuai format. Berkas dibuka sekali di __init__, memakai mode w untuk JSON dan mode a untuk teks. apkleaks/apkleaks.py:33-34

Di sisi CLI, --json dideklarasikan sebagai store_true dan -o menerima type=str. apkleaks/cli.py:25-28 README menegaskan perilaku default: hasil juga disimpan dalam format teks, dan --json diperlukan untuk format JSON. README.md:79-84

Dua jalur penulisan

extract melayani dua jalur sekaligus. Pada format teks, setiap baris ditulis langsung ke self.fileout saat pemindaian berjalan. Pada format JSON, extract tidak menulis apa pun ke berkas (string kosong), dan hasil baru dikonversi menjadi teks JSON di cleanup.

graph LR
    EX["extract(name, matches)"] --> TG["berkas teks<br/>mode a"]
    EX --> OJ["out_json['results']"]
    OJ --> CL["cleanup()"]
    CL --> JF["berkas JSON<br/>mode w, indent=4"]
    style EX fill:#f59e0b,color:#000
    style TG fill:#2d7d46,color:#fff
    style OJ fill:#8b5cf6,color:#fff
    style CL fill:#f59e0b,color:#000
    style JF fill:#336791,color:#fff
%% fig: Dua jalur keluaran dari extract ke berkas
%% desc: extract menulis baris teks secara bertahap atau menumpuk out_json, lalu cleanup menulis berkas JSON sekali di akhir.
Fig. 1: Dua jalur keluaran dari extract ke berkasextract menulis baris teks secara bertahap atau menumpuk out_json, lalu cleanup menulis berkas JSON sekali di akhir.
AspekTeks polos (default)JSON (--json)Rujukan
Suffix berkas sementara.txt.jsonapkleaks/apkleaks.py:33-34
Mode buka berkasawapkleaks/apkleaks.py:33-34
Waktu tulisper kategori, saat extract berjalansekali, di cleanupapkleaks/apkleaks.py:100-115
Header kategori[<name>]tidak ditulisapkleaks/apkleaks.py:100-115
Baris hasil- <secret> per match{"name": ..., "matches": [...]}apkleaks/apkleaks.py:100-115
Pemisah antar kategorisatu baris kosongtidak adaapkleaks/apkleaks.py:100-115

Penulisan per kategori di extract

extract(name, matches) hanya bekerja bila len(matches) tidak nol. Header kategori dicetak ke stdout sebagai [name] dan ditulis ke berkas hanya ketika self.json is False. Setiap match dicetak sebagai - <secret> dengan cara yang sama, lalu satu baris kosong menutup kategori. Hasil yang sama selalu ditambahkan ke self.out_json["results"] sebagai objek {"name": name, "matches": matches}, dan self.scanned diubah menjadi True. apkleaks/apkleaks.py:100-115

print(stdout) berjalan tanpa syarat format, jadi stdout tetap terisi penuh meskipun keluaran berkas dalam format JSON. Kerangka JSON disiapkan lebih dulu oleh scanning: out_json["package"] diisi self.apk.package dan out_json["results"] diisi list kosong sebelum thread pencarian dijalankan. apkleaks/apkleaks.py:121-122

Pemfilteran match untuk kategori LinkFinder dan pewarnaan keluaran stdout dibahas di Mesin Pencarian Regex dan Keluaran Warna.

Siklus hidup cleanup dan flag scanned

cleanup() selalu menghapus self.tempdir lebih dulu, tanpa melihat apakah ada hasil. Setelah itu keputusan bergantung pada flag self.scanned, yang hanya bernilai True ketika minimal satu kategori menghasilkan match.

stateDiagram-v2
    [*] --> Scanning
    Scanning --> Scanned: extract menemukan match
    Scanning --> NothingFound: semua match kosong
    Scanned --> Saved: cleanup menulis json.dumps
    NothingFound --> Deleted: cleanup menghapus berkas
    Saved --> [*]
    Deleted --> [*]
    classDef ok fill:#2d7d46,color:#fff
    classDef data fill:#8b5cf6,color:#fff
    classDef bad fill:#dc2626,color:#fff
    class Saved ok
    class Scanned data
    class Deleted bad
%% fig: Nasib berkas keluaran menurut flag scanned
%% desc: Bila scanned bernilai True berkas ditutup dan dilaporkan tersimpan, bila False berkas dihapus dan program melaporkan tidak ada hasil.
Fig. 2: Nasib berkas keluaran menurut flag scannedBila scanned bernilai True berkas ditutup dan dilaporkan tersimpan, bila False berkas dihapus dan program melaporkan tidak ada hasil.

Pada cabang scanned bernilai True, json.dumps(self.out_json, indent=4) ditulis ke berkas hanya ketika self.json benar, lalu fileout.close() dipanggil dan pesan ** Results saved into '...' dicetak. Pada cabang False, berkas ditutup, os.remove(self.output) menghapusnya, dan pesan ** Done with nothing. ¯\_(ツ)_/¯ dicetak. apkleaks/apkleaks.py:140-149

Bentuk data JSON

Objek out_json hanya memuat dua kunci tingkat atas, dan setiap entri results memuat satu kategori beserta match-nya. apkleaks/apkleaks.py:121-122

KunciTipeSumber nilai
packagestringself.apk.package
resultslistdiinisialisasi kosong di scanning
results[].namestringnama kategori dari regexes.json
results[].matcheslisthasil util.finder untuk kategori itu

Satu kategori bisa menyumbang lebih dari satu entri results, karena scanning menjalankan extract per pola ketika nilai di regexes.json berupa list. Bentuk berkas pola itu sendiri diuraikan di Kumpulan Pola Pencarian. apkleaks/apkleaks.py:123-138

⚠️ Format teks membuka berkas dengan mode a. Bila -o menunjuk berkas yang sudah ada, hasil pemindaian baru menumpuk di belakang isi lama, bukan menimpanya. apkleaks/apkleaks.py:33-34

⚠️ Ketika tidak ada match, os.remove(self.output) menghapus path yang diberikan lewat -o, bukan hanya berkas sementara. Jalankan dengan path keluaran yang memang disposable. apkleaks/apkleaks.py:140-149