Начинающий
- Статус
- Оффлайн
- Регистрация
- 5 Май 2025
- Сообщения
- 41
- Реакции
- 0
Всем здравствуйте!
Выкладываю v2 своего «мини‑протектора» (C++20 + Java). Теперь с контрол флов обфкой через Obfuscator‑LLVM и полным выключением JFR/JVMTI‑стрима до валидации байт‑кода.
Работает Windows / Linux, TPM‑unwrap (NCrypt / tpm2‑tss), fallback -> Argon2id, anti‑debug watch‑dog, самохэш кода и вообще фарш.
А что же внутри?
Как стартить эту залупень
Технические штрижки
Что нового:
1) OLLVM‑обфускация
cmake/ollvm17.cmake пробрасывает:
2) Анти дамп хуки
Остальное все тоже самое:
Криптa
Не убивайте меня в комментариях.. сяб.

Выкладываю v2 своего «мини‑протектора» (C++20 + Java). Теперь с контрол флов обфкой через Obfuscator‑LLVM и полным выключением JFR/JVMTI‑стрима до валидации байт‑кода.
- encryptor.cpp — бакенд‑утилита; шифрует любой .class → encrypted_*.class (AES‑256‑GCM + сеансовый XChaCha‑ключ, лицензия с Ed25519‑подписью из HSM).
- loader.cpp — у клиента: проверяет HWID, подпись, при желании измеряет бинарь через TPM 2.0, снимает оба класс дамп хука JVM, расшифровывает класс, грузит его через собственный CustomClassLoader и исполняет
Работает Windows / Linux, TPM‑unwrap (NCrypt / tpm2‑tss), fallback -> Argon2id, anti‑debug watch‑dog, самохэш кода и вообще фарш.
А что же внутри?
structure:
/cpp/
├─ encryptor.cpp # шифрует .class → encrypted_*.class
├─ loader.cpp # проверка / расшифровка / запуск
├─ hooks.hpp # <-- new: JFR + JVMTI kill
├─ CMakeLists.txt
└─ cmake/ollvm17.cmake # <-- new: toolchain с Obfuscator‑LLVM
/java/
├─ CustomClassLoader.java
└─ HelloWorld.java # пример ("Maladec!")
/docker/
├─ server.py # лицензии / ключи / remap‑таблица
├─ Dockerfile
└─ docker‑compose.yml
Как стартить эту залупень
Код:
# 0. (один раз!! токо один!) собрать Obfuscator‑LLVM
git clone https://github.com/obfuscator-llvm/obfuscator.git
mkdir obf && cd obf && cmake -DWITH_LLVM=ON .. && make -j
sudo ln -s $PWD/bin/* /opt/ollvm/bin
# 1. Сборка C++‑части с CFG‑обфкой
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=../cmake/ollvm17.cmake \
..
cmake --build . --target encryptor # backend
cmake --build . --target loader # obfuscated loader
# 2. Компилируем тестовый класс
cd ../java && javac HelloWorld.java
# 3. Шифруем класс
cd ../build && ./encryptor # → encrypted_helloworld.class
# 4. Поднимаем REST‑сервер
cd ../docker && docker compose up -d # /register, /session-key и тп тд.
# 5. Запускаем лоудер
cd ../build && ./loader --enable-tpm # выводит "Maladec!"
Технические штрижки
Что нового:
1) OLLVM‑обфускация
cmake/ollvm17.cmake пробрасывает:
Код:
-flto -fvisibility=hidden -mllvm -fla
-bcf -bcf_prob=100
-sub -sub_loop=3
-strcry
2) Анти дамп хуки
hooks.hpp:
kill_jfr_hook(); // патч should_post_class_file_load_hook -> 0
kill_jvmti_hook(); // обнуляем JvmtiExport::ClassFileLoadHook
Остальное все тоже самое:
Криптa
- Файл -> AES‑256‑GCM, уникальные 16 байт соли и 12 байт IV на каждый .class
- Ключ берётся так: Argon2id(hwid || salt, m=128 MiB, t=4, p=4) → затем HMAC‑SHA‑256(fileName) для дедубликации
- Сеансовый AES‑ключ доставляется с сервера в виде XChaCha20‑Poly1305, подпись лицензии Ed25519 (ключ в HSM)
- HWID — SHA‑256 от серийника диска/платы + CPUID. Да, spoof‑умный, поэтому лицензия подписывается сервером, а HWID мешается туда же.
- Анти‑дебаг и интегрити
- Early‑check IsDebuggerPresent / ptrace, плюс watchdog‑поток, который чекает дебаггеры каждые 200 мс + самохэширует критичный код (deriveKey, decryptClassFile, loadClassIntoJVM) и сравнивает с хэшем в лицензии.
- SecureBuffer — две guard‑страницы + mlock/VirtualLock + OPENSSL_cleanse при очистке.
- TPM 2.0
- Windows: NCrypt → Platform Crypto Provider.
- Linux: tpm2‑tss (Esys_PCR_Extend) + опциональное PCR‑измерение самого лоудера.
- Включается ключом --enable-tpm + -DENABLE_TPM=ON при CMake.
- Сервер (FastAPI)
- /register — отдаёт лицензию hwid:timestamp:sha256(loader) + HMAC32, подпись Ed25519.
- /session-key — возвращает зашифрованный XChaCha‑ключ + 16‑байтный HMAC.
- /remap-table — шифрует таблицу переименований тем же XChaCha, ключ выводится через HKDF(SHA‑256).
- /public-key — сырой Ed25519‑pub для верификации на клиенте.
- Сборка — C++20, OpenSSL 3, cURL, cJSON, SQLite3, JDK 11 + JNI. Всё описано в CMakeLists.txt.

Последнее редактирование: