Blog. Just Blog

Исследование защиты программы srcProtector for PHP

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы srcProtector for PHP
Скриншот программы srcProtector for PHP

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

Скачиваем дистрибутив, устанавливаем, смотрим. На сайте заявлена необходимость .NET framework, значит и программа написана на дотнете. Анализаторы показывают, что файл ничем не упакован и не накрыт.

Файл ничем не упакован
Файл ничем не упакован

Теперь посмотрим, как проявляется триальное ограничение. При выборе файлов в проект открывается диалоговое окно с предупреждением и более 5 файлов в список действительно не добавляется.

Сообщение незарегистрированной программы
Сообщение незарегистрированной программы

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

Загружаем программу в ILSpy, поиском находим строчку "Demo mode". Найдутся функции, в которых эта строка присутствует.

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

Ключевая строчка тут - проверка условия this.mode == "demo". Следующим шагом надо выяснить, где эта строка инициализируется значением "demo" или каким-нибудь другим. Правый клик на параметре, а меню выбираем пункт "Analyze", в списке анализатора разворачиваем перечень функций, где выполняется присвоение значений.

Вызовы инициализиации переменной
Вызовы инициализиации переменной

В этом коротеньком списке нас интересует функция с характерным названием "LoadLicense". Двойным кликом открываем ее исходный текст.

Функция проверки серийного номера
Функция проверки серийного номера

Текст простейший. Проверяется наличие файла с лицензией, если его нет, то программа переводится в демо-режим, иначе выполняется онлайн-проверка сохраненных данных из этого файла. Для обхода активации надо исправить две строчки, где устанавливается режим this.mode = "demo" и где устанавливается текст в окне программы this.liclbl.Text = "Demo mode". Ниже по тексту видны правильные значения, которые устанавливаются в случае успешного прохождения онлайн-проверки, на них и надо поменять указанные строки.

Редактируем строки
Редактируем строки

Переключаемся в режим IL-кода, открываем поочередно строки на редактирование и прописываем им новые значения.

Патч успешно выполнен
Патч успешно выполнен

Осталось сохранить изменения.

Сохраняем изменения
Сохраняем изменения

Теперь можно закрыть ILSpy и проверить работоспособность измененной сборки.

Программа успешно "зарегистрирована"
Программа успешно "зарегистрирована"

Ограничение на количество файлов в проекте теперь никак не проявляется. Анализатор и обфускатор тоже обрабатывает все файлы без исключений. Цель достигнута. Единственный косяк, который обнаружился, это то, что на файлы, обфусцированные с помощью srcProtector for PHP, реагируют антивирусы. Но это вопросы не к программе, виноваты тупые школоло, которые шифровали всякую скриптовую малвару, и вирусные аналитики, не особо заморачивающиеся в выборе сигнатуры для добавления в базы.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 1054 | Комментариев: 3

Комментарии

Отзывы посетителей сайта о статье
Doxtur (30.12.2016 в 04:40):
Странно, что они свое поделие не накрыли своим поделием, брезгуют чтоли)
Всех с наступающим !

Тьфу, обфускатор php извиняюсь)
ManHunter (30.12.2016 в 01:32):
Да тут защита настолько элементарная, что вариантов для патча палюбому больше одного. Например, еще можно нарисовать файл лицензии и пропатчить саму онлайн-проверку, или еще как-нибудь. Или сравнивать количество файлов с константой 100500. Адепты Темной Стороны решения всегда найдут :)
pawel97 (30.12.2016 в 00:46):
Если забить на надпись Demo Mode, можно чуть элегантнее + search&replace.
В обработчиках кнопок число файлов сравнивается с 5 (ldc.i4.5).
Предлагаю эту команду менять на dup, так что число будет сравниваться само с собой, понятно что сравнение x > x никогда не даст true... Итого:
Search:  1b fe 02 16 fe 01
Replace: 25 fe 02 16 fe 01

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

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2017
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.06 сек. / MySQL: 2 (0.0044 сек.) / Память: 4.5 Mb
Наверх