Blog. Just Blog

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

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

Программа Grungetastic предназначена для добавления к вашим фотографиям эффектов в стиле Grunge. В результате получается нечто мрачное, похожее на кадры из Silent Hill, и даже от самой доброй фотографии начинают бегать мурашки по коже. Цена, к счастью, невысока, но на сайте разработчиков еще целая груда аналогичных программ, и если покупать каждую, то итоговая сумма набегает более чем приличная. Попробуем обойтись вообще без покупки.

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

Окно регистрации вызывается через меню Help. Регистрационного имени нет, только серийный номер. Причем программа сама подсказывает правильную длину серийника - 16 символов.

Окно регистрации
Окно регистрации

На неправильный ввод программа реагирует сообщением "Invalid Serial Number".

Сообщение о неправильной регистрации
Сообщение о неправильной регистрации

Если вы не первый раз читаете мой блог, то последующие действия должны быть вам хорошо известны. Сперва найдем в файле саму строчку. С этим никаких проблем не возникает, вот она:

Строка сообщения найдена
Строка сообщения найдена

В листинге дизассемблера находим место, где есть указатель на эту строчку. Тоже никаких проблем:
  1. ...
  2. .text:0044CBF2                 call    sub_58BD4D
  3. .text:0044CBF7                 mov     esi, eax
  4. .text:0044CBF9                 add     esp, 4
  5. .text:0044CBFC                 mov     [ebp+var_1C], esi
  6. .text:0044CBFF                 mov     bl, 4
  7. .text:0044CC01                 mov     byte ptr [ebp+var_4], bl
  8. .text:0044CC04                 test    esi, esi
  9. .text:0044CC06                 jz      loc_44CCD5
  10. .text:0044CC0C                 push    0
  11. .text:0044CC0E                 push    ecx
  12. .text:0044CC0F                 mov     eax, esp
  13. .text:0044CC11                 lea     edx, [ebp+var_10]
  14. .text:0044CC14                 mov     [ebp+var_18], esp
  15. .text:0044CC17                 push    edx
  16. .text:0044CC18                 push    eax
  17. .text:0044CC19                 mov     [ebp+var_10], offset aInvalidSerialN
  18. ; "Invalid Serial Number."
  19. .text:0044CC20                 call    sub_46BD00
  20. .text:0044CC25                 add     esp, 4
  21. .text:0044CC28                 mov     byte ptr [ebp+var_4], 5
  22. .text:0044CC2C                 mov     eax, esp
  23. .text:0044CC2E                 lea     ecx, [ebp+var_10]
  24. .text:0044CC31                 mov     [ebp+var_14], esp
  25. .text:0044CC34                 push    ecx
  26. .text:0044CC35                 push    eax
  27. .text:0044CC36                 mov     [ebp+var_10], offset aInvalidSerial
  28. ; "Invalid Serial"
  29. .text:0044CC3D                 call    sub_46BD00
  30. .text:0044CC42                 add     esp, 4
  31. .text:0044CC45                 mov     byte ptr [ebp+var_4], 6
  32. .text:0044CC49                 mov     [ebp+var_10], esp
  33. .text:0044CC4C                 lea     edx, [ebp+var_10]
  34. .text:0044CC4F                 mov     eax, esp
  35. ...
Чуть выше несколько условных переходов, один из которых ведет на сообщение о неправильной регистрации, а другой - на сообщение о правильной.
  1. .text:0044CB47                 mov     edx, [eax+0B8h]
  2. .text:0044CB4D                 add     esp, 8
  3. .text:0044CB50                 mov     ecx, esi
  4. ; Неявно вызвать какую-то функцию
  5. .text:0044CB52                 call    edx
  6. ; Проверить ее результат
  7. .text:0044CB54                 test    al, al
  8. ; Если AL!=0, то переход на сообщение о правильной регистрации
  9. .text:0044CB56                 jnz     loc_44CC5B
  10. .text:0044CB5C                 lea     eax, [ebp+arg_0]
  11. ; Проверить длину введенного серийника
  12. .text:0044CB5F                 call    sub_45BB00
  13. .text:0044CB64                 push    0D0h
  14. ; Если длина 16 символов, то серийник просто неправильный
  15. .text:0044CB69                 cmp     eax, 10h
  16. .text:0044CB6C                 jz      loc_44CBF2
  17. ; Иначе сообщение о неправильной длине введенного серийника
А вот тут возникает небольшая проблемка. Как вы уже увидели в листинге дизассемблера, функция проверки вызывается неявным образом, через содержимое регистра EDX. Статичный анализ тут не поможет, так как искомый адрес в этом случае остается неизвестным. Но ведь отладчики придумали как раз для подобных случаев! Запускаем программу под отладчиком, ставим точку останова по адресу 0044CB52, пробуем зарегистрировать любым серийником. В момент срабатывания точки останова узнаем адрес вызываемой функции. Вот она:
  1. .text:00401560                 push    ebp
  2. .text:00401561                 mov     ebp, esp
  3. .text:00401563                 push    ecx
  4. .text:00401564                 push    esi
  5. .text:00401565                 push    ecx
  6. .text:00401566                 mov     esi, ecx
  7. .text:00401568                 mov     eax, [esi]
  8. .text:0040156A                 mov     edx, [eax+0BCh]
  9. .text:00401570                 mov     ecx, esp
  10. .text:00401572                 mov     [ebp+var_4], esp
  11. .text:00401575                 push    ecx
  12. .text:00401576                 mov     ecx, esi
  13. .text:00401578                 call    edx
  14. .text:0040157A                 push    47525431h
  15. .text:0040157F                 call    sub_425120
  16. .text:00401584                 add     esp, 8
  17. .text:00401587                 test    al, al
  18. .text:00401589                 jz      short loc_401592
  19. .text:0040158B                 mov     al, 1
  20. .text:0040158D                 pop     esi
  21. .text:0040158E                 mov     esp, ebp
  22. .text:00401590                 pop     ebp
  23. .text:00401591                 retn
  24. .text:00401592 ; -----------------------------------------
  25. .text:00401592 loc_401592:
  26. .text:00401592                 mov     eax, [esi]
  27. .text:00401594                 mov     edx, [eax+0BCh]
  28. .text:0040159A                 push    ecx
  29. .text:0040159B                 mov     ecx, esp
  30. .text:0040159D                 mov     [ebp+var_4], esp
  31. .text:004015A0                 push    ecx
  32. .text:004015A1                 mov     ecx, esi
  33. .text:004015A3                 call    edx
  34. .text:004015A5                 push    424E4431h
  35. .text:004015AA                 call    sub_425120
  36. .text:004015AF                 add     esp, 8
  37. .text:004015B2                 test    al, al
  38. .text:004015B4                 setnz   al
  39. .text:004015B7                 pop     esi
  40. .text:004015B8                 mov     esp, ebp
  41. .text:004015BA                 pop     ebp
  42. .text:004015BB                 retn
Первый вариант патча: записать в самое начало команды MOV AL,1 и RET. Второй вариант патча: заNOPить условный переход по адресу 00401589. В обоих случаях функция проверки всегда будет возвращать нужное нам значение AL=1.

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

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

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

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

Комментарии

Отзывы посетителей сайта о статье
ManHunter (08.07.2015 в 00:12):
Цитатаодин exe-шник весит около 700 м

Итицкая сила... У меня ЭТО запускалось 6 минут, специально засекал. Нафиг-нафиг такое счастье. На офсайте есть все ихние поделия по отдельности.
NezloY (07.07.2015 в 22:53):
У них сейчас появилась программа все-в-одном, один exe-шник весит около 700 м, там же плагины к фотошопу, правда не standalon-ные, скачивается свободно, лечится правкой одной проверочной функции.
ManHunter (03.07.2014 в 11:14):
У них, кстати, с новыми версиями немного поменялась защита, теперь проверка вынесена в одну функцию:
Цитата.text:0061A5A0 sub_61A5A0      proc near
.text:0061A5A0     push    44425731h   <--- ID программы, значение меняется
.text:0061A5A5     call    sub_620220
.text:0061A5AA     add     esp, 4
.text:0061A5AD     test    al, al
.text:0061A5AF     jz      short loc_61A5B4  <--- патчить тут
.text:0061A5B1     mov     al, 1
.text:0061A5B3     retn
.text:0061A5B4 ; -------------------------------------------
.text:0061A5B4 loc_61A5B4:
.text:0061A5B4     push    424E4431h  <-- сигнатура для поиска
.text:0061A5B9     call    sub_620220
.text:0061A5BE     add     esp, 4
.text:0061A5C1     test    al, al
.text:0061A5C3     setnz   al
.text:0061A5C6     retn
.text:0061A5C6 sub_61A5A0      endp

Такая же приметная сигнатура, можно легко сделать универсальный патч вообще для всех программ JixiPix Software, старых и новых.
ManHunter (03.07.2014 в 07:15):
На офсайте написано что-то типа "The Premium Pack is now available as a plugin to Photoshop, Elements and Lightroom! The Premium Pack (Plugin) bundles the Ultimate Photography Suite, the Artista Series, the Creative Collection and now Aquarella, Artoon and Chalkspiration to give you 18 of our best products that seamlessly integrate into Adobe applications."
Тоже все за деньги, естественно. И прямой ссылки на закачку нет, только на покупку.
Maksovich (03.07.2014 в 01:39):
А для фотошопа нет этой же программы в виде плагина?
ManHunter (18.09.2013 в 14:11):
Нет
Vasiliy (18.09.2013 в 14:11):
Уважаемый ManHunter, было бы очень интересно увидеть в вашем исполнении "Исследование защиты программы PhotoInstrument", что-то очень она мудреная... К тому же, хоть программка удобная, но платить за оболочку для freeware плагинов 50-100 зеленых - как-то через чур. Поможете?
ManHunter (18.09.2013 в 12:03):
В дампе курсор на начало строки, затем Ctrl+R
Имя (18.09.2013 в 11:57):
Можно подробнее? Нашел я строку в херкс редакторе. Как потом найти ссылку на нее в отладчике OllyDbg? Как определить перекрестные ссылки?
ManHunter (09.09.2013 в 13:54):
При наличии ровных рук и умения это все можно наколхозить и в фотошопе. А тут можно просто тыкать в кнопку "кубики" и ждать, когда картинка станет до нужной степени страшной :)
Андрей (09.09.2013 в 13:35):
Мне причудилось что "а сейчас будет урок фотошопа" с выдранными png-шками.
user (09.09.2013 в 03:29):
((( Однако же они офигели чуток - 128 мегабайт чудо...
За такое платить преступно.
Операционная система Windows98 весит примерно столько же.

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

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

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