Print This Post PHP Obfuscator 1.5

Пятница, 8. Октябрь 2010
Раздел: PHP, автор:

Вот и увидела свет новая версия этого скрипта.

Возможности обфускатора (включая новые):
[+] Замена имен переменных
[+] Замена имен функций
[+] Шифрование статических строк
[+] Шифрование имен стандартных функций PHP
[+] Обфускация INTEGER’ов
[+] Сжатие скрипта
[+] Архивация скрипта
[+] Добавление треш-комментариев
[+] Обфускация констант PHP
[+] Возможность добавления мусорных инструкций и переменных заданной вероятностью
[+++] И многое другое, множество удобств

Исправлены различные недочеты, ошибки, имевшиеся в версии 1.4, улучшена обфускация в некоторых случаях, версия 1.5 более экономно расходует память.

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

Обфускатор не поддерживает конструкции eval() и $$var_name, а также по-прежнему могут быть проблемы со скриптами в кодировке UTF-8.

Вот, например, во что можно превратить простой "Hello, world!":

В редакторе это выглядит так:

Скачать: ZIP

Обновление 11 октября: поправлены ошибки при обфускации классов, тем не менее, поддержка классов на данный момент неполная.

 Обсудить на форуме


Получать обновления на почту:     

Комментариев: 70 к “PHP Obfuscator 1.5”


  1. Виктор :

    Спасибо за ваш труд, скрипт очень полезный для меня! (:

    [Ответить]


  2. Дмитрий :

    Вставил код прогнал, но появилась такая строка
    !!!В исходном коде найдены вызовы функции eval(). Проверьте её обфускацию или проведите её вручную.

    Как провести вручную?

    [Ответить]

    dx:

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

    [Ответить]


  3. max :

    Спасибо огромное, сегодня использовал твой обфускатор, сработал на отлично, но было маленькое "но":
    У меня есть класс, и в коде я вызываю поля у обьекта этого класса через стрелку, например $data->Pages, где Pages это паблик мембер, обьявленный в классе соответственно как public $Pages. Так вот, пока я не добавил переменную $Pages в список переменных, которые не должны заменяться, то скрипт не работал.
    Собственно предложение, а может хендлить это автоматом, и если есть переменная-член класса, то автоматически не шифровать ее имя, так как потом будет невозможно вызвать ее по указателю, или как это в пыхе называется.
    А так все супер, еще раз большое спасибо.

    [Ответить]

    max:

    Еще посмотрел, никак не шифруются булевские переменные TRUE/FALSE. Было бы очень неплохо, вот пример, как можно преобразовывать:
    http://php.su/learnphp/datatypes/?mn#boolean

    [Ответить]

    dx:

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

    [Ответить]

    dx:

    С классами вообще все сложно, я делал слабую поддержку и мало тестировал, об это я в посте написал.

    [Ответить]


  4. max :

    Не, дак понятно, что снять обфускацию можно, она же предназначена просто для усложнения понимания кода, так сказать. Просто шифрование була это еще один кирпичик в стену. Может когда-то в новой версии и прикрутишь.
    А можно еще вопрос? Я что-то не вкурил прикол про уличную магию и цитаты Блейна в коде, можешь пояснить?

    [Ответить]

    dx:

    Это старая фича, которая добавляет целую гору ненужных бессмысленных комментариев в код)

    [Ответить]


  5. 0xfff :

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

    [Ответить]

    dx:

    Никто не мешает сделать такое самому, код открыт.

    [Ответить]


  6. SERGEYM :

    Но у него проблема с include , ничего не работает если есть include на странице

    [Ответить]

    dx:

    Работает вообще-то, просто в инклюдах имена переменных не будут соответствовать тем, что в обфусцированном скрипте. Но если правильно настроить, и этого можно избежать.

    [Ответить]


  7. SERGEYM :

    Но если правильно настроить, и этого можно избежать

    Подскажите как правильно настроить ?

    [Ответить]

    dx:

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

    [Ответить]


  8. Алекс :

    Скажите а есть что то с обратным эфектом то есть деобфиксатор для этого и 1.4 автор прозьба ответить или на мыло или в коменты буду благодарен )

    [Ответить]

    dx:

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

    [Ответить]


  9. Sergey :

    Подскажите пожалуйста в чем может быть причина. Обфусцированный код выдает Call to undefined function если включать обфускацию статических строк. А мне как раз и хотелось бы скрыть статические строки которые присваиваются переменным в начале скрипта.

    [Ответить]

    dx:

    Сложно сказать, надо скрипт видеть или хотя бы его часть. Скрипт из одного файла или из нескольких состоит? В скрипте есть операторы eval?

    [Ответить]

    Sergey:

    Скрипт из одной страницы и eval нет в нем.

    [Ответить]

    Sergey:

    Если я Вам вышлю скрипт сможете глянуть?

    [Ответить]

    Kaimi:

    На pastebin.com заливайте


  10. Sergey :

    И куда потом ссылку кидать?

    [Ответить]

    Kaimi:

    Очевидно - в комментарии

    [Ответить]

    dx:

    Можно мне в приватные сообщения на forum.kaimi.ru, пользователь dx.

    [Ответить]

  11. Замечательно, обфусцировал свой код - теперь сам черт его не разберет )) А деобфускаторы справятся?

    [Ответить]

    dx:

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

    [Ответить]


  12. Володимир :

    Подскажите как расшифровать
    $GLOBALS['_414705932_'][51](round(0) + 2.5 + 2.5) => "",
    $GLOBALS['_414705932_'][52](round(0) + 5.3333333333333 + 5.3333333333333 + 5.3333333333333) => "",
    $GLOBALS['_414705932_'][53](round(0) + round(0 + 1.6 + 1.6 + 1.6 + 1.6 + 1.6)) => "",
    $GLOBALS['_414705932_'][54](round(0) + round(0 + 0.75 + 0.75 + 0.75 + 0.75)) => "",
    $GLOBALS['_414705932_'][55](round(0) + 10.333333333333 + 10.333333333333 + 10.333333333333) => "",

    [Ответить]

    Kaimi:

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

    [Ответить]

    Володимир:

    Хороший блог. Спасибо за оперативность.
    Можна ли на електронку указану в коментарии отписатся (привести пример). знания пхп нету, но руки ростут нормально! ))

    [Ответить]

    Kaimi:

    А смысл? Я это раскодировать точно не буду.

  13. Я сам декодирую, помогите примерами.

    [Ответить]

    Kaimi:

    Какими примерами? Рассказать, как вычислить значение выражения типа round(0) + 2.5 + 0.1? Так это основы пхп.

    [Ответить]


  14. Александр :

    Добрый день, нужно деобфусцировать два файла за $
    Один файл закрыт Best PHP Obfuscator, второй PHP Obfuscator by DX 1.5 (вашим)

    [Ответить]


  15. whitefoot :

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

    [Ответить]


  16. whitefoot :

    Еще одну вещь забыл написать. Неплохо было бы добавить обфускацию имен переменных и функции (методов) при помощи MD5 от имени переменной или метода. Для чего это нужно. Например, есть у меня класс A c публичными свойствами и методами, описан он был в файле 1.php. В файле 2.php я подключаю файл 1.php и создаю экземпляр класса А, в результате ничего не работает, а все потому что свойства и методы класса А имеют разные названия после обфускации. Если задавать имена при помощи MD5 данная проблема отпадает.

    [Ответить]

  17. Автору респект, отличный обфускатор :)

    [Ответить]


  18. Rurik :

    Что не так?

    Notice: Undefined variable: ver in C:\Program Files (x86)\VertrigoServer\www\obf\obf.php on line 745
    Call Stack
    # Time Memory Function Location
    1 0.0090 1514824 {main}( ) ..\obf.php:0
    2 0.0130 2200272 errpr( ) ..\obf.php:553

    Для использовании опции добавления неисполняемого кода в скрипте должна быть хотя бы одна переменная.

    [Ответить]

  19. […] написанием новой версии своего старого проекта PHP Obfuscator. Я переписываю его с нуля, чтобы он поддерживал все […]


  20. Андрей :

    Почему при добавлении в список переменных, которые ненадо трогать - скрипт не работает и пишет что список не корректный?

    спасибо

    [Ответить]

    dx:

    Может, добавляешь как-то не так. Например, пустую строку оставил в конце списка или еще что-то. Эта версия обфускатора достаточно старая, я уже не помню, как точно она работает.

    [Ответить]


Оставьте ваш комментарий