Blog. Just Blog

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

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

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

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

Триальное окно
Триальное окно

Исполняемый файл ничем не упакован, отправляем его в дизассемблер. А пока попробуем зарегистрировать программу какими-нибудь левыми данными.

Регистрируем программу
Регистрируем программу

На ввод любого серийника программа благодарит за регистрацию и предлагает перезапуститься, чтобы проверить корректность введенных данных. Это очень правильный ход со стороны разработчика, так как немного осложняет процесс исследования защиты.

Для поиска зацепок, я воспользуюсь проверенным методом, о котором не раз говорил. Это поиск строк, характерных для регистрации, триальности, лицензии и т.п. В коде обнаруживается вот такая строчка:

Строка в исходном коде
Строка в исходном коде

Теперь вернемся в дизассемблер и посмотрим, где и как она используется. Чутье подсказывает мне, что этот код очень похож на проверку регистрации.
  1. CODE:0049614E                 mov     dword ptr [eax+4], 14h
  2. CODE:00496155                 mov     eax, [ebp+var_8]
  3. ; Вызвать функцию проверки регистрации
  4. CODE:00496158                 call    sub_483390
  5. ; По ее результатам выполнить условный переход
  6. CODE:0049615D                 sub     al, 1
  7. CODE:0049615F                 jb      short loc_496174
  8. CODE:00496161                 jz      loc_496208
  9. CODE:00496167                 dec     al
  10. CODE:00496169                 jz      loc_4962EE
  11. CODE:0049616F                 jmp     loc_49635E
  12. CODE:00496174 ; --------------------------------------------------
  13. ; Ветка алгоритма при корректной регистрации
  14. CODE:00496174 loc_496174:
  15. CODE:00496174                 mov     eax, [ebp+var_4]
  16. CODE:00496177                 mov     eax, [eax+374h]
  17. CODE:0049617D                 call    sub_461764
  18. CODE:00496182                 mov     esi, eax
  19. CODE:00496184                 dec     esi
  20. CODE:00496185                 test    esi, esi
  21. CODE:00496187                 jl      short loc_4961A7
  22. CODE:00496189                 inc     esi
  23. CODE:0049618A                 xor     ebx, ebx
  24. CODE:0049618C loc_49618C:
  25. CODE:0049618C                 mov     eax, [ebp+var_4]
  26. CODE:0049618F                 mov     eax, [eax+374h]
  27. CODE:00496195                 mov     edx, ebx
  28. CODE:00496197                 call    sub_461728
  29. CODE:0049619C                 xor     edx, edx
  30. CODE:0049619E                 mov     ecx, [eax]
  31. CODE:004961A0                 call    dword ptr [ecx+64h]
  32. CODE:004961A3                 inc     ebx
  33. CODE:004961A4                 dec     esi
  34. CODE:004961A5                 jnz     short loc_49618C
  35. CODE:004961A7 loc_4961A7:
  36. CODE:004961A7                 mov     eax, [ebp+var_4]
  37. CODE:004961AA                 mov     eax, [eax+384h]
  38. CODE:004961B0                 mov     edx, offset aRegistered
  39. ; "Registered"
  40. CODE:004961B5                 call    sub_45E150
  41. CODE:004961BA                 lea     edx, [ebp+var_10]
  42. CODE:004961BD                 mov     eax, [ebp+var_8]
  43. CODE:004961C0                 call    sub_4837BC
Поскольку все условные переходы завязаны на результате функции по адресу 00483390, то есть смысл проверить под отладчиком, что там происходит. Загружаем программу в OllyDbg, ставим точку останова по адресу 00483390, запускаем на выполнение. После срабатывания точки останова переходим в пошаговый режим трассировки. В самом же начале в регистрах проскакивает регистрационное имя, введенный ранее левый серийник, а дальше становится совсем интересно. При трассировке видно, что строка с левым серийником сравнивается с другой строкой, более похожей на правильный серийный номер. Сохраним его куда-нибудь. Все, отпускаем отладчик на нормальное выполнение, пошаговый режим больше не нужен.

Строки для сравнения
Строки для сравнения

Проверяем регистрационное имя "ManHunter / PCL" и свежепойманный в отладчике серийник "OETPZU4E8". Вводим их в программу и перезапускаем ее. После повторного запуска окно с предложением регистрации не появляется.

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

Вкладка с покупками стала неактивной, там красуется регистрационная информация, а обнаруженное ранее слово "Registered" записывается на одну из неактивных кнопок. Цель успешно достигнута, все ограничения с программы сняты. Большое спасибо автору за полезную софтину!

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

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

Комментарии

Отзывы посетителей сайта о статье
user (13.05.2017 в 06:42):
> pawel97 (01.02.2017 в 21:03) пишет:
> Есть бесплатный аналог на .NET - SharpKeys.

А есть и не на .NET, но тоже бесплатный:
Keyremap:
old-dos.ru/dl.php?id=6350

А вот вариант того же, только пожирнее:
RemapKey:
old-dos.ru/dl.php?id=8685
Doxtur (02.02.2017 в 05:03):
Вот алго:
в верхний регистр:
4D+2
41+4
4e+6
48+8
55+A
...

И вроде серийник меньше 0xA
ManHunter (02.02.2017 в 00:46):
По-моему, функционал программы подразумевает исключительно стационарное использование. А в админском сундучке должны быть портативки для разового применения. Так что комплект инсталлятор+серйник для этой софтины самое оно. Имхо.

Рега же патчится там же в проверке, надо просто сразу вернуть правильное значение.
pawel97 (01.02.2017 в 21:03):
Знаю, что статья не о том, но... Есть бесплатный аналог на .NET - SharpKeys. Задействует твик реестра для переназначения клавиш средствами самой винды.

Кстати, рега сего чуда хранится в %ProgramData%\KeyExtender\svighostkey.dll, так что для размещения сабжа в чемоданчике сисадмина я бы всё-таки пропатчил, чтобы раз и навсегда решить вопрос с регой.

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

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

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