kfong-dev/TrayObserver
GitHub: kfong-dev/TrayObserver
一个 Windows 系统托盘 API 观察器,通过 hook 和 IAT 补丁关联进程的 Shell_NotifyIcon 调用与 Explorer 内部托盘状态,帮助研究者深入分析通知区域行为。
Stars: 0 | Forks: 0
# TrayObserver
一个使用 C/C++ (Win32, x64) 构建的 Windows 系统托盘 API 观察器。监控并关联来自任意进程的 `Shell_NotifyIcon` 调用与 Explorer 的内部托盘列表,记录 API 调用与实际通知区域状态之间的关系。
开发进行中 — 核心 hook 基础设施已就绪,但事件解析和图标重建存在已知问题。
## 功能说明
**组件 A — Explorer 监视器**
- 将 `WH_CALLWNDPROC` 全局 hook 安装到 Explorer 的消息循环中
- 拦截 `Shell_TrayWnd` 上的 `WM_COPYDATA`,并解码 `SHELLTRAYDATA` 负载 (NIM_ADD, NIM_MODIFY, NIM_DELETE, NIM_SETFOCUS, NIM_SETVERSION)
- 通过 `TB_GETBUTTON` + `ReadProcessMemory` 枚举实时的托盘工具栏 (`SysPager` → `ToolbarWindow32`),以实现按需快照
**组件 B — API 观察器**
- 在目标进程中对 `Shell_NotifyIconW` 进行 IAT 补丁
- 在调用到达 Explorer 之前进行拦截,捕获完整的 `NOTIFYICONDATA` 负载
- 通过命名管道 (`\\.\pipe\TrayObserver`) 将数据报告回控制器
**GUI**
- 深色主题,所有者绘制的 Win32 控件
- 每个进程独立的事件详情窗口
- 持久化的事件历史记录
- 用于快照、清空和过滤的工具栏控件
- 将 API 调用事件与 Explorer 内部托盘状态相匹配的关联视图
**IPC**
- 注入的 DLL 与控制器之间的命名管道 (`\\.\pipe\TrayObserver`)
- 仅限本地通信 — 通过 NPFS 路由,不受 UNC 强化策略影响
## 架构
```
TrayObserver.exe — main application (GUI + controller + pipe server)
TrayHook.dll — WH_CALLWNDPROC hook, injected into Explorer
ComponentA.dll — snapshot enumerator + hook installer
ComponentB.dll — IAT patcher + process injector
PayloadHook.dll — IAT patch DLL injected into target processes
```
## 已知问题
- 安装 hook 后系统托盘图标无法正确重建 — Explorer 的内部图标列表会失去同步
- 由于 NIM_ADD/MODIFY/DELETE 事件与快照枚举器之间的时序问题,事件日志在解析图标期间会产生冗余或无意义的条目
- 这些是我们正在积极调查的领域
## 系统要求
- Windows 10 x64
- 必须以管理员身份运行(这是将 `SetWindowsHookEx` 注入 Explorer 以及进行进程注入所必需的)
- MSVC x64 构建环境
## 构建
在 Visual Studio 中打开并构建解决方案。组件 DLL 必须在主可执行文件之前构建。所有二进制文件必须放在同一目录下,以便 hook 安装程序能够找到它们。
## 安全上下文
此工具使用进程注入和全局 hook。它会被杀毒软件标记 — 请将构建目录添加到杀毒软件的排除项中。此工具仅供您在自己的机器上用于开发和研究所述。
受 PPL 保护的进程以及以更高级别完整性运行的进程会被自动跳过。
标签:API拦截, API接口, API监控, C/C++, Explorer, GUI工具, IAT Hook, IAT Patching, IPC, Linux, Shell_NotifyIcon, Shell_TrayWnd, SSH蜜罐, UML, WH_CALLWNDPROC, Win32开发, Windows系统托盘, WM_COPYDATA, x64, 中高交互蜜罐, 事务性I/O, 云资产清单, 命名管道, 子域名枚举, 恶意软件开发, 系统安全, 系统编程, 进程注入, 进程间通信, 逆向工程