PhpPrustect — это инструмент для шифрования PHP-кода, написанный на Rust. Он позволяет защитить ваш исходный код и распространять его в зашифрованном виде.
Данный проект прдоставляет код для сборки .so
/.dylib
/.dll
расширения для подключения через php.ini
, и скрипт project_obfuscate.php
для обфускации всего PHP проекта.
Проект протестирован и совместим с Laravel.
Возможно шифрование файлов только полностю состоящих из php кода, вставки html или blade шаблоны могут привести к ошибке.
Не поддерживается include
и require
внутри зашифрованного кода, так как код исполняется в памяти через eval
.
Так как при сборке используется php-config
, то собранная библиотека становится совместима только с текущим окружением,
потому для удобства приложен Dockerfile
который позволит собрать расширение для окружения вашего контейнера.
-
Генерация хеша файла:
- От каждого файла по его названию создается хеш с помощью алгоритма
xxh3
.
- От каждого файла по его названию создается хеш с помощью алгоритма
-
Создание "соленого" пароля:
- Пароль XOR-ится с хешем файла, чтобы создать уникальный ключ для шифрования.
-
Шифрование данных:
- Исходный php код XOR-ится с "соленым" паролем.
-
Результат:
- Зашифрованные данные преобразуются в шестнадцатеричную строку с помощью
bin2hex
.
- Зашифрованные данные преобразуются в шестнадцатеричную строку с помощью
xxh3
является быстрым алгоритмом хеширования,
использования hex
для хранения кода позволяет быстрее его преобразовать в бинарные данные,
xor
операции тоже простые, что уменьшает общую нагрузку при расшифровке.
-
Скачайте проект с GitHub:
git clone https://github.com/allespro/PhpPrustect.git cd PhpPrustect
-
Установите свой ключ шифрования в
src/lib.rs
за местоSECRET_PASSWORD
-
Соберите проект с помощью Cargo:
rustup toolchain install nightly
RUSTFLAGS="-Zlocation-detail=none" cargo +nightly build -Z build-std=std,panic_abort -Z build-std-features=panic_immediate_abort --release
-
Уменьшите размер файла если это необходимо:
strip --strip-all target/release/libphp_prustect.so
llvm-objcopy --strip-unneeded target/release/libphp_prustect.so
Для шифрования проекта выполните эти пункты с файлом project_obfuscate.php
:
- задайте свой секретный ключ в
ENC_PASSWD
; - укажите путь до проекта в
MAIN_FOLDER
; - укажите путь где будет создан зашифрованный проект в
OBF_FOLDER
; - внесите в
$FILES_OBF
файлы которые необходимо зашифровать; - внесите в
$DO_NOT_COPY
которые не нужны в зашифрованном проекте и их стоит пропустить при копировании;
После настройки запустите процесс шифрования:
php prustect.php
Зашифрованный проект будет в OBF_FOLDER
Для проверки работы запустите
php -d "extension=target/release/libphp_prustect.so" demo/protected_website/index.php
Подключите собранный модуль в php.ini
файл и вы готовы использовать шифрование!
extension=libphp_prustect.so
Этот проект распространяется под лицензией MIT LICENSE.