Обфускация и как с ней боротся.

Статус
В этой теме нельзя размещать новые ответы.
если надо по папкам сделать, давай доработаю...

по поводу замены, это возможно сделать скриптом (для конкретно этого случая) так как тут каждая переменная по 9 символов...
 
Я подумаю нужно ли такое, и как это сделать.
Что касается восстановления синтаксиса видимо это php не под силу...
 
А, в принципе, можно продумать алгоритм деобфускации хотя бы несложного php-кода.

К примеру для однофайлового php кода без классов:

1. Выравниваем код с помощью phpedit или ultraedit.
2. Определяем области видимости:
- идем от начала скрипта до function - это нулевая область
(так и пишем в массив 0->'3-1234' 3 - это третий символ после <? 1234 -символ перед function)

- считаем фигурные кавычки - как только закрыли столько же кавычек сколько открыли (либо уперлись во вложенную функцию), пишем в массив 1->'1235-3456' и далее опять будем писать 0 (в случае со вложенной ф-цией - 2) вместо еденицы.

- проходим до конца скрипта.

3. Ищем по всему скрипту переменные и записываем для каждой её область видимости.

4. Для каждой области видимости смотрим частоту каждой переменной, для частых записываем вместо имени $a, $b, итд. Для редких можно заюзать английский словарик.

Глобальные перем-ые тож надо продумать.

Не алгоритм, а пока так, набросок. Подхватывайте.
Конструктивная критика и предложения по многофайловым скриптам приветствуются.
Было бы интересно написать такой скриптик.
 
А если переменные глобальные?
 
А если переменные глобальные?

На этапе поиска переменных, если находим слово global: добавляем новую область (global01:( от объявления global до конца текущей области + нулевая область. И назначаем эту область для всех переменных, которые нашлись между global и точкой с запятой.

Затем смотрим нету ли переменных с таким именем в нулевой области. Если есть, то и им присваиваем эту область.

Когда находим global второй третий и т.д. раз:
- если глобальная переменная уже есть в какой-нить области globalXX, обновлять будем globalXX область.
- если нет, то делаем новую область - нулевая + от объявления global до конца текущей области

Как то так.
 
Интересные вещи.

Пока насчёт восстановления кода до читабельного вида..
Чел - insider с форума..

Нашёл вопервых вот этот скриптик:
Для просмотра ссылки Войди или Зарегистрируйся

Странно, но у меня он не работает :nezn:
Хотя всё что нужно поставил..

Если будет пахать, то сделаем часть сервиса на его основе. :)

Так же он нанёл прогу:
Для просмотра ссылки Войди или Зарегистрируйся
Тоже очень интересная. ;)


Это же чел сказал что может взятся за переменные.. пообещал написать скрипт - смотримс.. :p
 
Нашёл вопервых вот этот скриптик:
Для просмотра ссылки Войди или Зарегистрируйся

Странно, но у меня он не работает
Хотя всё что нужно поставил..

Может у тебя базовый набор PEAR не установлен?)
Без ПЕАР это работать не будет...
 
Может кто подкинет линк на Polystyle 3.2.
По крайней мере первую часть работы можно будет сделать автоматом:)
 
Есть ещё такая дрянь как phpdefender, однажды сам несколько фалов вручную раскодировал, но не так как выяснилось надо.

Для главной проблемой является аеренос строк.
А переменные я думаю можно подставлять свои используя <<TEXT PERLACER>> или какие либо другие текстовые редакторы
 
о, нашел эту тему по слову polystyle

Полистайл включен в поставку PhpEd, но там пробная версия.
точно так-же столкнулся с задачей приведения обфускода к человеческому виду, и Polystyle (вызывается прямо из пхпэд) работает что надо. Хотелось-бы найти к нему ключик.. :ay:

А онлайновые бьютифайеры часто добавляют ошибок. Тот файл который Полистайл корректно преобразовывает, онлайновые (написанные на пхп) бьютифайеры снабжали левыми знаками ";" и "}" и приходилось вручную лазить по коду и подчищать..

Добавлено через 2 минуты
переменные привожу к человеческому виду вручную.. Смотрю по функции что делает переменная, ну тобишь примерно догадываюсь что она должна хранить (и что должна делать функция) и дальше глобальным поиском с заменой по всему каталогу файлов (делает ПхпЭд) переименовываю.

Правда если скрипт часто обновляется - это мартышкин труд.. :-( И названия функций при обфускации выбираются случайным образом, не автоматизируешь.. :-(
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху