Idov31/EtwSuite
GitHub: Idov31/EtwSuite
EtwSuite 是一个受 EtwExplorer 启发的 Windows 原生 ETW 桌面检查套件,为浏览 provider、消费实时事件、录制 ETL 跟踪以及离线分析提供了一体化的图形化解决方案。
Stars: 62 | Forks: 3
# EtwSuite



EtwSuite 是一个受 [EtwExplorer](https://github.com/zodiacon/EtwExplorer) 启发的 ETW 检查套件,它作为 Windows 应用程序构建,旨在通过一个本地桌面工具,让 ETW provider 浏览、实时事件收集、记录、过滤和离线检查变得更加便捷。
## 当前功能
- 列出已注册的 ETW provider。
- 按名称或 GUID 搜索 provider,包括通配符匹配。
- 检查 provider 的 GUID 和可用的事件 schema 元数据。
- 从选定的 provider 中消费实时 ETW 事件。
- 通过 GUID 或名称启用 provider,并具有显式的 level 和 keyword 掩码。
- 查看实时事件的 provider、事件名称、ID、版本、opcode、level、
进程、线程和 payload 字段。
- 使用基础文本/通配符搜索过滤实时和已记录的事件。
- 使用基础通配符或 SQL 风格的表达式解析器过滤事件。
- 将已消费的会话记录为原生 `.etl` 文件。
- 将捕获的事件行导出为 JSON 和 CSV。
- 打开支持的记录:任何 `.etl`,以及导出的 `.json` 和 `.csv`。
- 在本地 SQLite 数据库中保存、加载和删除会话模板。
- 直接从消费窗口的 provider 列表中打开 provider。
- 兼容 Intel x64 和 ARM64。
## 过滤
事件过滤器支持两种模式:
- `Basic`:不区分大小写的文本搜索,支持 `*` 和 `?` 通配符。
- `SQL`:安全的进程内表达式解析器。EtwSuite 不会对数据库执行 SQL,
也不允许函数调用或任意成员访问。
SQL 过滤示例:
```
event_id = 1
process_name LIKE 'powershell%'
payload.ImageName LIKE '*cmd.exe'
WHERE provider LIKE 'Microsoft-Windows-*' AND pid = 4242
```
有关完整的字段列表和语法,请参阅应用程序上的帮助页面。
## 记录
EtwSuite 目前可以打开:
- `.etl`:使用 TraceEvent 读取的原生 ETW 跟踪文件。
- `.json`:由 EtwSuite 导出的 JSON 文件。
- `.csv`:由 EtwSuite 导出的 CSV 文件。
目前尚不支持 `.evtx` 和其他文件类型。ETL payload 解码会尽力而为,因为读取该文件的机器上可能不存在 provider 元数据。
有关当前的记录行为,请参阅应用程序上的帮助页面。
## 基本用法
1. [安装](#installation)或[构建](#build-from-source) EtwSuite 及其依赖项。
2. 使用 `List Providers` 按名称或 GUID 查找 provider。
3. 打开 `Consume Provider`,选择一个 provider,选择 level/keyword 选项,
并开始消费事件。
4. 如果你需要原生的 ETW 记录,请使用 `Record ETL`。
5. 稍后使用 `Open Recording` 检查 `.etl`、`.json` 或 `.csv` 文件。
6. 使用 `Saved Sessions` 在 SQLite 中持久化保存 provider 和过滤器组合。
## 设置
### 安装说明
如需安装,请下载最新版本,并为您的架构安装相应的 MSI。
### 从源码构建
#### 前置条件
- Windows 10 1809 或更高版本。
- Visual Studio 2022 或更高版本,且支持 .NET 桌面开发。
- .NET 8 SDK。
- Windows App SDK 构建支持。
- 列出的依赖项。
#### 依赖项
- [Microsoft.Diagnostics.Tracing.TraceEvent](https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.TraceEvent)
- [Microsoft.O365.Security.Native.ETW](https://www.nuget.org/packages/Microsoft.O365.Security.Native.ETW)
- [Microsoft.Data.Sqlite](https://www.nuget.org/packages/Microsoft.Data.Sqlite)
- [Microsoft.WindowsAppSDK](https://www.nuget.org/packages/Microsoft.WindowsAppSDK)
某些实时 ETW provider 需要管理员权限或特殊的系统权限(例如 Microsoft-Windows-Threat-Intelligence)。基本的 provider 浏览、已保存的会话和受支持的离线记录检查应该不需要提升权限。
#### 构建命令
```
dotnet build EtwSuite.sln
```
Release 构建:
```
dotnet build EtwSuite.sln -c Release
```
构建 MSI 安装程序:
```
dotnet build installer\EtwSuite.Installer\EtwSuite.Installer.wixproj -c Release -p:Platform=x64 -p:AcceptEula=wix7
dotnet build installer\EtwSuite.Installer\EtwSuite.Installer.wixproj -c Release -p:Platform=ARM64 -p:AcceptEula=wix7
```
只有在确认 WiX Toolset OSMF 条款适合您的使用后,才传递 `AcceptEula=wix7`。
安装程序版本遵循 `major.minor.patch` 格式。每次发布时都要提升版本号,以便 Windows Installer 执行真正的大版本升级。您可以直接编辑 `installer/EtwSuite.Installer/EtwSuite.Installer.wixproj` 中的 `MajorVersion`、`MinorVersion` 和 `PatchVersion`,
或者在命令行中覆盖:
```
dotnet build installer\EtwSuite.Installer\EtwSuite.Installer.wixproj -c Release -p:Platform=x64 -p:AcceptEula=wix7 -p:PatchVersion=2
```
如果 ICE 验证失败是因为构建环境无法访问 Windows Installer 服务,请添加 `-p:SuppressValidation=true`。
### 测试
```
dotnet test EtwSuite.sln
```
## AI 使用
EtwSuite 是由我本人在 Codex 和 Github Copilot 的帮助下构建的。话虽如此,所有的功能都经过了验证,并且 AI 生成的代码也由我进行了审查(和修改)。我在仓库中附加了一个 `AGENTS.md` 文件和 `.agents` 文件夹,其中包含相关说明,以便更好地理解项目。
再次声明,任何低质量的代码 PR 都将被关闭并忽略,屡次的低质量贡献可能会导致被封禁。
## 资源
- [EtwExplorer](https://github.com/zodiacon/EtwExplorer)
- [krabsetw](https://github.com/microsoft/krabsetw)
- [Event Tracing for Windows](https://learn.microsoft.com/windows/win32/etw/event-tracing-portal)
- [TraceEvent](https://github.com/microsoft/perfview/tree/main/src/TraceEvent)
- [Windows App SDK](https://learn.microsoft.com/windows/apps/windows-app-sdk/)
- [WinUI](https://learn.microsoft.com/windows/apps/winui/)
标签:CSV输出, ETW, 事件追踪, 性能分析, 桌面工具