安装痕迹从哪查
Windows 上的软件安装会在几处留下时间线:注册表 Uninstall 键记录已注册程序的名称、发布者与安装日期;MSI 安装过程会在 %TEMP% 生成 MSI*.log 详细日志;系统盘的 Windows\Installer 目录则保存安装缓存与实际安装包副本。三处互相印证,能回答“某软件是什么时候装的、由谁装的、装的哪一个版本”,在排查被植入的远程控制工具或伪装成正常软件的攻击载荷时非常关键。
基本信息
| 适用平台 | Windows 7/10/11 与 Windows Server 2008 及以上 |
|---|---|
| 注册表位置 | HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall(32 位程序在 WOW6432Node 下)与每用户 HKCU 下同名键 |
| 日志位置 | %TEMP%\MSI*.log(安装执行账号的临时目录) |
| 安装缓存 | C:\Windows\Installer 下的 .msi/.msp 与缓存元数据 |
| 关键字段 | DisplayName、Publisher、InstallDate、InstallLocation、DisplayVersion |
典型使用场景
- 确认在事件窗口内是否有新软件被安装,尤其是远控、隧道与扫描类工具
- 核对已安装程序的版本,判断是否存在与台账不符的可疑版本
- 从 InstallDate 与安装日志定位安装的执行账号与时间
- 提取安装包副本用于哈希比对与真实类型鉴定
- 排查静默安装:无交互的生产主机上出现新安装项,通常源于脚本或远程下发
查询安装记录
查询安装记录
# 已注册程序清单,按安装日期倒序
Get-ItemProperty 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*' |
Select-Object DisplayName, Publisher, DisplayVersion, InstallDate |
Sort-Object InstallDate -Descending | Select-Object -First 20
# 32 位程序需另查 WOW6432Node
Get-ItemProperty 'HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' |
Select-Object DisplayName, InstallDate | Sort-Object InstallDate -Descending | Select-Object -First 20
# 列最近的安装缓存文件(.msi 可直接复制用于比对)
Get-ChildItem 'C:\Windows\Installer' -File | Where-Object { $_.Extension -in '.msi','.msp' } |
Sort-Object LastWriteTime -Descending | Select-Object -First 15 Name, LastWriteTime, Length安装痕迹对照
| 位置 | 记录内容 | 判读要点 |
|---|---|---|
| Uninstall 键 | 程序名、发布者、版本、安装日期 | InstallDate 格式为 yyyyMMdd,精度只到天 |
| MSI*.log | 安装全过程、属性与回滚信息 | 文件名含随机串,按时间排序找目标时段 |
| Windows\Installer | 安装缓存与安装包副本 | 可提取原始包计算哈希,注意文件名被压缩重命名 |
| 系统事件日志 7045/7036 | 服务安装与状态变化 | 静默安装服务类程序时会留下记录 |
| Prefetch / Amcache | 程序曾出现与执行的佐证 | 与安装时间结合可判断安装后是否运行 |
绿色软件、脚本投放与解压即用的工具不会写入 Uninstall 键,未出现在程序列表里不能说明没装过;这类情况要看文件系统时间、Prefetch、Amcache 与服务注册痕迹。
InstallDate 由安装程序写入,可被伪造或为空;重要结论应以 MSI 日志与事件日志中的时间为主,注册表日期作为辅助。