Blog. Just Blog

Исследование защиты программы Icecream Image Resizer

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

Программа Icecream Image Resizer, как можно понять из названия, предназначена для изменения размеров изображений мороженого. Без регистрации за один раз программа может обработать только три файла, что для истинных любителей мороженого очень мало. Так что давайте излечим ее от жадности.

Забираем с офсайта дистрибутив, устанавливаем, смотрим. Программа написана на Qt, об этом свидетельствуют характерные названия динамических библиотек в папке. Основной исполняемый файл ничем не упакован, отправляем его на разбор в дизассемблер. Параллельно проверяем триальные ограничения:

Ограничение незарегистрированной версии
Ограничение незарегистрированной версии

Поскольку слово "PRO" в интерфейсе программы появляется слишком часто, поищем его внутри исполняемого файла:

Строки в файле
Строки в файле

Отлично, рядом находятся строки об успешной активации, версии "FREE" и "PRO" и всякое подобное. Так как мы имеем дело с Qt, то нет ничего удивительного, что в листинге дизассемблера обнаружится конструкция с указателями на строки:
  1. .data:004EC084 off_4EC084      dd offset aPro  ; "PRO"
  2. .data:004EC088 off_4EC088      dd offset aFree ; "FREE"
По перекрестным ссылкам выходим на код, где используются указатели на эти указатели.
  1. .text:00451257                 mov     ecx, eax
  2. ; Вызывать функцию проверки
  3. .text:00451259                 call    sub_432220
  4. .text:0045125E                 test    al, al
  5. .text:00451260                 jz      short loc_451279
  6. ; Указатель на указатель на строку "PRO"
  7. .text:00451262                 push    off_4EC084
  8. .text:00451268                 lea     ecx, [esp+48h+var_20]
  9. .text:0045126C                 call    ds:??0QString@@QAE@PBD@Z
  10. .text:00451272                 mov     ebx, 1
  11. .text:00451277                 jmp     short loc_45128E
  12. .text:00451279 ; ----------------------------------------------
  13. .text:00451279 loc_451279:
  14. ; Указатель на указатель на строку "FREE"
  15. .text:00451279                 push    off_4EC088
  16. .text:0045127F                 lea     ecx, [esp+48h+var_24]
  17. .text:00451283                 call    ds:??0QString@@QAE@PBD@Z
  18. .text:00451289                 mov     ebx, 2
За ветвление алгоритма отвечает функция проверки sub_432220, для перехода на PRO она должна вернуть значение, отличное от нуля. Давайте теперь посмотрим на эту функцию, она совсем крошечная:
  1. .text:00432220 sub_432220      proc near
  2. .text:00432220                 mov     al, [ecx+1Ch]
  3. .text:00432223                 retn
  4. .text:00432223 sub_432220      endp
Забиваем в ее начало любимую пару команд MOV AL,1 и RET, сохраняем изменения, проверяем результат.

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

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

Поделиться ссылкой ВКонтакте
Просмотров: 1255 | Комментариев: 4

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
ManHunter (24.09.2022 в 18:30):
Гугл - это правильное направление.
Евгений. (24.09.2022 в 15:21):
Не буду ли я назойлевым, если попрошу Вас посоветовать чтиво на эту тему? Гугл выдает всякое разное, но, быть может, Вы, как человек знающий, порекомендуете что-то надежное и проверенное?
ManHunter (24.09.2022 в 13:28):
Все есть. Динамическая модификация кода в процессе исполнения, например.
Евгений (24.09.2022 в 13:24):
Приветствую.
Давно обратил внимание, что практически все взломы Вы начинаете с дизасемблера и отладчика. И если отладчику, я знаю, вполне есть способы сопротивления, то есть ли таковые для дизасемблера? Или он нечто вроде лома, против которого нет приема, в мире кода?

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

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

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