iamcrang/TinyAsmProcessManager

GitHub: iamcrang/TinyAsmProcessManager

纯 x64 汇编编写的 Windows 11 实时网络活动监控器与出站 WFP 防火墙,无需任何运行时依赖或内核驱动。

Stars: 0 | Forks: 0

# NetworkLens ASM NetworkLens ASM 是 NetworkLens 的一个极简原生版本,使用纯 x64 汇编语言编写,适用于 Windows 11。 ## 运行时依赖 该应用程序不使用 .NET、CRT、NuGet 或第三方 DLL。它仅导入标准的 Windows 系统组件: - `kernel32.dll`; - `user32.dll`; - `gdi32.dll`; - `advapi32.dll`; - `shell32.dll`; - `iphlpapi.dll`; - `fwpuclnt.dll`; - `rpcrt4.dll`; - `ntdll.dll`。 `win64a.inc` 宏仅在构建时供汇编器使用,不包含在最终生成的可执行文件中。 ## 功能 - IPv4 和 IPv6 TCP/UDP endpoint; - 通过单次 `Toolhelp32` 快照获取的 PID 和进程名; - 托管在 `svchost.exe` 中的 Windows 服务名称,通过服务控制管理器获取; - 完整的进程列表,对于在当前快照中未拥有 TCP/UDP endpoint 的进程,显示为 `No endpoint` 行; - 本地和远程地址及端口; - 在 Windows 允许读取的情况下,显示完整的可执行文件路径; - TCP 状态; - 一秒刷新间隔; - 按显示的进程名进行不区分大小写的过滤; - 每列均可排序:第一次点击选择 `ASC`(升序),第二次点击选择 `DESC`(降序); - 行右键菜单支持复制名称、PID 或路径,打开可执行文件所在文件夹,选择 `Allow outbound` 或 `Block outbound`,以及移除 NetworkLens 规则; - 直接从活动的 TCP endpoint 行中,对 IP 地址、远程 TCP 端口或 IP 与端口组合进行定向阻止; - 独立且支持排序和过滤的规则表; - 针对 IPv4 和 IPv6 的原子出站 WFP 规则,通过可执行文件的完整路径进行标识; - 版本化的规则配置存储在 `%LOCALAPPDATA%\NetworkLens\rules-v1.bin` 中,使用原子文件替换方式; - `Disable & clear all NetworkLens rules`,该操作将同时清除已保存的配置和活动的 NetworkLens 规则,且不会更改 Windows Defender 防火墙规则或其他应用程序拥有的规则; - 纯托盘启动:双击图标打开窗口,使用关闭按钮再次隐藏,选择 `Exit NetworkLens (keep saved rules)` 可终止进程; - 单实例行为:再次运行可执行文件会打开现有的隐藏窗口; - `Space` — 暂停/继续; - `F2` — 在 `ALL PROCESSES` 和 `NETWORK ONLY` 之间切换; - `F3` — 在连接表和规则表之间切换; - `R` — 手动刷新; - 方向键、Page Up/Down、Home/End 以及鼠标滚轮 — 滚动。 当前的过滤器、选定的排序列和排序方向在自动刷新时会保持不变。`Processes` 和 `Endpoints` 计数器描述了当前过滤后的结果集。 即使 NetworkLens 仅请求最少的查询权限,Windows 也可能拒绝打开系统或受保护进程的句柄。在这种情况下,`FILE LOCATION` 会显示 `-`,并且依赖于该路径的右键菜单操作将被禁用。 Windows UDP 表不包含远程地址,因此对于 UDP 仅显示本地 endpoint。 默认启用 `ALL PROCESSES`。实际的 TCP/UDP endpoint 首先显示,随后为每个剩余进程显示一行 `No endpoint`。例如,即使 `msrdc.exe` 的网络连接由子进程或系统服务拥有,它也依然可见。 对于 `svchost.exe`,NetworkLens 会显示托管的服务名称,例如 `svchost: Dnscache`。如果一个宿主包含多个服务,它们的名称会在精简的 31 字符显示字段中以逗号分隔。 `PID ` 仅作为后备方案,用于进程在进程和网络快照之间退出,或者 Windows 不再在进程列表中返回该进程的情况。出现 PID 0 的 `Kernel / completed TCP` 属于正常现象:这些条目通常是已完成 `TIME_WAIT` 状态的连接,不再有活动的归属进程。 ## 构建 可复现的构建使用 FASM 1.73.35 作为构建工具: ``` .\native\build.ps1 ``` 输出文件写入至 `artifacts\NetworkLens-asm-win-x64\NetworkLensAsm.exe`。 定制的“地球与放大镜”图标作为 Windows 图标资源组直接嵌入在 PE 文件中,其中包含 16、32、48 和 256 px 图像。可执行文件、窗口和系统托盘均使用相同的资源,因此运行时不需要外部图标文件。标准的透明 PNG 和独立的多分辨率 `.ico` 文件存储在 [`native\assets`](assets/README.md) 下。 对于监控和编辑已保存的配置,标准的用户权限就已足够。若要将其激活为 WFP 过滤器,则需要管理员权限。在未提权的情况下,进程表依然可用,规则视图会将保存的条目显示为 `INACTIVE` 并附带访问错误提示。NetworkLens 会在下次以管理员身份启动时再次尝试激活它们。 ## 需要驱动程序吗? 不需要。Windows IP Helper API 中的 `GetExtendedTcpTable` 和 `GetExtendedUdpTable` 已足以满足 endpoint 和 PID 表的需求。 定制的内核态 WFP callout 驱动程序仅适用于深度检测、数据包或流数据修改或重新注入。那将是一款不同的产品,具有签名、安装和提权要求。 ## 内置轻量级防火墙 汇编版本通过 `fwpuclnt.dll` 直接使用 Windows Filtering Platform;它不使用 Windows 防火墙 GUI 或 COM API。不需要定制的内核态驱动程序。 规则基于可执行文件的完整路径所派生出的应用程序身份,作用于 `ALE_AUTH_CONNECT_V4` 和 `ALE_AUTH_CONNECT_V6` 层。它仅影响新的出站连接。环回流量被刻意排除,这样规则就不会破坏应用程序之间的本地通信。 TCP endpoint 右键菜单支持三种额外的阻止范围: - `Block this remote IP` — 阻止此可执行文件发往所选 IPv4 或 IPv6 地址的所有出站协议; - `Block this remote TCP port` — 阻止 IPv4 和 IPv6 上所选的 TCP 端口; - `Block this IP + TCP port` — 仅阻止所选的地址与端口组合。 IP 地址、端口和协议均取自已显示的远程 endpoint,从而消除了手动输入错误。由于 Windows IP Helper 不返回 UDP 的远程 endpoint,因此这三个命令在 UDP 行上不可用。新规则不会终止已建立的连接,但会阻止后续的连接尝试。 已保存的配置是唯一的事实来源。NetworkLens 的私有动态 WFP session 仅是其运行时的映射: - 创建或替换 IPv4/IPv6 过滤器对会在单个 WFP 事务中完成; - `Rules (F3)` 显示来自已保存配置的进程、操作和确切目标;无法激活的条目会被标记为 `INACTIVE`; - 启动时,NetworkLens 会加载配置并重新创建匹配的 WFP 过滤器; - `Disable & clear all NetworkLens rules` 会以原子方式保存一个空配置,关闭当前的 WFP session,并打开一个新的空 session; - 正常或异常的进程终止会自动删除动态过滤器,而不会删除已保存的配置; - Windows Defender 防火墙规则、系统规则和其他应用程序拥有的规则既不会被列出,也不会被更改。 在 NetworkLens 子层中,`Allow` 是一种权限,而不是绕过另一子层或系统策略中阻止规则的方法。配置文件中仅存储用户的意图;WFP 对象本身不是持久化的,如果没有 NetworkLens 进程则无法运行。入站过滤、持久化的 WFP 规则和深度数据包检测不在当前的约定范围内。 配置头部包含签名、版本、记录大小和记录计数。在加载之前,NetworkLens 会验证边界、操作类型、目标、完整路径和重复条目。保存时会使用临时文件、`FlushFileBuffers` 以及通过 `MoveFileEx` 进行原子替换。如果保存失败,内存中的目录会回滚,且活动的 WFP session 保持不变。如果保存成功但 WFP 不可用,配置将被保留存储,规则将显示为非活动状态以便稍后重试。 NetworkLens 不会将自己添加到 Windows 启动项中。只有在手动启动可执行文件后,它才会以隐藏状态启动。关闭窗口会将其隐藏在系统托盘中;通过托盘菜单退出会移除运行时过滤器并保留配置。 在私有子层内,定向规则的权重高于“所有目的地”规则:IP 或端口规则的优先级高于常规的 `Allow`,而 IP+端口具有最高权重。因此,本地的 `Allow outbound` 规则不会取消同一进程的定向阻止。 只有在进行深度数据包检测、payload 修改、流或数据包重新注入,或其他非标准流量处理时,才需要定制的 WFP callout 驱动程序。
标签:WFP, 安全报告生成, 本地防火墙, 汇编, 端点可见性, 系统内核