aether
Aether
Анализ бинарных файлов и прошивок, основанный на доказательствах.
Aether опирается на зрелые движки — Ghidra headless, binwalk — и добавляет то, чего им не хватает: модель проекта, в которой каждая находка — это структурированное утверждение, связанное с точными артефактами, которые его подтверждают.
Свободные текстовые утверждения о безопасности здесь не просто не приветствуются. Они непредставимы. Утверждение — это зарегистрированный предикат с типизированными полями, и оно не может быть сохранено без идентификаторов артефактов тех видов, которые требует этот предикат. Агент, пытающийся записать «это выглядит эксплуатируемым», получит ошибку схемы с указанием проблемного поля.
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 предикатов утверждений | работает |
Идентификаторы на основе содержимого с конвергенцией между движками | работает, протестировано |
Реестр происхождения; каждая запись внутри транзакционного запуска | работает |
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 — обратите внимание, что нативный gcc на Linux компилирует пример в ELF, поэтому наличия компилятора недостаточно, и вывод проверяется на наличие заголовка MZ. Установите кросс-компилятор mingw-w64 для покрытия PE на Linux.
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...Каждая находка ведёт к байтам. В этом вся суть.
Модель
Три типа записей несут всё.
Артефакт — конкретное, локализуемое доказательство: файл, функция, строка, перекрёстная ссылка, секция, декомпилированное тело, совпадение сигнатуры. Его идентификатор — это хэш только его полей идентичности, поэтому обогащение артефакта никогда не меняет его идентификатор, и два движка, наблюдающие одно и то же, попадают в одну строку.
Утверждение — структурированное утверждение: зарегистрированный предикат, типизированные поля и артефакты, подтверждающие его в именованных ролях (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также учитываются, иsupport/analyzeHeadlessвPATHтоже работает. Если ничего из этого не подходит, 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 или CPython под PyGhidra) и остаётся в подмножестве, которое принимают оба.
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/— артефакты, утверждения, связи. Адресация по содержимому, сортировка по идентификатору, без временных меток и идентификаторов запусков. Два независимых анализа одних и тех же байтов дают байт-идентичные файлы. Коммитьте это; diff показывает, что было обнаружено.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