Исследование защиты программы 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, реагируют антивирусы. Но это вопросы не к программе, виноваты тупые школоло, которые шифровали всякую скриптовую малвару, и вирусные аналитики, не особо заморачивающиеся в выборе сигнатуры для добавления в базы.
Просмотров: 3245 | Комментариев: 3
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
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
В обработчиках кнопок число файлов сравнивается с 5 (ldc.i4.5).
Предлагаю эту команду менять на dup, так что число будет сравниваться само с собой, понятно что сравнение x > x никогда не даст true... Итого:
Search: 1b fe 02 16 fe 01
Replace: 25 fe 02 16 fe 01
Добавить комментарий
Заполните форму для добавления комментария
Всех с наступающим !
Тьфу, обфускатор php извиняюсь)