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

Скриншот программы tinySpell+
Программа tinySpell+ предназначена для автоматической проверки правописания в любых приложениях. При обнаружении ошибки tinySpell+ сразу предлагает варианты для исправления. В платной версии поддерживаются внешние словари в формате Hunspell, что является большим преимуществом. Ну и еще некоторые полезные опции становятся доступны только после покупки. Но, как я всегда говорю, слова "купить" и "программа" ни при каких обстоятельствах не могут стоять рядом.
Забираем с офсайта дистрибутив последней версии, распаковываем, смотрим. Главный исполняемый файл ничем не упакован, отправляем его на разбор в дизассемблер. Попутно попробуем разблокировать программу, потому что без активации ее можно запустить только в пробном режиме на 15 минут. При вводе левых данных появляется следующее сообщение:

Сообщение о неправильной регистрации
А при запуске в левом нижнем углу всплывает сообщение, что, мол, unregistered и все такое. Поищем в листинге эту строку. Первым же заходом обнаруживается следующий код:
Code (Assembler) : Убрать нумерацию
- .text:004119C4 add esp, 24h
- ; Проверить значение флага регистрации
- .text:004119C7 cmp dword_45BBD4, ebx
- ; Флаг =0, программа не зарегистрирована
- .text:004119CD jz short loc_411A0F
- ; Программа зарегистрирована
- .text:004119CF lea eax, [ebp+Rect]
- .text:004119D2 push eax ; lpRect
- .text:004119D3 push edi ; hWnd
- .text:004119D4 call ds:GetWindowRect
- .text:004119DA mov eax, [ebp+Rect.bottom]
- .text:004119DD sub eax, [ebp+Rect.top]
- .text:004119E0 sar eax, 2
- .text:004119E3 push offset aLicensedTo
- ; " - licensed to:"
- .text:004119E8 push 50h
- .text:004119EA lea ebx, [eax+eax*2]
- .text:004119ED lea eax, [ebp+String]
- .text:004119F0 push eax
- .text:004119F1 call sub_432535
- .text:004119F6 mov esi, ds:SetDlgItemTextA
- .text:004119FC lea eax, [ebp+String]
- .text:004119FF add esp, 0Ch
- .text:00411A02 push eax ; lpString
- .text:00411A03 push 65h ; nIDDlgItem
- .text:00411A05 push edi ; hDlg
- .text:00411A06 call esi ; SetDlgItemTextA
- .text:00411A08 push offset byte_45F578
- .text:00411A0D jmp short loc_411A36
- .text:00411A0F ; ----------------------------------------
- .text:00411A0F loc_411A0F:
- .text:00411A0F push offset aUnregistered
- ; " - unregistered"
- .text:00411A14 lea eax, [ebp+String]
- .text:00411A17 push 50h
- .text:00411A19 push eax
- .text:00411A1A call sub_432535
- .text:00411A1F mov esi, ds:SetDlgItemTextA
- .text:00411A25 lea eax, [ebp+String]
- .text:00411A28 add esp, 0Ch

Перекрестные ссылки на ячейку памяти
По умолчанию флаг равен 1, но по перекрестным ссылкам видно, что несколько раз он сбрасывается на нулевое значение. Поочередно пройдем по этим командам и заменим в них 0 на 1, чтобы при любом раскладе программа чувствовала себя хорошо.
Code (Assembler) : Убрать нумерацию
- .text:00415D8C mov edi, ecx
- .text:00415D8E mov byte_45F578, 0
- .text:00415D95 mov dword_45BBD4, 0
- .text:00415D9F mov dword_460448, 0
- .text:00415DA9 jle loc_415E3C
Code (Assembler) : Убрать нумерацию
- .text:0041C787 push eax ; hWnd
- .text:0041C788 call ds:SetFocus
- .text:0041C78E mov dword_45BBD4, 0
Code (Assembler) : Убрать нумерацию
- .text:00423BF6 mov dword_45BBD4, 0
- .text:00423C00 mov bEnable, 0
- .text:00423C0A mov dword_45FCB8, 0
- .text:00423C14 call sub_413800
Code (Assembler) : Убрать нумерацию
- .text:0041C82E mov eax, dword_45BBD4
- .text:0041C833 test eax, eax
- .text:0041C835 cmovz eax, esi
- .text:0041C838 mov dword_45BBD4, eax
Просмотров: 398 | Комментариев: 2
Метки: исследование защиты

Комментарии
Отзывы посетителей сайта о статье
ManHunter
(29.01.2025 в 13:31):
Ctrl+X , стандартная функция IDA

Grey
(29.01.2025 в 13:30):
Xrefs твоя разработка?

Добавить комментарий
Заполните форму для добавления комментария
