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


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

Программа AttributeMagic Pro предназначена для пакетного изменения атрибутов файлов, даты создания, модификации и последнего изменения, переименования файлов на основании этих данных, а также изменения даты файла на основании EXIF-данных изображения (дата съемки). Польза от программы весьма сомнительная, особенно за эту цену, но сегодня нас интересует не программа, а поиск уязвимостей в ее защите.

Скачиваем дистрибутив, распаковываем, устанавливаем. Первичный осмотр файла показывает, что он вроде как ничем не упакован - все текстовые строчки в открытом виде, секции кода и ресурсов не сжаты и т.п. Но смущает наличие секций "upx0" и "upx1". Ни один компилятор не создает автоматически секции с такими именами, но и на сам UPX это совсем не похоже.


Названия секций PE-файла

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


Окно "О программе"

Отлично, поищем эту строчку в файле и условия ее появления в дизассемблере. Поиск приводит нас вот к такому коду:
...
.text:006528F6                 mov     eax, off_67EDEC
.text:006528FB                 mov     eax, [eax]
.text:006528FD                 xor     edx, edx
.text:006528FF                 mov     ecx, [eax]
.text:00652901                 call    dword ptr [ecx+6Ch]
; Вызвать функцию проверки регистрации
.text:00652904                 call    sub_5A8954
; Если она вернула взведенный бит, то программа не зарегистрирована
.text:00652909                 test    al, 2
.text:0065290B                 jnz     short loc_652920
.text:0065290D                 mov     eax, off_67EDEC
.text:00652912                 mov     eax, [eax]
.text:00652914                 mov     edx, offset aRegistered ; "Registered"
.text:00652919                 call    sub_6491A0
.text:0065291E                 jmp     short loc_652931
.text:00652920 ; --------------------------------------------
.text:00652920 loc_652920:
.text:00652920                 mov     eax, off_67EDEC
.text:00652925                 mov     eax, [eax]
.text:00652927                 mov     edx, offset aUnregistered ; "Unregistered"
.text:0065292C                 call    sub_6491A0
...

Вроде все понятно, есть какая-то функция проверки регистрации, и, если она вернула что-то типа EAX=0, то программа считается зарегистрированной. Посмотрим теперь на функцию проверки:
; Переход в секцию VMProtect
.text:005A8954                 call    sub_8582AF
.text:005A8959                 db      67h
.text:005A8959                 mov     eax, eax
.text:005A895C                 push    ebp
.text:005A895D                 mov     ebp, esp
.text:005A895F                 push    ecx
.text:005A8960                 mov     [ebp-4], eax
.text:005A8963                 push    offset dword_5A8984
; Переход в секцию VMProtect
.text:005A8968                 jmp     loc_87DA0A
...

Лютый кодо-фарш под виртуальной машиной протектора, и чем глубже - тем хуже и хуже. Разгребать это без специального инструментария нереально. Но нужно ли нам это? Вызовы функции проверки лежат в открытом виде, так что можно просто пропатчить их, или же прописать пару команд XOR EAX,EAX; RET в начало самой функции проверки. Это и есть главная ошибка аффтара, если не считать ошибок в ДНК и ошибки в выборе профессии. Ворота поставил, а забор забыл. Патчим функцию проверки, сохраняем изменения, запускаем.


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

Наг-окно пропало, пункт о регистрации в меню стал неактивным, а в окне "О программе" написано "Registered". Все прекрасно работает, наша цель достигнута. А любителям разных говнопротекторов я рекомендую пересмотреть свои взгляды на жизнь.
Теги:
защита, взлом
Добавлено: 21 Сентября 2013 04:58:41 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...