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

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

3.2

Format Keluaran

Hasil pemindaian selalu bermuara pada satu berkas yang dibuka sekali di APKLeaks.__init__. Dua argumen menentukan bentuknya: -o/--output untuk menetapkan path, dan --json untuk memilih format JSON ketimbang teks biasa apkleaks/cli.py:25-28. Karena tempfile dan json sudah diimpor di modul utama, penamaan berkas dan serialisasi tidak butuh modul lain.

Pemilihan berkas dan mode buka

Saat args.output is None, constructor membuat berkas sementara lewat tempfile.mkstemp dengan awalan apkleaks- dan akhiran .json atau .txt mengikuti nilai self.json; elemen kedua dari pasangan yang dikembalikan mkstemp dipakai sebagai path. Bila -o diisi, path itu dipakai apa adanya. Berkas langsung dibuka dengan mode "w" untuk JSON dan "a" untuk teks apkleaks/apkleaks.py:30-34.

graph TD
  A["args.output"] -->|"None"| B["tempfile.mkstemp prefix 'apkleaks-' suffix '.json' atau '.txt'"]
  A -->|"path eksplisit"| C["output = args.output"]
  B --> D["fileout = open output mode 'w' bila json, 'a' bila teks"]
  C --> D
  D --> E["scanning: out_json['package'] dan out_json['results'] = []"]
  E --> F["extract: tulis '[name]' dan '- match' ke berkas hanya bila bukan json"]
  F --> G{"cleanup: self.scanned?"}
  G -->|"True, json"| H["tulis json.dumps indent=4 lalu close"]
  G -->|"True, teks"| I["close, isi berkas dipertahankan"]
  G -->|"False"| J["close lalu os.remove output"]
  style B fill:#f59e0b,color:#000
  style D fill:#f59e0b,color:#000
  style H fill:#336791,color:#fff
  style I fill:#2d7d46,color:#fff
  style J fill:#dc2626,color:#fff
%% fig: Penentuan path dan nasib berkas keluaran
%% desc: Diagram menunjukkan bagaimana output dan mode buka dipilih dari argumen, lalu bagaimana cleanup mempertahankan atau menghapus berkas.
Fig. 1: Penentuan path dan nasib berkas keluaranDiagram menunjukkan bagaimana output dan mode buka dipilih dari argumen, lalu bagaimana cleanup mempertahankan atau menghapus berkas.

⚠️ Mode teks memakai "a". Bila -o menunjuk berkas yang sudah ada, hasil baru ditambahkan ke isi lama, bukan menimpanya. Mode JSON memakai "w" sehingga berkas lama ditimpa.

⚠️ Tanpa -o, berkas acak hasil mkstemp berada di direktori temp sistem, bukan di direktori kerja. Path lengkapnya hanya diketahui dari pesan penutup di stdout.

Format teks

Pada mode teks, extract menulis tiga jenis baris ke self.fileout: baris judul [name], satu baris - <secret> untuk setiap match, lalu satu baris kosong sebagai pemisah antar bagian. Semua penulisan itu dijaga oleh if self.json is False; judul juga dicetak ke stdout dengan awalan baris baru, sedangkan ke berkas tanpa baris baru apkleaks/apkleaks.py:100-115. README hanya menyebut perilaku umum ini tanpa mendefinisikan tata letaknya: hasil disimpan otomatis dalam format teks, dan --json diperlukan untuk format JSON README.md:79-84.

BarisIsiDitulis oleh
[name]nama pola, misalnya LinkFinderextract saat len(matches) terpenuhi
- <secret>satu match hasil util.finderextract per elemen matches
baris kosongpemisah antar nama polaextract setelah loop

Struktur JSON

Mode JSON tidak menulis apa pun selama pemindaian. Dokumen dibentuk di self.out_json sejak scanning: kunci package diisi self.apk.package, lalu results disiapkan sebagai list kosong apkleaks/apkleaks.py:121-122. Setiap nama pola yang punya match menambahkan satu objek {"name": name, "matches": matches} ke list tersebut apkleaks/apkleaks.py:100-115. Serialisasi baru terjadi sekali di cleanup lewat json.dumps(self.out_json, indent=4) apkleaks/apkleaks.py:140-149.

FieldTipeSumber nilai
packagestringself.apk.package dari pyaxmlparser
resultsarray objekakumulasi pemanggilan extract
results[].namestringnama kunci di config/regexes.json
results[].matchesarray stringnilai matches yang diterima extract

⚠️ Pada mode teks, extract melewati entri LinkFinder yang cocok dengan regex MIME/kelas dan memotong tanda kutip di ujung match. Pemotongan itu tidak menyentuh list matches yang masuk ke out_json, sehingga isi results[].matches di JSON dapat berbeda dari baris - <secret> di berkas teks apkleaks/apkleaks.py:100-115.

Berkas yang tidak dipertahankan

Flag self.scanned hanya menjadi True ketika extract menerima minimal satu match. Bila tidak ada temuan sama sekali, cleanup menutup berkas lalu menghapusnya dengan os.remove(self.output) dan mencetak ** Done with nothing. ¯\_(ツ)_/¯. Bila ada temuan, berkas ditutup dan path-nya dilaporkan lewat pesan ** Results saved into '<path>'. apkleaks/apkleaks.py:140-149. Karena penghapusan terjadi di cleanup yang dipanggil dari blok finally, berkas sementara juga hilang ketika pemindaian gagal di tengah jalan.

self.scannedFormatTindakan cleanupPesan penutup
TrueJSONtulis json.dumps(indent=4), close** Results saved into '<path>'.
Trueteksclose tanpa penulisan tambahan** Results saved into '<path>'.
Falseapa punclose lalu os.remove(self.output)** Done with nothing. ¯\_(ツ)_/¯