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.
110 lines
6.4 KiB
Markdown
110 lines
6.4 KiB
Markdown
# 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 в репозитории.
|