Php расшифровка


Тема декодирования зашифрованных PHP-скриптов уже однажды мной затрагивалась в посте PHP и зашифрованный код. В нем я описал способ получения значений всех инициализированных переменных и списка объявленных функций в скрипте, зашифрованным протектором ionCube. Тогда, в 2009 году, расшифровать скрипт под ionCube было проблематично – на тот момент существовали лишь платные сервисы. Однако с ростом популярности ionCube стало ясно, что рано или поздно его постигнет участь Zend Encoder (сейчас Zend Guard), павшего в 2008 году перед ставшими повсеместно доступными “дезендерами”. Действительно, за последнее время появилось множество декодеров ionCube, можно даже найти бесплатные онлайн-сервисы. Один из них позволяет расшифровать практически любые скрипты. О нем, а также о других способах расшифровки расскажу в данной статье.

Прежде всего необходимо иметь представление о том, какие существуют виды защиты PHP-скриптов. Всего их можно выделить три:

  1. Защита посредством кодирования скриптов в байт-код, требующая дополнительных PHP-расширений для работы с ними. Это самый сложный тип защиты, примеры: Zend Guard, ionCube, Nu-Coder.

  2. Защита, основанная на шифровании непосредственно исходного кода скрипта путем использования особого алгоритма. Примеры: PHP Cipher, Truebug PHP Encoder, SourceCop PHP Protector.
  3. Обфускация – изменение названий переменных и функций, удаление пробелов и символов переноса строки, etc. Относительно самый просто тип, примеры: PHP Defender, Obfusc.

Итак, имея скрипт, зашифрованный неизвестным для вас алгоритмом, прежде всего необходимо определить с помощью чего он зашифрован. В этом может помочь отличный инструмент PCL’s PHPiD. Распознает множество протекторов, например тот же ionCube:

Php расшифровка

Определив протектор, можно поискать существующие решения для расшифровки того или иного энкодера. Но в большинстве случаев поможет сервис dezend.me.

Php расшифровка

Он открылся совсем недавно, но уже сейчас имеет большой функционал: расшифровка серверных средств защиты ionCube 6.5, Zend, Nu-Coder, а также декодирование и деобфускация любых скриптов, зашифрованных без использования дополнительных расширений PHP. К сожалению, результаты расшифровки ionCube оставляют желать лучшего, в некоторых участках кода тестового скрипта пришлось исправлять вручную. А вот универсальный декодер справляется заметно лучше, правда не хватает нормального форматирования кода. В целом, сервис оставил положительные впечатления, надеюсь, не закроется ?


Что делать если сервис не помог (например, скрипт закодирован свежим ionCube)? Можно попробовать воспользоваться инструментами, которые выкладывают на сайте deioncube.in. На местном форуме также можно попросить расшифровать скрипт, в большинстве случаев вам помогут безвозмездно.

Если же вы имеете дело со вторым или третьим типом защиты и вам хочется попробовать расшифровать неизвестный алгоритм самому, воспользуйтесь PHP-расширением evalhook от Стефана Эссера. С его помощью можно удобно просматривать строки, которые зашифрованный PHP-скрипт пытается выполнить, используя eval(), assert() и другие функции выполнения кода. Подробная статья о его использовании доступна на сайте php-security.org.

raz0r.name

Здравствуйте уважаемые будущие программисты. Начинаем знакомство с очередным языком программирования — PHP.

Прежде чем начать произносить умные определения, попробую объяснить Вам , что такое PHP, на примере из жизни.

Представьте что наш сайт — это дом. Красивый дом с бежевыми стенами, зелёной крышей, белыми окнами, шоколадными дверями.


И внутри красота. Прекрасные обои, плитка, сантехника, мебель, и даже посуда.

Так вот, вся эта картинка создаётся на html и css.

А вот чтобы вдохнуть в Ваш дом жизнь, чтоб в нём появились люди, стали общаться и что-то делать, да и чтоб другие люди смогли всё это увидеть нужен php.

У такой компьютерной жизни есть название — интерактивность, и создаётся она языком программирования PHP.

Ну а теперь более научное определение.

PHP — это язык программирования, специально разработанный для написания web-приложений (сценариев) и вот что о нём написано в Википедии:

«PHP (англ. PHP: Hypertext Preprocessor  — «Инструменты для создания персональных веб-страниц»; произносится пи-эйч-пи) — скриптовый язык программирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время  является одним из лидеров среди языков программирования, применяющихся для создания сайтов».

На PHP написаны движки для сайтов, темы, плагины, различные формы связи (комментарии, почтовые программы) и много чего ещё.

Написано-то написано, но есть и некоторые нюансы которые нужно знать, прежде чем приступать к изучению этого языка.

PHP — это серверный язык. Как это понимать?

Существует два вида языков программирования — клиентский и серверный.


Клиентскими называются языки, которые обрабатываются непосредственно в браузере вашего компьютера. Это html, css и javascript.

Если документ, можно сказать даже программа написана с использованием только этих языков, то её можно сразу открыть в браузере. Т.е. написал код в редакторе (Notepad++), и можно сразу посмотреть что из этого получилось, т.е. открыть его в браузере.

С php несколько иначе.

Браузер на вашем компьютере его не читает. PHP отсылается на сервер, обрабатывается на нём и браузеру возвращается готовый результат на одном из клиентских языков.

И увидеть код php на мониторе невозможно. Допустим, если Вы щёлкните правой клавишей мыши и откроете Просмотр кода страницы, то код первых трёх языков Вы увидите, а вот php нет.

Вроде бы получается что для php нужно лишнее звено — лишняя работа. В чём смысл?

А смысл в том, что клиентские языки относительно статичны. HTML так вообще на 100% статичен. и если программа, допустим сайт, имеет множество страниц, то придётся прописывать полностью каждую, хотя на них всё кроме текста одинаковое, или почти одинаковое.

PHP позволяет создавать динамические сайты. Что это значит?

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

Код сайта сокращается в сотни раз. Пропорционально числу страниц.


Доля смысла есть и в конфедециальности и безопасности. Как я уже говорил, PHP невозможно прочитать в браузере кликнув по «Просмотреть код страницы».

А сервер обязан защищать информацию своих клиентов. То есть Ваш сайт, помимо защиты которую Вы сделаете сами, будет оберегать защита сервера.

Из всего вышесказанного следует, что для работы с php необходим сервер и его можно установить на Ваш комп, или использовать сервер хостинга, но об этом в следующей статье.

А пока немного наглядности. Вот так выглядит html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">  <html>  <head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  <title>Документ без названия</title>  </head>  <body>  <h1>Привет мир!</h1>  <hr width="50%" color="#037FFC" >  <p>Здравствуйте уважаемые будущие веб мастера.   После долгих колебаний я всё-таки решил тоже   покопать на ниве обучения сайтостроению, хотя более перекопанной   нивы наверное трудно себе представить, так как о том,   как создать сайт на WordPress, в интернете описано уже несколько миллионов раз.   И всё-ж, и всё-ж.</p>  <hr width="50%" color="#037FFC" >  </body>  </html>

Вот так CSS

#header{  height: 80px;  background-color: #25B33f;  margin-bottom: 10px;  }  #sidebar{  background-color: #2FF553;  margin-bottom: 10px;  width: 180px;  padding: 10px;  float: right;  }

А вот так PHP.


<?php  $limit_login_my_error_shown = false; /* have we shown our stuff? */  $limit_login_just_lockedout = false; /* started this pageload??? */  $limit_login_nonempty_credentials = false; /* user and pwd nonempty */  global $limit_login_my_error_shown;  $limit_login_my_error_shown = true;  if (!empty($_COOKIE[LOGGED_IN_COOKIE])) {  $_COOKIE[LOGGED_IN_COOKIE] = '';  }  ?> 

Все эти три языка прекрасно интегрируются друг в друга и работают совместно, поэтому для веб-программирования желательно знать их все.

Причём изучение php, по моему, невозможно без знания основ html и css, так как он является как бы управляющим тем, что написано на этих двух языках.

То есть, html — основа, css — оформление, а php — управление.

Php расшифровка
Перемена

— Чем ты кормишь свою собачку?
— Помидорами.
— Ух, ты, а у меня не ест.
— У меня тоже.

starper55plys.ru

$ privateKey должен быть в определенном формате. Вы не можете просто бросить в него случайные данные и волшебно ожидать, что он будет знать, что с ним делать.

Кроме того, глядя на js, которые вы используете, это не просто делает RSA. Он имеет функцию base64ToText


. Он расшифровывает зашифрованный текст с этим, беря первый байт как длину «зашифрованного ключа сеанса», получая «зашифрованный ключ сеанса», расшифровывая его с помощью RSA, а затем используя это как ключ к RC4 для его расшифровки. Но есть и ряд проблем с этим. Между прочим, base64ToText — это не то же самое, что PHP base64_encode как это может означать имя.

Во всяком случае, я не смог заставить его работать. Лично я бы рекомендовал нечто подобное (что совместимо с PHP/phpseclib Crypt_RSA):

http://area51.phpbb.com/phpBB/viewtopic.php?p=208860

Тем не менее, мне удалось разобраться в нескольких вещах. Ваш js lib использует base-28. Чтобы преобразовать числа из этого формата в одно использование phpseclib, вам необходимо использовать эту функцию:

Здесь сценарий, который я использовал, чтобы подтвердить правильность этого:

то есть. они совпадают.

Я также портировал ваш js base64ToText на PHP:

Среди других потенциальных проблем, с которыми я, возможно, столкнулся… кто знает, правильна ли их реализация RC4? Их реализация base64 не так, что было бы не прецедентом для реализации RC4.

qaru.site


Я пытаюсь декодировать зашифрованные данные в PHP, однако возвращаемое значение возвращается в нуль.

Данные, подлежащие расшифровке, поступают в файл PHP в качестве аргумента данных.

  • Проблема с RSA-шифрованием строки в PHP и передача ее в .NET-службу
  • Обеспечение совместимости RSA в Python (PyCrypto) и PHP (OpenSSL)

  • Как проверить подпись DKIM в PHP?
  • Расшифровка RSA с использованием закрытого ключа
  • Шифрование RSA от C # до PHP

Вышеприведенная функция проистекает из второго ответа другой публикации здесь на Stack Overflow: как зашифровать данные в javascript и расшифровать в php?

Я предполагаю, что дешифрованное значение находится в переменной PHP, $ sensitiveData.

Когда я повторяю это на экране, я ничего не получаю.

Мысли?

UPDATE: возвращаемое значение из openssl_private_decrypt () равно FALSE, а возвращаемое значение равно NULL.

ОБНОВЛЕНИЕ 2: Я создал открытый / закрытый ключ из следующего URL-адреса. http://shop-js.sourceforge.net/crypto2.htm

Внизу есть строка: И добавьте следующее в свой частный скрипт (возможно, на локальном жестком диске, а не в Интернете, – если ваш секретный ключ найден, все это бесполезно.)

Я скопировал переведенную строку «var key =» в PHP (по моей другой публикации). Перевод с использованием встроенных массивов. Затем я прошёл этот ключ к функции дешифрования.

Я думал, что документация PHP вызывает закрытый ключ «смешанный». Мне интересно, может, мне нужен другой формат для закрытого ключа.

Вот результат:

ruphp.com

Оглавление

  1. Что такое PHP?
  2. Как расшифровывается PHP?
  3. Как взаимодействуют PHP и HTML?
  4. Где взять PHP?
  5. Подскажите где скачать Apache+PHP+MySql for Win?
  6. Для чего нужен файл php.ini?
  7. Подскажите как перехватить средствами PHP переменные JavaScript?
  8. Hаписал класс. Хочу выложить его в общее пользование. Как принято документировать подобные вещи? Где посмотреть?
  9. A отладчик PHP в природе существует? Как они работают?
  10. Можно ли использовать PHP как замену Perl’а и других интерпретируемых языков при создании shell-скриптов?
  11. Пpи pаботе c сессиями, вываливаетcя cообщение в бpаузеp: Warning: open(/tmpsess_???, O_RDWR) failed: m (2) in script.php on line X?
  12. Как сделать, что бы вывод из моего скрипта сразу показывался у пользователя в браузере?
  13. Как измерить время с точностью до микpосекунды?
  14. Как передать параметры из формы с множественным значением (select multiple, значение checkbox’ов и т.д)?
  15. Как бы мне получить вчеpашнюю дату?
  16. Расскажите, чем отличается вызов функции с собакой от вызова без собаки?
  17. Функции strtoupper() strtolower() не работают или работают неправильно.
  18. Какие специфичные функции не работают под IIS?
  19. Имеется форма, где вносится текст с переносом строк, при выводе текста на страницу строки не переносятся, что делать?
  20. Как передать параметры скрипту, если он выполняется из командной строки?
  21. Как выполнять свой скрипт с некоторой периодичностью (скажем каждый час)?
  22. PHP vs. Perl
  23. Как востановить значение поля «<input type=»file»> ?

Что такое PHP?

(перевод документации) «PHP, что означает ‘PHP: Hypertext Preprocessor’ (‘PHP: Предварительный Обработчик Гипертекста’), является внедряемым в HTML языком описания скриптов. Многое из его синтаксиса было позаимствовано из C, Java и Perl с добавлением некоторых уникальных, специфичных для PHP, особенностей. Целью создания языка является предоставление web-разработчикам возможности быстрого создания динамически генерируемых страниц.»


Как расшифровывается PHP?

‘PHP’ — это рекурсивный акроним (аналогия с ‘Linux’ — ‘Linux Is Not UniX’) словосочетания ‘PHP: Hypertext Preprocessor’ (‘PHP: Предварительный Обработчик Гипертекста’), что успешно отражает общую идеологию его функционирования. До версии PHP 3.0 название было несколько иным (‘PHP/FI’) и расшифровывалось как ‘Personal Home Page tools / Forms Interpreter’ (‘Утилиты для Домашней Страницы / Интерпретатор Форм’).


Как взаимодействуют PHP и HTML?

Язык PHP обладает несомненными преимуществами по сравнению с другими языками программирования, применяемыми для работы с HTML, поскольку именно для решения такого рода задач он и разрабатывался. Так что не стоит удивляться тому, что этот язык обеспечивает простое, но при этом весьма мощное взаимодействие с HTML. Когда браузер запрашивает с Web-сервера страницу PHP, модуль PHP, прежде чем отправить эту страницу клиенту, осуществляет ее обработку (интерпретацию). Части данной страницы, являющиеся обычными инструкциями (тэгами) HTML, передаются клиенту точно так же, как это происходит при обработке обычного документа HTML. Части, написанные на языке PHP, обрабатываются PHP-модулем сервера — программой, предназначенной для интерпретации инструкций PHP. Модуль PHP просматривает код PHP и выполняет заданные в нем инструкции. Это могут быть, например, команды отправки электронной почты, доступа к базе данных или преобразования чисел.

Прежде чем приступить к разработке сценариев PHP, необходимо установить соответствующее программное обеспечение: Web-сервер Apache и интерпретатор PHP. Операция обычно проходит быстро и без осложнений. Если же вы столкнетесь с проблемами, обратитесь к документации, прилагаемой к программам Apache и PHP.


Где взять PHP?

Hа сайте разработчиков: http://www.php.net/downloads.php


Подскажите где скачать Apache+PHP+MySql for Win?

Hапример здесь: http://www.dklab.ru/doc/apache/apache_old.html


Для чего нужен файл php.ini?

Файл php.ini (или php3.ini, если вы используете PHP3) определяет некоторые установки, применяемые в PHP по умолчанию. Их можно корректировать в зависимости от конкретных выполняемых задач. Файл содержит директивы PHP с соответствующими значениями, позволяющими разрешить либо запретить определенное средство или установить некоторое свойство (например, цвет ссылки).

Чтобы посмотреть список этих значений, достаточно вызвать небольшой сценарий info.php, созданный для проверки инсталляции PHP.

В оперативном руководстве по PHP, размещенным по адресу http://www.php.net/docs.php, указаны особенности каждой опции конфигурации и перечислены возможные значения установок, которые могут быть изменены.


Подскажите как перехватить средствами PHP переменные JavaScript?

Вопрос абсолютно дурацкий ибо проистекает из полного непонимания Web-технологии. Скрипты JavaScript выполняются (или не выполняются :)) на стороне клиента (браузера). Код же PHP выполняется на серверной стороне и к JavaScript никакого отношения иметь не может.


Hаписал класс. Хочу выложить его в общее пользование. Как принято документировать подобные вещи? Где посмотреть?

Hапример здесь: http://phpdocu.sourceforge.net/howto.php


A отладчик PHP в природе существует? Как они работают?

Ищи здесь: http://dd.cron.ru


Можно ли использовать PHP как замену Perl’а и других интерпретируемых языков при создании shell-скриптов?

Можно. И нужно W;) Сокращенный перевод официальной документации:

Выполнение PHP-скриптов из командной строки обычно применяется в тех случаях, когда вам нужно протестировать настройку PHP или же если вы собираетесь использовать возможности PHP в других целях, нежели создание веб-скриптов. … Обратите внимание, что вы можете перенаправить вывод результатов выполнения скрипта во внешний файл, используя символ ‘больше’ (‘>’), например,

Вы можете выполнять PHP-скрипты в командной строке только в том случае, если ваш PHP собран как самостоятельное приложение (stand-alone executable). …

PHP в качестве самостоятельного приложения может быть использован для запуска PHP-скриптов в абсолютной независимости от web-сервера. Если вы работаете в *nix-системе, вам нужно будет добавить специальную строку в начало каждого скрипта (чтобы система смогла определить, какая программа должна обрабатывать скрипт) и сделать его исполняемым (rwX).

Hа win-платформах вы можете ассоциировать .php-файлы с приложением php.exe с помощью двойного щелчка кнопкой мыши в Проводнике (Explorer) или же создавать пакетные (.bat) файлы для выполнения PHP-скриптов. …

Пример (script.php):

В вышеприведенный скрипт была добавлена специальная первая строка, которая указывает на то, что этот файл должен быть запущен с помощью PHP без вывода HTTP-заголовков. При создании скриптов, предназначаемых для выполнения в командной строке, вы можете использовать две специальных переменных: $argc и $argv. Первая — это количество переданных в командной строке аргументов плюс один (имя выполняемого скрипта). Вторая — массив переданных аргументов, начинающийся с имени скрипта — с нулевым индексом ($argv[0]).

Пример пакетного (.bat) файла для запуска скрипта на win-платформах (script.bat):


Пpи pаботе c сессиями, вываливаетcя cообщение в бpаузеp: Warning: open(/tmpsess_???, O_RDWR) failed: m (2) in script.php on line X?

В php.ini надо прописать путь до места, куда будут сохраняться сессии, по умолчанию /tmp, что годится для юникса:


Как сделать, что бы вывод из моего скрипта сразу показывался у пользователя в браузере?

Использовать функцию flush(). В связи с особенностями вывода некоторых браузеров, в том числе IE и Opera 6 рекомендуется послать 256 байт в начале страницы, вот тестовый скрипт:

Результаты работы: Столбик из значений i, появляющихся через 5 секунд.


Как измерить время с точностью до микpосекунды?

Вот тебе классик для измерения времени…

юзать будешь так:

в нужном месте делаешь

там, где надо закончить отсчет так:

ну и в где надо


Как передать параметры из формы с множественным значением (select multiple, значение checkbox’ов и т.д)?

Для checkbox’a:

для multiple:

данные из формы придут, как массив $id со значениями value.


Как бы мне получить вчеpашнюю дату?


Расскажите, чем отличается вызов функции с собакой от вызова без собаки?

Если функция вызывается с собакой, то сообщение об ошибке подавляется.


Функции strtoupper() strtolower() не работают или работают неправильно.

Попробуйте использовать такую фукцию:


Какие специфичные функции не работают под IIS?

Привожу выбранные из маны, такой какой она была на момент 4.1.0 По смыслу это список функций которыми не смогут пользоваться в связке IIS+PHP.

apache-specific:

  • apache_lookup_uri()
  • apache_note()
  • ascii2ebcdic()
  • ebcdic2ascii()
  • getallheaders()
  • virtual()
  • apache_child_terminate()
  • apache_setenv()

not implemented on Windows platforms:

  • acosh()
  • asinh()
  • atanh()
  • chgrp()
  • chmod()
  • chown()
  • fileinode()
  • fileowner()
  • getmyinode()
  • is_link()
  • link()
  • linkinfo()
  • readlink()
  • sem_get()
  • sem_acquire()
  • sem_release()
  • shm_attach()
  • shm_detach()
  • shm_remove()
  • shm_put_var()
  • shm_get_var()
  • shm_remove_var()
  • symlink()
  • umask()
  • usleep()

Имеется форма, где вносится текст с переносом строк, при выводе текста на страницу строки не переносятся, что делать?

Дело в том, что при выводе страницы в общем случае игнорируются переносы строк, что бы начать с новой строки нужно вставить тег <br> или пару </p><p> по необходимости. Смотри функцию nl2br.


Как передать параметры скрипту, если он выполняется из командной строки?


Как выполнять свой скрипт с некоторой периодичностью (скажем каждый час)?

Выполнять действия с какой-то периодичность может только программа которая работает все время. Обычно это операционка. Твой РHР-скрипт запускается тогда, когда обращаются к web-серверу (Apache) и живет обычно не больше чем time_limit. Как ты себе представляешь, что бы он делал что-то с периодичностью раз в час?

Если уж сильно надо на РHР — запускай php.exe script.php -q >> out.log из at на HТ или из cron’а в юниксах.


PHP vs. Perl

Из мануала: Наиболее значительное преимущество PHP над Perl заключается в том, что PHP разрабатывался, как скриптовый язык для web, тогда как Perl предназначался для более широкого круга задач и из-за этого может быть весьма труден в понимании. Гибкость / сложность Perl позволяют легко написать код, который будет нелегко прочитать другому автору / кодеру. PHP имеет более понятный и строгий синтаксис, сохраняя при этом гибкость. PHP удобнее, чем Perl, интегрировать в уже существующий HTML. PHP включает в себя почти всю «хорошую» функциональность Perl, не становясь таким запутанным. Perl — проверенный и полный язык, не теряющий популярности с конца восьмидесятых, однако PHP очень быстро развивается.


Как востановить значение поля «<input type=»file»> ?

Этого нельзя сделать, так как будет нарушена безопастность. Запрет на подстановку спасает от злонамерянного скачивания информации сервером у пользователя.

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


Главная страница FAQ по PHP | Наверх

www.codenet.ru

Как это работает

Итак, на сервере хранится страничка, написанная на php. Пользователь набирает адрес этой странички в браузере. Что происходит после нажатия клавиши Enter? Сервер пошагово исполняет команды и отправляет пользователю результат в виде html-кода. Этот код отображается в окне браузера в виде текста, картинок, видео и так далее (контент). В процессе формирования внешнего вида странички браузер может посылать дополнительные запросы к серверу. Обратите внимание, команды не выполняются непосредственно на компьютере пользователя браузером.

Простые примеры программ

Код программы заключается в специальные ограничители: <?php … ?> Одна из базовых команд – echo, она выводит текст в окно браузера. Пример:

В языке широко используются переменные, они бывают следующих типов:

Название переменной представляет собой набор латинских букв, цифр (в конце переменной) и символа подчеркивания (не в конце переменной); помечается символом «$». Пример использования переменных разных типов:

Над целыми и десятичными числами можно производить различные математические операции:

Конструкции php очень напоминают аналогичные из языка C, поэтому опытному программисту не составит труда их освоить. Вот как выглядит применение двух разных операторов цикла для вывода последовательности чисел от 0 до 9:

Реализация массивов отличается от аналогичной в языке C, в PHP широко применяются ассоциативные массивы (подробнее о них можно почитать здесь). Но никто не запрещает использовать массивы традиционным способом, например, так:

В интерпретаторе используется множество встроенных функций – математических, строковых, для обработки времени и дат, графических и так далее. Вот неполный список. Пользователь может писать и собственные функции.  Пример функции, которая определяет, может ли быть текстовая строка E-mail адресом:

Познакомиться с основами языка можно здесь.

С чего лучше начать изучение php

Если пользователю Windows необходимо изучить основы php, то с чего лучше начинать?

Вот в принципе и все, что вам для начала нужно знать о языке программирования PHP. Если вы подписаны на мой блог, то вскоре узнаете о нем больше. До встречи!

www.advdk.com

1. Создание функций с переменным числом аргументов

Скорее всего, вы уже знаете, что PHP позволяет нам создавать функции с необязательными аргументами. Сейчас я покажу функцию, в которой число аргументов может меняться от случая к случаю.

Но для начала, вспомним как мы создаём функции обычным образом:

Теперь посмотрим на то, как можно написать функцию с неограниченным количеством аргументов. Для этого будет использовать метод func_get_args():

2. Используем Glob() для поиска файлов

Часто названия функций говорят сами за себя. Такого нельзя сказать о функции glob().

Если не вдаваться в подробности, её функциональность схожа с методом scandir(). Она позволяет найти необходимый файл по шаблону:

Для нахождения файлов нескольких типов надо писать так:

Так же можно в шаблоне указать путь:

Для того чтобы получить полный путь к документу используйте метод realpath():

3. Информация об используемой памяти

Если вы будете отслеживать количество памяти, которое съедается на работу ваших скриптов то, наверное, чаще будете их оптимизировать.

В PHP существует мощный инструмент отслеживания используемой памяти. В разных частях скрипта нагрузки могут быть разные. Для того чтобы получить значение используемой памяти в данный момент, нам следует использовать метод memory_get_usage(). Для фиксации максимального количества используемой памяти используем memory_get_peak_usage()

4. Информация о процессоре

Для этого необходимо использовать метод getrusage(). Но учтите, что на Windows эта функция работать не будет.

Картина, изложенная выше, будет понятно тем, у кого есть опыт в системном администрировании. Для всех остальных предлагаем расшифровку:

  • ru_oublock: количество операций блочной записи
  • ru_inblock: количество операций блочного чтения
  • ru_msgsnd: количество отправленных сообщений
  • ru_msgrcv: количество принятых сообщений
  • ru_maxrss: максимальный размер невыгружаемого набора
  • ru_ixrss: общий объем разделяемой памяти
  • ru_idrss: общий объем неразделяемых данных
  • ru_minflt: количество используемых страниц памяти
  • ru_majflt: количество ошибок отсутствия страниц
  • ru_nsignals: количество принятых сигналов
  • ru_nvcsw: количество переключений контекста процессом
  • ru_nivcsw: количество принудительных переключений контекста
  • ru_nswap: количество обращений к диску при подкачке страниц
  • ru_utime.tv_usec: время работы в пользовательском режиме (микросекунды)
  • ru_utime.tv_sec: время работы в пользовательском режиме (секунды)
  • ru_stime.tv_usec: время работы в привилегированном режиме (микросекунды)
  • ru_stime.tv_sec: время работы в привилегированном режиме (секунды)

Для того чтобы узнать какие ресурсы вашего процессора используются скриптом, вам необходимо значение ‘user time’ (время работы в пользовательском режиме) и ’system time’ (время работы в привилегированном режиме). Вы можете получить результат как в секундах, так и в микросекундах. Для того чтобы превратить общее количество секунд в десятичное число, вам необходимо разделить значение микросекунд на 1 миллион и добавить к значению секунд.

Запутанно как-то. Вот пример:

Хотя выполнение скрипта заняло около 3-х секунд, процессор не был сильно нагружен. Дело в том, что при вызове (sleep) скрипт практически не потребляет ресурсов процессора. Вообще существует множество задач, которые занимают значительное время, но при этом не используют процессор. К примеру, ожидание операций связанных с диском. Так что вы не всегда используете процессорное время в своих скриптах.

Вот ещё пример:

Работа скрипта заняла 1.4 секунды процессорного времени. В данном случае, время системных вызовов вообще низкое.

Время работы в привилегированном режиме (System Time) – это время, которое процессор затрачивает на выполнение системных запросов к ядру от имени программы. Пример:

Теперь системного времени затратилось намного больше, чем в прошлом примере. Всё благодаря методу microtime(), который использует ресурсы системы.

Однако следует отметить, что выведенное время может быть не точным, т.к. в данный момент времени ресурсы процессора используются и другими программами, что в результате может дать небольшую погрешность.

5. Магические константы

В PHP существует множество магических констант, таких как номер текущей строки (__LINE__), путь к файлу (__FILE__), путь к каталогу (__DIR__), имя функции (__FUNCTION__), имя класса (__CLASS__), имя метода (__METHOD__) и пространства имён (__NAMESPACE__).

Все мы их рассматривать не будем. Посмотрим только лишь парочку:

Используйте __LINE__ при отладке скриптов:

6. Генерирование уникальных ID

Бывают такие моменты, когда вам надо сгенерировать уникальную строку. Множество раз я видел, что для решения этой задачи используют функцию md5():

Но на самом деле для этих целей в PHP есть специальная функция uniqid()

Невооружённым взглядом можно заметить, что первые символы мягко говоря схожи… Так происходит из-за того, что данный метод использует время сервера для генерации символов. Это даже полезно, т.к. все сгенерированные значения получаются в алфавитном порядке, что даёт возможность быстро их сортировать.

Для того чтобы уменьшить шансы получения дубликата, мы можем добавить префикс или использовать второй параметр (увеличит количество символов):

Этот метод генерирует строки размером меньше, чем md5, тем самым вы сможете сэкономить место.

7. Сериализация

Вам когда-нибудь приходилось хранить комплексные данные в базе или в файле? Для того чтобы сконвертировать объект в строку в PHP предусмотрена специальная функция.

Вообще говоря, этих методов 2: serialize() и unserialize()

Вот так вот работают эти функции. Однако из-за бурного роста популярности JSON, в PHP 5.2 были добавлены 2 метода json_encode() и json_decode(). Их работа схожа с serialize():

Этот вариант более компактный и совместимый с другими языками, такими как JavaScript. Однако при работе с очень навороченными объектами может возникнуть потеря данных.

8. Сжатие строк

Кода мы говорим о сжатии, то на ум сразу же приходят архивные файлы в формате ZIP. PHP предоставляет возможность сжатия длинных строк без всяких файлов.

В следующем примере продемонстрируем работу функций gzcompress() и gzuncompress():

В наших силах уменьшить объём текста на 50%. В этих же целях можно использовать методы gzencode() и gzdecode(), которые используют другой алгоритм сжатия.

9. Выполнить перед завершением

В PHP существует функция register_shutdown_function(), которая позволит вам выполнить какой-то код перед завершением работы скрипта.

Допустим, вы хотите узнать какую-то информацию… Время работы скрипта:

На первый взгляд это может показаться тривиальной задачей. Для этих целей, вы можете поместить код в конце файла. Однако если перед этим где-то сработает функция exit(), этот код никогда не сработает. Так же, он не сработает если на странице будет ошибка или пользователь прервёт загрузку страницы (нажав на соответствующую кнопку в своём браузере);

При использовании метода register_shutdown_function() код выполнится в любом случае:

Вывод

PHP это целая планета, которая не перестаёт нас удивлять своим содержимым. А что думаете вы о данных функциях?

ruseller.com

Деобфускация PHP
Так уж случилось, что на днях мне попался один нужный PHP скрипт, но обфусцированный.
По какой-то причине он никак не работал. Я пишу на PHP достаточно давно, и мне очень нравится отлавливать нестандартные ситуации в скриптах, особенно когда при выполнении в логах нет ошибок, а скрипт просто не выполняет своих предназначенных обязанностей, руки так и чесались расшифровать. Последней каплей стало то, что автора этого скрипта не было в сети, чтобы помочь решить мою проблему. Скрипт кстати куплен моим товарищем, собственно он и попросил помочь.

Цель данной статьи, показать принцип дешифровки, зашифрованных скриптов, чтобы например расшифровать залитый злоумышленником вирус на PHP.

Анализирование кода

Вот один из этих скриптов, открывая такой скрипт в блокноте, мы увидим:
Php расшифровка

Разобьем для начала его на строки:
Php расшифровка
и сохраним в файл encoded_script.php

Видно что тут код разбит на 4е части. В каждой выполняется eval.
Для удобства дешифровки eval воспользуемся расширением для PHP — Evalhook. Его написал Stefan Esser за что ему большущее спасибо. С помощью него можно расшифровывать в несколько проходов например монстров закодированных через www.php-crypt.com функциями eval, gzuncompress, base64_decode и тд.

Установка evalhook

Требуется:

  1. PHP >= v5.2
  2. php-devel
  3. PHP Zend Optimizer

Скачиваем архив с исходниками

Распаковываем и собираем расширение для PHP

расширение готово, теперь его можно динамически подгружать в консоль и смотреть зашифрованный скрипт.

где encoded_script.php — закодированный файл.
Для получения исходного кода просто жмем «Y» несколько раз в процессе деобфускации. Каждый новый Y будет расшифровывать следующий eval. Ну что ж вооружимся консолью и в бой!

Деобфускация и декодирование

1-й проход

%php -d extension=evalhook.so encoded_script.php Script tries to evaluate the following string. ---- $GLOBALS['_562306928_']=Array(base64_decode('' .'Ym' .'FzZTY' .'0X2RlY2' .'9kZQ=='),base64_decode('Y' .'mFzZTY0X2R' .'lY29' .'kZ' .'Q=='),base64_decode('' .'YmFzZT' .'Y0X2RlY29kZ' .'Q=='),base64_decode('YmF' .'zZTY0X2Rl' .'Y29' .'kZQ=='),base64_decode('YmF' .'zZTY' .'0X2RlY2' .'9kZQ=' .'='),base64_decode('' .'Y' .'m' .'FzZTY0X2RlY29k' .'ZQ=='),base64_decode('YmFzZ' .'TY0X2R' .'l' .'Y' .'29k' .'ZQ' .'=='),base64_decode('Y' .'m' .'FzZTY0X2' .'Rl' .'Y' .'29k' .'ZQ=='),base64_decode('YmFzZT' .'Y0X2RlY2' .'9kZQ' .'=='),base64_decode('YmFzZ' .'T' .'Y0X' .'2' .'RlY29kZ' .'Q=='),base64_decode('' .'Y' .'m' .'FzZT' .'Y0X2RlY2' .'9k' .'ZQ=='),base64_decode('Ym' .'FzZTY0X' .'2Rl' .'Y29' .'kZQ=='),base64_decode('YmF' .'zZT' .'Y0' .'X2RlY29' .'kZ' .'Q=='),base64_decode('YmFzZ' .'TY0X2RlY29kZQ=='),base64_decode('Ym' .'FzZTY0X' .'2RlY29k' .'ZQ=='),base64_decode('YmFzZTY0' .'X2RlY' .'29kZQ=='),base64_decode('Ym' .'FzZTY0X2Rl' .'Y2' .'9kZ' .'Q=='),base64_decode('Ym' .'FzZTY0X2' .'R' .'lY29kZQ=='),base64_decode('Y' .'mFz' .'ZTY' .'0' .'X2R' .'lY29k' .'Z' .'Q=='),base64_decode('Y' .'mFzZT' .'Y0X2R' .'lY2' .'9kZQ=' .'='),base64_decode('' .'YmFzZTY' .'0X' .'2' .'RlY29k' .'ZQ=='),base64_decode('' .'Y' .'mFzZTY0' .'X2R' .'lY' .'29kZQ=='),base64_decode('YmFzZTY0' .'X2Rl' .'Y29k' .'ZQ=='),base64_decode('YmFzZ' .'TY0' .'X2Rl' .'Y' .'29k' .'Z' .'Q=='),base64_decode('YmFzZT' .'Y' .'0X2Rl' .'Y' .'29kZQ=='),base64_decode('YmFzZTY0X2Rl' .'Y29k' .'Z' .'Q=='),base64_decode('' .'Y' .'m' .'FzZ' .'TY0X' .'2RlY29kZQ=' .'='),base64_decode('YmF' .'z' .'ZTY' .'0X2R' .'lY29kZQ' .'=='),base64_decode('YmF' .'zZTY0X2RlY29kZQ=='),base64_decode('YmFz' .'ZTY0X2RlY29kZQ=='),base64_decode('' .'Ym' .'FzZ' .'TY0' .'X2RlY2' .'9' .'kZ' .'Q=='),base64_decode('YmFzZT' .'Y0X2' .'R' .'lY29kZQ=='),base64_decode('YmFzZTY0' .'X2' .'RlY29kZ' .'Q=='),base64_decode('Ym' .'F' .'zZ' .'TY0X2' .'R' .'lY29kZQ=='),base64_decode('Ym' .'FzZTY' .'0X2RlY29kZ' .'Q=='),base64_decode('YmF' .'z' .'ZT' .'Y0X' .'2RlY29kZQ=='),base64_decode('YmFzZ' .'TY0X2RlY29kZQ=' .'='),base64_decode('YmFz' .'ZTY0X2Rl' .'Y29' .'kZQ=='),base64_decode('Y' .'mFzZTY' .'0' .'X2Rl' .'Y2' .'9kZ' .'Q=='),base64_decode('YmFzZ' .'T' .'Y0X2RlY2' .'9kZQ=='),base64_decode('YmFz' .'Z' .'T' .'Y0X2RlY29kZ' .'Q=='),base64_decode('YmFzZT' .'Y0X2RlY29' .'kZQ=' .'='),base64_decode('' .'YmFzZTY0X2RlY29kZ' .'Q=='),base64_decode('YmFz' .'ZTY0X2' .'RlY29kZQ=='),base64_decode('Ym' .'FzZ' .'TY0X' .'2R' .'l' .'Y2' .'9' .'kZQ=='),base64_decode('Ym' .'FzZT' .'Y0X2Rl' .'Y29kZQ=='),base64_decode('YmFzZTY0X' .'2RlY29' .'kZQ=='),base64_decode('YmFzZTY0X2' .'RlY29kZQ' .'=='),base64_decode('' .'Ym' .'F' .'zZT' .'Y0X2RlY29k' .'Z' .'Q' .'=='),base64_decode('YmFzZTY0' .'X' .'2R' .'lY2' .'9kZ' .'Q=='),base64_decode('' .'YmF' .'zZTY0X' .'2RlY29' .'kZQ=='),base64_decode('Y' .'m' .'Fz' .'ZTY0X2R' .'l' .'Y29kZQ=' .'='),base64_decode('Y' .'m' .'FzZ' .'TY0X2R' .'lY' .'2' .'9' .'kZQ=='),base64_decode('YmFz' .'ZTY0' .'X' .'2RlY29kZ' .'Q=='),base64_decode('YmFzZTY0X2' .'RlY' .'29kZQ=='),base64_decode('' .'YmFzZ' .'TY0X2RlY29' .'kZ' .'Q=='),base64_decode('Y' .'mFzZTY0X2R' .'l' .'Y29' .'kZQ=='),base64_decode('Y' .'mFzZ' .'T' .'Y0X2RlY29k' .'ZQ=' .'='),base64_decode('Y' .'mFzZTY0X2' .'RlY2' .'9k' .'ZQ=' .'='),base64_decode('Ym' .'FzZTY0X2RlY' .'29' .'kZQ=' .'='),base64_decode('YmFzZTY0X2R' .'lY29kZQ' .'=='),base64_decode('YmF' .'zZTY0X2RlY29k' .'ZQ=='),base64_decode('' .'YmFzZ' .'T' .'Y0X2' .'R' .'lY29kZQ' .'=='),base64_decode('YmFzZTY0' .'X2R' .'lY29kZQ=='),base64_decode('YmFz' .'ZTY' .'0X2' .'RlY29kZQ' .'=='),base64_decode('' .'YmF' .'zZTY0X2RlY29kZQ=='),base64_decode('Y' .'mF' .'zZTY0X2Rl' .'Y29kZQ' .'=='),base64_decode('Y' .'mF' .'z' .'ZTY0X2' .'RlY29kZQ=' .'='),base64_decode('Y' .'m' .'FzZTY0' .'X2RlY29kZQ=='),base64_decode('Y' .'mFzZTY' .'0X' .'2R' .'lY' .'29kZQ=='),base64_decode('Y' .'mFzZ' .'TY0X' .'2Rl' .'Y' .'29kZ' .'Q=='),base64_decode('YmF' .'zZTY0X2' .'RlY' .'29' .'kZQ' .'=='),base64_decode('' .'YmFzZTY0X2' .'RlY29kZQ=='),base64_decode('YmFzZTY0X2RlY29kZQ=='),base64_decode('YmFzZTY0' .'X2RlY' .'29k' .'Z' .'Q=='),base64_decode('Ym' .'FzZ' .'TY0X2RlY' .'29' .'kZ' .'Q=='),base64_decode('Y' .'mFzZTY0X2RlY29kZQ=='),base64_decode('YmF' .'z' .'ZTY0' .'X2RlY29' .'kZQ=='),base64_decode('YmF' .'zZTY0X' .'2R' .'lY29kZ' .'Q=='),base64_decode('YmFz' .'ZT' .'Y0X2' .'RlY29kZQ=' .'='),base64_decode('Y' .'mF' .'zZ' .'TY' .'0' .'X2R' .'lY' .'29kZQ=='),base64_decode('' .'YmFzZ' .'TY0X2' .'RlY' .'29' .'kZQ=='),base64_decode('Ym' .'F' .'zZTY' .'0X' .'2' .'RlY' .'29' .'kZQ=='),base64_decode('' .'Ym' .'F' .'zZ' .'TY0X' .'2RlY29' .'kZQ=='),base64_decode('' .'Y' .'mFzZTY' .'0' .'X' .'2' .'R' .'lY29kZ' .'Q=='),base64_decode('' .'YmFz' .'Z' .'TY0X2' .'RlY29kZQ' .'==')); ---- Do you want to allow execution? [y/N]  

1-й eval расшифровали, нужный нам код находится между символами"—-". Впоследствии после всех шагов нужно будет его скопировать в файл. Нажимаем Y и продолжаем расшифровывать.
2-й проход:

Script tries to evaluate the following string. ---- $GLOBALS['_223713416_']=Array($GLOBALS['_562306928_'][0]('YmFzZTY0' .'X2RlY29kZQ=' .'='),$GLOBALS['_562306928_'][1]('' .'YmFz' .'ZTY' .'0X2' .'RlY29' .'kZQ=='),$GLOBALS['_562306928_'][2]('Ym' .'F' .'zZTY0X2RlY29kZQ=='),$GLOBALS['_562306928_'][3]('YmFz' .'ZTY0X2' .'RlY2' .'9kZQ' .'=='),$GLOBALS['_562306928_'][4]('Ym' .'F' .'zZTY0' .'X2R' .'lY' .'29kZQ' .'=' .'='),$GLOBALS['_562306928_'][5]('YmFz' .'ZT' .'Y' .'0X2' .'RlY29k' .'ZQ=' .'='),$GLOBALS['_562306928_'][6]('YmFzZTY0X2RlY29kZQ=='),$GLOBALS['_562306928_'][7]('' .'YmFz' .'ZTY0X2RlY29kZQ=' .'='),$GLOBALS['_562306928_'][8]('' .'Y' .'mFzZT' .'Y' .'0X2RlY2' .'9kZQ=='),$GLOBALS['_562306928_'][9]('' .'Ym' .'FzZTY0' .'X2R' .'lY2' .'9kZQ=='),$GLOBALS['_562306928_'][10]('Y' .'m' .'Fz' .'ZTY0X2RlY29k' .'ZQ=' .'='),$GLOBALS['_562306928_'][11]('Ym' .'FzZTY0X2Rl' .'Y29k' .'ZQ=='),$GLOBALS['_562306928_'][12]('Y' .'m' .'Fz' .'ZT' .'Y' .'0' .'X2' .'R' .'lY2' .'9kZQ=='),$GLOBALS['_562306928_'][13]('YmF' .'zZTY0X2' .'RlY29kZQ=='),$GLOBALS['_562306928_'][14]('YmFzZTY0X' .'2' .'RlY29kZ' .'Q=='),$GLOBALS['_562306928_'][15]('' .'YmFz' .'ZTY0' .'X2RlY29kZQ=='),$GLOBALS['_562306928_'][16]('Ym' .'FzZT' .'Y0' .'X2R' .'lY' .'29' .'k' .'Z' .'Q=='),$GLOBALS['_562306928_'][17]('YmF' .'z' .'ZTY0X2RlY2' .'9kZQ=='),$GLOBALS['_562306928_'][18]('Y' .'mFzZ' .'TY0X2RlY29kZ' .'Q=='),$GLOBALS['_562306928_'][19]('' .'Ym' .'FzZTY0X2RlY' .'2' .'9k' .'ZQ=' .'='),$GLOBALS['_562306928_'][20]('YmFzZTY0X' .'2RlY29kZQ=='),$GLOBALS['_562306928_'][21]('' .'YmFz' .'ZTY0X2RlY29kZQ' .'=='),$GLOBALS['_562306928_'][22]('YmFzZTY0X2R' .'l' .'Y29k' .'Z' .'Q=='),$GLOBALS['_562306928_'][23]('Y' .'mFz' .'Z' .'TY0X2RlY' .'2' .'9kZQ=' .'='),$GLOBALS['_562306928_'][24]('' .'YmFzZTY0X2RlY29k' .'ZQ=' .'='),$GLOBALS['_562306928_'][25]('' .'Y' .'mFzZTY0' .'X2' .'R' .'lY29kZQ=' .'='),$GLOBALS['_562306928_'][26]('YmF' .'zZTY0X2RlY29kZQ=' .'='),$GLOBALS['_562306928_'][27]('Ym' .'F' .'zZTY0X2' .'R' .'lY29kZQ=='),$GLOBALS['_562306928_'][28]('YmF' .'zZTY' .'0X2' .'RlY2' .'9kZQ=='),$GLOBALS['_562306928_'][29]('YmFzZTY' .'0X2' .'RlY' .'29kZQ' .'=='),$GLOBALS['_562306928_'][30]('Y' .'mFzZTY0X2R' .'l' .'Y29kZ' .'Q=='),$GLOBALS['_562306928_'][31]('Y' .'mFzZTY0X2R' .'l' .'Y29kZQ=='),$GLOBALS['_562306928_'][32]('YmFz' .'ZTY0X' .'2RlY29kZQ=='),$GLOBALS['_562306928_'][33]('Y' .'mFzZTY0X2RlY29kZQ=='),$GLOBALS['_562306928_'][34]('YmFzZ' .'TY' .'0X2RlY29' .'kZ' .'Q=' .'='),$GLOBALS['_562306928_'][35]('YmFzZTY' .'0X2R' .'lY' .'29kZQ=='),$GLOBALS['_562306928_'][36]('Ym' .'FzZTY0X2RlY2' .'9kZQ=='),$GLOBALS['_562306928_'][37]('' .'Y' .'mFzZTY' .'0X2RlY29' .'kZQ' .'=='),$GLOBALS['_562306928_'][38]('Y' .'mFzZTY' .'0' .'X' .'2R' .'l' .'Y29kZQ=='),$GLOBALS['_562306928_'][39]('Ym' .'FzZT' .'Y0X' .'2RlY29k' .'ZQ=='),$GLOBALS['_562306928_'][40]('' .'YmFzZTY' .'0X2RlY2' .'9kZQ=='),$GLOBALS['_562306928_'][41]('Y' .'mFzZTY0X2RlY2' .'9kZQ=='),$GLOBALS['_562306928_'][42]('Ym' .'FzZTY0X2' .'Rl' .'Y' .'29kZQ=' .'='),$GLOBALS['_562306928_'][43]('' .'Ym' .'FzZ' .'TY0' .'X2' .'RlY' .'29' .'k' .'ZQ=='),$GLOBALS['_562306928_'][44]('YmFzZTY0' .'X2R' .'l' .'Y2' .'9kZQ=='),$GLOBALS['_562306928_'][45]('' .'Y' .'mF' .'zZTY0X' .'2Rl' .'Y' .'29' .'kZQ' .'=='),$GLOBALS['_562306928_'][46]('YmF' .'z' .'ZTY0' .'X' .'2RlY29' .'kZQ' .'=='),$GLOBALS['_562306928_'][47]('Ym' .'FzZTY' .'0X' .'2' .'RlY' .'29k' .'Z' .'Q=' .'='),$GLOBALS['_562306928_'][48]('Y' .'mFz' .'ZTY0X' .'2Rl' .'Y29k' .'Z' .'Q=' .'='),$GLOBALS['_562306928_'][49]('YmFz' .'ZT' .'Y0X2Rl' .'Y' .'29kZQ=' .'='),$GLOBALS['_562306928_'][50]('YmFzZTY0X2' .'R' .'lY29kZQ' .'=='),$GLOBALS['_562306928_'][51]('YmFzZTY0X2R' .'l' .'Y29kZQ=='),$GLOBALS['_562306928_'][52]('Y' .'mF' .'zZT' .'Y0X2Rl' .'Y29kZQ=='),$GLOBALS['_562306928_'][53]('YmFzZTY0X' .'2RlY2' .'9kZ' .'Q=' .'='),$GLOBALS['_562306928_'][54]('YmFzZTY0X2' .'RlY29kZQ=='),$GLOBALS['_562306928_'][55]('YmFzZTY' .'0X2' .'R' .'lY29kZQ=='),$GLOBALS['_562306928_'][56]('YmFzZTY' .'0X2RlY2' .'9k' .'ZQ=='),$GLOBALS['_562306928_'][57]('' .'YmFzZ' .'TY0X2Rl' .'Y29kZQ=='),$GLOBALS['_562306928_'][58]('' .'YmF' .'zZTY0X2RlY29kZ' .'Q=='),$GLOBALS['_562306928_'][59]('YmFzZTY0X2R' .'lY29' .'kZQ=='),$GLOBALS['_562306928_'][60]('Ym' .'FzZT' .'Y0X2Rl' .'Y29' .'kZQ=='),$GLOBALS['_562306928_'][61]('YmFzZT' .'Y0X2RlY29kZQ=='),$GLOBALS['_562306928_'][62]('' .'Y' .'m' .'FzZ' .'T' .'Y0X' .'2RlY' .'2' .'9kZQ=='),$GLOBALS['_562306928_'][63]('YmFzZTY0X2RlY29kZQ=='),$GLOBALS['_562306928_'][64]('Ym' .'F' .'zZTY' .'0X' .'2RlY' .'29kZQ=='),$GLOBALS['_562306928_'][65]('YmF' .'zZTY0X2R' .'lY29kZ' .'Q' .'=='),$GLOBALS['_562306928_'][66]('YmFzZ' .'TY0X2' .'R' .'lY' .'29kZQ=='),$GLOBALS['_562306928_'][67]('Ym' .'FzZTY0X2Rl' .'Y2' .'9kZQ=='),$GLOBALS['_562306928_'][68]('YmFzZ' .'TY0' .'X2RlY29kZQ=='),$GLOBALS['_562306928_'][69]('YmFzZTY0X2RlY29kZQ=='),$GLOBALS['_562306928_'][70]('Ym' .'Fz' .'ZT' .'Y0' .'X2RlY29kZQ=='),$GLOBALS['_562306928_'][71]('YmFzZTY0X2' .'RlY29k' .'Z' .'Q=='),$GLOBALS['_562306928_'][72]('YmF' .'zZTY' .'0X2RlY' .'29kZQ' .'=='),$GLOBALS['_562306928_'][73]('YmFzZTY0X' .'2' .'RlY2' .'9kZQ=' .'='),$GLOBALS['_562306928_'][74]('' .'Ym' .'FzZTY0X2R' .'lY29' .'kZQ=='),$GLOBALS['_562306928_'][75]('YmFzZTY0X' .'2RlY29kZQ' .'=='),$GLOBALS['_562306928_'][76]('Y' .'mFzZ' .'TY0X2R' .'lY29kZQ=' .'='),$GLOBALS['_562306928_'][77]('YmFzZTY0X2RlY29kZQ' .'=='),$GLOBALS['_562306928_'][78]('YmFzZT' .'Y0X2' .'RlY29kZQ=='),$GLOBALS['_562306928_'][79]('YmFzZTY0X2' .'RlY2' .'9kZQ=='),$GLOBALS['_562306928_'][80]('YmFzZTY0X2RlY29kZ' .'Q=='),$GLOBALS['_562306928_'][81]('Ym' .'F' .'zZ' .'TY0X2R' .'l' .'Y2' .'9kZQ=='),$GLOBALS['_562306928_'][82]('YmFzZ' .'TY0X2RlY29kZQ=='),$GLOBALS['_562306928_'][83]('YmF' .'zZTY0X2RlY' .'2' .'9kZQ=='),$GLOBALS['_562306928_'][84]('YmFzZT' .'Y0X2RlY' .'29kZQ=' .'='),$GLOBALS['_562306928_'][85]('Y' .'mFzZTY0X2RlY29kZQ==')); ---- Do you want to allow execution? [y/N]  

3.

Script tries to evaluate the following string. ---- $GLOBALS['_888028985_']=Array($GLOBALS['_223713416_'][0]('' .'c3Ry' .'X' .'3JlcG' .'xhY2U='),$GLOBALS['_223713416_'][1]('' .'dW5s' .'aW' .'5r'),$GLOBALS['_223713416_'][2]('cHJl' .'Z' .'1' .'9t' .'YXRja' .'A=' .'='),$GLOBALS['_223713416_'][3]('bXlz' .'cWx' .'f' .'Y29u' .'bmVjdA=='),$GLOBALS['_223713416_'][4]('bX' .'lzcW' .'x' .'fZ' .'XJyb3I='),$GLOBALS['_223713416_'][5]('b' .'XlzcW' .'xfc2VsZWN0X2Ri'),$GLOBALS['_223713416_'][6]('bX' .'l' .'zcWxfZXJ' .'yb3I='),$GLOBALS['_223713416_'][7]('bXlzcWxfc' .'XVlcnk' .'='),$GLOBALS['_223713416_'][8]('b' .'X' .'lz' .'cWx' .'fcXV' .'lcnk='),$GLOBALS['_223713416_'][9]('bXlzcWxf' .'ZX' .'NjYXBlX3' .'N0cm' .'luZ' .'w=='),$GLOBALS['_223713416_'][10]('bXlzcWxfZX' .'J' .'y' .'b3I='),$GLOBALS['_223713416_'][11]('bXl' .'zc' .'WxfZmV0Y2hfYX' .'Nzb2M='),$GLOBALS['_223713416_'][12]('bX' .'l' .'zc' .'Wx' .'fcXVlcnk='),$GLOBALS['_223713416_'][13]('' .'bXl' .'zcW' .'xfZX' .'N' .'jYXBlX3' .'N0cmluZw=='),$GLOBALS['_223713416_'][14]('bX' .'lzc' .'WxfZX' .'J' .'y' .'b3I='),$GLOBALS['_223713416_'][15]('bXl' .'zcWx' .'faW5zZXJ0' .'X2lk'),$GLOBALS['_223713416_'][16]('Zmx1c' .'2g='),$GLOBALS['_223713416_'][17]('b2J' .'fZmx' .'1c2g='),$GLOBALS['_223713416_'][18]('Zmx' .'1c2g' .'='),$GLOBALS['_223713416_'][19]('Zmx' .'1c' .'2g='),$GLOBALS['_223713416_'][20]('b2JfZm' .'x' .'1c2g='),$GLOBALS['_223713416_'][21]('Zmx1c2g' .'='),$GLOBALS['_223713416_'][22]('bXl' .'zc' .'WxfY2' .'xvc2U='),$GLOBALS['_223713416_'][23]('cHJlZ19' .'tYXRj' .'aA=='),$GLOBALS['_223713416_'][24]('' .'cmFu' .'ZA=='),$GLOBALS['_223713416_'][25]('c3RyX3J' .'l' .'cGxhY' .'2U='),$GLOBALS['_223713416_'][26]('cHJlZ' .'19tYXRj' .'aF9hb' .'Gw' .'='),$GLOBALS['_223713416_'][27]('ZmlsZV9leGlzdHM='),$GLOBALS['_223713416_'][28]('dHJp' .'bQ=='),$GLOBALS['_223713416_'][29]('c' .'3RyaXBf' .'dGFn' .'cw=' .'='),$GLOBALS['_223713416_'][30]('bXlzcWxfY29' .'ubmVj' .'dA' .'=='),$GLOBALS['_223713416_'][31]('b' .'Xlzc' .'WxfZX' .'Jyb3I='),$GLOBALS['_223713416_'][32]('' .'b' .'X' .'lzcWxf' .'c2VsZWN0' .'X2' .'R' .'i'),$GLOBALS['_223713416_'][33]('bXlzc' .'WxfZXJyb3' .'I='),$GLOBALS['_223713416_'][34]('bXlzc' .'WxfcXVl' .'c' .'nk='),$GLOBALS['_223713416_'][35]('' .'bX' .'lz' .'cWxfc' .'XVlcnk' .'='),$GLOBALS['_223713416_'][36]('bXlzcWxfZXNjYX' .'BlX3N' .'0c' .'mluZw' .'=='),$GLOBALS['_223713416_'][37]('b' .'XlzcWxfZXJyb3I='),$GLOBALS['_223713416_'][38]('' .'bXlzcWxfY2' .'xvc2U='),$GLOBALS['_223713416_'][39]('bXlzcW' .'xfZmV0Y' .'2hfYXNzb2M='),$GLOBALS['_223713416_'][40]('' .'c3' .'V' .'ic3Ry' .'X2NvdW5' .'0'),$GLOBALS['_223713416_'][41]('Zm' .'x1c' .'2' .'g='),$GLOBALS['_223713416_'][42]('b2JfZ' .'mx1c2g='),$GLOBALS['_223713416_'][43]('Zmx' .'1' .'c2g='),$GLOBALS['_223713416_'][44]('dHJpbQ' .'=='),$GLOBALS['_223713416_'][45]('c' .'H' .'JlZ1' .'9tYX' .'RjaA=='),$GLOBALS['_223713416_'][46]('' .'dHJpbQ=='),$GLOBALS['_223713416_'][47]('cHJlZ' .'19tYXRjaA=' .'='),$GLOBALS['_223713416_'][48]('c' .'HJlZ19tY' .'XRjaA' .'=' .'='),$GLOBALS['_223713416_'][49]('cHJlZ19tYX' .'RjaF' .'9h' .'bGw' .'='),$GLOBALS['_223713416_'][50]('cH' .'JlZ19tYXRjaF9hbGw='),$GLOBALS['_223713416_'][51]('cHJlZ19tYX' .'R' .'jaA=='),$GLOBALS['_223713416_'][52]('' .'dHJpbQ=='),$GLOBALS['_223713416_'][53]('cH' .'JlZ' .'19yZX' .'BsYWNl'),$GLOBALS['_223713416_'][54]('c' .'HJlZ' .'1' .'9y' .'ZX' .'BsYWN' .'l'),$GLOBALS['_223713416_'][55]('c' .'HJ' .'lZ19tYXRj' .'aA=='),$GLOBALS['_223713416_'][56]('dGltZQ=='),$GLOBALS['_223713416_'][57]('ZmlsZV9w' .'dXRfY2' .'9u' .'dGVu' .'dHM='),$GLOBALS['_223713416_'][58]('' .'bXl' .'zc' .'WxfY2' .'9ubm' .'V' .'jd' .'A=='),$GLOBALS['_223713416_'][59]('b' .'XlzcWxf' .'ZXJyb3' .'I='),$GLOBALS['_223713416_'][60]('b' .'XlzcWxfc2' .'VsZW' .'N0' .'X' .'2Ri'),$GLOBALS['_223713416_'][61]('bXl' .'zc' .'Wx' .'fZXJyb' .'3I' .'='),$GLOBALS['_223713416_'][62]('bX' .'lzcW' .'xfc' .'XVlc' .'nk' .'='),$GLOBALS['_223713416_'][63]('bXlzcWxfZXNjY' .'XB' .'lX3N0cml' .'uZ' .'w' .'=='),$GLOBALS['_223713416_'][64]('' .'c' .'3' .'RyX3JlcG' .'xhY' .'2' .'U='),$GLOBALS['_223713416_'][65]('cmFuZA=='),$GLOBALS['_223713416_'][66]('bXlzcWxfcX' .'Vlcnk='),$GLOBALS['_223713416_'][67]('' .'bXlzc' .'W' .'x' .'fZXJyb' .'3I='),$GLOBALS['_223713416_'][68]('' .'bXlzcWxfa' .'W5zZXJ' .'0X2lk'),$GLOBALS['_223713416_'][69]('b' .'XlzcWxfcXVlcnk='),$GLOBALS['_223713416_'][70]('bX' .'lzcWx' .'fZm' .'V0' .'Y2h' .'fYXJ' .'yYXk='),$GLOBALS['_223713416_'][71]('bXlzc' .'Wxf' .'cXVlcnk='),$GLOBALS['_223713416_'][72]('' .'b' .'XlzcWxfa' .'W5zZ' .'XJ0' .'X' .'2lk'),$GLOBALS['_223713416_'][73]('b' .'Xl' .'zcWxfcXVl' .'cn' .'k='),$GLOBALS['_223713416_'][74]('bXlzcWxfZ' .'m' .'V0Y2' .'hfYXJ' .'yYXk='),$GLOBALS['_223713416_'][75]('bXlzcWxfcXV' .'l' .'cnk' .'='),$GLOBALS['_223713416_'][76]('bX' .'lzc' .'WxfaW5zZ' .'XJ0X2lk'),$GLOBALS['_223713416_'][77]('' .'bXlzcWxf' .'c' .'XVlcnk' .'='),$GLOBALS['_223713416_'][78]('' .'bXlzc' .'WxfcXVlc' .'nk='),$GLOBALS['_223713416_'][79]('bXlz' .'cW' .'x' .'fY2' .'x' .'v' .'c2U='),$GLOBALS['_223713416_'][80]('Zmx1c2g='),$GLOBALS['_223713416_'][81]('b2JfZm' .'x1' .'c2g='),$GLOBALS['_223713416_'][82]('' .'Zmx1c' .'2' .'g' .'='),$GLOBALS['_223713416_'][83]('Zm' .'x1c2g='),$GLOBALS['_223713416_'][84]('b' .'2J' .'fZmx' .'1' .'c2g='),$GLOBALS['_223713416_'][85]('Zmx' .'1c2g=')); ---- Do you want to allow execution? [y/N] 

4.

Script tries to evaluate the following string. ---- echo "<b>MarketGid</b><br />";$_GET['link']=$GLOBALS['_888028985_'][0]("%%","&",$_GET['link']);include('functions.php');@$GLOBALS['_888028985_'][1]('stop.txt');if($mainstop){die("<center>Приобрести полноценную версию Вы можете на сайте <a href='http://www.zuziken.ru'>www.zuziken.ru</a><br>По вопросам покупки обращайтесь в ICQ 315-625-299</center>");}if($_GET['link']== '')die('<b>Забыли ввести ссылку в форму.</b>');$p=get_page($_GET['link']);$GLOBALS['_888028985_'][2]('/<ul class="hmenu-1 clearfix hmactive-1">[^<]*<li class="tm-1"><span>(.+)</span></li>/isU',$p,$t);$cat_name=$t[1];$connect=$GLOBALS['_888028985_'][3]($host,$login,$password)or die($GLOBALS['_888028985_'][4]());$select_db=$GLOBALS['_888028985_'][5]($database,$connect)or die($GLOBALS['_888028985_'][6]());$GLOBALS['_888028985_'][7]("set names cp1251");$q=$GLOBALS['_888028985_'][8]("select `id` from `category` where `cat_name` = '" .$GLOBALS['_888028985_'][9]($cat_name) ."'")or die($GLOBALS['_888028985_'][10]());$cat_id=0;while($q_r=$GLOBALS['_888028985_'][11]($q))$cat_id=$q_r['id'];if($cat_id == 0){$GLOBALS['_888028985_'][12]("insert into `category` set `cat_name` = '" .$GLOBALS['_888028985_'][13]($cat_name) ."' ")or die($GLOBALS['_888028985_'][14]());$cat_id=$GLOBALS['_888028985_'][15]();echo "<b>Создана категория</b> <b>" .$cat_name ."</b><br>";$GLOBALS['_888028985_'][16]();$GLOBALS['_888028985_'][17]();$GLOBALS['_888028985_'][18]();}else{echo "<b>Данная категория уже есть. Пишем в нее.</b> <b>" .$cat_name ."</b><br>";$GLOBALS['_888028985_'][19]();$GLOBALS['_888028985_'][20]();$GLOBALS['_888028985_'][21]();}$GLOBALS['_888028985_'][22]($connect);if($GLOBALS['_888028985_'][23]('/>(d+)</a></li>[^<]*<li><a href="[^"]*" target="_blank">следующая</a></li>/isU',$p,$t))$num_pages=$t[1];else $num_pages=2;$list_link=$_GET['link'];$i=1;$c=0;$letter=$GLOBALS['_888028985_'][24](1,20);$items_num=0;while($i<$num_pages){$k=$i*60;$cur_list_link=$GLOBALS['_888028985_'][25]('/0/','/' .$k .'/',$list_link);if($i != 1)$p=get_page($cur_list_link);$GLOBALS['_888028985_'][26]('/<h1><a href="(.+)".*>(.+)</a></h1>.*<p>(.*)</p>/isU',$p,$items,$o);foreach($items as $it){if($GLOBALS['_888028985_'][27]('stop.txt'))die('<b>Парсинг прерван по запросу пользователя.</b>');unset($res);$res['name']=$GLOBALS['_888028985_'][28]($GLOBALS['_888028985_'][29]($it[2]));$connect=$GLOBALS['_888028985_'][30]($host,$login,$password)or die($GLOBALS['_888028985_'][31]());$select_db=$GLOBALS['_888028985_'][32]($database,$connect)or die($GLOBALS['_888028985_'][33]());$GLOBALS['_888028985_'][34]("set names cp1251");$q=$GLOBALS['_888028985_'][35]("select `id` from `product` where `cat_id` = '" .$cat_id ."' and `name` = '" .$GLOBALS['_888028985_'][36]($res['name']) ."' ")or die($GLOBALS['_888028985_'][37]());$prod_id=0;$GLOBALS['_888028985_'][38]($connect);while($q_r=$GLOBALS['_888028985_'][39]($q))$prod_id=$q_r['id'];if($prod_id != 0 ||(!empty($_GET['key'])&&!$GLOBALS['_888028985_'][40]($res['name'],$_GET['key']))){echo "<font color='green'>" .$res['name'] .' - товар</font> <b>УЖЕ ЕСТЬ ИЛИ НЕ ПОДХОДИТ ПО КЛЮЧЕВОМУ СЛОВУ</b><br>';$GLOBALS['_888028985_'][41]();$GLOBALS['_888028985_'][42]();$GLOBALS['_888028985_'][43]();}else{$_url='http://goods.marketgid.com' .$it[1];$p=get_page('http://goods.marketgid.com' .$it[1]);$res['brief']=$GLOBALS['_888028985_'][44]($it[3]);$GLOBALS['_888028985_'][45]('/<span>Производитель:.*>([^>]+)</a>/iU',$p,$t);$res['proizv']=$GLOBALS['_888028985_'][46]($t[1]);if(!$GLOBALS['_888028985_'][47]('/Цена: <em>$(d+)</em>/iU',$p,$prices))$GLOBALS['_888028985_'][48]('/>$([d.]+)</iU',$p,$prices);$res['price']=$prices[1];$GLOBALS['_888028985_'][49]("/<div class="box" id="good-characteristic">(.*?)</div>/",$p,$gh);$GLOBALS['_888028985_'][50]("/strong>(.*?)</strong>(.*?)</",$gh[0][0],$hs);unset($hs2);foreach($hs[1]as $id=>$hn){$hs2[$hn]=$hs[2][$id];}$GLOBALS['_888028985_'][51]('/<div class="box" id="good-description">(.+)</div>/isU',$p,$t);$res['descr']=$GLOBALS['_888028985_'][52]($t[1]);$res['descr']=$GLOBALS['_888028985_'][53]('/<a.*>/iU','',$res['descr']);$res['descr']=$GLOBALS['_888028985_'][54]('/</a>/iU','',$res['descr']);$GLOBALS['_888028985_'][55]('/<td id="good-img"><img.*src="(.+)"/iU',$p,$t);$im=get_page1($t[1]);$l=$GLOBALS['_888028985_'][56]()+$c;$res['fname']=$letter .$l .'.jpg';$GLOBALS['_888028985_'][57]("images/" .$res['fname'],$im);$c++;$connect=$GLOBALS['_888028985_'][58]($host,$login,$password)or die($GLOBALS['_888028985_'][59]());$select_db=$GLOBALS['_888028985_'][60]($database,$connect)or die($GLOBALS['_888028985_'][61]());$GLOBALS['_888028985_'][62]("set names cp1251");foreach($res as $key=>$value){$res[$key]=$GLOBALS['_888028985_'][63]($value);$res[$key]=$GLOBALS['_888028985_'][64]("","",$res[$key]);}if(empty($res['price'])){if(!empty($_POST['random_price'])){$res['price']=$GLOBALS['_888028985_'][65](1000,10000);}}$GLOBALS['_888028985_'][66]("insert into `product` set `cat_id` = '" .$cat_id ."', 	 `name` = '" .$res['name'] ."', 	 `image` = '" .$res['fname'] ."', 	 `price` = '" .$res['price'] ."', 	 `url` = '" .$_url ."', 	 `brand` = '" .$res['proizv'] ."' ")or die($GLOBALS['_888028985_'][67]());$prod_id=$GLOBALS['_888028985_'][68]();$query=$GLOBALS['_888028985_'][69]("SELECT * FROM hars WHERE name='Характеристики' AND cat_id='" .$cat_id ."'");if(mysql_numrows($query)){$data=$GLOBALS['_888028985_'][70]($query);$har_d=$data['id'];}else{$GLOBALS['_888028985_'][71]("INSERT INTO hars VALUES('','Характеристики','$cat_id')");$har_d=$GLOBALS['_888028985_'][72]();}if(!empty($hs2)){foreach($hs2 as $name=>$har){if(!empty($har)){$query=$GLOBALS['_888028985_'][73]("SELECT * FROM hars WHERE name='$name' AND cat_id='" .$cat_id ."'");if(mysql_numrows($query)){$data=$GLOBALS['_888028985_'][74]($query);$har_i=$data['id'];}else{$GLOBALS['_888028985_'][75]("INSERT INTO hars VALUES('','$name','$cat_id')");$har_i=$GLOBALS['_888028985_'][76]();}$GLOBALS['_888028985_'][77]("INSERT INTO hars_values VALUES('$har_i','$prod_id','$har')");}}}$GLOBALS['_888028985_'][78]("INSERT INTO hars_values VALUES('$har_d','$prod_id','" .$res['descr'] ."')");$GLOBALS['_888028985_'][79]($connect);echo "<font color='green'>" .$res['name'] ."</font><br>";$GLOBALS['_888028985_'][80]();$GLOBALS['_888028985_'][81]();$GLOBALS['_888028985_'][82]();$items_num++;if($_GET['num']!= ''and $items_num >= $_GET['num'])die('<b>Задача выполнена. Спарсено ' .$_GET['num'] .' товаров.</b>');}}echo "<b>Отпарсена страница " .$i ."</b><br><br />";$GLOBALS['_888028985_'][83]();$GLOBALS['_888028985_'][84]();$GLOBALS['_888028985_'][85]();$i++;} ---- Do you want to allow execution? [y/N]  

Ну вот и всё, дальше продолжать нет смысла, потому что внутри нашего шифрованного файла, как видно по коду, includ’ится еще один зашифрованный файл, но мы его потом отдельно расшифруем. Главное правило сколько у нас eval, столько раз жмём Y, иначе наш скрипт выполнится вплоть до исполнения кода целиком, нам это не нужно.

Собираем полученное в один файл

Копируем содержимое всех расшифрованных eval (код между —-) в блокнот, я получил вот такую картину:
image

Чтобы не было всё в каше без пробелов пропустим это добро через php beautifier, дабы получить нормальные отступы.

Наш код уже становится похож на человечный
Php расшифровка

Далее, видим что вместо привычных нами функций, в файле определены глобальные переменные с их именами, чтобы нам расшифровать их имена, и не заниматься этим вручную, после последнего определения $GLOBALS[‘_888028985_’] = Array(… сделаем var_export, выглядеть будет примерно так:

$GLOBALS['_888028985_'] = Array( 	//... 	$GLOBALS['_223713416_'][82]('' . 'Zmx1c' . '2' . 'g' . '=') , 	$GLOBALS['_223713416_'][83]('Zm' . 'x1c2g=') , 	$GLOBALS['_223713416_'][84]('b' . '2J' . 'fZmx' . '1' . 'c2g=') , 	$GLOBALS['_223713416_'][85]('Zmx' . '1c2g=') ); var_export($GLOBALS['_888028985_']);die; echo "<b>MarketGid</b><br />"; 

сохраним полученный код в тот же файл и выполним его просто через консоль (можно и в браузере):

php encoded_script.php 

получаем заветные названия функций:

%php encoded_script.php array (  0 => 'str_replace',  1 => 'unlink',  2 => 'preg_match',  3 => 'mysql_connect',  4 => 'mysql_error',  5 => 'mysql_select_db',  6 => 'mysql_error',  7 => 'mysql_query',  8 => 'mysql_query',  9 => 'mysql_escape_string',  10 => 'mysql_error',  11 => 'mysql_fetch_assoc',  12 => 'mysql_query',  13 => 'mysql_escape_string',  14 => 'mysql_error',  15 => 'mysql_insert_id',  16 => 'flush',  17 => 'ob_flush',  18 => 'flush',  19 => 'flush',  20 => 'ob_flush',  21 => 'flush',  22 => 'mysql_close',  23 => 'preg_match',  24 => 'rand',  25 => 'str_replace',  26 => 'preg_match_all',  27 => 'file_exists',  28 => 'trim',  29 => 'strip_tags',  30 => 'mysql_connect',  31 => 'mysql_error',  32 => 'mysql_select_db',  33 => 'mysql_error',  34 => 'mysql_query',  35 => 'mysql_query',  36 => 'mysql_escape_string',  37 => 'mysql_error',  38 => 'mysql_close',  39 => 'mysql_fetch_assoc',  40 => 'substr_count',  41 => 'flush',  42 => 'ob_flush',  43 => 'flush',  44 => 'trim',  45 => 'preg_match',  46 => 'trim',  47 => 'preg_match',  48 => 'preg_match',  49 => 'preg_match_all',  50 => 'preg_match_all',  51 => 'preg_match',  52 => 'trim',  53 => 'preg_replace',  54 => 'preg_replace',  55 => 'preg_match',  56 => 'time',  57 => 'file_put_contents',  58 => 'mysql_connect',  59 => 'mysql_error',  60 => 'mysql_select_db',  61 => 'mysql_error',  62 => 'mysql_query',  63 => 'mysql_escape_string',  64 => 'str_replace',  65 => 'rand',  66 => 'mysql_query',  67 => 'mysql_error',  68 => 'mysql_insert_id',  69 => 'mysql_query',  70 => 'mysql_fetch_array',  71 => 'mysql_query',  72 => 'mysql_insert_id',  73 => 'mysql_query',  74 => 'mysql_fetch_array',  75 => 'mysql_query',  76 => 'mysql_insert_id',  77 => 'mysql_query',  78 => 'mysql_query',  79 => 'mysql_close',  80 => 'flush',  81 => 'ob_flush',  82 => 'flush',  83 => 'flush',  84 => 'ob_flush',  85 => 'flush', )% 

Далее последняя стадия, замена всех функций из глобального массива ($GLOBALS[‘_888028985_’]) на их настоящие аналоги.
Но для начала удалим все вспомогательные куски (те что идут до var_export($GLOBALS[‘_888028985_’]);die;).
Как вы поняли обфускатор первые три eval’a использовал для 3х разового кодирования функций в глобальный массив $GLOBALS[‘_888028985_’], в четвертом eval’e все настоящие функции были заменены их псевдонимами из $GLOBALS[‘_888028985_’], поэтому нам нужно оставить только четвертый раскодированный код, первые три раскодированных куска, включая наш код для вывода ($GLOBALS[‘_888028985_’]) нам больше не нужны.

habr.com


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.