Mummy-Dust/simulacra
GitHub: Mummy-Dust/simulacra
基于 ESP32 的模块化多节点反跟踪系统,通过向周围注入不断轮换的伪造 BLE/Wi-Fi 设备群来隐藏真实设备的无线指纹,同时检测并可视化跟踪者。
Stars: 1 | Forks: 0
```
███████╗██╗███╗ ███╗██╗ ██╗██╗ █████╗ ██████╗██████╗ █████╗
██╔════╝██║████╗ ████║██║ ██║██║ ██╔══██╗██╔════╝██╔══██╗██╔══██╗
███████╗██║██╔████╔██║██║ ██║██║ ███████║██║ ██████╔╝███████║
╚════██║██║██║╚██╔╝██║██║ ██║██║ ██╔══██║██║ ██╔══██╗██╔══██║
███████║██║██║ ╚═╝ ██║╚██████╔╝███████╗██║ ██║╚██████╗██║ ██║██║ ██║
╚══════╝╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝
```
*本项目分叉自 0xXyc (Jacob Swiz) 的 [Splinter](https://github.com/0xXyc/splinter),已获授权使用 —— 这是本系统构建的基础。*
**Simulacra 是一个专为 ESP32 设计的模块化、多节点反监视系统。** 在你控制的空间内,一组协同工作的小型节点会向空气中注入大量*合成人群*,它们伪装成看似合理但实为伪造的 BLE 和 Wi-Fi 设备;同时系统会持续监测是否有设备在顽固地跟踪你,并通过一个独立的雷达屏幕将这一切展示出来——节点之间通过加密链路进行通信。无需云端、无需 App、无需账号。只有能令人信服地撒谎的无线电设备。
它不是干扰器,也不是垃圾信息发送器。它构建的是一种*存在感*:一个可信且不断漂移的设备群,追踪器必须穿透这层人群,而你真实的设备则安静地隐匿在噪声中。
## 它所应对的威胁
跟踪早已不再局限于你的车牌。一类较新的监视技术——Leonardo 公司的 [**SignalTrace**](https://insideevs.com/news/799191/alpr-cameras-track-more-devices/) 是目前最清晰的公开案例——被挂载到自动车牌识别摄像头网络上,并*被动地*采集与你同行的一切物品的**无线标识符**:手机、手表、耳机,甚至是汽车的胎压传感器。它不会破坏任何东西,也不读取通信内容——它只是记录**哪些设备始终结伴而行**,并将它们打包成一个与你及你的车辆绑定的*电子指纹*,无论你经过哪个摄像头都会被记录。
Simulacra 从根源上攻击这种关联性。它用一群**同样与你同行的、不断更替的幽灵设备**将你包裹起来,并持续轮换它们,从而使“结伴而行的设备集合”受到污染且永远无法稳定下来——你真实的设备不再是清晰的信号,而是成为了虚假随行人员中一张不确定的面孔。它主要在 ESP32 支持的频段(BLE + Wi-Fi)上工作;至于它无法覆盖到的传感器,已在[诚实的局限性](#roadmap--honest-limits)中注明。
## 系统架构:协同节点
Simulacra 的构建基于**角色划分,而非单体设备**。开发板的功能在构建时即被确定,并且各开发板会*协同*工作——Ward 或 Shade 负责充斥整个房间,Vigil 在你的口袋中进行监视,而嗅探器负责审计通信链路。它们通过 **ESP-NOW** 进行协调,并在共享预共享密钥下使用 **AES-256-GCM** 进行端到端加密。
### 诱饵节点 —— 人群
这是系统的核心。它伪造并维持一个合成的 BLE + Wi-Fi 设备群体(参见[诱饵内部机制](#inside-the-decoy))。它提供两种命名的构建配置,专门针对其运行方式和位置进行了调优:
- **Ward** —— *固定的守护者。*专为房间或车辆设计:由市电供电、固定不动且密度高。运行在 **ESP32-C5** 上,因此它支持**双频段(2.4 GHz 和 5 GHz)**,激进地注入 Wi-Fi 突发数据(约 2 秒的节奏,并周期性地切入 5 GHz),同时承载更庞大的人群(更密集的活动集)。因为它是固定不动的,其防漂移轮换机制被禁用——Ward 会坚守阵地。
- **Shade** —— *与你同行的幽灵。*专为 EDC / 随身携带设计:精简、省电、**仅支持 2.4 GHz**,运行在 **ESP32-C6** 上。Wi-Fi 发送节奏较慢,人群规模较小,并具备**反跟踪轮换机制**:当它检测到 RF 环境发生剧烈变化时(你换了房间,或者有人在尾随你),它会在几分钟内将设备更替速度加快约 3 倍,从而使诱饵人群能像周围真实世界的变化一样快速重新洗牌。
这两种配置都是*相同的固件*;其角色会根据芯片目标自动选择(`#if CONFIG_IDF_TARGET_ESP32C5` → Ward,否则为 Shade)。
### Vigil —— 监视者
**Vigil** 是一个物理上独立的**廉价黄色显示屏 (CYD)**,用于渲染实时的**威胁雷达**——包含圆环、扫描线、按信号强度定位的跟踪者光点,以及诱饵/人群统计数据——可通过触摸在视图间翻页。它是**纯接收设备**,除了共享密钥外不持有任何自身的秘密:它会按需向诱饵*请求*状态快照,而诱饵会通过 ESP-NOW 以短脉冲的形式回复**加密的、仅含哈希值的**遥测数据。诱饵在**被询问前保持静默**,因此该链路不会增加任何环境噪音。你只需瞥一眼屏幕;诱饵则始终隐匿。
Vigil 同时也是整个机群的**图书管理员**。因为它带有 microSD 卡,所以能够持久化保存诱饵们建立的共享库——即**学习到的设备原型**和**已知追踪器特征**(两者见下文)——并对其进行**静态加密**(在由机群密钥派生的密钥下使用 AES-256-GCM),然后重新分发它们,从而使重启或新加入的诱饵能从卡中恢复数据,而不是冷启动。专用的 **Library** 页面可以一目了然地报告 SD 卡状态、库大小以及上次的同步/保存时间。
### 嗅探器节点 —— 审计
一块作为** 1 信道混杂模式嗅探器**刷入备用固件的开发板,它*无需密钥*即可解码链路——用于验证系统自身的安全操作:诱饵在收到请求前保持静默,空中的遥测数据是密文(绝不是明文状态),并且诱饵的源 MAC 是本地管理地址,而非其出厂地址。此外还有一个 Wi-Fi 侧的探测嗅探器,用于对周围的 802.11 环境进行画像分析。
## 诱饵内部机制
诱饵维持着一个**合成群体**,该群体像真实人群一样持续存在并不断更替——而不是每个周期都随机闪烁出现一个全新的设备。
- **持久化名册。**一个稳定身份池 (`main/roster.c`),每个身份都有固定的**随机静态 MAC**——这正是现代手机、手表和耳机已经在使用的隐私地址类型——以及从**原型库** (`main/templates.c`) 中提取的、格式正确且固定的 payload:厂商耳机 / 健身 / 传感器制造商数据、iBeacon、Eddystone-UID/-URL 以及 Tile 风格的服务数据。每个原型都锁定了一个连贯的厂商 + 间隔 + payload 组合,因此诱饵绝不会呈现出不可能的组合。
- **轮换引擎。**大约有 `CHURN_ACTIVE_SET` 个身份同时“出现”。每个身份会**驻留**几分钟,然后退入数十分钟的**冷却期**,之后才可能**以相同的 MAC 再次出现**——这样扫描器就会看到设备到达、停留、离开并返回,与真实的场景完全一致。
- **真正的并发无线电。**在支持 BT-5 的芯片上,活动集通过分时方式分布在最多 **4 个硬件扩展广播实例**上,因此人群规模远大于无线电数量。
- **Wi-Fi 维度。**除了 BLE 之外,诱饵还会从一小部分伪造的“手机”中注入合成的 802.11 **探测请求** (`main/probe.c`),每台手机都使用随时间轮换的随机本地管理 MAC。系统只会发送**广播 / 通配 SSID** 探测请求——绝不会发送定向探测请求,以免泄露伪造的首选网络列表。
- **共存与实时重画像。**BLE 和 Wi-Fi 通过 ESP-IDF 软件共存机制**并发**运行(默认构建版本)。协调器会周期性地扫描周围约 15 秒的 BLE 环境,对其进行建模,并**重塑合成人群**——包括规模、厂商组合、间隔——以匹配其所在的真实房间,且无需重新刷写固件。**多样性下限**机制可防止人群坍缩为单一厂商,并且模型会在滚动窗口上**衰减**,从而追踪房间*当前*的状态,而不是记录它听过的所有历史。
因此,扫描器在几分钟内记录的将是一小批稳定的、带有厂商属性的设备,它们交错到达、逐渐更替,并伴随着匹配的 Wi-Fi 噪声——与普通且繁忙的房间无异。你真实的设备只是这人群中的又一张面孔。
## 会学习的人群
内置的原型库是一个很好的起点,但一个真正令人信服的人群应该类似于*当前*这个房间,而不是某个通用的房间。因此,诱饵会**学习它们周围真实设备的结构**——仅限于广播*结构*(包含哪些字段、什么节奏、什么厂商类别),**绝不包含标识符或内容**——并将这些学习到的原型融合到它们生成的群体中。随着时间的推移,幽灵人群会逐渐趋向真实环境的统计形态。
学习是一项**机群协作任务**。诱饵通过相同的加密 ESP-NOW 链路共享它们学习到的库(`LEARN_OFFER` / `LEARN_SYNC`),通过强化机制进行合并,因此被多个节点看到的结构会具有更高的权重。**Vigil** 作为锚点,将合并后的库持久化到加密的 microSD 中,使得机群积累的关于*这个地方是什么样子*的经验能够在重启后幸存,并为新加入的节点提供基础数据。此外,机群同伴之间会**相互排除**——诱饵绝不会从另一个 Simulacra 节点学习、建模或对其发出警报,因此机群不会污染其对房间的认知画面。
## 威胁雷达
在实施诱骗的同时,Simulacra 还会**监视正在跟踪你的设备**。它利用诱饵已经运行的相同环境扫描,并标记出**在多个截然不同的 RF 环境中与你同时出现的稳定身份设备**——这是一种行为上的“这个东西在跟着我”的信号,而不是指纹。
- **位置周期**会在重画像测量到环境发生实质性变化时推进——这是一种射频邻域的代理指标,而不是 GPS。
- 一个在 **3 个不同的位置周期**中都有显著存在的设备将成为**已确认的跟踪者**。
- 随后,已确认的跟踪者将根据复发频率进行**分级**——随着它在不同的行程和地点不断出现,依次标记为 `NEW`、`RECURRING`,最后是 `PERSISTENT`——这样,一次性的巧合和连续跟踪你一周的设备在系统中的呈现方式就会截然不同。Vigil 会根据该级别为每个光点着色,并在详细视图中进行标记。
- 警报通过三种方式呈现:串口输出(包含实时 MAC 的 `THREAT confirmed …`,方便你定位,以及经过 RSSI 节流的“越来越近”更新)、可选的板载 LED,以及——本系统的核心——上文描述的远程雷达显示屏 **Vigil**。
**双重检测层。**上述的复发检测器是*行为层面*的——它纯粹通过设备随你移动的方式来捕捉**非轮换**的跟踪者(例如被塞进包里的固定 MAC 信标),并且在设计上忽略了它们*是*什么。除此之外,**特征层**会将广播信号与**已知设备**数据库进行匹配——包括轮换 MAC 的商业追踪器(AirTag、SmartTag、Tile)和监视 / 执法硬件(Flock ALPR 摄像头、Axon 执法记录仪)——并为它们命名且附带置信度,精准捕捉行为层无法检测到的轮换 MAC 标签。特征数据库由 Vigil 的 SD 卡托管,并像学习库一样在整个机群中同步 (`SIG_SYNC`)。*(匹配器在出厂时已预置数据并接入了扫描钩子;针对物理 AirTag 的实时确认仍在进行中。)*
**诚实的局限性。**一台你只是经常靠近的设备可能偶尔仍会触发行为层——后续计划引入白名单机制。
## 设计法则
整个项目严格遵守以下三项原则:
1. **保持非侵入性(“法则 3”)。**广播是**不可连接**的,并且 payload *永远*不会携带会导致旁观者手机弹出配对对话框的子类型——Apple Continuity (`0x07`)、Nearby Action (`0x0F`) 或 Find My (`0x12`)、Microsoft Swift Pair (`0x0006`)、Google Fast Pair (`0xFE2C`)。系统会发射普通的 **iBeacon**(这是一种静默的定位信标,不会触发任何反应)。这就是诱饵与“垃圾信息发送器”的本质区别:它提供的是逼真的存在感,绝不是针对附近人群的弹窗骚扰。这一点得到了双重保障——iBeacon 编码器硬编码了安全前缀,且目标设备上的自测程序会扫描名册中的每一个 payload,以检查是否包含被禁止的子类型。
2. **只保留必要的数据。**检测候选对象以带安装盐值的哈希形式存在于 **RAM** 中;只有*已确认*的威胁才会被持久化,并且诱饵**绝不会标记自身**广播的 MAC。节点间的遥测数据是纯哈希且加密的——原始标识符绝不在链路中传输。
3. **仅对你自己的空间。**Simulacra 适用于在你可控的环境中进行隐私保护和反跟踪。请勿将其对准他人的设备。
## 硬件
当前受支持的节点:
| 节点 | 开发板 | 角色 | 备注 |
|------|-------|------|-------|
| **Ward** 诱饵 | **ESP32-C5** | 高密度双频诱饵 | 2.4 + 5 GHz,市电供电,固定式 |
| **Shade** 诱饵 | **ESP32-C6**(例如 SparkFun Thing Plus C6) | 轻量级移动诱饵 | 2.4 GHz,电池供电/EDC |
| **Vigil** 显示屏 | **CYD** — ESP32-2432S028 | 纯接收显示屏 | 经典 ESP32 + ILI9341 + 触摸屏 |
| **嗅探器** | 任意备用的 C5/C6 | 安全操作/探测审计 | 验证角色 |
诱饵需要 **BT-5 扩展广播** (`CONFIG_BT_NIMBLE_EXT_ADV`),C5/C6 具备此功能,而经典款 ESP32 则没有——这正是为什么 CYD 是完美的*显示*节点(纯接收),但绝不能作为诱饵的原因。
## 构建与烧录
本仓库中包含两个 ESP-IDF 项目:
- 仓库根目录 —— **诱饵 / 嗅探器**固件(目标平台为 `esp32c5` 或 `esp32c6`);
- [`cyd/`](cyd/) —— **雷达显示屏**固件(目标平台为 `esp32`)。
两者均使用标准的 ESP-IDF v5.x 工具链进行构建:
```
. ~/esp/esp-idf/export.sh # load ESP-IDF into this shell
idf.py set-target esp32c6 # esp32c5 (Ward) · esp32c6 (Shade) · esp32 (CYD, from cyd/)
idf.py build
idf.py -p flash monitor
```
默认构建版本(所有标志为 `0`)是**组合共存诱饵**——即 BLE + Wi-Fi 同时运行。
在构建时选择不同的角色:
| 标志 | 节点 / 行为 |
|------|------------------|
| *(未设置标志)* | BLE + Wi-Fi 组合诱饵 —— 默认配置 |
| `SIMULACRA_ESPNOW=1` | 可以通过 ESP-NOW 响应雷达显示屏节点的诱饵 |
| `SIMULACRA_ESPNOW_SNIFF=1` | 信道 1 ESP-NOW 安全操作嗅探器 |
| `SIMULACRA_SNIFF=1` | Wi-Fi 探测嗅探器(混杂模式抓包) |
| `SIMULACRA_OBSERVE=1` | 仅 BLE 的环境观察与建模(从不广播) |
| `SIMULACRA_PROBE=1` | 仅 Wi-Fi 的探测请求注入器(测试台用) |
| `CHURN_SELFTEST=1` | 目标设备上的宿主逻辑自测;无线电保持空闲,输出 PASS/FAIL 串口结果 |
由于合并后的二进制文件大小超过了默认的出厂分区限制,因此提供的 `sdkconfig.defaults.esp32c{5,6}` 设置了 `CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE=y`——无需手动更改 Kconfig。
## 配置
人群的形态由以下几个可调参数控制:
| 宏 (文件) | 默认值 | 作用 |
|--------------|---------|--------|
| `CHURN_ACTIVE_SET` (`churn.h`) | 8 | 同时“出现”的身份数量 —— 人群密度 |
| `CHURN_DWELL_MIN/MAX_MS` (`churn.h`) | 3 / 10 分钟 | 一个身份在退出广播前停留的时间 |
| `CHURN_COOLDOWN_MIN/MAX_MS` (`churn.h`) | 30 / 60 分钟 | 一个退出的身份在再次出现前需要等待的时间 |
| `CHURN_ROSTER_SIZE` (`roster.h`) | 256 | 持久化身份池的大小 |
可以通过编辑 `main/templates.c` 中的原型表来调整*组合*——`weight` 列设置了每个原型的比例,而间隔列设置了它的发送节奏(请保持设备名称 ≤ 12 个字符,以适应 31 字节的限制)。总体规模、厂商组合和 5 GHz 行为是**基于角色驱动**的(Ward 还是 Shade),并会根据芯片目标自动选择。
**Web 配置仪表盘。**在启动时,诱饵可以开启一个**按需提供的开放 Wi-Fi AP 及其强制门户仪表盘**约 30 秒(由 `SIMULACRA_WEBUI` 控制,默认开启):通过手机连接即可查看实时状态,切换检测/轮换功能、清除威胁或重启——操作完成后 AP 会自动关闭,Wi-Fi 控制权将交还给诱饵。
## 路线图与诚实的局限性
- **特征检测 —— 实时验证与扩展** —— 已知设备匹配器已内置并接入;下一步是针对实体标签(AirTag/SmartTag/Tile)进行确认验证,并将特征集扩展到预置的追踪器和监视/执法硬件之外。
- **高频同伴白名单** —— 这样一台你确实经常合法靠近的设备就不会再触发行为层的警报。
- **Wi-Fi 观察 → 匹配** —— 分析周围的探测环境并生成与之匹配的合成探测流量,就像 BLE 端目前正在做的那样。
- **OTA 更新** —— 既然现在已经有了可以确认/回滚的屏幕。
- **更多协同角色** —— 模块化节点模型尚处于早期;随着机群的增长,预计将推出更多角色。
## 致谢
本项目基于 **0xXyc (Jacob Swiz)** 的 [Splinter](https://github.com/0xXyc/splinter) 构建,已获授权使用。Simulacra 在此基础上将其扩展为上述的多节点系统。
标签:ESP32, Wi-Fi, 反监视, 客户端加密, 物联网, 网络安全, 蓝牙, 隐私保护