Program terinstal¶
Apa yang disimpan Windows¶
Windows dan installer mencatat perangkat lunak yang terinstal dalam beberapa daftar registry. Setiap daftar memiliki satu kunci per program, produk, distribusi, atau paket; Juntei memberikan satu catatan per kunci.
| Sumber | Hive dan kunci | Apa isinya |
|---|---|---|
uninstall |
SOFTWARE dan NTUSER.DAT …\CurrentVersion\Uninstall\*, serta SOFTWARE\Wow6432Node\… |
Apa yang dicantumkan oleh Settings dan Programs and Features: nama, versi, penerbit, tanggal instalasi, folder, perintah uninstall, ukuran, apakah tersembunyi |
msi_product |
SOFTWARE\Classes\Installer\Products\*, NTUSER.DAT Software\Microsoft\Installer\Products\* |
Produk Windows Installer: nama dan versi produk, nama berkas paket, dan folder asal instalasinya |
app_path |
SOFTWARE dan NTUSER.DAT …\CurrentVersion\App Paths\* |
Program yang dijalankan Windows berdasarkan nama (Win+R, start tool): path program dan foldernya |
wsl |
NTUSER.DAT …\CurrentVersion\Lxss\{GUID} |
Distribusi Windows Subsystem for Linux: nama, lokasi berkas atau disk-nya, WSL 1 atau 2 |
package |
SOFTWARE …\Appx\AppxAllUserStore |
Aplikasi terpaket (Store): yang di-provision untuk setiap pengguna, milik Windows sendiri, staged, deprovisioned, dan milik masing-masing pengguna |
Kesimpulan terbaik: program, produk, atau paket ini terinstal (atau terdaftar) di sistem, untuk setiap pengguna atau untuk pengguna ini. Tanggal instalasi adalah apa yang ditulis oleh installer; last write kunci adalah waktu entri tersebut terakhir berubah.
Lokasi¶
C:\Windows\System32\config\SOFTWARE
Microsoft\Windows\CurrentVersion\Uninstall\<name or {ProductCode}>
Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\<…> 32-bit programs
Classes\Installer\Products\<packed product code>[\SourceList]
Microsoft\Windows\CurrentVersion\App Paths\<program.exe>
Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\{Applications,InboxApplications,Staged,Deprovisioned,<SID>,EndOfLife\<SID>}\<package>
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows\CurrentVersion\Uninstall\<…>
Software\Microsoft\Installer\Products\<packed product code>
Software\Microsoft\Windows\CurrentVersion\App Paths\<program.exe>
Software\Microsoft\Windows\CurrentVersion\Lxss\{GUID}
Kumpulkan SOFTWARE, setiap NTUSER.DAT, beserta log transaksinya. SYSTEM menyebutkan nama host, dan
ProfileList di SOFTWARE memberikan SID setiap pengguna.
Peringatan bagi analis¶
- Tanggal instalasi dan waktu kunci.
InstallDateadalah tanggal (tanpa jam) yang ditulis oleh installer, dalam waktu lokal; sebagian installer tidak menuliskannya, dan sebagian lain menulis format berbeda (disimpan apa adanya diInstallDateRaw). Pembaruan dapat menulis ulang entri tanpa mengubah tanggal, atau mengubah tanggal tanpa banyak perubahan pada program: bandingkanInstallDatedenganKeyLastWrittenUTC. - Perangkat lunak yang telah di-uninstall. Program yang dihapus secara bersih kehilangan kuncinya. Gunakan
parse-registry read --recover-deleteduntuk kunciUninstallyang terhapus, serta Amcache, Prefetch, dan$MFTuntuk jejak yang tertinggal. - Registrasi per pengguna. Entri
NTUSER.DATmengidentifikasi perangkat lunak yang terdaftar untuk suatu profil. Cakupan tersebut tidak menetapkan siapa yang menjalankan installer atau apakah hak administrator digunakan. - Entri tersembunyi.
SystemComponentmenyembunyikan entri dari Programs and Features; entri tanpaDisplayName(pembaruan, komponen) juga tidak ditampilkan. Semuanya dilaporkan. - Kode produk. Kunci
Uninstallberbentuk GUID dapat dicocokkan dengan kuncimsi_productyang dipadatkan (packed) melaluiProductCode. Nama berbentuk GUID saja tidak membuktikan bahwa Windows Installer yang membuat entri tersebut. - App Paths. Ini adalah registrasi yang digunakan untuk menemukan program, bukan catatan
eksekusi. Nilai
Pathdapat berisi beberapa direktori pencarian dan belum tentu merupakan direktori instalasi. - Penerbit. Ini adalah metadata registry yang diberikan oleh installer, bukan informasi tanda tangan yang telah diverifikasi.
- Arsitektur.
Wow6432Nodemenyimpan program 32-bit pada Windows 64-bit (Architecturex86,Wow64True); entri lain menggunakan arsitektur sistem itu sendiri (kosong). Arsitektur paket adalah arsitekturnya sendiri (x64,neutral, …). - WSL.
Versionadalah versi WSL dariFlagsdistribusi (0x8: berjalan di mesin virtual WSL 2). NilaiVersionmilik distribusi itu sendiri (diDetails) adalah versi sistem berkasnya, yaitu 2 juga pada distribusi WSL 1.BasePathberisiext4.vhdx(WSL 2) ataurootfs(WSL 1) miliknya: kumpulkan untuk melihat isinya. - Paket. Daftar
<SID>adalah paket yang terdaftar untuk setiap pengguna; sebagian besar milik Windows sendiri. PaketDeprovisioneddihapus untuk pengguna baru, paketEndOfLife\<SID>untuk pengguna tersebut. - Nilai yang rusak. Angka yang cacat, tipe nilai yang salah, dan UTF-16 yang tidak valid dilaporkan di
Problemsdan dipertahankan diDataRaw, termasuk string hex kosong untuk nilai yang ada tetapi berukuran nol byte. String kosong yang bersih pada field numerik opsional diperlakukan sebagai tidak ada. Versi paket harus berisi empat komponen desimal, masing-masing dalam rentang unsigned 16-bit. Peringatan tingkat hive tetap berada di stderr ketika-tmengalirkan catatan ke stdout.
Mengurai dengan Juntei¶
Usage: juntei parse-registry installed-programs <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SOFTWARE and NTUSER.DAT hives
-f, --file <FILE> Parse one SOFTWARE or NTUSER.DAT hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry installed-programs -d evidence/ -o installed.csv
juntei parse-registry installed-programs -d evidence/ -t jsonl \
| jq 'select(.Scope == "user" and .Source != "package")'
Ringkasan mencantumkan program yang terakhir diinstal (berdasarkan InstallDate), apa yang diinstal pengguna untuk
dirinya sendiri, dan distribusi WSL.
Field keluaran¶
| Field | Interpretasi |
|---|---|
Host, SourcePath, HiveType |
Host, berkas hive, dan SOFTWARE atau NTUSER.DAT. |
User, UserSID |
Pengguna dari hive pengguna (folder profilnya dan SID dari ProfileList), atau pengguna yang tercantum untuk sebuah paket. |
Source, Scope |
Daftar (uninstall, msi_product, app_path, wsl, package), dan machine atau user. |
Name, Version, Publisher |
DisplayName, DisplayVersion, Publisher; ProductName dan Version sebuah produk; nama berkas program sebuah App Path; nama distribusi dan versi WSL; nama dan versi paket. |
InstallDate, InstallDateRaw |
InstallDate sebagai tanggal bila ditulis dalam format YYYYMMDD; jika tidak, apa adanya. |
KeyLastWrittenUTC |
Waktu kunci entri terakhir berubah. |
InstallLocation, InstallSource |
InstallLocation (Path sebuah App Path, BasePath distribusi, Path paket); InstallSource (folder sumber yang terakhir digunakan oleh produk). |
Program |
Program sebuah App Path. |
UninstallCommand, QuietUninstallCommand |
UninstallString, QuietUninstallString. |
SizeKB, SystemComponent, WindowsInstaller |
EstimatedSize dalam KiB; apakah tersembunyi; apakah diinstal oleh Windows Installer. |
ProductCode |
Kode produk Windows Installer ({GUID}). |
Architecture, WOW64 |
x86 di bawah Wow6432Node, atau arsitektur paket; apakah kunci berada di bawah Wow6432Node. |
Details |
Informasi tambahan: DisplayIcon, ModifyPath, ParentKeyName, ReleaseType, Inno Setup: User (akun yang menjalankan installer Inno Setup); PackageCode, PackageName sebuah produk; Flags, State, DefaultUid, Version, PackageFamilyName, Default sebuah distribusi; List, ResourceId, PublisherId sebuah paket. |
KeyPath |
Kunci entri. |
DataRaw |
Byte (hex) dari nilai yang tidak sesuai dengan yang dinyatakan namanya. |
TransactionLogStatus, LogsApplied |
Konteks pemulihan registry. |
Problems |
Nilai yang tidak dapat dibaca atau tidak sesuai dengan yang dinyatakan namanya. |
Strategi investigasi¶
- Urutkan berdasarkan
InstallDatedanKeyLastWrittenUTCdi sekitar insiden; perhatikan alat akses jarak jauh, klien tunneling dan transfer berkas, pengarsip, runtime scripting, dan alat keamanan. - Tinjau catatan dengan
Scopeuser: perangkat lunak yang diinstal tanpa hak administrator. - Periksa
InstallLocation,InstallSource, danUninstallCommanduntuk folder yang dapat ditulisi pengguna (Downloads,AppData,Temp,ProgramData). - Cari distribusi WSL, dan kumpulkan
BasePath-nya. - Korelasikan dengan Amcache dan Prefetch (installer dan program yang berjalan),
$MFT(pembuatan folder instalasi), dan log peristiwa Application (peristiwa MsiInstaller).