obfuskator/README.md
loki5512344 a641e69455 Initial commit: noxis JVM bytecode obfuscator
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.
2026-10-08 22:01:03 +02:00

110 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 в репозитории.