Workspace of 9 crates (noxis, noxis-core, noxis-classfile, noxis-analysis, noxis-passes, noxis-runtime, noxis-jar, noxis-verify, noxis-structure-check). AGPL-3.0-only license, Rust 2024 edition, unsafe_code denied.
6.4 KiB
noxis
Обфускатор JVM/Java-байткода на Rust.
Читает JAR, переписывает классовые файлы и ресурсы, собирает обратно — детерминированно, с маппингами для stack trace и с проверкой, что выход действительно загружается настоящей JVM.
Статус
В работе. Ядро построено, часть техник реализована, часть — по плану.
| блок | состояние |
|---|---|
| IR классовых файлов, метки вместо смещений | ✅ |
| конфиг, детерминированный PRNG, маппинги, отчёт | ✅ |
| анализ: иерархия, entrypoint'ы, keep-правила | ✅ |
| переименование всех символов | ✅ |
| схемы шифрования строк (salt, nonce, MAC) | ✅ |
| JAR: чтение/запись, ресурсы, срез подписей | ✅ |
| гейт структурных правил при компиляции | ✅ |
| пассы: rename, resources, debug | ✅ |
spike backend'а ristretto_classfile |
✅ |
format::parse/write + кадры StackMapTable |
✅ |
| пассы: strings, constants, noise (+ декодер v49) | ✅ |
| пасс flow | 🚧 |
| верификация и метрики | 🚧 |
| CLI | 🚧 |
Подробности — docs/architecture.md,
план — todo.md.
Структура
noxis/
├── Cargo.toml workspace, lints, release-профиль
├── scripts/check.sh structure → fmt → clippy → test
├── docs/ ← архитектура, техники, стек, уроки
├── info/ исходный материал разбора (вне правил)
└── crates/
├── noxis-classfile/ IR + парсер/запись + StackMapTable
├── noxis-core/ конфиг, seed, маппинги, контракт Pass
├── noxis-analysis/ иерархия, entrypoint'ы, keep
├── noxis-passes/ сами трансформации + конвейер
├── noxis-runtime/ схемы шифрования, ABI декодера
├── noxis-jar/ ZIP, ресурсы, срез подписей
├── noxis-verify/ red-паттерны, java -Xverify (план)
├── noxis/ CLI (план)
└── noxis-structure-check/ автогейт структуры
Быстрый старт
./scripts/check.sh # fmt + clippy -D warnings + тесты
Одно cargo build уже гоняет проверку структуры проекта: если файл
длиннее 250 строк или в директории больше 4 файлов, сборка падает.
Правила — в docs/README.md.
Документация
| документ | что внутри |
|---|---|
docs/README.md |
индекс и структурные правила проекта |
docs/architecture.md |
слои, крейты, IR, конвейер |
docs/techniques.md |
как работает каждая техника: плюсы и минусы |
docs/stack.md |
почему свой IR, backend, StackMapTable, PRNG |
docs/learnings/lessons.md |
уроки разбора: чего делать нельзя |
docs/learnings/reference.md |
разбор референсного обфускатора |
docs/learnings/priorities.md |
что улучшаем и в каком порядке |
Исходный материал разбора — info/README.md.
Принципы
- KISS / DRY / SOLID. Файл — одна ответственность. Не больше 250 строк, не больше 4 файлов в директории.
- Детерминированность. Один seed → байт-в-байт одинаковый артефакт.
- Ничего не ломаем. Техника, которая может дать
VerifyError, включается только после верификатора. - Измеримо. Защита без метрик — это мнение, а не свойство.
Лицензия
AGPL-3.0-only — см. LICENSE.
Проект остаётся полностью открытым: его можно изучать, использовать
(в том числе коммерчески) и изменять. Условие AGPL — любые производные
работы, которые распространяются или доступны пользователям по сети,
обязаны публиковаться под той же лицензией. Это защищает noxis от
закрытых форков, которые перепродают его как готовый продукт.
Сторонние зависимости и их лицензии — в NOTICE.md.
Ответственное использование
noxis — инструмент двойного назначения. Он одинаково полезен для
защиты собственного байткода и способен усложнять анализ вредоносного
ПО. Лицензия это не регламентирует, но это норма сообщества проекта:
- используйте обфускацию, чтобы защищать свой код и код тех, кто вас об этом попросил;
- не применяйте инструмент для упаковки вредоносов, обхода средств защиты и антивирусов или иной деятельности, запрещённой законом.
Нарушение этих норм не влечёт юридических последствий по лицензии, но приведёт к отказу в поддержке и закрытию issue/PR в репозитории.