jakka351/NullScan

GitHub: jakka351/NullScan

一款基于 .NET MAUI 的 BLE 反监视工具,通过指纹引擎在地址轮换下持续识别和追踪隐藏设备。

Stars: 2 | Forks: 0

image # NULLSCAN **统一的 BLE 反监视与设备情报工具** — .NET MAUI(Android 优先) NULLSCAN 捕捉的是*发射器*本身,而不是它当前使用的地址。真正值得关注的设备是那些通过改变状态来隐藏自身的设备——因此整个系统构建于一个共享的**指纹引擎**之上,该引擎不受地址轮换的影响。 ## 架构 三层架构,一个引擎——完全符合构建简报的描述: ``` raw adv → normalise → feature extraction → fingerprint hash → identity resolver → transition detector → local store → (opt-in) mesh → correlation & alerting ``` | 项目 | 用途 | 框架 | | --- | --- | --- | | **`NullScan.Core`** | 共享的、跨平台的指纹引擎。每一个传感器层都为其提供数据。 | `net9.0` | | **`NullScan.Core.Tests`** | 22 个 xUnit 测试,用于验证重新识别、突变检测、追踪器、三边测量。 | `net9.0` | | **`NullScan.App`** | Android 传感器层:原生 BLE 扫描器 + SQLite 存储 + 暗色 MVVM UI。 | `net9.0-android` | 核心层**不依赖任何平台**。手机的实时 BLE 扫描器和内置模拟器都会输出相同的 `BleObservation` 记录,因此引擎无法区分它们——这就是 Phase-0 承诺的“单一记录格式”,也是让 Sniffle 硬件节点能够直接接入同一处理流水线的基础。 ## 指纹引擎(核心所在) 身份标识由不受地址轮换影响的特征构建而成: - **广播节奏 / 时间抖动** — `CadenceProfile`(在线 Welford 均值/标准差/漂移)。 - **载荷结构** — service-UUID 集合、AD-type 排序、制造商数据布局及长度。 - **TX 功率签名** — 声明功率与观测到的 RSSI 包络对比。 - **外观 / 标志 / OUI 历史** — 包括将 **OUI→全零** 转换作为首要事件。 **身份解析器**针对每一个广播包输出以下三种状态之一: - `MATCH` — 已知设备,可能正在使用新地址(行为重识别)。 - `NEW` — 未知的发射器。 - `MUTATED` — 刚刚改变了隐藏状态的已知设备。**这是值得触发警报的状态。** ## 功能模块覆盖范围 | # | 模块 | 所在位置 | | --- | --- | --- | | 01 | 状态转换捕获 + 时间线 | `Transitions/`,设备详情页(时间线 + 严重程度) | | 02 | 行为重识别 | `Identity/IdentityResolver` + `MatchScorer` | | 03 | 追踪器 / 跟随者检测 | `Trackers/`,追踪器页面 | | 04 | GATT 探索器 | `Gatt/` 核心模型 + Android/模拟连接器 + GATT 页面 | | 05 | 机器群 / OUI 情报 | `Oui/`,OUI 页面 + `data/oui-intel.csv` | | 06 | 设备清单与差异比对 | `Inventory/`,设备页面(搜索 + 过滤器 + 迷你图) | | 07 | RSSI 房间映射器 | `Rssi/`,房间地图页面(热力图) | | 08 | 群体三角测量网格 | `Engine/MeshCorrelator` + `MeshFingerprint`,网格页面(可选开启) | | 09 | BLE Physio(固件取证) | `Physio/`,设备详情页 | | 10 | 中继攻击 / PEPS 审计器 | `Relay/RelayAuditor`,中继/PEPS 页面 | | 11 | 汽车伴侣 | *预留接口(ESP32 / TP-CANBridge)* | 跨模块功能:**关注列表**(星标设备以获得优先级)、**会话报告导出** (`Reporting/SessionReport` → JSON 分享面板)、每个设备上的 **RSSI 历史迷你图**,以及实时的**搜索 + 过滤标签**(追踪器 / 已突变 / 已轮换 / 已关注)。 ## 构建与运行 前置条件:.NET 9 SDK,`maui-android` 工作负载,Android SDK(API 35),JDK 17。 ``` # 运行 engine 测试套件(无需 Android) dotnet test tests/NullScan.Core.Tests # 构建 Android app(如果您的默认 JDK 较新,请指向 JDK 17) export JAVA_HOME="C:\Program Files (x86)\Android\openjdk\jdk-17.0.14" dotnet build src/NullScan.App/NullScan.App.csproj -c Debug # 部署到已连接的设备 / emulator dotnet build src/NullScan.App/NullScan.App.csproj -t:Run -f net9.0-android ``` ### 实时与模拟 该应用内置了**模拟环境**源,因此无需真实的 BLE 流量,即可在任何设备或模拟器上演示完整的数据处理流水线。它预演了核心场景:一个 Find My 级别的追踪器,每约 15 秒轮换一次 MAC 地址,随后将其 OUI 缩减为全零。在真实硬件上切换至 **Live BLE** 即可扫描真实的无线电环境。 *Tester Present — 汽车专业解决方案。*
标签:.NET MAUI, 反监控, 移动开发, 蓝牙, 设备指纹, 防御绕过