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, 云资产清单, 命名管道, 子域名枚举, 恶意软件开发, 系统安全, 系统编程, 进程注入, 进程间通信, 逆向工程