Исследование защиты программы Ximagic Denoiser
Скриншот программы Ximagic Denoiser
Ximagic Denoiser - очень неплохой плагин для подавления цифрового шума на фотографиях. Изначально разработан для использования с Adobe Photoshop, но также работает с любыми программами, которые этот формат поддерживают. Плагин давно не обновлялся, но это не мешает ему работать даже с самыми новыми версиями графических редакторов. В незарегистрированной версии есть ограничение по времени работы и невозможность использовать плагин в пакетном режиме. Есть предложение исправить эту досадную оплошность разработчика.
Забираем с офсайта плагин, он сам по себе, без инсталлятора, так что просто закидываем его в нужную папку. Для Photoshop это папка Plugins. При вызове плагина первым делом появляется триальное окно с таймером и уведомлением, что плагин работает только 30 дней.
Триальное окно
Первая зацепка есть, давайте попробуем программу зарегистрировать. Естественно, сперва какими-нибудь левыми данными. Регистрация запрятана аж в "System Info".
Неудачная попытка регистрации
Что мы имеем? А имеем мы то, что после ввода регистрационных данных плагин пытается "поговорить с сервером" на предмет подтверждения серийного номера. Алгоритм проверки находится на сервере, и только после подтверждения покупки сервер отдаст плагину какой-то файл лицензии неизвестного формата. Не удивлюсь, что выполняется еще и привязка к железу, слишком уж досконально Ximagic Denoiser собирает данные о системе. Значит вариант с генераторами ключей заведомо отпадает, требуется точечная хирургия.
Поищем в файле какие-нибудь строчки из триального окна. Найдется и текст, и заголовок окна:
Строка сообщения
Теперь отправим плагин в дизассемблер. Не стоит обращать внимания на расширение, это самый обычный исполняемый файл, а точнее, библиотека. Когда ассемблерный листинг будет получен, посмотрим, как и где формируется триальное окно:
Code (Assembler) : Убрать нумерацию
- ; Проверить значение переменной
- .text:1002C90A cmp [ebp+var_1A1], 0
- ; Если оно не равняется 0, то триальное окно не показывать
- .text:1002C911 jnz short loc_1002C98A
- .text:1002C913 push offset aYouAreUsingThe
- ; "You are using the trial version which c"...
- .text:1002C918 lea ecx, [ebp+var_2C]
- .text:1002C91B call sub_100062E0
- .text:1002C920 push offset aTrialVersion
- ; "Trial Version"
- .text:1002C925 lea ecx, [ebp+var_44]
- .text:1002C928 mov byte ptr [ebp+var_4], 23h
- .text:1002C92C call sub_100062E0
- .text:1002C931 push 0
- .text:1002C933 lea eax, [ebp+var_2C]
- .text:1002C936 mov byte ptr [ebp+var_4], 24h
- .text:1002C93A push eax
- .text:1002C93B lea eax, [ebp+var_44]
Code (Assembler) : Убрать нумерацию
- .text:1002C565 call sub_10184790
- .text:1002C56A cmp [ebp+var_1C], 0
- ; Какая-то проверка
- .text:1002C56E jz short loc_1002C5B3
- .text:1002C570 lea eax, [ebp+var_44]
- .text:1002C573 push eax
- .text:1002C574 call sub_1018A1B0
- .text:1002C579 add esp, 4
- .text:1002C57C lea eax, [ebp+var_44]
- .text:1002C57F mov byte ptr [ebp+var_4], 15h
- .text:1002C583 push eax
- .text:1002C584 lea eax, [ebp+var_2C]
- .text:1002C587 push eax
- .text:1002C588 push dword_1025896C
- .text:1002C58E push dword_10258974
- ; Функция проверки лицензии
- .text:1002C594 call sub_1001CDF0
- .text:1002C599 add esp, 10h
- ; Сохранить в переменную результаты проверки
- .text:1002C59C mov [ebp+var_1A1], al
- .text:1002C5A2 cmp [ebp+var_30], 10h
- .text:1002C5A6 jb short loc_1002C5B3
- .text:1002C5A8 push [ebp+var_44]
Сохраняем изменения, запускаем Photoshop, открываем какое-нибудь изображение и применяем к нему фильтр. Никаких триальных окон больше не появляется. Для очистки совести переводим системное время на пару месяцев назад и повторяем операцию. Все работает как надо, цель достигнута.
Просмотров: 2803 | Комментариев: 11
Метки: исследование защиты, графика
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Oleg
(25.12.2024 в 12:45):
А нельзя ли написать то же но для чайников, т.е. для тех кто пользуется этим плагином, а не кто создает их.
Den
(08.11.2020 в 21:13):
В чем можно дизассемблинг сделать, как прога на последнем скрине называется?
ManHunter
(02.09.2018 в 00:44):
Да, тоже хороший вариант.
voffka
(29.08.2018 в 12:56):
pawel97, или базанезависимый код пиши
патчим 00510022
00C5B0AE PUSHAD
00C5B0AF PUSHFD ;сохраняем регистры
00C5B0B0 CALL 00C5B0B5 ;Call на следующую процедуру
00C5B0B5 POP EAX ;CallBack в Eax
00C5B0B6 SUB EAX,0085B0B5 ;минус RVA=Image Base в EAX
00C5B0BB MOV BYTE PTR DS:[EAX+110022],75 ;делаем грязное дело Image Base+смещение
00C5B0C2 POPFD
00C5B0C3 POPAD ;восстанавливаем регистры
патчим 00510022
00C5B0AE PUSHAD
00C5B0AF PUSHFD ;сохраняем регистры
00C5B0B0 CALL 00C5B0B5 ;Call на следующую процедуру
00C5B0B5 POP EAX ;CallBack в Eax
00C5B0B6 SUB EAX,0085B0B5 ;минус RVA=Image Base в EAX
00C5B0BB MOV BYTE PTR DS:[EAX+110022],75 ;делаем грязное дело Image Base+смещение
00C5B0C2 POPFD
00C5B0C3 POPAD ;восстанавливаем регистры
ManHunter
(29.08.2018 в 11:23):
Добавляешь пустую секцию, точку входа исправляешь на нее или втыкаешь JMP откуда надо, в зависимости от задачи. Если без релоков не обойтись, то есть такая утилита Reloz, с помощью которой можно добавлять свои релоки. Может быть есть и еще какие-то утилиты для этого, но я особо не искал.
pawel97
(29.08.2018 в 10:57):
А как к чужой dll свой код дописать? Проблемы начинаются, когда она по не своей Image Base грузится. Знаю что дело в релоках, но что с ними делать?
ManHunter
(29.08.2018 в 10:50):
Через фотошоп или через программы, которые этот формат поддерживают. Плагины будут в списке исполняемых модулей.
Михаил
(29.08.2018 в 09:51):
я не пойму файлик с расширением 8bf пишите что не обращать внимание на расширение, да он открывается, но как его запускать что б в CALL к примеру войти или тут только метод проб и ошибок?
voffka
(28.08.2018 в 17:43):
nubuser, На уровне крякми так можно поизвращаться, на уровне продукта бессмысленно. Куда проще скачивать маленький ключ и расшифровывать любой величины участок кода. Но защита эта, как и первая, стойкая до первого утекшего ключа. Ну и не забываем про ASLR.
ManHunter
(28.08.2018 в 15:33):
Снимают дамп памяти после скачивания кода, "вклеивают" исправленную секцию в исходный файл, затем в нем же отключают скачивание. Как-то так. Но это в идеальном случае.
nubuser
(28.08.2018 в 14:32):
А бывает, что по запросу с сервера докачивается какая-то часть кода?
В общих чертах, в таких случаях что делают, если это так?
В общих чертах, в таких случаях что делают, если это так?
Добавить комментарий
Заполните форму для добавления комментария