Найти в Дзене

YAK Pro - PHP Обфускатор. Используем docker

Настало время обновить заметку по YAK Pro. Понадобился как то YAK Pro, а так как давно не пишу на php, не хотелось устанавливать его в операционную систему. И тут вспоминаем про docker. Изначально попытался сделать свой образ, запаковать в него сам обфускатор, файл который необходимо "закодировать", и конечно же образ php, точнее нам будет достаточно php-cli (Command Line Interface). Но прочтя документацию, нашел способ интересней и более подходящий мне. Приступим. Подразумевается что git и докер у вас уже установлен. 1. Создадим директорию и перейдем в нее:
$ mkdir yakpro
$ cd yakpro 2. Клонируем YAK Pro:
$ clone https://github.com/pk-fr/yakpro-po.git 3. Переходим в директорию yakpro-po:
$ cd yakpro-po 4. Клонируем PHP-Parser который требует YAK Pro:
$ git clone https://github.com/nikic/PHP-Parser.git --branch 4.x 5. Разрешаем выполнить скрипт:
$ chmod a+x yakpro-po.php Далее для проверки выполним следующую команду: $ docker run -it --rm --name my-running-yakpro -v "$PWD":/app -w

Настало время обновить заметку по YAK Pro.

Понадобился как то YAK Pro, а так как давно не пишу на php, не хотелось устанавливать его в операционную систему. И тут вспоминаем про docker.

Изначально попытался сделать свой образ, запаковать в него сам обфускатор, файл который необходимо "закодировать", и конечно же образ php, точнее нам будет достаточно php-cli (Command Line Interface). Но прочтя документацию, нашел способ интересней и более подходящий мне.

Приступим.

Подразумевается что git и докер у вас уже установлен.

1. Создадим директорию и перейдем в нее:
$ mkdir yakpro
$ cd yakpro

2. Клонируем YAK Pro:
$ clone https://github.com/pk-fr/yakpro-po.git

3. Переходим в директорию yakpro-po:
$ cd yakpro-po

4. Клонируем PHP-Parser который требует YAK Pro:
$ git clone https://github.com/nikic/PHP-Parser.git --branch 4.x

5. Разрешаем выполнить скрипт:
$ chmod a+x yakpro-po.php

Далее для проверки выполним следующую команду:

$ docker run -it --rm --name my-running-yakpro -v "$PWD":/app -w /app php:8.1.1-cli php ./yakpro-po/yakpro-po.php --help

На экране должно получиться что-то вроде этого:

docker run в интерактивном режиме
docker run в интерактивном режиме

Давайте разберем что произошло.

Для того что бы выполнить команду в интерактивном режиме используем опции -i и -t. Это значит, что мы сможем выполнять команды bash внутри контейнера.

Опция --rm удалит контейнер после того как отработает bash.

Для идентификации контейнера в Docker используется UUID или название. Если имя не задано явно, то демон Docker генерирует его автоматически. Но легко исправляется с помощью опции --name.

-v флаг монтирования, далее до двоеточия (:) идет путь к директории со скриптом, после путь внутри контейнера.

-w рабочий каталог внутри контейнера с путем.

php:8.1.1-cli образ для монтирования который нам нужен для выполнения скрипта.

php команда для запуска обфускатора и путь к файлу скрипта внутри контейнера.

--help это команда самого Yak Pro выведет справочную информацию.

Продолжим.

Добавим в нашу директорию файл, который нужно будет закодировать:
$ sudo nano test.php

php скрипт
php скрипт

Сохраним и выполним следующую команду:
$ docker run -it --rm --name my-running-yakpro -v "$PWD":/app -w /app php:8.1.1-cli php ./yakpro-po/yakpro-po.php test.php --no-obfuscate-constant-name --no-obfuscate-function-name --no-obfuscate-class-name --no-obfuscate-interface-name --no-obfuscate-trait-name --no-obfuscate-property-name --no-obfuscate-method-name --no-obfuscate-namespace-name --no-obfuscate-variable-name -o test_yakpro.php

docker run -it -rm
docker run -it -rm

По сути мы просто добавили параметры из предыдущего примера. В итоге должен получится файл test_yakpro.php. Давайте проверим результат:
$ nano test_yakpro.php

Результат
Результат

Файл закодирован!

Удобство этого способа заключается в том что после выполнения обфускации не останется контейнера, а если вам не будет больше нужен php-cli просто удалите образ docker rmi IMAGE ID.