# 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`](docs/architecture.md), план — [`todo.md`](todo.md). ## Структура ```text 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/ автогейт структуры ``` ## Быстрый старт ```sh ./scripts/check.sh # fmt + clippy -D warnings + тесты ``` Одно `cargo build` уже гоняет проверку структуры проекта: если файл длиннее 250 строк или в директории больше 4 файлов, сборка падает. Правила — в [`docs/README.md`](docs/README.md). ## Документация | документ | что внутри | |---|---| | [`docs/README.md`](docs/README.md) | индекс и структурные правила проекта | | [`docs/architecture.md`](docs/architecture.md) | слои, крейты, IR, конвейер | | [`docs/techniques.md`](docs/techniques.md) | как работает каждая техника: плюсы и минусы | | [`docs/stack.md`](docs/stack.md) | почему свой IR, backend, `StackMapTable`, PRNG | | [`docs/learnings/lessons.md`](docs/learnings/lessons.md) | уроки разбора: чего делать нельзя | | [`docs/learnings/reference.md`](docs/learnings/reference.md) | разбор референсного обфускатора | | [`docs/learnings/priorities.md`](docs/learnings/priorities.md) | что улучшаем и в каком порядке | Исходный материал разбора — [`info/README.md`](info/README.md). ## Принципы - **KISS / DRY / SOLID.** Файл — одна ответственность. Не больше 250 строк, не больше 4 файлов в директории. - **Детерминированность.** Один seed → байт-в-байт одинаковый артефакт. - **Ничего не ломаем.** Техника, которая может дать `VerifyError`, включается только после верификатора. - **Измеримо.** Защита без метрик — это мнение, а не свойство. ## Лицензия AGPL-3.0-only — см. [`LICENSE`](LICENSE). Проект остаётся полностью открытым: его можно изучать, использовать (в том числе коммерчески) и изменять. Условие AGPL — любые производные работы, которые распространяются или доступны пользователям по сети, обязаны публиковаться под той же лицензией. Это защищает `noxis` от закрытых форков, которые перепродают его как готовый продукт. Сторонние зависимости и их лицензии — в [`NOTICE.md`](NOTICE.md). ## Ответственное использование `noxis` — инструмент двойного назначения. Он одинаково полезен для защиты собственного байткода и способен усложнять анализ вредоносного ПО. Лицензия это не регламентирует, но это норма сообщества проекта: - используйте обфускацию, чтобы защищать **свой** код и код тех, кто вас об этом попросил; - не применяйте инструмент для упаковки вредоносов, обхода средств защиты и антивирусов или иной деятельности, запрещённой законом. Нарушение этих норм не влечёт юридических последствий по лицензии, но приведёт к отказу в поддержке и закрытию issue/PR в репозитории.