chetansaini53/acid-zero
GitHub: chetansaini53/acid-zero
在树莓派上构建的自包含无线安全教学手持设备,以纯 Python framebuffer UI 和插件化框架实现 Wi-Fi/BLE 安全实验与攻防教学。
Stars: 2 | Forks: 0
# Acid Zero

**Acid Zero** 是一款自包含的渗透测试手持设备——在 [jayofelony pwnagotchi](https://github.com/jayofelony/pwnagotchi) 基础操作系统之上构建的自定义触摸 UI 和无线工具包。整个界面在单个 ARM 核心上以约 30 fps 的速度直接渲染到 Linux framebuffer:没有显示服务器,没有 GUI 工具包,也没有 web view。五个无线电模块通过 USB VID:PID 确定性地绑定,Bluetooth LE 通过原始 HCI socket 发送,并且设备上的文档工具在不使用任何外部库的情况下生成有效的 PDF,因为目标设备上根本没有任何库可供依赖。仅启动器本身就是一个约 1,050 行的 Python 单文件。
这是一个作品集/概念验证项目:**首要展示嵌入式系统和系统编程,其次是安全研究,最后是产品打磨。**
## 核心亮点
这里的难点——正是这些原因使其值得审阅者花时间。贯穿始终的主题是**在每次启动时都会重新分配设备号(`fb#`、`event#`、`wlanN`)的硬件上实现确定性行为**,以及不假设安装了任何组件的自包含工具。
- **纯 Python GUI,无工具包。** 每一帧都被合成为 Pillow 图像,打包为 16 位 **RGB565**,并作为原始字节写入 `/dev/fb1` (480×320)。没有 Qt,没有 LVGL,没有 SDL,也没有 web 技术栈——渲染路径*就是*面板本身。
- **在单个 ARM 核心上实现约 30 fps。** **脏标记渲染循环**仅在状态更改或刷新间隔到达时才进行重绘;后台守护线程拥有所有 I/O(网络、侦测、实时界面)。侦测运行时 UI 保持响应,而不会对未更改的像素进行无效绘制。
- **带有真实校验数学计算的自定义电阻式触摸栈。** 通过原始 Linux **evdev** 设备读取 ADS7846 面板,并使用**最小二乘法(`numpy.lstsq`)求解 4 点仿射校准**,同时受**残差检查**把关,它会*拒绝*错误的校准结果,而不是默默交付一个错位的屏幕。
- **双层插件 runtime。** 包括进程内 Python 插件(`META` + `draw(d, ctx)`,通过 `importlib` 热发现,并为其传递一个包含辅助函数/颜色/字体的 `Ctx` 外观模式)**以及**原生二进制插件(一个 `app.json` manifest + 一个用*任何*语言——C/C++/Rust/Go——编译的可执行文件,通过拥有 framebuffer 和触摸输入的阻塞式子进程全屏运行,然后干净地交还控制权)。文档化的契约 + 可用的模板([`apps/hello-native/`](apps/hello-native/))已在 repo 中提供。
- **通过 USB VID:PID 绑定的五无线电管理。** 四个 USB Wi-Fi 适配器 + 板载无线电,通过硬件 ID 识别——因为 `wlanN` 名称在每次启动时都会重新分配。启动顺序的竞争问题被确定性地解决了。
- **零依赖 PDF 生成器。** 硬件参考工具**手写了一个有效的 PDF 1.4 文件**——包含对象、xref 表、内容流、base-14 字体——完全不使用任何库,因为 Pi 上没有安装任何库。同时也会生成带样式的 HTML。
- **原始 HCI socket BLE。** Bluetooth LE 广播直接通过 **HCI USER channel** 驱动,而不是通过高级辅助工具。
- **复用无线电现有的所有者。** Wi-Fi 侦测和 deauth 通过 pwnagotchi 现有的 **bettercap REST API** 进行,而不是启动第二个 `airodump-ng` 来争夺 monitor 接口。无线电只有一个所有者,没有竞争;跨频道 deauth 由 bettercap 驱动。
## 架构
一个 Python 进程,多个线程。所有 UI 都在渲染线程上运行;每个 I/O 路径都被卸载到一个守护线程中,该线程仅修改共享状态并引发 `dirty` 标志。
```
Acid Zero launcher (launcher/acidzero.py, ~1050 LOC)
single Python process
┌────────────────────────────────────────────────────────────────────────┐
│ RENDER THREAD (≈30 fps, dirty-flag gated) │
│ Pillow Image (480x320 RGB) ──► RGB565 pack ──► write /dev/fb1 │
│ widgets · paged icon grid · live face · light/dark theme engine │
└───────────────▲──────────────────────────────────────────┬─────────────┘
│ shared state + dirty flag │ owns fb+touch
┌───────────────┴───────────────┐ ┌──────────▼─────────────┐
│ BACKGROUND DAEMON THREADS │ │ NATIVE PLUGIN (blocking)│
│ touch: raw evdev → affine map │ │ app.json + exec │
│ recon: bettercap REST poll │ │ C/C++/Rust/Go, fullscr │
│ face/state, BLE, packet recon │ │ subprocess → resume │
└───────────────┬───────────────┘ └─────────────────────────┘
│
┌───────────────┴──────────────────────────────────────────────────────────┐
│ DEVICE / RADIO BINDING LAYER │
│ display+touch by NAME (fb#/event# reshuffle) │
│ 4x USB Wi-Fi + onboard bound by USB VID:PID (wlanN reshuffles) │
└───────────────┬──────────────────────────────────────────────────────────┘
│
┌───────────────┴──────────────────────────────────────────────────────────┐
│ BASE OS — jayofelony pwnagotchi │
│ bettercap REST API · aircrack-ng · hostapd/dnsmasq · bluez · fbtft │
└───────────────────────────────────────────────────────────────────────────┘
```
**渲染路径:** 守护线程更新共享状态并设置 dirty 标志 → 渲染循环合成 Pillow 帧 → 打包为 RGB565 → 将原始字节写入 `/dev/fb1`。
**输入路径:** evdev 从 ADS7846 设备读取(*通过名称*查找)→ 原始样本经过仿射校准矩阵处理 → UI 点击测试。
**插件发现:** `importlib` 从 apps 目录热加载 Python 应用;原生应用通过其 `app.json` manifest 被发现,并作为接管 framebuffer 和触摸输入的全屏阻塞式子进程启动。当应用数量超过一屏显示的容量时,网格会自动分页。
**重要的设计选择:**
- **一个进程,多个线程** —— UI 在一个线程上,I/O 被卸载;没有什么会因网络调用而阻塞渲染循环。
- **复用无线电所有者** —— 侦测/deauth 搭载 pwnagotchi 现有的 bettercap 会话,而不是争夺 monitor 接口。
- **在任何地方都使用基于名称/ID 的设备解析** —— 不依赖内核可以随意在重启期间更改的枚举顺序。
## 功能 / 应用
每个应用都是 UI 中的一个屏幕。
## 教育设计
Acid Zero 的构建是为了**教学**,而不仅仅是运行攻击。有两项功能将“仅限教育和授权使用”的立场硬编码到了设备本身中——而不仅仅是一个免责声明文件:
- **首次运行授权关卡。** 首次启动时,设备会显示一个同意屏幕;除非操作者确认他们将只测试自己拥有或获得明确授权评估的设备和网络,否则任何功能都不会解锁。
- **应用内学习(攻击 ↔ 防御)。** 每个攻击性界面都有一个 **(i)** 按钮,点击后会打开一个简明的解释说明——*该技术的工作原理***以及** *如何检测和防御它*。Deauth 与 WPA3/PMF 配对,邪恶双频与强制门户防范意识配对,BLE spam 与操作系统加固配对,握手捕获与密码强度配对,依此类推。
每一项功能都附带了其相应的对策。这种配对正是区分脚本工具与安全**教育**工具的界限。
## 硬件
| 组件 | 详情 |
|-----------|--------|
| SBC | Raspberry Pi **3B+** (1 GB) |
| 显示屏 | **ILI9486** 480×320 SPI TFT — `fbtft` `piscreen` overlay, **SPI0 @ 16 MHz** → `/dev/fb1` |
| 触摸 | **ADS7846** SPI 电阻屏,通过原始 `evdev` 读取 |
| 无线电模块 | 板载 Broadcom Wi-Fi + BT,以及通过有源集线器连接的 **4× USB Wi-Fi dongles** |
无线电模块的角色通过 USB **VID:PID** 绑定,因此重启时 `wlanN` 名称的重新分配绝不会破坏它们:
| 角色 | 芯片 |
|------|---------|
| Monitor + 注入 | MediaTek **MT7612U** |
| Rogue AP (Evil Portal) | Realtek **RTL8812AU** |
| Client / SSH 上行链路 | Realtek **RTL8821AU** |
| 辅助 | Realtek **RTL8188EUS** |
SPI0 完全被显示屏和触摸屏占用。repo 中记录了在剩余总线上扩展模块的移植路径——将 **SPI1** 用于未来的 **CC1101** sub-GHz 收发器,并将空闲的 **I2C-1** 总线用于 **PN532** NFC/RFID 附加模块。移植参考:[`docs/hardware-reference.html`](docs/hardware-reference.html) / [`docs/hardware-reference.pdf`](docs/hardware-reference.pdf) ——该 PDF 由零依赖的 PDF 写入器在设备本地生成。
## 研究笔记 / 限制
仪器化测试表明,**iPhone 个人热点(WPA3-SAE + 802.11w PMF)在设计上对 deauth 和 auth-flood 具有免疫力**——Protected Management Frames 在协议层就击败了这类攻击。这被记录为一项真实的发现而不是被掩盖起来,因为了解什么*不起作用*与了解什么起作用同样重要,而且 PMF 恰恰是正确的防御手段。该平台的价值在于对哪些有效、哪些无效进行严格、可重复的测量——而不是一份保证有效的漏洞利用清单。
## 安装
基于 jayofelony pwnagotchi 基础操作系统构建;路径假设 pwnagotchi 默认安装在 `/home/pi`。
- **Runtime:** Python 3.11+, Pillow, numpy
- **Wi-Fi:** bettercap (通过 pwnagotchi), aircrack-ng suite, hcxtools (`hcxpcapngtool`), hostapd, dnsmasq
- **Bluetooth:** bluez (`btmgmt` / `btmon`), 原始 HCI sockets
- **Display:** Linux `fbtft`
完整的设置、刷机、overlay 配置和服务安装说明详见 **[INSTALL.md](INSTALL.md)**。
### 仓库布局
```
launcher/acidzero.py # the ~1,050-line UI launcher
apps/packets.py # in-process plugin example
apps/hello-native/{app.json,hello.py} # native-plugin template + contract
lib/acid-ble/
hci.py # raw HCI socket layer
spam.py # BLE advertising
vendors/{apple,google,samsung,microsoft}.py
scripts/acid-{deauth,evilportal,handshake,packets,hs-clean,flood}.sh
scripts/acid-{ble-scan,portal-server,hwref}.py # hwref = zero-dep PDF/HTML writer
systemd/{acidzero.service,acid-hs-clean.service,acid-hs-clean.timer}
docs/hardware-reference.{html,pdf}
docs/screenshots/*.png
```
## 道德与法律
该项目的存在是为了**构建、理解和检测**无线安全技术——而不是为了攻击陌生人。它**专用于**:
- **你拥有**的设备和网络。
- 你持有**明确的书面授权**(签署的工作说明书/交规则)进行的测试。
- 受控的实验室环境、CTF 比赛靶场和教育。
关键要点:
- Deauth、Rogue access point、强制门户凭证捕获和 BLE 广播垃圾信息在大多数司法管辖区(US CFAA、UK Computer Misuse Act、India IT Act、UAE Cybercrimes Law、EU equivalents),针对你不拥有或未被授权测试的网络或设备使用时是**非法的**。
- Wi-Fi deauth 和 BLE spam 是*发射*行为——在许多地区,即使是看似无害的针对第三方设备的发射行为,也可能独立违反无线电/频谱法。
- 强制门户凭证捕获是用于授权的社会工程学评估和教育的**模拟**行为——严禁部署它来收集真实用户的数据。
- 该 repo 特意不包含**任何破坏性或拒绝服务(DoS)的 payload**。“spam”和“deauth”工具的存在是为了在授权的评估中*测量和演示**已知的无线协议弱点——并且,正如上文的发现所示,为了记录现代保护机制(WPA3-SAE、802.11w PMF)在何处击败了它们。
- 作者对任何滥用行为**不承担任何责任**。
如果你对*“这是我拥有的吗,或者我有测试它的书面许可吗?”*无法回答“是”——请立即停止。完整政策:**[ETHICS.md](./ETHICS.md)**。
## 许可证
在 MIT 许可证下发布——详见 **[LICENSE](LICENSE)**。该宽松的许可证特意保持纯净;授权使用条款位于 [ETHICS.md](./ETHICS.md) 中,而不是附加在许可证上。基于 jayofelony pwnagotchi 基础操作系统构建——请尊重其许可证以及所有内置工具(bettercap、aircrack-ng、hostapd、dnsmasq、bluez)的许可证。
## 作者
**Chetan Saini** —— 高级软件架构师(14 年以上经验)和安全研究员。为 Releasit COD Form Shopify 应用提交了 CVE(**CWE-602 + CWE-798**,MITRE 候选 **#1999827**)。GitHub: [@chetansaini53](https://github.com/chetansaini53)。
旨在展示端到端的深度:一个手工构建的 framebuffer 渲染器,一个 evdev + 最小二乘法触摸栈,一个确定性的多无线电绑定层,一个真正的原生插件 ABI,以及一个从零开始编写的 PDF 写入器——将它们组装成一个在受限硬件上连贯且响应迅速的手持设备。
完整截图库(14 个屏幕)
| | | | |---|---|---| |  |  |  | | 主页 | WiFi Hunter | Evil Portal | |  |  |  | | Handshake Hunter | BLE Scan | BLE Spam | |  |  |  | | Pwnagotchi mirror | Live Packets | System & Power | |  |  |  | | Settings | About | Hardware Info | |  |  | | | 首次运行授权关卡 | 应用内学习(攻击 ↔ 防御) | |标签:Linux帧缓冲, 人机交互, 嵌入式系统, 底层硬件驱动, 无线通信, 逆向工具