Blog. Just Blog

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

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

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

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

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

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

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

Отлично, поищем эту строчку в файле и условия ее появления в дизассемблере. Поиск приводит нас вот к такому коду:
  1. ...
  2. .text:006528F6                 mov     eax, off_67EDEC
  3. .text:006528FB                 mov     eax, [eax]
  4. .text:006528FD                 xor     edx, edx
  5. .text:006528FF                 mov     ecx, [eax]
  6. .text:00652901                 call    dword ptr [ecx+6Ch]
  7. ; Вызвать функцию проверки регистрации
  8. .text:00652904                 call    sub_5A8954
  9. ; Если она вернула взведенный бит, то программа не зарегистрирована
  10. .text:00652909                 test    al, 2
  11. .text:0065290B                 jnz     short loc_652920
  12. .text:0065290D                 mov     eax, off_67EDEC
  13. .text:00652912                 mov     eax, [eax]
  14. .text:00652914                 mov     edx, offset aRegistered ; "Registered"
  15. .text:00652919                 call    sub_6491A0
  16. .text:0065291E                 jmp     short loc_652931
  17. .text:00652920 ; --------------------------------------------
  18. .text:00652920 loc_652920:
  19. .text:00652920                 mov     eax, off_67EDEC
  20. .text:00652925                 mov     eax, [eax]
  21. .text:00652927                 mov     edx, offset aUnregistered ; "Unregistered"
  22. .text:0065292C                 call    sub_6491A0
  23. ...
Вроде все понятно, есть какая-то функция проверки регистрации, и, если она вернула что-то типа EAX=0, то программа считается зарегистрированной. Посмотрим теперь на функцию проверки:
  1. ; Переход в секцию VMProtect
  2. .text:005A8954                 call    sub_8582AF
  3. .text:005A8959                 db      67h
  4. .text:005A8959                 mov     eax, eax
  5. .text:005A895C                 push    ebp
  6. .text:005A895D                 mov     ebp, esp
  7. .text:005A895F                 push    ecx
  8. .text:005A8960                 mov     [ebp-4], eax
  9. .text:005A8963                 push    offset dword_5A8984
  10. ; Переход в секцию VMProtect
  11. .text:005A8968                 jmp     loc_87DA0A
  12. ...
Лютый кодо-фарш под виртуальной машиной протектора, и чем глубже - тем хуже и хуже. Разгребать это без специального инструментария нереально. Но нужно ли нам это? Вызовы функции проверки лежат в открытом виде, так что можно просто пропатчить их, или же прописать пару команд XOR EAX,EAX; RET в начало самой функции проверки. Это и есть главная ошибка аффтара, если не считать ошибок в ДНК и ошибки в выборе профессии. Ворота поставил, а забор забыл. Патчим функцию проверки, сохраняем изменения, запускаем.

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

Наг-окно пропало, пункт о регистрации в меню стал неактивным, а в окне "О программе" написано "Registered". Все прекрасно работает, наша цель достигнута. А любителям разных говнопротекторов я рекомендую пересмотреть свои взгляды на жизнь.

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

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

Комментарии

Отзывы посетителей сайта о статье
DimitarSerg (30.01.2012 в 13:19):
Ололо... Круто ;)
ManHunter, брависимо !
Это, кстати, не единичный случай кривого "навеса" говнопротекторов.
Кто в теме, то сразу вспомнит известного чела и его софт (не буду уточнять), который спрятал функции проверки кода под нехило запутанную ВМ + обфускацию, а в итоге сравнение серийников оказалось за бортом всего этого фарша и даже новичек, первый раз увидивший отладчик мог получить серийничек под себя.
ManHunter (29.01.2012 в 22:10):
Это лишь частный случай, без упаковки и с совершенно неграмотным использованием возможностей говнопрота. Если его правильно навесить, то так легко с ним уже не разделаться.

Dimas, как обычно, IDA и HiEW, больше ничего не надо. А, ну и голова, конечно, тоже.
ledhead (29.01.2012 в 16:33):
А я, глупыш, с VMprotect возился...
ManHunter, элегантно, как всегда, данке шон.
P.S. Отдельное спасибо за описание отпуска, очень познавательно.
С уважением.
Dimas (29.01.2012 в 15:30):
Блин я как вижу говнопрот, руки опускаются - а тут с говнопротом аффтара опустили ;-)
Интересно vmprotect ворованный или нет ?
И еще под чем исследовали, какие плугины применяли ?
Статья полный атас
Zhelezyaka (29.01.2012 в 10:24):
Эка ты их подковырнул, типа ткнул носом в изъян. )
Спасибо.
Exit (29.01.2012 в 02:23):
ManHunter, Браво!
Это было красиво!
PS давно и с большим удовольствием читаю твой блог ))

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

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

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