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


Скриншот программы APIS32

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

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


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

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


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

Строка о незарегистрированной программе найдена. Теперь посмотрим в дизассемблере на код, в котором выполняется разветвление алгоритма на триальную ветку и зарегистрированную.
...
; Вызвать функцию проверки регистрации
.text:00401711                 call    sub_405040
.text:00401716                 jmp     short loc_401719
.text:00401716 ; ----------------------------------------------
.text:00401718                 db 0B8h ; Анти-дизассеблерный трюк
.text:00401719 ; ----------------------------------------------
.text:00401719 loc_401719:
; Если функция проверки вернула AL=0, то программа не зарегистрирована
.text:00401719                 or      al, al
.text:0040171B                 jz      short loc_40171F
.text:0040171D                 jmp     short loc_401754
.text:0040171F ; ----------------------------------------------
.text:0040171F loc_40171F:
.text:0040171F                 mov     edi, offset aUnregistered
; "UNREGISTERED"
.text:00401724                 mov     edx, offset Filename
.text:00401729                 or      ecx, 0FFFFFFFFh
.text:0040172C                 xor     eax, eax
.text:0040172E                 repne scasb
.text:00401730                 not     ecx
.text:00401732                 sub     edi, ecx
.text:00401734                 mov     esi, edi
.text:00401736                 mov     ebx, ecx
.text:00401738                 mov     edi, edx
.text:0040173A                 or      ecx, 0FFFFFFFFh
.text:0040173D                 xor     eax, eax
.text:0040173F                 repne scasb
.text:00401741                 add     edi, 0FFFFFFFFh
.text:00401744                 mov     ecx, ebx
.text:00401746                 shr     ecx, 2
.text:00401749                 rep movsd
.text:0040174B                 mov     ecx, ebx
.text:0040174D                 and     ecx, 3
.text:00401750                 rep movsb
.text:00401752                 jmp     short loc_4017BA
.text:00401754 ; ----------------------------------------------
.text:00401754 loc_401754:
.text:00401754                 mov     edi, offset aRegisteredTo
; "Registered to "
.text:00401759                 mov     edx, offset Filename
.text:0040175E                 or      ecx, 0FFFFFFFFh
.text:00401761                 xor     eax, eax
...

Мы видим чистый код с абсолютно прозрачной структурой. Классический трюк против дизассемблера с прыжком внутрь следующей команды может быть и прокатил бы в далеком 2000 году, но сейчас IDA такие конструкции разбирает даже не поморщившись.

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


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

Сторонникам кейгенов и противникам "хирургических" методов это, конечно, не понравится. Но зато мы получили портативный инструмент, который можно хранить на флешке и использовать на любом компьютере без необходимости каждый раз вводить регистрационные данные. Правда, своего имени в окне программы мы тоже не увидим, но это совсем не страшно.
Добавлено: 13 Сентября 2013 05:49:06 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...