Blog. Just Blog

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

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

APIS32 - утилита для просмотра функций API, используемых тем или иным приложением Windows. Вам достаточно выбирать нужные вам функции из списка, запускаете программу-жертву, а APIS32 выдаст полный отчет о всех вызовах этих функций из нее. Если я не ошибаюсь, это одна из первых программ такого рода, но автор явно погорячился, сделав ее платной. Инструменты для реверса просто обязаны быть бесплатными.

На официальном сайте разработчика по какой-то причине убраны все упоминания об этой программе, но осталась прямая ссылка на дистрибутив. Может быть автору стало стыдно, что он по молодости выпустил платную программу, я не знаю. Скачиваем, устанавливаем, смотрим. Исполняемый файл упакован самодельным пакером, по всей видимости прототипом или ранней версией MPRESS (это упаковщик от автора программы). С ним легко справляется QuickUnpack, но можно без особых проблем распаковать и вручную.

Распаковываем исполняемый файл
Распаковываем исполняемый файл

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

Нехорошая строка найдена
Нехорошая строка найдена

Строка о незарегистрированной программе найдена. Теперь посмотрим в дизассемблере на код, в котором выполняется разветвление алгоритма на триальную ветку и зарегистрированную.
  1. ...
  2. ; Вызвать функцию проверки регистрации
  3. .text:00401711                 call    sub_405040
  4. .text:00401716                 jmp     short loc_401719
  5. .text:00401716 ; ----------------------------------------------
  6. .text:00401718                 db 0B8h ; Анти-дизассеблерный трюк
  7. .text:00401719 ; ----------------------------------------------
  8. .text:00401719 loc_401719:
  9. ; Если функция проверки вернула AL=0, то программа не зарегистрирована
  10. .text:00401719                 or      al, al
  11. .text:0040171B                 jz      short loc_40171F
  12. .text:0040171D                 jmp     short loc_401754
  13. .text:0040171F ; ----------------------------------------------
  14. .text:0040171F loc_40171F:
  15. .text:0040171F                 mov     edi, offset aUnregistered
  16. ; "UNREGISTERED"
  17. .text:00401724                 mov     edx, offset Filename
  18. .text:00401729                 or      ecx, 0FFFFFFFFh
  19. .text:0040172C                 xor     eax, eax
  20. .text:0040172E                 repne scasb
  21. .text:00401730                 not     ecx
  22. .text:00401732                 sub     edi, ecx
  23. .text:00401734                 mov     esi, edi
  24. .text:00401736                 mov     ebx, ecx
  25. .text:00401738                 mov     edi, edx
  26. .text:0040173A                 or      ecx, 0FFFFFFFFh
  27. .text:0040173D                 xor     eax, eax
  28. .text:0040173F                 repne scasb
  29. .text:00401741                 add     edi, 0FFFFFFFFh
  30. .text:00401744                 mov     ecx, ebx
  31. .text:00401746                 shr     ecx, 2
  32. .text:00401749                 rep movsd
  33. .text:0040174B                 mov     ecx, ebx
  34. .text:0040174D                 and     ecx, 3
  35. .text:00401750                 rep movsb
  36. .text:00401752                 jmp     short loc_4017BA
  37. .text:00401754 ; ----------------------------------------------
  38. .text:00401754 loc_401754:
  39. .text:00401754                 mov     edi, offset aRegisteredTo
  40. ; "Registered to "
  41. .text:00401759                 mov     edx, offset Filename
  42. .text:0040175E                 or      ecx, 0FFFFFFFFh
  43. .text:00401761                 xor     eax, eax
  44. ...
Мы видим чистый код с абсолютно прозрачной структурой. Классический трюк против дизассемблера с прыжком внутрь следующей команды может быть и прокатил бы в далеком 2000 году, но сейчас IDA такие конструкции разбирает даже не поморщившись.

Переходим к функции проверки регистрации по адресу 0405040. Там тоже все понятно, из реестра читаются значения ключей с именем и регистрационным номером, затем все это проверяется и возвращается результат. Проверку регистрации обойдем обычным патчем. Записываем пару команд MOV AL,1 и RET в начало функции, сохраняем изменения и APIS32 начинает прекрасно работать вообще без каких-либо регистрационных данных.

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

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

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

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

Комментарии

Отзывы посетителей сайта о статье
user (30.07.2013 в 01:34):
Только хирургия. Только она.
Matsist (20.04.2013 в 08:07):
В платности проги есть некоторая логика) Если пользователь шарит, то и сам сломает, а может и купить от щедрот)
Руслан (20.04.2013 в 05:00):
Dependency Walker
ManHunter (19.04.2013 в 17:15):
Да можно указатели "Registered to" переписать на нужную строчку и все будет красивее некуда. Про инлайн сразу не подумал, чуть попозже дополню статью.
Voffka (19.04.2013 в 17:12):
На cracklab-e есть статья по ее лому(с красивым абаутом),доработке переноса строк и инлайну.
Rogin (17.04.2013 в 23:04):
Спасибо за Ваш блог, очень познавательно.
Вася (16.04.2013 в 20:30):
Да, старинная программка :)
И ломаная переломанная.

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

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

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