Почему `system` не скрывается этим обфускатором PHP

#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="));
  

Даже этот пример показывает, что запутывание невозможно полностью без встроенных функций. Кодирование обычно удлиняет исходный код, и чем больше вам нужно закодировать, тем медленнее выполняется. Администраторы сайта действительно заботятся о производительности сайта и дополнительных потребляемых ресурсах, но это не беспокоит преступников, использующих сервер в своих целях.