5.1
Katalog Pola Bawaan
config/ menyimpan dua katalog pola: regexes.json, yang menjadi nilai default self.pattern ketika --pattern tidak diberikan apkleaks/apkleaks.py:351, dan notkeyhacks.json, yang tidak dibaca oleh jalur pemindaian mana pun. Keduanya objek JSON datar tanpa schema eksplisit: setiap key adalah nama kategori temuan, setiap value adalah satu pola regex atau daftar pola regex config/regexes.json:22.
erDiagram
KATALOG ||--o{ ENTRI_POLA : "berisi"
ENTRI_POLA ||--|{ NILAI_REGEX : "satu atau banyak"
ENTRI_POLA ||--o| PENANGANAN_KHUSUS : "khusus LinkFinder"
NILAI_REGEX ||--o{ GRUP_HASIL : "satu pola satu grup"
KATALOG {
string berkas
int jumlah_key
}
ENTRI_POLA {
string name
string bentuk
}
NILAI_REGEX {
string regex
int urutan
}
PENANGANAN_KHUSUS {
string kategori
string aturan
}
GRUP_HASIL {
string name
string matches
}
%% fig: Bentuk data katalog pola
%% desc: Satu katalog memuat banyak entri bernama; satu entri dapat memiliki satu atau banyak nilai regex, dan setiap nilai menghasilkan satu grup hasil tersendiri.Dua berkas, dua peran
regexes.json memuat 53 key: 52 nilai string tunggal dan satu daftar berisi 6 pola pada Amazon_AWS_S3_Bucket, sehingga totalnya 58 pola config/regexes.json:3-103. notkeyhacks.json memuat 9 key: 8 nilai string dan satu daftar berisi 2 pola pada Adjust_Config config/notkeyhacks.json:2-134. Keduanya ikut dipaketkan karena pyproject.toml menyertakan paket config* beserta berkas *.json pyproject.toml:26-305, walau hanya regexes.json yang disebut sebagai pola bawaan di README.md:886.
| Berkas | Jumlah key | Bentuk nilai | Pemakai |
|---|---|---|---|
config/regexes.json | 53 | 52 string + 1 daftar 6 pola | nilai default self.pattern apkleaks/apkleaks.py:351 |
config/notkeyhacks.json | 9 | 8 string + 1 daftar 2 pola | tidak ada pemanggil di kode config/notkeyhacks.json:2-134 |
Isi notkeyhacks.json berbentuk tanda panggilan SDK, misalnya Intercom.initialize(...), SingularConfig(...), dan AppCenter.configure(...), bukan token dengan prefix tetap seperti mayoritas entri di regexes.json config/notkeyhacks.json:2-134.
Pola tunggal versus daftar pola
scanning() membaca berkas pola lewat json.load, lalu mengiterasi setiap pasangan name dan pattern. Jika pattern sebuah list, method itu mengulang tiap elemen dan menjalankan satu thread per pola; jika bukan list, satu thread dijalankan untuk pola tunggal itu. Kedua cabang memanggil util.finder dengan self.tempdir yang sama apkleaks/apkleaks.py:123-1387.
graph TD
openp["open(self.pattern)"] --> load["json.load"]
load --> loop{"for name, pattern in regex.items()"}
loop --> check{"isinstance(pattern, list)"}
check -->|"False"| one["util.finder(pattern, self.tempdir)"]
check -->|"True"| each["for p in pattern"]
each --> many["util.finder(p, self.tempdir)"]
one --> thread["threading.Thread(target=self.extract)"]
many --> thread
thread --> extract["extract(name, matches)"]
extract --> lf{"name == LinkFinder"}
lf -->|"ya"| trim["lewati prefix media, potong kutip"]
lf -->|"tidak"| store["out_json results append"]
trim --> store
style check fill:#8b5cf6,color:#fff
style lf fill:#f59e0b,color:#000
style trim fill:#f59e0b,color:#000
style one fill:#2d7d46,color:#fff
style many fill:#2d7d46,color:#fff
style store fill:#336791,color:#fff
%% fig: Percabangan pola tunggal dan daftar pola
%% desc: scanning() memilih satu jalur pencarian per pola, lalu extract() menerapkan aturan khusus LinkFinder sebelum menulis hasil.Pola pencariannya, util.finder mengembalikan sorted(list(set(found))), sehingga satu pola selalu menghasilkan satu grup hasil yang sudah unik dan terurut apkleaks/utils.py:17-318. Konsekuensinya, key berisi daftar pola muncul beberapa kali di out_json["results"] dengan name yang sama, karena extract dipanggil sekali per pola dan setiap panggilan menambahkan satu entri apkleaks/apkleaks.py:100-1169.
| Key | Bentuk nilai | Rentang baris |
|---|---|---|
Amazon_AWS_Access_Key_ID | satu pola string | config/regexes.json:22 |
Amazon_AWS_S3_Bucket | daftar 6 pola (endpoint S3 dan MWS) | config/regexes.json:3-103 |
Adjust_Config (notkeyhacks.json) | daftar 2 pola (AdjustConfig(...) dan setAppSecret(...)) | config/notkeyhacks.json:6-910 |
Penanganan khusus kategori LinkFinder
LinkFinder adalah satu-satunya key yang punya cabang khusus di extract. Nilainya satu pola panjang yang menangkap URL dan path relatif di dalam tanda kutip config/regexes.json:3811. Ketika name == "LinkFinder", setiap secret diperiksa dengan re.match(r"^.(L[a-z]|application|audio|fonts|image|kotlin|layout|multipart|plain|text|video).*\/.+", secret); yang cocok dilewati karena dianggap path resource, bukan endpoint apkleaks/apkleaks.py:106-10912.
⚠️ Untuk secret yang lolos, baris berikutnya memotong satu karakter di awal dan satu di akhir lewat
secret[len("'"):-len("'")]tanpa memeriksa apakah karakternya benar-benar kutip tunggal apkleaks/apkleaks.py:106-10912. Pemotongan ini hanya berlaku padastdoutdan keluaran teks; nilai diout_json["results"]tetap memakaimatchesmentah karena variabelsecretditugaskan ulang di dalam loop apkleaks/apkleaks.py:100-1169.
Katalog yang tidak aktif secara bawaan
Karena scanning() hanya membuka self.pattern, notkeyhacks.json tidak pernah terpakai pada pemanggilan biasa apkleaks/apkleaks.py:123-1387. Formatnya identik dengan regexes.json, termasuk dukungan nilai berbentuk daftar, sehingga berkas itu baru berperan bila path-nya diberikan lewat --pattern; lihat Pola Kustom untuk mekanisme tersebut.