haxorthematrix/semaeopus

GitHub: haxorthematrix/semaeopus

Semaeopus 是一个用于卫星安全教育和攻击演练的 CubeSat 黑客平台。

Stars: 0 | Forks: 0

# on" in English. "Checkout" might be a term from version control, but it's common. Translate to Chinese: "与路径A相同的检出 + Python安装,然后:". [![测试](https://img.shields.io/badge/tests-37%20passing-brightgreen)](#running-the-tests) [![许可证](https://img.shields.io/badge/license-MIT%20%2F%20CC--BY--SA-blue)](LICENSE) [![网站](https://img.shields.io/badge/site-semaeopus.net-3df97f)](https://semaeopus.net) **一个真实的 CubeSat 黑客平台。** 从面包板和 Raspberry Pi Pico 构建一个 FlatSat 卫星 + 两个地面站,*或者*在您的笔记本电脑上运行纯软件模拟器。然后通过一门 13 课的课程来攻击它,该课程反映了真实卫星安全在现实中如何失败。 ## 目录 1. [什么是 Semaeopus](#what-semaeopus-is) 2. [三种使用方式](#three-ways-to-use-it) 3. [快速开始](#quick-start) 4. [架构](#architecture) 5. [物料清单](#bill-of-materials) 6. [接线](#wiring) 7. [软件依赖](#software-dependencies) 8. [安装](#installation) 9. [运行测试](#running-the-tests) 10. [课程](#curriculum) 11. [仓库布局](#repository-layout) 12. [安全、合法性与道德](#safety-legality--ethics) 13. [许可证](#license) ## 什么是 Semaeopus Semaeopus 重现了现代 CubeSat 的 **TT&C 链路**(遥测、跟踪与指挥),其逼真程度足以让课程知识迁移到真实的航天器工作中。空口协议是一个经过刻意简化的 [CCSDS 空间数据包],运行在 **ISM 433.92 MHz(欧盟)** 或 **915 MHz(美国)** 的 2-GFSK CC1101 PHY 之上——这与当今小型卫星运营商使用的协议栈形状相同,只是用面包板上的通孔模块代替了飞行集成。 该平台附带**四个安全等级**,您可以依次进行攻击: | 等级 | 认证 | 机密性 | 重放防御 | 仍然有效的攻击 | |------|--------------------------|--------|------------------------|----------------------------| | L0 | 无(明文) | 无 | 无 | 重放、注入、窃听 | | L1 | 仅对正文进行 HMAC | 无 | 无(HMAC ≠ 新鲜度) | 重放、窃听 | | L2 | 对 `nonce ‖ body` 进行 HMAC | 无 | 严格的单调递增 nonce | 窃听、拒绝服务 | | L3 | + AES-128-CTR | 是 | 严格的单调递增 nonce | DoS、侧信道 | 通过更改 `firmware/satellite/config.py` 中的一个常量(或向模拟器传递 `--security N`)来切换。课程将引导您逐个攻破每个等级。 这是**教育**:目标是让您离开时知道真实的飞行链路如何出错以及如何防御它们,而不是去攻击其他人的航天器。参见[安全、合法性与道德](#safety-legality--ethics)。 ## 三种使用方式 | 路径 | 所需硬件 | 首个数据包时间 | 您可以做什么 | |------|----------|----------------|----------------------------------| | **A. 模拟器** | 无——仅需 Python | ~ 1 分钟 | 课程 L04–L12。重放与注入。端到端协议攻击。 | | **B. 合成射频** | 无(+ 可选 SDR) | ~ 5 分钟 | 通过预渲染的 `.cu8` IQ 文件学习课程 L01–L04。构建 GFSK 解调器。 | | **C. 真实硬件** | ~ 35 美元的零件 | ~ 2 小时 | 全部内容,包括 L09 对真实硅片的计时侧信道攻击和 L10 使用 HackRF 的射频干扰。 | 您**今天**就可以在零硬件的情况下运行路径 A 和 B。路径 C 是使用以下物料清单进行的完整工作台搭建。 ## 快速开始 ``` git clone https://github.com/haxorthematrix/semaeopus cd semaeopus pip install pyserial pytest # 8. "07_radio_loopback.py needs two Picos+CC1101s; runs at the next stage" – Here, "07_radio_loopback.py" is a Python script, so keep it in English. "Picos" might refer to Raspberry Pi Pico, so keep it in English. "CC1101s" is a component, keep in English. Translate the rest: "需要两个Picos+CC1101s;在下一阶段运行". python -m sim.virtual_satellite # 9. "Operator's Pico — uses the GS front-end firmware" – "Operator's Pico" is a specific term, keep "Pico" in English. "GS front-end firmware" – "GS" might be ground station, so keep it in English. Translate: "操作员的Pico — 使用GS前端固件". python -m groundstation.operator.gs --sim op> ping op> req 12 op> safe # 10. "expect: 37 passed, 1 skipped in ~23 s" – This looks like test results. "Passed" and "skipped" are terms, translate appropriately. "s" is for seconds. So, "预期:37通过,1跳过,约23秒". python -m groundstation.attacker.capture --sim --out cap.jsonl # Now, I need to ensure that each translation is on a separate line, and there are exactly 10 lines. Also, only output the translations, no additional text. python -m groundstation.attacker.inject --sim --apid 0xFF ``` 要使用文本 TUI 仪表板而不是普通 CLI: ``` pip install textual rich python -m groundstation.operator.tui --sim ``` 有关 SDR / GNU Radio 路径,请参见 [`lessons/L02_demod_gnuradio.md`](lessons/L02_demod_gnuradio.md)。 要进行完整的硬件构建,请跳转到[安装 §C — 真实硬件](#c-real-hardware)。 ## 架构 ``` ┌───────────────────────────────────────────────────────────────────────┐ │ SEMAEOPUS │ │ │ │ ┌──────────────────┐ ┌─────────────────────┐ │ │ │ "SATELLITE" │ │ OPERATOR GROUND │ │ │ │ (FlatSat) │ │ STATION │ │ │ │ │ <── 433/915 MHz ──> │ │ │ │ │ Pi Pico + CC1101 │ ISM downlink │ Pi Pico + CC1101 │ │ │ │ + housekeeping │ ISM uplink │ ↕ USB-serial │ │ │ │ sensors + OLED │ │ Laptop: gs / TUI │ │ │ └──────────────────┘ └─────────────────────┘ │ │ ▲ │ │ │ ┌─────────────────────┐ │ │ │ │ ATTACKER STATION │ │ │ └──── eavesdrop / inject ─────────►│ │ │ │ │ RTL-SDR v3 (RX) │ │ │ │ + Pi Pico + CC1101 │ │ │ │ or HackRF (TX/RX) │ │ │ │ Laptop: capture / │ │ │ │ replay / inject / │ │ │ │ fuzz / jam / spoof │ │ │ └─────────────────────┘ │ └───────────────────────────────────────────────────────────────────────┘ ``` 在**模拟器**中,将所有三个“Pi Pico + CC1101”框替换为加入 UDP 多播组的 Python 进程。协议层、固件模块和地面站代码在两条路径上是相同的。 | 子系统 | 真实 CubeSat | Semaeopus 类比 | |--------------|-------------------------------|-----------------------------------| | OBC(星载计算机) | STM32, SAMD, MSP430 | Raspberry Pi Pico (RP2040) | | UHF 通信 | NanoCom AX100, EnduroSat UHF | CC1101 @ 433 / 915 MHz | | EPS(电源) | GomSpace NanoPower P31u | INA219 读取"电池"轨道 | | ADCS(姿态控制) | 星敏感器 + IMU + 反作用轮 | MPU6050 IMU | | 热控 HK | 多个 PT1000 / 热敏电阻 | BME280 (T / P / RH) | | RTC / 时间 | 芯片级原子钟 | DS3231 | | 遥测信标 | 周期性 AX.25 / CCSDS 帧 | 每 10 秒一次 CCSDS-lite 信标 | | 载荷 | 相机、科学仪器 | "相机"模拟——返回 JPEG 头 | 完整设计细节在 [`specification.md`](specification.md)。 ## 物料清单 所有零件均为通孔件或已预焊在 0.1″ 分线板上。无需 PCB,无需 SMD 焊接。价格为美元,2025 年末零售价。 ### 卫星(FlatSat)—— ~ 35 美元 | 序号 | 零件 | 作用 | 数量 | 约 $ | |----|--------------------------------------------|-------------------------------------|-----|---------:| | 1 | Raspberry Pi Pico(或 Pico W / 2 / 2 W) | OBC + 无线电控制器 | 1 | 4–6 | | 2 | CC1101 433 MHz 模块 (E07-M1101D 或类似) | UHF 收发器 | 1 | 3–6 | | 3 | SSD1306 0.96″ I²C OLED | 状态显示 | 1 | 3–5 | | 4 | BME280 I²C 分线板 | 环境遥测 (T/P/RH) | 1 | 4–7 | | 5 | MPU6050 I²C 分线板 (GY-521) | IMU / ADCS | 1 | 2–4 | | 6 | INA219 I²C 分线板 | 电源遥测 | 1 | 3–5 | | 7 | DS3231 I²C RTC + CR2032 | OBC 时间 | 1 | 2–4 | | 8 | 5 mm LED ×2(不同颜色) | 收发活动指示 | 2 | <1 | | 9 | 220 Ω ¼ W 电阻 ×2 | LED 限流 | 2 | <1 | | 10 | 半尺寸面包板 (400 孔) | 构建基板 | 1 | 4–6 | | 11 | 杜邦线跳线套件 (M-M, M-F 混合) | 接线 | 40 | 4–6 | | 12 | 22 AWG 实心线,17 cm (433 MHz) | ¼ 波长鞭状天线 | 1 | <1 | | 13 | USB 线缆(匹配 Pico 型号) | 电源 + 串行控制台 | 1 | 2–4 | ### 操作员地面站 —— ~ 20 美元(+ 笔记本电脑) | 序号 | 零件 | 作用 | 数量 | 约 $ | |---|-------------------------------------|-----------------------------------|-----|---------:| | 1 | Raspberry Pi Pico | 射频前端 + USB-串口 | 1 | 4–6 | | 2 | CC1101 433/915 MHz 模块 | UHF 收发器(匹配卫星) | 1 | 3–6 | | 3 | SSD1306 0.96″ I²C OLED | 链路状态一目了然 | 1 | 3–5 | | 4 | 半尺寸面包板 | 构建基板 | 1 | 4–6 | | 5 | 杜邦线 | 接线 | 20 | 2–3 | | 6 | 17 cm / 8.2 cm 导线 | ¼ 波长天线 | 1 | <1 | | 7 | USB 线缆 | Pico → 笔记本电脑 | 1 | 2–4 | ### 攻击者地面站(两个层级) **第一层 —— 最小配置(~ 45 美元)。** 足够用于课程 L00–L09。 | 序号 | 零件 | 作用 | |---|-----------------------------------------|-------------------------------| | 1 | RTL-SDR v3 适配器 + 附带天线 | 宽带接收 24 MHz – 1.7 GHz | | 2 | Raspberry Pi Pico | 主动发射前端 | | 3 | CC1101 433/915 MHz 模块 | 主动发射收发器 | | 4 | 面包板 + 杜邦线 + 导线天线 | (与操作员 GS 相同) | **第二层 —— 推荐配置(总计 ~ 360 美元)。** 解锁 L10(干扰)和 GPS 欺骗扩展。 | 序号 | 零件 | 作用 | 约 $ | |---|--------------|---------------------------------------|---------:| | 1 | HackRF One | 1 MHz – 6 GHz 半双工 SDR | 320–360 | | 2 | ANT500 | 用于 HackRF 的伸缩天线 | 15 | **请勿购买** CC1101 + PA/LNA 组合模块。它们会超出 ISM 功率限制,给您带来麻烦。 详细的替代方案说明在 [`hardware/satellite-bom.md`](hardware/satellite-bom.md) 和 [`hardware/ground-station-bom.md`](hardware/ground-station-bom.md)。 ## 接线 所有**三块**电路板(卫星、操作员、攻击者-TX)使用相同的 Pi Pico ↔ CC1101 SPI 接线。卫星在此基础上增加了运维传感器。 ### Pi Pico 引脚映射(卫星 —— 所有部件) ``` ┌─────── USB ───────┐ GP0 │ 1 40│ VBUS (5 V from USB — unused) GP1 │ 2 39│ VSYS (1.8–5.5 V battery in) GND │ 3 38│ GND GP2 │ 4 37│ 3V3 EN SDA0 ◀── GP4 │ 6 36│ 3V3 OUT ──▶ to all 3V3 rails SCL0 ◀── GP5 │ 7 35│ ADC_VREF GND │ 8 33│ GND MISO ◀── GP12 │16 25│ GP19 ─▶ MOSI (CC1101 SI) CSn ◀── GP13 │17 24│ GP18 ─▶ SCK (CC1101 SCK) GP14│19 22│ GP17 ─▶ TX-LED GP15│20 21│ GP16 ─▶ RX-LED GDO0 ◀── GP10 │14 26│ GP20 ─▶ SDA1 (DS3231 only) 27│ GP21 ─▶ SCL1 (DS3231 only) └───────────────────┘ ``` ### CC1101 ↔ Pi Pico(所有电路板) | CC1101 引脚 | Pi Pico 引脚 | 说明 | |------------|-----------------|------------------------------------------| | VCC | 3V3 OUT (引脚 36)| **仅限 3V3。** 5V 将烧毁芯片。 | | GND | GND | 任何 GND 引脚 | | CSN | GP13 | SPI 片选 | | SCK | GP18 | SPI 时钟 | | MOSI | GP19 | SPI MOSI | | MISO | GP12 | SPI MISO | | GDO0 | GP10 | 数据包结束中断 | | GDO2 | (未使用) | 保持悬空 | ### I²C 总线 0 —— 传感器 + 显示屏(仅限卫星) 所有四个设备共享 `SDA = GP4` / `SCL = GP5`,外加 3V3 / GND。分线板通常自带上拉电阻,因此通常不需要外部电阻。如果读取不稳定,从每条线到 3V3 加一个 4.7 kΩ 电阻。 | 设备 | 默认地址 | 说明 | |---------|-----------------|----------------------------------------| | SSD1306 | 0x3C | 某些板子上是 0x3D —— 检查丝印 | | BME280 | 0x76 | 如果 SDO 悬空则为 0x77 | | MPU6050 | 0x68 | 如果 AD0 接高则为 0x69 | | INA219 | 0x40 | 可通过 A0/A1 焊盘跳线配置 | ### I²C 总线 1 —— RTC(独立总线避免 MPU6050/DS3231 地址 0x68 冲突) | 设备 | 默认地址 | SDA | SCL | |---------|-----------------|------|------| | DS3231 | 0x68 | GP20 | GP21 | ### Let me list the translations line by line: ``` GP16 (RX) ── 220 Ω ──[GRN LED]── GND (active high) GP17 (TX) ── 220 Ω ──[RED LED]── GND (active high) ``` ### 天线 - **433.92 MHz**(欧盟/R1 默认):22 AWG 实心线,**170 mm** 长,焊接或拧接到 CC1101 的 ANT 焊盘。 - **915 MHz**(美国 Part 15.247):相同导线,**82 mm** 长。 保持天线垂直,在工作台上相距 ≥ 30 厘米(太近会使前端饱和接收机)。 ### ASCII 面包板图 完整的 ASCII 面包板视图在 [`hardware/wiring-satellite.md`](hardware/wiring-satellite.md) 中,地面站变体在 [`hardware/wiring-ground-station.md`](hardware/wiring-ground-station.md) 中。 ## 软件依赖 ### 必需(任何路径) | 包 | 原因 | |--------------------|--------------------------------------------------| | Python 3.11+ | 所有主机代码 | | `pyserial` | 通过 USB-串口连接 Pico 前端 | | `pytest` | 测试套件 | ``` pip install pyserial pytest ``` ### 可选 —— TUI 仪表板 | 包 | 原因 | |--------------------|--------------------------------------------------| | `textual` | 用于操作员的交互式终端 UI | | `rich` | TUI 内部的彩色日志/表格渲染 | ``` pip install textual rich ``` ### 可选 —— SDR / GNU Radio 路径(使用真实 RX 的课程 L01–L03) | 包 | 原因 | |--------------------|--------------------------------------------------| | `gnuradio` ≥ 3.10 | 频谱/解调流图 | | `gr-satellites` | 参考 CCSDS / AX.25 解码器 | | `rtl-sdr` | RTL-SDR 适配器驱动程序 | | `hackrf` | HackRF One 驱动程序(可选,用于 L10) | | `gqrx` 或 `SDR++` | 频谱可视化 | | `inspectrum` | 离线 IQ 检查 | Debian/Ubuntu: `sudo apt install gnuradio gr-satellites rtl-sdr hackrf gqrx-sdr inspectrum`。 ### 可选 —— 安全等级 3 (AES-CTR + HMAC) | 包 | 原因 | |--------------------|--------------------------------------------------| | `pycryptodome` | CPython 上的 AES-128-CTR(MicroPython 使用内置 `ucryptolib`) | ``` pip install pycryptodome ``` ### 可选 —— 硬件路径 | 包 | 原因 | |--------------------|--------------------------------------------------| | `mpremote` | 通过 USB 将代码上传到 Pi Pico | ``` pip install mpremote ``` 加上刷入每个 Pico 的 MicroPython UF2 文件——见 [`hardware/install-os.md`](hardware/install-os.md)。 ## 安装 ### A. 模拟器(无硬件) ``` git clone https://github.com/haxorthematrix/semaeopus cd semaeopus pip install pyserial pytest python -m pytest tests/ -q # expect: 37 passed, 1 skipped python -m sim.virtual_satellite # leave running in one terminal ``` 在第二个终端中: ``` python -m groundstation.operator.gs --sim op> ping # should see PONG within ~1 s op> req 10 # housekeeping telemetry on demand op> safe # FORCE_SAFE — satellite reports M1 on next beacon ``` 跳转到 [`lessons/L04_telemetry_decode.md`](lessons/L04_telemetry_decode.md) 或后续任何课程——它们默认都仅在模拟器中运行。 ### B. 合成射频(无 SDR) ``` # 1. Semaeopus – Keep as is: "Semaeopus" python -m tools.generate_iq # writes captures/baseline.iq (5 MB) python -m tools.demod_iq # recovers all 11 frames, prints hex + CRC ``` 在 `gqrx` 中打开 `captures/baseline.iq`(文件 → I/Q 文件,类型 "Raw I/Q",采样率 1 Msps)。课程 L02 将引导您完成 GNU Radio Companion 的构建。 ### C. 真实硬件 #### 1. 为每个 Pico 刷入 MicroPython 在插入 Pico 时按住 **BOOTSEL** 键。它会挂载为 `RPI-RP2`。拖放匹配的 `.uf2` 文件(见 [`hardware/install-os.md`](hardware/install-os.md) 中的表格)。对第二个 Pico 重复此操作。 #### 2. 接线卫星 按照上面的[接线](#wiring)部分进行。分七个阶段启动,每完成一个阶段运行一个启动检查脚本——见 [`hardware/bringup-checks.md`](hardware/bringup-checks.md): ``` mpremote connect /dev/ttyACM0 run bringup/01_blink.py # MicroPython alive mpremote connect /dev/ttyACM0 run bringup/02_i2c_scan.py # I²C devices respond mpremote connect /dev/ttyACM0 run bringup/03_oled_test.py # display works mpremote connect /dev/ttyACM0 cp -r firmware/satellite/lib :/bringup_lib mpremote connect /dev/ttyACM0 run bringup/04_sensor_smoke.py # sensors read OK mpremote connect /dev/ttyACM0 run bringup/05_spi_loopback.py # SPI wiring OK mpremote connect /dev/ttyACM0 run bringup/06_cc1101_id.py # CC1101 fingerprint # 2. Terminal 1 — start the virtual satellite – "Terminal 1 — 启动虚拟卫星" ``` 每个脚本打印 **PASS** 或 **FAIL**,并在失败时给出关于检查什么的提示。 #### 3. 部署完整固件 ``` mpremote connect /dev/ttyACM0 cp -r firmware/satellite/. :/ mpremote connect /dev/ttyACM0 cp -r protocol :/protocol # 3. Terminal 2 — operator ground station, plain CLI – "Terminal 2 — 操作员地面站, 纯CLI" mpremote connect /dev/ttyACM1 cp -r firmware/gs_frontend/. :/ mpremote connect /dev/ttyACM1 cp firmware/satellite/lib/cc1101.py :/lib/cc1101.py ``` 重置两个 Pico。约 10 秒内,卫星发出第一个信标。 #### 4. 运行操作员 GS ``` python -m groundstation.operator.gs --port /dev/ttyACM1 ``` 您应该能看到信标、HK_TLM、ADCS_TLM、EPS_TLM 数据流。现在您与模拟器的功能设置**完全相同**——课程的其余部分工作方式完全一样。 ## 运行测试 ``` python -m pytest tests/ -q # 4. Terminal 3 — attacker passive capture – "Terminal 3 — 攻击者被动捕获" ``` 覆盖率: | 测试文件 | 验证内容 | |--------------------------|-------------------------------------------------------| | `test_space_packet.py` | 编解码往返、CRC 位翻转检测、全部四个安全等级、L1/L2 重放规则、模糊往返 | | `test_handlers.py` | TC 调度器 —— ping、set-mode、arm/fire 顺序、非法状态转换 | | `test_sim_e2e.py` | 将虚拟卫星作为子进程生成,并断言注入的 `FORCE_SAFE` 确实将卫星切换到 SAFE 模式 | | `test_iq.py` | GFSK 调制器自检;如果缺失则重新生成 `captures/baseline.iq` | | `test_tui_smoke.py` | 操作员 TUI 顺利导入,且 `OperatorState` 产生单调递增的 nonce | 一个跳过的测试是 `test_l3_encrypts_and_authenticates` —— 它需要 `pycryptodome`。 ## 课程 所有 13 课(L00–L12)均已编写完成,今天即可运行。 | 编号 | 标题 | 所需硬件 | 仅模拟器? | |-----|-------------------------------------------|--------------------------|-----------| | L00 | 构建与首个信标 | 卫星 + 操作员 | 部分 | | L01 | 频谱勘测 | + RTL-SDR(或使用 IQ) | 使用 IQ | | L02 | 在 GNU Radio 中解调 | + GNU Radio | 使用 IQ | | L03 | 帧同步与 CRC | + Python | 使用 IQ | | L04 | 遥测解码 | (任何) | ✓ | | L05 | 重放攻击 | + 攻击者 Pico | ✓ | | L06 | 命令注入 | + 攻击者 Pico | ✓ | | L07 | 通过重放绕过 HMAC (L1) | (任何) | ✓ | | L08 | 计数器绑定 HMAC (L2) | (任何) | ✓ | | L09 | 计时侧信道 —— 恢复完整标签 | (任何) | ✓ | | L10 | 加密 + 干扰与重放 (L3) | + HackRF 用于完整实验 | 部分 | | L11 | 信标欺骗 | (任何) | ✓ | | L12 | 毕业设计 | 全部 | ✓ | 每门课程都是一个自包含的 Markdown 文件,包含构建步骤、预期捕获、讨论问题和防御性实验。见 [`lessons/`](lessons/)。 ## 仓库布局 ``` specification.md ← full design + threat model + roadmap README.md ← this file LICENSE ← MIT (code) + CC-BY-SA 4.0 (lessons & docs) docs/ ← project website (semaeopus.net) index.html style.css assets/logo.svg CNAME hardware/ ← hardware references satellite-bom.md ground-station-bom.md wiring-satellite.md ← ASCII breadboard diagram wiring-ground-station.md install-os.md ← MicroPython flash, mpremote setup bringup-checks.md ← 7-stage wire-then-test sequence bringup/ ← MicroPython smoke scripts 01_blink.py … 07_radio_loopback.py firmware/ satellite/ ← MicroPython OBC for the FlatSat config.py ← per-build knobs (frequency, security level, keys) main.py ← scheduler + handlers lib/ ← CC1101 + sensor drivers obc/ ← scheduler, modes, housekeeping, ADCS, EPS comms/ ← beacon, handlers, security wrappers gs_frontend/ ← USB-CDC modem for both GS Picos groundstation/ operator/ gs.py ← interactive CLI tui.py ← textual TUI dashboard attacker/ capture.py ← passive logger replay.py ← replay captured frames inject.py ← build & TX an arbitrary TC fuzz.py ← APID/length fuzzer jam.py ← bus-level DoS (noise / flood-TC / replay-spam) spoof_beacon.py ← impersonate the satellite gnuradio/ ← GNU Radio RX + TX recipes shared/ ← link.py, decoder.py — common to operator + attacker sim/ ← software-only simulator virtual_satellite.py ← reuses real OBC modules over UDP "ether" radio_bus.py ← UDP multicast radio with synthesized RSSI sim_link.py ← drop-in Link for the host tools fakes.py ← FakeBME280 / FakeMPU6050 / FakeINA219 / FakeDS3231 protocol/ space_packet.py ← CCSDS-lite codec, shared everywhere tools/ generate_iq.py ← GFSK IQ synthesis (2.7 s @ 1 Msps) demod_iq.py ← pure-Python reference demodulator verify_iq.py ← modulator self-check cu8_to_cfile.py ← .cu8 → GNU Radio .cfile timing_oracle.py ← localhost oracle for L09 timing_attack.py ← byte-by-byte tag recovery captures/ baseline.iq ← 5 MB synthetic capture baseline.jsonl ← oracle (decoded frames) tests/ ← pytest suite lessons/ ← L00 – L12 curriculum ``` ## 安全、合法性与道德 1. **仅限工作台操作。** 默认 433.920 MHz 以 0 dBm 功率配合 17 cm 鞭状天线,完全在欧盟/R1 ISM 限制内,约为美国 Part 15.247 EIRP 的 1/100。它不会到达轨道——但会到达拥有 SDR 的邻居。通过 `firmware/satellite/config.py` 中的 `RF_FREQ_HZ = 915_000_000` 切换到 **915 MHz** 以符合美国法规。 2. **不要使用外部功率放大器。** CC1101 + PA 模块会将 Semaeopus 变成非法的本地干扰器。不要制作。 3. **切勿瞄准业余卫星频率**(435–438 MHz UHF)。CC1101 *可以* 调谐到那里;Semaeopus 默认的 433.920 MHz 刻意设在业余频段之下。 4. **仅在您拥有或拥有明确书面许可测试的系统上练习攻击。** L09 计时预言机、L10 干扰器和 L12 毕业设计是教育工具——应像对待 Metasploit 一样对待它们。 5. **HackRF 干扰与重放实验 (L10)** 可能在大范围内饱和 ISM 频段接收机。在室内实验时,请在 HackRF 输出端接 50 Ω 假负载,或在法拉第笼内工作。 详细的法律/安全讨论在 [`specification.md`](specification.md) §9。 ## 许可证 - **代码** —— MIT(见 [LICENSE](LICENSE)) - **课程、硬件文档、本 README、项目网站** —— 知识共享署名-相同方式共享 4.0 国际许可协议 (CC-BY-SA 4.0) 您可以自由地重复使用、修改、教授和商业化代码。课程和文档可以在相同的共享条款下重复使用——在 CC-BY-SA 下重新发布改进,以便他人受益。 ## 状态与贡献 当前状态:**v0.2 —— 软件完成;硬件待启动。** - 所有 13 课已编写完成并可在模拟器中运行。 - 37 个主机端测试通过。 - 硬件构建已详细记录;尚未在物理部件上端到端验证。 欢迎在 [github.com/haxorthematrix/semaeopus](https://github.com/haxorthematrix/semaeopus) 提交问题、PR 和课程贡献。 如果您构建了硬件,请分享您的启动日志以及您发现的任何 CC1101 寄存器调优说明——这是下一个最大的未解决问题。 项目网站:[semaeopus.net](https://semaeopus.net)。
标签:ISM频段, 卫星安全, 地面站模拟, 安全级别, 安全课程, 攻击演练, 无线电攻击, 无线通信安全, 树莓派Pico, 渗透测试训练, 硬件实验, 空间数据系统, 立方体卫星, 网络安全教学, 航天器黑客, 逆向工具, 遥测跟踪命令协议, 面包板搭建, 频谱分析, 黑客平台