#php #obfuscation
#php #запутывание
Вопрос:
Недавно я пытаюсь выбрать обфускатор, я попробовал это, я погуглил:
https://www.gaijin.at/en/tools/php-obfuscator
http://www.pipsomania.com/best_php_obfuscator.do
https://www.tools4nerds.com/online-tools/php-obfuscator
они хорошо работают над запутыванием имен переменных и функций, но ни один из них не может скрыть функцию system
, кто-нибудь может сказать мне, почему это?
Комментарии:
1. Кстати, поскольку это изначально было опубликовано в security. SE: Имейте в виду, что запутывание НЕ обеспечивает безопасность и не делает безопасным хранение секретов в исходном коде. Все, что компьютер может вычислить — то есть любой скрипт или даже двоичный файл, который он может выполнить, — человек тоже может вычислить. Запутывание делает чтение вашего скрипта медленнее и более раздражающим, но это не делает его невозможным или даже достаточно трудным, чтобы отговорить кого-то, кроме самых обычных реверс-инженеров. Он также кричит «Я что-то скрываю!» Любой сохраненный секрет, безусловно, будет найден, и, вероятно, намного быстрее, чем вы ожидаете.
2. О, кроме того, использование
system
— ужасная, ужасная идея с точки зрения безопасности. Он запускает вашу команду в командной строке (/bin/sh
илиcmd.exe
), вместо того, чтобы запускать ее напрямую (что все еще рискованно, но гораздо проще сделать безопасно). Оболочки предлагают множество способов выхода и выполнения произвольного кода. Подавляющее большинство успешных удаленных атак, приводящих к выполнению произвольного кода, вероятно, являются экранированием оболочки.
Ответ №1:
Эти инструменты предназначены для усложнения понимания вашего кода за счет снижения его читаемости: они удаляют отступы и комментарии, заменяют значимые имена ваших переменных и пользовательских функций и даже кодируют ваше строковое содержимое. Цель состоит в том, чтобы усложнить модификацию или повторное использование вашего кода, поскольку PHP является интерпретируемым языком, что делает исходный код видимым для администраторов сайта / приложения. Для этой цели нет смысла запутывать встроенные функции PHP, и вы могли видеть, что то же самое происходит, например, с echo()
:
ORIGINAL: echo "Obfuscated string.n";
Gaijin.at: echo base64_decode('T2JmdXNjYXRlZCBzdHJpbmcuCg==');
Tools4Nerds: echo "Ox62fx75sx63ax74x65x64 x73tx72x69nx67x2en";
Для запутывания даже имен встроенных функций, eval()
широко используется в злых целях. Таким образом, исходный код PHP может быть обработан как строка перед выполнением, что позволяет использовать все методы, используемые для запутывания строк.
ORIGINAL: system('uptime');
OBFUSCATED: eval(base64_decode("c3lzdGVtKCd1cHRpbWUnKTs="));
Даже этот пример показывает, что запутывание невозможно полностью без встроенных функций. Кодирование обычно удлиняет исходный код, и чем больше вам нужно закодировать, тем медленнее выполняется. Администраторы сайта действительно заботятся о производительности сайта и дополнительных потребляемых ресурсах, но это не беспокоит преступников, использующих сервер в своих целях.