Blog. Just Blog

Исследование защиты программы 3D Button Creator Gold

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

В стародавние времена, когда о HTML5, CSS3 и прочих спецэффектах никто даже не мечтал, для создания красивых графических кнопок для web-сайтов использовались различные программы. Одна из них - 3D Button Creator Gold. Сейчас большинство визуальных эффектов легко достигается без использования графики, так что программа сгодится только в качестве подопытного для ковыряния.

Скачиваем с офсайта дистрибутив, устанавливаем, запускаем. Триальных окон вроде бы нет, ограничений по времени работы тоже, но на создаваемые изображения накладывается надпись "not registered". Сохраняются картинки, соответственно, тоже с этим маркером. Других отличий от полной версии я не нашел. Исполняемый файл ничем не упакован, попробуем найти в нем эту строчку. Обнаруживаются два ее экземпляра в разных местах файла.

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

Первое, что я решил попробовать - забить первую букву строки нулевым символом. Таким образом маркер на картинку будет накладываться, но состоять он будет из пустой строки. Примерно то же мы делали в одной из предыдущих статей, но там была прозрачная картинка. Сейчас фокус удался, но только частично, так как пропала только первая буква, замененная нулевым символом. Не проблема, возвращаемся в редактор и забиваем обе надписи целиком одними пробелами.

Забиваем надпись пробелами
Забиваем надпись пробелами

Запускаем, смотрим. Надписи на кнопках пропали, при сохранении картинки тоже не портятся. Цель достигнута. На этом можно было бы и остановиться, но для полной красоты уберем надписи о регистрации на вкладке "About". Но тут нам уже понадобится дизассемблер. Если внимательно посмотреть на место в файле, где мы выполняли патч, то рядом можно обнаружить строки, которые явно относятся к регистрации.

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

По перекрестным ссылкам на эти строки выходим на достаточно объемную функцию. Если запустить программу под отладчиком, поставить точку останова на начало этой функции (адрес 0050FF18), а затем попытаться ввести какой-нибудь серийник в поле на вкладке "About", то точка останова будет срабатывать при каждом нажатии клавиши. То есть проверка правильности серийника выполняется автоматически при изменении поля ввода. Причем интересно, что текстовые строки сообщений о правильной или неправильной регистрации нигде не выводятся, похоже, что они используются в качестве хэшей или каких-то констант при вычислениях. После цикла вычислений выполняется проверка:
  1. CODE:00510596                 cmp     ds:dword_524768, 8
  2. ; При неправильном серийнике этот переход не срабатывает
  3. CODE:0051059D                 jnz     short loc_5105F2
  4. CODE:0051059F                 mov     eax, [ebp+var_4]
  5. CODE:005105A2                 mov     eax, [eax+59Ch]
  6. CODE:005105A8                 xor     edx, edx
  7. CODE:005105AA                 call    sub_444650
  8. CODE:005105AF                 mov     eax, [ebp+var_4]
  9. CODE:005105B2                 mov     eax, [eax+59Ch]
  10. CODE:005105B8                 mov     edx, offset a43267 ; "43267"
  11. CODE:005105BD                 call    sub_444760
  12. CODE:005105C2                 mov     eax, [ebp+var_4]
  13. CODE:005105C5                 mov     eax, [eax+5A0h]
  14. CODE:005105CB                 xor     edx, edx
  15. CODE:005105CD                 call    sub_444650
  16. CODE:005105D2                 mov     eax, [ebp+var_4]
  17. CODE:005105D5                 mov     eax, [eax+5A4h]
  18. CODE:005105DB                 xor     edx, edx
  19. CODE:005105DD                 call    sub_444650
  20. CODE:005105E2                 mov     eax, [ebp+var_4]
  21. CODE:005105E5                 mov     eax, [eax+68Ch]
  22. CODE:005105EB                 xor     edx, edx
  23. CODE:005105ED                 call    sub_444650
  24. CODE:005105F2 loc_5105F2:
Если пропатчить проверку таким образом, чтобы условный переход не выполнялся, то это активирует ветку алгоритма, отвечающую за правильную регистрацию. Просто заNOPим этот переход, сохраним изменения и запустим программу. Поле ввода серийника пропало.

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

Вот такой получился "кряк для самых маленьких". Программа работает, но только результаты ее работы уже никому не нужны, впрочем, как и она сама.

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

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

Комментарии

Отзывы посетителей сайта о статье
voffka (13.02.2016 в 01:59):
ЦитатаСейчас фокус удался, но только частично, так как пропала только первая буква, замененная нулевым символом.

Этож дэльфа, перед строкой идет дворд с длинной, 0E->00
brute (12.02.2016 в 20:18):
pawel97 - согласен! Конфузер этот всеми публичными тулзами не снимается, арма последняя тоже, и статей в инете что-то не видать..
ManHunter (12.02.2016 в 16:21):
По дотнету есть хорошие специалисты, у них и надо спрашивать.

Цитатанаписано про защиту из серии mov al,1/ret уже вагон.

И будет написано еще столько же. Серьезные вещи обходятся такими методами, которые, во-первых, иногда просто нереально объяснить простым языком, откуда что взялось и как выйти на тот или иной код, а во-вторых, эти методы часто "эксклюзивные" и делиться ими нет никакого желания.
Пробудить в людях интерес к реверсингу - вот для чего я это все делаю. А интерес увеличивается в разы, когда все сразу получается, и mov al,1/ret для этого подходит как нельзя лучше. Кто захочет, тот пойдет самостоятельно дальше.
pawel97 (12.02.2016 в 15:54):
ManHunter, благодарю за передачу бесценного опыта новичкам, а главное за подачу материала - один из немногих блогов, где всё понятно и доступно, по-русски так сказать.
Но, при всём уважении, написано про защиту из серии mov al,1/ret уже вагон. Считаю, что всем, кто способен учиться, а не просто выполнять по пунктам и спотыкаться при банальной смене адресов в новых версиях, хватит максимум пятака таких статей.
Очень бы хотелось научиться чему-то более серьёзному. Как пример, предлагаю (если интересно, конечно) написать про снятие дотнет обфускатора Confuser, с которым de4dot не справляется. В гугле что-то есть, но какой-то долгий и сложный путь с использованием windbg и один лишь намёк, что есть варианты куда проще. Хотелось бы обойтись спец. инструментарием для дотнета, если это возможно, или хотя бы более привычным olly.

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

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

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