C++ [1/2] Mini SecureLoader v2 + Encryptor — комплект для шифрования и загрузки Java‑классов через C++/JNI

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
5 Май 2025
Сообщения
41
Реакции
0
Всем здравствуйте!:roflanBuldiga:

Выкладываю 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:
Expand Collapse Copy
/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


Как стартить эту залупень

Код:
Expand Collapse Copy
# 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 пробрасывает:

Код:
Expand Collapse Copy
-flto -fvisibility=hidden -mllvm -fla       
               -bcf -bcf_prob=100           
               -sub -sub_loop=3             
               -strcry

2) Анти дамп хуки

hooks.hpp:
Expand Collapse Copy
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.
Ну и пока что всё! В одну тему все не вместилось. Основное все в следующей теме..:roflanPominki:Не убивайте меня в комментариях.. сяб.
 
Последнее редактирование:
залить на гитхаб ❌
В одну тему все не вместилось. Основное все в следующей теме.. ✅
 
ну да, просто на юг как то по легче, + еще смайлики с твича + вайб
 
Последнее редактирование:
ну да, просто на юг как то по легче, + еще смайлики с твича + вайб
На гитхабе можно написать очень красивый ридми полноценный и при желании запихнуть смайлики с твича. Тем более ты всего 2 их юзал
 
Если так посмотреть, то ты прав, надо наверное и на гит тоже выложить. Чуть позже сделаю
 
Назад
Сверху Снизу