简介:USBViewer是一款面向IT运维人员、系统管理员及有设备审计需求的普通用户的U盘使用记录查询工具,用于查看计算机上所有曾连接过的USB设备历史,解决设备追踪、数据流动排查与安全审计等问题。压缩包共4个文件,约547KB,包含可执行程序、HTML格式的说明文档、RTF使用手册以及界面截图,分别对应软件运行、许可与系统需求说明、操作指南和界面预览,结构精简、开箱即用。目前已有878人学习下载。工具可记录USB设备的设备ID、制造商、产品名称与序列号,并保留首次连接、末次连接及每次插拔的时间戳,同时追踪通过U盘进行的复制、移动、删除等文件操作,为排查设备异常、追溯数据流向乃至误删文件恢复提供线索。图形化界面降低了使用门槛,适合在系统审计、数据安全防护与日常设备管理中参考使用。
1. U盘使用记录查询工具:为什么我劝你先搞懂USBViewer再动手
公司内网一台公用机被插过不明U盘,安全同事翻遍系统日志只找到一堆设备实例ID,根本对不上是谁、什么时候、插了哪个盘。这种场景下,U盘使用记录查询工具就是刚需——USBViewer.zip 正是干这个的:它把Windows系统里散落在注册表、事件日志、驱动日志中的USB存储设备痕迹聚合起来,还原出「哪个设备、什么时间、接入过哪台机器」的可读记录。适合做终端取证、内网审计、IT资产盘点的从业者,也适合想搞清楚自己电脑被插过什么盘的普通用户。它不是杀毒软件,不拦U盘,只做记录提取与呈现,这一点先分清,后面才不会用错方向。
2. USBViewer 的工作原理与运行环境准备
2.1 它到底从哪里读数据
Windows对USB存储设备的记录不是集中存一处,而是分散在几个位置。USBViewer 的核心价值就是把这些碎片拼起来。常见做法是读取以下四类来源:
- 注册表
USBSTOR键:记录曾接入过的USB存储设备型号和序列号,路径在HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR。 setupapi.dev.log:系统设备安装日志,含首次接入时间戳。- 事件日志:部分系统版本会在
Microsoft-Windows-DriverFrameworks-UserMode或内核PNP日志中留下接入事件。 - 设备实例路径与卷映射:把设备实例ID和盘符、卷序列号关联起来。
USBViewer 做的事就是遍历这些来源,按设备实例ID做关联,输出一张带时间线的表。理解这一点很关键:如果某个来源被清理过,记录就会残缺,工具不是万能的,它只是「尽量还原」。
2.2 运行环境与权限要求
这类工具对权限敏感。普通用户权限下,注册表USBSTOR可读,但事件日志和部分系统日志读不全,setupapi.dev.log也可能因权限被拒。所以标准做法是以管理员身份运行。
| 项目 | 要求 | 说明 |
|---|---|---|
| 操作系统 | Windows 7/10/11 | 不同版本日志路径略有差异 |
| 运行权限 | 管理员 | 否则事件日志读取失败 |
| 依赖 | .NET Framework 4.x | 多数此类工具基于.NET |
| 磁盘空间 | 极小 | 只读日志,不写大量数据 |
| 网络 | 不需要 | 纯本地分析 |
如果你的机器是Windows 11较新版本,部分旧日志通道可能被系统轮转覆盖,能查到的历史记录窗口会变短,这是系统行为,不是工具问题。
2.3 解压与首次运行
拿到 USBViewer.zip 后,先解压到非系统盘目录,避免路径含中文或空格导致个别组件加载异常。常见做法是解压到D:\Tools\USBViewer\。
# 解压(以命令行方式示例,图形界面直接右键解压即可) # 假设压缩包在 Downloads 目录 mkdir D:\Tools\USBViewer tar -xf %USERPROFILE%\Downloads\USBViewer.zip -C D:\Tools\USBViewer解压后目录里通常包含主程序、依赖库和说明文件。首次运行前,右键主程序选择「以管理员身份运行」。如果系统弹出SmartScreen拦截,选择「更多信息」再「仍要运行」——这是未签名程序的常规提示,不代表文件有问题,但你要确保压缩包来源可信。
提示:运行前先关闭杀毒软件的实时拦截,部分安全软件会把读取注册表USBSTOR的行为误判为敏感操作,导致结果为空。
3. 用 USBViewer 完成一次完整的U盘记录查询
3.1 界面结构与核心字段解读
启动后主界面一般分三块:设备列表区、时间线区、详情区。设备列表每行对应一个曾接入的USB存储设备,核心字段包括:
- 设备名称:如
USB\VID_XXXX&PID_XXXX,厂商ID和产品ID。 - 序列号:设备唯一标识,同型号不同盘靠它区分。
- 首次接入时间 / 最后接入时间。
- 关联盘符:曾分配过的驱动器号。
- 数据来源:标记该条记录来自注册表还是日志。
这里有个容易误读的点:序列号字段如果是空或显示为000000000000,说明该设备没有上报唯一序列号,这类廉价U盘很常见,此时无法区分同型号的两个盘,只能靠接入时间做粗略判断。
3.2 执行查询与结果导出
操作流程不复杂,但顺序有讲究。常见做法是先刷新数据源,再筛选,最后导出。
# 伪代码示意 USBViewer 的典型操作序列(图形界面按对应按钮即可) # 1. 刷新所有数据源 Refresh-AllSources # 2. 按时间范围筛选,例如只看最近30天 Filter -DateFrom (Get-Date).AddDays(-30) -DateTo (Get-Date) # 3. 只看USB存储设备,排除键鼠等非存储设备 Filter -DeviceType "USBSTOR" # 4. 导出为CSV,便于后续比对 Export -Format CSV -Path D:\Tools\USBViewer\usb_report.csv逻辑说明:先刷新是为了让工具重新读取最新日志,避免用缓存;时间筛选能大幅缩小结果集,内网审计时通常只关心某个时间段;设备类型筛选排除大量非存储USB设备,否则列表会混入鼠标键盘;导出CSV是为了和资产台账或门禁记录做交叉比对。
参数上,时间范围建议比你怀疑的时间点前后各放宽一天,因为日志时间戳可能受时区或系统时间偏差影响。导出路径不要放在系统盘根目录,避免权限问题写不进去。
3.3 把导出结果和实际场景对上
导出的CSV里,一行就是一个设备接入事件。实际排查时,我一般会做三件事:
第一,按序列号分组,看同一设备在哪些时间点出现过,判断是否为惯用盘。第二,按首次接入时间排序,找出异常时间段的陌生设备。第三,把盘符和文件服务器访问日志对照,确认该时间段有没有对应盘符的读写行为。
# 用pandas快速分析导出的CSV,找出首次出现的陌生设备 import pandas as pd df = pd.read_csv(r"D:\Tools\USBViewer\usb_report.csv") # 按序列号聚合,取每个设备的最早接入时间 first_seen = df.groupby("SerialNumber")["FirstConnectTime"].min().reset_index() first_seen = first_seen.sort_values("FirstConnectTime") # 筛选出在指定时间段内首次出现的设备 suspect = first_seen[ (first_seen["FirstConnectTime"] >= "2024-06-01") & (first_seen["FirstConnectTime"] <= "2024-06-30") ] print(suspect)这段脚本的作用是把「首次出现时间」作为异常判断依据。参数上,时间区间按你的排查窗口改。注意序列号为空的行要先剔除,否则会聚成一堆无意义记录。
4. 避坑与常见问题排查
4.1 查询结果为空
现象:工具运行正常,但设备列表一条记录都没有。
原因:最常见是没用管理员权限运行,事件日志和部分注册表键读不到;其次是系统从未接入过USB存储设备,或相关日志已被清理工具清空。
解决:右键以管理员身份重新运行;换一台确实插过U盘的机器验证工具本身是否正常;检查USBSTOR注册表键是否存在,若被组策略禁用则无记录。
4.2 时间戳对不上
现象:工具显示的时间和你记忆中的接入时间差了几个小时。
原因:部分日志用UTC时间存储,工具若未做本地时区转换就会偏差;系统时间本身被改过也会导致记录失真。
解决:确认工具是否有时间显示设置,手动换算时区;以多个数据源交叉验证,不要只信单一时间戳。
4.3 序列号重复或为空
现象:多个不同U盘显示相同序列号,或序列号为空。
原因:廉价U盘主控不上报唯一序列号,系统只能用默认值填充,导致无法区分。
解决:这类情况只能靠接入时间、盘符和容量等辅助字段综合判断,不要单凭序列号下结论。审计场景下应把这一限制写进报告。
4.4 导出CSV乱码
现象:用Excel打开导出的CSV,中文显示为乱码。
原因:工具默认用UTF-8导出,而部分Excel版本默认按GBK解析。
解决:用记事本打开CSV另存为带BOM的UTF-8,或用Excel的「数据-从文本导入」手动指定编码。
4.5 被杀毒软件拦截
现象:运行或读取注册表时被安全软件阻断,结果不完整。
原因:读取USBSTOR和系统日志的行为特征与某些敏感操作相似,被启发式规则误判。
解决:将工具目录加入白名单,或在隔离环境(虚拟机、专用分析机)中运行,避免在生产终端上反复触发告警。
5. 进阶:把USBViewer纳入日常终端审计流程
单次查询只能解决眼前问题,真正有价值的是把它变成可重复的流程。我一般会做两件事:定期导出留档,以及和资产系统做自动比对。
定期留档的做法是写一个批处理,每周固定时间以管理员权限静默运行并导出带日期的CSV。
@echo off REM 每周USB设备记录留档脚本 set TOOL=D:\Tools\USBViewer\USBViewer.exe set OUT=D:\USB_Audit\%date:~0,4%%date:~5,2%%date:~8,2%_usb.csv if not exist D:\USB_Audit mkdir D:\USB_Audit REM 以管理员权限运行并导出,具体参数以工具实际支持为准 start /wait "" %TOOL% /export "%OUT%" echo 留档完成:%OUT%逻辑说明:%date%取系统日期拼成文件名,保证每次导出不覆盖;start /wait确保导出完成后再结束脚本。参数上,/export是示意,实际命令行参数要以工具说明为准,如果工具不支持命令行导出,就用图形界面手动导出后归档。
留档之后,用脚本比对本周和上周的设备列表,找出新增设备。
import pandas as pd this_week = pd.read_csv(r"D:\USB_Audit\20240624_usb.csv") last_week = pd.read_csv(r"D:\USB_Audit\20240617_usb.csv") # 找出本周新增的序列号 new_devices = set(this_week["SerialNumber"]) - set(last_week["SerialNumber"]) print("本周新增USB设备序列号:", new_devices)这个比对逻辑的关键是序列号集合差集。参数上,两周文件路径按实际日期改。注意空序列号要先过滤,否则每周都会误报。
还有一个容易被忽略的技巧:把USB记录和登录日志按时间窗口关联。同一台机器,某账号登录后5分钟内出现陌生USB设备首次接入,这个组合比单独看USB记录更有说服力。我一般会拉一个时间窗口±10分钟的关联表,人工复核。
注意:所有留档数据涉及终端使用行为,存储和查阅要符合所在单位的内部管理规定,不要随意扩散。
从那以后我每次做终端审计,都强制先跑一遍USBViewer留档再动手分析,绝不凭记忆判断哪台机器干净。希望帮到你。
本文还有配套的精品资源,点击获取