Исследование защиты программы Texturizer
Скриншот программы Texturizer
Texturizer - маленький и шустрый текстовый редактор с подсветкой синтаксиса около 30 языков программирования и различными функциями, присущими "взрослым" IDE. Что, впрочем, не мешает ему быть использованным даже в качестве замены Блокнота для редактирования текстов. А вот ограничение в месяц триального срока и двадцатка баксов за коммерческую лицензию - это как раз мешает.
На офсайте почему-то выложена старая версия редактора, более свежий дистрибутив можно найти тут. Скачиваем, устанавливаем, смотрим. Программа написана на Visual Basic, отправляем его в дизассемблер. Пока тот работает, посмотрим, как программа реагирует на неправильные регистрационные данные:
Сообщение о неправильной регистрации
Отлично, строка сообщения у нас есть. Поищем ее в листинге дизассемблера и посмотрим условия ее появления.
Code (Assembler) : Убрать нумерацию
- .text:0051A4DE mov edx, [ebp-18h]
- .text:0051A4E1 push ecx
- .text:0051A4E2 push edx
- .text:0051A4E3 call sub_519520
- .text:0051A4E8 mov ebx, ds:__vbaStrMove
- .text:0051A4EE mov edx, eax
- .text:0051A4F0 lea ecx, [ebp-20h]
- .text:0051A4F3 call ebx ; __vbaStrMove
- .text:0051A4F5 push eax
- .text:0051A4F6 call ds:__vbaStrCmp
- ; Записать результат сравнения строк в регистр EDI
- .text:0051A4FC mov edi, eax
- .text:0051A4FE lea eax, [ebp-20h]
- .text:0051A501 neg edi
- .text:0051A503 lea ecx, [ebp-1Ch]
- .text:0051A506 push eax
- .text:0051A507 sbb edi, edi
- .text:0051A509 lea edx, [ebp-18h]
- .text:0051A50C push ecx
- .text:0051A50D inc edi
- .text:0051A50E push edx
- .text:0051A50F push 3
- .text:0051A511 neg edi
- .text:0051A513 call ds:__vbaFreeStrList
- .text:0051A519 lea eax, [ebp-34h]
- .text:0051A51C lea ecx, [ebp-30h]
- .text:0051A51F push eax
- .text:0051A520 push ecx
- .text:0051A521 push 2
- .text:0051A523 call ds:__vbaFreeObjList
- .text:0051A529 add esp, 1Ch
- ; Проверить содержимое регистра DI
- .text:0051A52C test di, di
- ; Вывести сообщение о неправильной регистрации
- .text:0051A52F jz loc_51A9C0
- .text:0051A535 mov edi, ds:__vbaStrCopy
- ...
- ...
- ...
- .text:0051AA0E call edi ; __vbaStrCopy
- .text:0051AA10 xor edx, edx
- .text:0051AA12 lea ecx, [ebp-28h]
- .text:0051AA15 call edi ; __vbaStrCopy
- .text:0051AA17 mov edx, offset aTheUserNameOrR
- ; "The user name or registration code is n"...
- .text:0051AA1C lea ecx, [ebp-24h]
- .text:0051AA1F call edi ; __vbaStrCopy
- .text:0051AA21 mov edx, offset aError ; "Error"
- .text:0051AA26 lea ecx, [ebp-20h]
- .text:0051AA29 call edi ; __vbaStrCopy
- .text:0051AA2B mov edx, [ebp-18h]
- .text:0051AA2E lea ecx, [ebp-1Ch]
Поднимаем глаза на несколько строчек выше и смотрим, что там делается. А там готовится контрольная строка для сравнения. Более того, если посмотреть под отладчиком в пошаговом режиме, то вот тут
Code (Assembler) : Убрать нумерацию
- .text:0051A4DB mov ecx, [ebp-1Ch]
- .text:0051A4DE mov edx, [ebp-18h]
- ; Передать на проверку серийник и регистрационное имя
- .text:0051A4E1 push ecx
- .text:0051A4E2 push edx
- ; Вызвать функцию проверки
- .text:0051A4E3 call sub_519520
- .text:0051A4E8 mov ebx, ds:__vbaStrMove
- .text:0051A4EE mov edx, eax
Code (Assembler) : Убрать нумерацию
- .text:005195C6 push 1
- .text:005195C8 lea ecx, [ebp+var_34]
- ; Список запрещенных символов в имени
- .text:005195CB push offset a?_0 ; "/\\!?#"
- .text:005195D0 push ecx
- .text:005195D1 push eax
- .text:005195D2 push edx
- .text:005195D3 mov [ebp+var_2C], 1
- .text:005195DA mov [ebp+var_34], 2
- .text:005195E1 call ds:rtcMidCharBstr
- .text:005195E7 mov edx, eax
- .text:005195E9 lea ecx, [ebp+var_24]
- .text:005195EC call edi ; __vbaStrMove
- .text:005195EE push eax
- .text:005195EF push esi
- ; Проверяемый символ встречается в имени?
- .text:005195F0 call ds:__vbaInStr
- .text:005195F6 mov esi, eax
- .text:005195F8 lea ecx, [ebp+var_24]
- .text:005195FB neg esi
- .text:005195FD sbb esi, esi
- .text:005195FF neg esi
- .text:00519601 neg esi
- .text:00519603 call ebx ; __vbaFreeStr
- .text:00519605 lea ecx, [ebp+var_34]
- .text:00519608 call ds:__vbaFreeVar
- .text:0051960E test si, si
- .text:00519611 jnz short loc_519626
- .text:00519613 mov ecx, [ebp+var_18]
- .text:00519616 mov eax, 1
- .text:0051961B add ecx, eax
- .text:0051961D xor esi, esi
- .text:0051961F mov [ebp+var_18], ecx
- .text:00519622 mov eax, ecx
- .text:00519624 jmp short loc_5195B7
- .text:00519626 ; ----------------------------------------------------
- .text:00519626 loc_519626:
- .text:00519626 mov esi, ds:__vbaStrCat
- .text:0051962C push offset dword_42CF7C
- .text:00519631 push offset aIllegal ; "Illegal"
- ; Если в имени обнаружился хоть один запрещенный символ, то
- ; записать в контрольную строку слово "Illegal"
- .text:00519636 call esi ; __vbaStrCat
- .text:00519638 mov edx, eax
- .text:0051963A lea ecx, [ebp+var_24]
- .text:0051963D call edi ; __vbaStrMove
- .text:0051963F push eax
- .text:00519640 push offset dword_42CF7C
Правильный серийный номер на стеке
Закрываем отладчик, запускаем программу в обычном режиме и регистрируем программу найденной парой строк "ManHunter PCL" и "C98F-608D-B0F2-9B7B-D72E-AA42-F".
Программа успешно зарегистрирована
Программа благодарит за регистрацию, значит все найдено правильно. Перезапускаем программу, так как в статусной строке все равно продолжает болтаться унылая надпись "Unregistered Version".
Программа успешно зарегистрирована
Вот теперь совсем красота. Триальные уведомления больше не показываются, в интерфейсе все чистенько, в меню пропали пункты, относящиеся к покупке и регистрации, в окне "О программе" красуется регистрационное имя. Цель достигнута.
Просмотров: 1423 | Комментариев: 9
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Федор
(30.12.2021 в 14:45):
Она и так MSVBVM60.DLL и отладчиком легко
Андрей
(29.12.2021 в 11:08):
А в чём преимущества использования Ghidra вместо IDA? Они есть?
user
(28.12.2021 в 10:05):
Та какая там магия, поиск в листинге по ссылкам на строки.
В простейшем случае.
Магия начинается, когда строки в явном виде не хранятся, тогда да.
В простейшем случае.
Магия начинается, когда строки в явном виде не хранятся, тогда да.
кодер
(27.12.2021 в 03:47):
Занимался взломом софта лет 20 назад с помощью Numega Soft-Ice и Hiew. IDA практически не пользовался, поэтому для меня до сих пор магия как люди выискивают все эти проверки регистрации без возможности поставить breakpoint. Сейчас руки не доходят мануалы читать, да и говорят сейчас многие Ghidra пользуют вместо IDA.
Однажды у меня получилось хакнуть один плагин DLL без дебагера (чисто дедуктивно), а один раз вообще резидентом под ДОС успешно ловил проверки проги защищённой HASP (тоже чисто по дедуктивным предположениям как проверка может быть организована).
А вообще, ИМХО, среди шароварок мало осталось живых проектов (хотя может и ошибаюсь). Ссылки на регистрацию на офф сайте Texturizer - не рабочие. Регистратор какой-то WERKS - но походу этот сайт скорее поднятый из вебархива дроп, для продажи ссылок сеошникам-аутричерам.
Однажды у меня получилось хакнуть один плагин DLL без дебагера (чисто дедуктивно), а один раз вообще резидентом под ДОС успешно ловил проверки проги защищённой HASP (тоже чисто по дедуктивным предположениям как проверка может быть организована).
А вообще, ИМХО, среди шароварок мало осталось живых проектов (хотя может и ошибаюсь). Ссылки на регистрацию на офф сайте Texturizer - не рабочие. Регистратор какой-то WERKS - но походу этот сайт скорее поднятый из вебархива дроп, для продажи ссылок сеошникам-аутричерам.
ManHunter
(26.12.2021 в 15:11):
А еще там сравнения сыплются просто сплошным потоком, что очень сильно подвешивает перехватчик.
user
(26.12.2021 в 15:11):
.. Да, и по меркам 2004-го года этот редактор очень не маленький, а довольно-таки пухлый. Программы с сопоставимым функционалом занимали до полумегабайта в EXE.
ManHunter
(26.12.2021 в 15:09):
Ее тоже первым делом попробовал, но она не дает пройти проверку на наличие запрещенных символов. А так да, однозначно рулит.
user
(26.12.2021 в 15:06):
Действительно, сейчас на офсайте рекламируют версию 1.8.1, однако ссылка на её скачивание битая.
Но году в 2006-м у них раздавалась рассматриваемая версия 1.9.2.
Может, сейчас исходники потеряли и оставили страничку просто для истории, х.з.
Кстати, вспомнилась утиль VBASTRCMP в виде патченной MSVBVM60.DLL
Но году в 2006-м у них раздавалась рассматриваемая версия 1.9.2.
Может, сейчас исходники потеряли и оставили страничку просто для истории, х.з.
Кстати, вспомнилась утиль VBASTRCMP в виде патченной MSVBVM60.DLL
Добавить комментарий
Заполните форму для добавления комментария
Дело привычки. Лично мне, например, Гидра недоступна, так как она существует исключительно в разрядности x64, а я признаю только x86. IDA в этом плане чуть более демократична, по крайней мере до начала 7-й версии.