aether
Aether
以证据为先的二进制与固件分析。
Aether 构建在成熟的引擎之上——Ghidra headless、binwalk——并贡献了它们所没有的东西:一个项目模型,其中每一条发现都是一个结构化声明,链接到支持它的确切工件。
自由文本的安全声明在这里不仅不受鼓励,而且是不可表示的。声明是一个已注册的谓词,带有类型化字段,如果没有该谓词所要求的工件 ID,就无法存储。试图写入“这看起来可利用”的代理会得到一个指出违规字段的架构错误。
Aether 不构建反汇编器,也不构建反编译器,而且永远不会。这项工作已经做得很好;缺口在于它周围的一切。
状态:阶段 0 已完成
所有 25 项门禁检查通过,172 项测试通过。
python examples/demo_phase0.py [PASS] ELF identified with architecture and word size
[PASS] functions, xrefs, and decompilation imported
[PASS] Ghidra converged onto existing artifacts instead of duplicating
[PASS] nested container chain unpacked (uImage -> gzip -> cpio)
[PASS] findings attributed to the member file, not the container blob
[PASS] claim resolves to a string artifact at a concrete location
[PASS] free-text claim from an agent is refused
[PASS] two independent analyses produce byte-identical graphs
[PASS] suite 'elf_sample' passes - recall 1.00, 0 false positive(s)
...
25/25 gate checks passed阶段 1–3(自然语言模式、多代理编排、固件制图)刻意尚未开始。证据模型的存在是为了在构建任何东西之前先得到验证。
Related MCP server: pyghidra-mcp
目前可用的功能
能力 | 状态 |
项目模型、SQLite 持久化、迁移 | 可用 |
证据图:11 种工件类型,10 个声明谓词 | 可用 |
内容寻址 ID,跨引擎收敛 | 可用,已测试 |
来源账本;每次写入都在事务性运行内 | 可用 |
ELF/PE 分类:头部、节、符号表、缓解措施 | 可用 |
字符串提取(ASCII + UTF-16LE),带节/地址映射 | 可用 |
基于规则的检测器:秘密、组件、风险 API | 可用 |
固件解包:uImage → gzip → cpio,以及 zip/tar/bzip2/xz | 可用 |
Ghidra 导出导入:函数、交叉引用、反编译、符号 | 可用,已针对记录的导出进行测试 |
Ghidra headless 运行器 | 已编写,尚未针对真实 Ghidra 安装运行 |
binwalk 子进程路径 | 已编写,尚未针对真实 binwalk 安装运行 |
确定性、Git 友好的导出 | 可用,已测试 |
MCP stdio 服务器,15 个工具 | 可用,已测试 |
CLI:init/analyze/query/export/check/doctor/mcp/eval | 可用 |
带真实基准套件的评估框架 | 可用,召回率 1.00 |
两行“尚未运行”被明确说明,因为它们很重要。两端的转换层都已完全测试;尚未执行的是子进程调用,因为阶段 0 构建的机器上未安装这两个引擎。参见启用完整引擎。
快速开始
Python 3.10+ 且无运行时依赖。无需安装任何东西:
git clone https://github.com/n-3-0-l-d-3-v/aether-platform.git
cd aether-platform
python examples/demo_phase0.py直接使用项目:
python cli/aether.py init ./work
python cli/aether.py -P ./work analyze examples/demo_firmware.bin
python cli/aether.py -P ./work query objects
python cli/aether.py -P ./work query claims --predicate contains_hardcoded_secret
python cli/aether.py -P ./work query claim clm_1284ca2d2406
python cli/aether.py -P ./work export ./work/export示例二进制文件是生成的,而非提交的。examples/demo_phase0.py 和测试套件按需构建它们;要手动构建:
python examples/src/build_elf_sample.py examples/firmware_agent.elf
python examples/src/build_firmware_sample.py examples/demo_firmware.bin安装会将 aether 放入 PATH:
pip install -e .
aether doctor运行测试
python -m pytest # 172 tests
python -m pytest -q tests/test_evidence_model.py # the invariants alone套件在首次运行时生成自己的示例二进制文件。PE 特定测试在无法生成 PE 的主机上干净地跳过——请注意,Linux 上的原生 gcc 会将示例编译为 ELF,因此仅存在编译器是不够的,输出会检查 MZ 头。要在 Linux 上获得 PE 覆盖,请安装 mingw-w64 交叉编译器。
CI 在 Linux、Windows 和 macOS 上,针对 Python 3.10 和 3.12 运行套件、门禁演示、导出确定性检查以及评估套件。
它看起来是什么样
$ aether analyze demo_firmware.bin
[binwalk] run run_e65361591a1e...
engine aether-carver extracted 7 file(s)
bin/diagnostics.exe pe 132.4 KiB
bin/firmware_agent elf 1.8 KiB
etc/dropbear/dropbear_rsa_host_key.pem certificate 196 B
etc/telemetry.conf data 219 B
$ aether query claims --predicate contains_hardcoded_secret
id predicate conf prod ev subject statement
---------------- ------------------------- ---- ---- -- ----------------- --------------------
clm_1284ca2d2406 contains_hardcoded_secret 0.95 1 1 etc/telemetry.conf {"detector": "rul...
clm_0217e368bbeb contains_hardcoded_secret 0.98 1 1 etc/dropbear/dro.. {"detector": "rul...
$ aether query claim clm_1284ca2d2406
claim clm_1284ca2d2406f45deb3f680afb7914f5
schema aether.claim.contains_hardcoded_secret/1
stated {"detector": "rule:github-token", "redacted_preview": "ghp_****", "secret_kind": "api_token"}
conf 0.95 (max 0.95 across 1 producer(s))
evidence
role kind addr artifact name
----- ------ ---- ---------------- ----------------------------------------
locus string 0x56 art_6a75100355c5 api_key=ghp_A1b2C3d4E5f6G7h8I9j0K1l2...每一条发现都能追溯到字节。这就是全部要点。
模型
三种记录类型承载一切。
工件 — 一个具体、可定位的证据片段:文件、函数、字符串、交叉引用、节、反编译体、签名命中。其 ID 是仅基于身份字段的哈希,因此丰富工件永远不会改变其 ID,两个引擎观察到同一事物会落在同一行。
声明 — 一个结构化断言:已注册的谓词、类型化字段,以及以命名角色(locus、support、context、counter)支持它的工件。它不携带生产者或时间戳,因此来自两个引擎的相同断言是一个声明。
证明 — 一个生产者在某一时刻支持一个声明,并带有置信度。置信度从来不是声明的属性;它从证明中推导——生产者内部取最大值,独立生产者之间取噪声或。两个引擎以 0.9 达成一致得到 0.99,而不是两个近乎重复的发现。
这种分离是核心设计决策:ADR 0003。
强制执行,而非仅仅鼓励
不变量 | 位置 |
没有证据就没有声明 |
|
没有自由文本发现 | 谓词模式拒绝未声明的字段;一个测试断言没有谓词声明散文字段 |
证据必须是正确的种类 |
|
来源永远不是可选的 | 写入只发生在 |
代理不能自我认证 | MCP 提交的声明以 |
部分分析永远不会落地 | 每次运行是一个事务;崩溃的引擎留下 |
自由文本只有一个归宿:注释,在它们自己的表和自己的导出流中,永远不会被误认为是发现。
启用完整引擎
Aether 在没有 Ghidra 或 binwalk 的情况下以降低的深度运行,并会说明这一点。aether doctor 报告缺少什么以及每个缺口带来的代价:
$ aether doctor
aether 0.1.0 (python 3.12.2)
ok triage 0.1.0 built in; no external engine required
MISSING ghidra unknown analyzeHeadless was not found
MISSING binwalk unknown binwalk was not found on PATHGhidra
提供函数恢复、交叉引用、反编译和精确定位的字符串。没有它,头部级分类仍然运行。
安装 Ghidra(推荐 11.x)。
安装 JDK 21 或更新版本,并确保
java在PATH中,或设置JAVA_HOME。没有它,Ghidra headless 将无法启动。将 Aether 指向安装位置:
export GHIDRA_INSTALL_DIR=/opt/ghidra_11.1.2_PUBLIC # Linux/macOS setx GHIDRA_INSTALL_DIR "C:\ghidra_11.1.2_PUBLIC" # WindowsAETHER_GHIDRA_HOME和GHIDRA_HOME也会被识别,PATH上的support/analyzeHeadless也可以。如果这些都失败,Aether 会检查常规安装目录。验证并运行:
aether doctor aether -P ./work analyze ./target.elf --engine ghidra
你不需要在本地安装 Ghidra 就能使用 Ghidra 的结果。 桥接器将运行与导入分离,因此任何机器上生成的导出都可以在任何地方导入:
# on the machine that has Ghidra
analyzeHeadless /tmp/proj aether -import target.elf \
-scriptPath aether/adapters/ghidra/scripts \
-postScript AetherExport.py /tmp/export 40 "" -deleteProject
# anywhere
aether -P ./work import-ghidra /tmp/export --target ./target.elfAetherExport.py 在 Ghidra 自己的解释器(Jython 2.7,或 PyGhidra 下的 CPython)中运行,并保持在两者都接受的子集内。
binwalk
提供 squashfs、jffs2、ubifs 和供应商格式。没有它,内置的雕刻器处理 gzip、bzip2、xz、zip、tar 和 cpio,并报告它只能定位到的任何内容,而不是静默跳过。
pip install binwalk
# or: https://github.com/ReFirmLabs/binwalk完整提取还需要 sasquatch、jefferson 和 ubi_reader,这些在 Windows 上很麻烦——这就是回退雕刻器存在的原因(ADR 0005)。
MCP
MCP 服务器是未来代理工作的接口,它与 CLI 是同级——两者都是同一个库的薄前端。
aether mcp # stdio JSON-RPC
aether mcp --read-only # hide and refuse every write tool十五个工具:清单、工件和声明查询、字符串搜索、反编译检索、图遍历、模式发现、来源,以及用于写入的 aether_submit_claim 和 aether_annotate。代理提交的声明会经过与适配器完全相同的验证,并以 proposed 状态落地。
Git 友好的导出
aether export 写入两棵树,分离就是重点:
graph/— 工件、声明、链接。内容寻址,按 ID 排序,没有时间戳或运行 ID。对相同字节的两次独立分析产生字节相同的文件。提交这个;差异显示发现了什么。ledger/— 运行、证明、观察。来源是事件的记录,所以它会增长。这是正确的。
评估
真实基准位于 eval/suites/*.json:
$ aether eval
[PASS] elf_sample required 22/22 recall 1.00 false positives 0
[PASS] firmware_image required 12/12 recall 1.00 false positives 0一个期望可以要求置信度下限、独立生产者的最小数量,以及——重要的是——匹配的声明引用了特定种类的证据。指向文件而非字符串的 contains_hardcoded_secret 声明会失败,即使语句读起来相同。
召回率是一个真实的数字,因为套件可以枚举必须找到的内容。精确度仅针对明确禁止的模式进行评分,因为没有套件能枚举关于二进制的所有真实情况;意外的声明被报告为未评分的数量,而不是被纳入一个讨好的数字。测试套件中有阴性对照——一个不能失败的框架证明不了什么。
布局
aether/
canonical.py deterministic serialization, hashing, id minting
evidence/ artifact kinds, claim predicates, and their invariants
project/ SQLite schema, migrations, and the only sanctioned store
adapters/
triage/ ELF/PE headers, strings, rule-based detectors
ghidra/ headless runner, export script, importer
binwalk/ firmware unpacking with a standard-library fallback
export/ deterministic JSONL export
mcp/ stdio MCP server and its tool surface
eval/ evaluation harness
cli/ entry point runnable without installing
docs/ architecture and decision records
eval/suites/ ground truth
examples/ sample generators and the gate demonstration
tests/ 172 tests文档
关于示例数据的说明
examples/src/ 生成包含故意伪造凭据的二进制文件——AWS 自己发布的示例密钥(AKIAIOSFODNN7EXAMPLE)、合成的 ghp_A1b2C3d4... 令牌、没有密钥材料的 PEM 头,以及玩笑密码。这些都不是真实的,也不是活跃的。它的存在是为了让评估套件有一个真实基准完全已知的目标。
许可证
Apache-2.0。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables users to define and run MCP tools using declarative YAML configs with built-in trust enforcement, credential brokering, and tamper-evident audit logging.14MIT
- AlicenseNot gradedqualityBmaintenanceExposes Ghidra reverse engineering capabilities via MCP, enabling LLMs and agents to analyze binaries, decompile, search, and edit programs headlessly or with GUI integration.412Apache 2.0
- AlicenseNot gradedqualityDmaintenanceExposes angr binary-analysis capabilities (symbolic execution, taint analysis, CFG recovery) as MCP tools for vulnerability exploration and exploit development.9MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for reverse engineering Windows executables and related binary formats, offering static analysis, Ghidra-assisted function recovery, plugin-driven tooling, and optional isolated Windows runtime execution.7238MIT
Related MCP Connectors
Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi
Remote MCP for C2PA intake verifier MCP, structured receipts, audit logs, and reviewer-ready evidenc
Production-grade cryptography toolkit with 31 MCP tools for classical, PQC, and KMS workflows.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/n-3-0-l-d-3-v/aether-platform'
If you have feedback or need assistance with the MCP directory API, please join our Discord server