Взлом VMProtect защиты. Знакомство, подготовка крэкми (Глава 1)

Обсудить статью на форуме


Свежая 2020 года подборка видеоуроков, инструментов крэкера, книг и статей - здесь.

Благодарности


Я вынес эту часть руководства в самое начало по причине того, что в конце её никто просто не
читает. Я считаю своим долгом выразить благодарность людям, которые дали возможность
заниматься мне моим любимым делом. Людям, которые постоянно мне помогают или которых я
считаю профессионалами своего дела.
1) Bad_guy - Если бы этот человек в своё время не создал такой прекрасный сайт, как
www.exelab.ru , а я бы в своё время не наткнулся на него, то, скорее всего я никогда бы не
узнал, что такое реверсинг и с чем его едят;
2) Oleh Yuschuk - Огромная благодарность этому человеку за его прекрасный инструмент
OllyDbg . Это действительно самый лучший отладчик из тех, с которыми мне приходилось
работать.
3) daFix - один из моих друзей на форуме exelab. Очень хороший парень, который всегда
готов прийти на помощь;
4) Ara - строгий модератор форума exelab, но помимо строгости обладающий ещё и
хорошим чувством юмора;
5) Archer - Пожалуй, самый "закрывающий" модератор форума exelab, настоящая гроза
тупых ньюбиков. Помимо этого, человек, обладающий огромными познаниями в
программирование;
6) Hellspawn - Ещё один модератор любимого форума, с которым всегда приятно
пообщаться или просто попросить совета. В доступной и понятной форме ответит на
любой поставленный вопрос. Автор замечательных инструментов Die и Phantom;
7) pavka - Мой старый знакомый :-) . Благодаря его критике и постоянным "пинаниям" на
форуме я научился досконально изучать суть проблемы, чтобы не задавать глупых
вопросов. Настоящий профессионал своего дела;
8) vnekrilov - Талантливейший парень, который подарил мне и многим другим несколько
приятных мгновений от прочтения замечательных статей о распаковке ExeCryptor и
ASProtect;
9) PE_Kill - Один из моих кумиров, реверсер от бога. Человек, написавший распаковщик для
ASProtect.
10) Maximus - Человек утверждающий, что StarForce и Themida ацтой :-) . После общения с ним
Ваше настроение магическим образом повышается.
Заранее прошу прощения у людей, которых по той или иной причине забыл добавить в этот
список, всех просто не упомнишь. Также выражаю благодарность иностранным коллегам с
зарубежных сайтов.

Из чего состоит этот туториал


Давайте немного поговорим о том, как построен этот туториал. Он состоит из 3 глав:
1. В первой главе даются общие подробности о самом протекторе, о его опциях и способах
защиты этим протектором. Также здесь рассматривается список литературы, который
желательно прочитать, если Вы хотите хорошо разобраться в распаковке этого протектора.
Во второй части первой главы мы познакомимся с собственноручно написанным
unpackme, узнаем о том, что он из себя представляет и как его "обезвредить".
Ссылка на главу: Взлом VMProtect защиты. Знакомство, подготовка крэкми (Глава 1)

2. Вторая глава туториала предназначена для самых маленьких :-) . Здесь мы попробуем
распаковать unpackme, но практически полностью автоматизируем эту работу с помощью
скрипта от LCF-AT . Поначалу я не хотел включать эту главу в туториал, но учитывая, что у
новичков возникает очень много вопросов по работе со скриптом, да и сам скрипт не
лишён недостатков, то всё-таки было решено показать, как работать с отладчиком и его
скриптовым языком. Так же попробуем разобраться, что делать, если файл не запускается
после распаковки. Опытные crackers могут пропустить эту главу.
Ссылка на главу: Взлом VMProtect защиты. Полная распаковка программы скриптом + доработка (Глава 2)

3. Третья глава, пожалуй, самая интересная. Она посвящена инлайн патчингу VMProtect. В
этой главе немного поговорим о теории инлайн патчинга VMProtect-а, попробуем
пропатчить наш unpackme, а также посмотрим, как немного можно ускорить этот процесс.
Вторая часть этой главы будет посвящена реальной коммерческой программе - Movienizer
6.3 . Здесь мы рассмотрим как можно пропатчить заблокированный ключ к программе, и
убрать онлайн проверку регистрации.
Ссылка на главу: Взлом VMProtect защиты. Инлайн патчинг на примере программы Movienizer (Глава 3)

В заключении хочу добавить, что все инструменты, а также программы, использующиеся в
качестве подопытных приложены к этому туториалу. Ссылка на архив (пароль: www.exelab.ru): Взлом VMProtect защиты.

Глава 1


Введение


Приветствую всех читающих этот туториал. Здесь я хотел бы рассмотреть протектор исполняемых
файлов под названием VMProtect. Идея написания данного туториала была вызвана тем, что
недавно мне попалась программа, запакованная именно этим протектором. До этого я не имел
дело с VMProtect-ом, но прекрасно был наслышан о его силе. Поэтому было решено немного с
ним разобраться и почитать умные книжки :-) . И вот тут началось самое интересное - книжек то и
нету! Пожалуй, единственный человек кто ещё хоть как-то делится со своими наработками это
LCF-AT (его можно найти на форуме tuts4you). Он написал несколько не плохих туториалов по
нескольким протекторам, в том числе и по VMProtect. Я сказал, что НЕ ПЛОХИХ, и это именно не
плохие туториалы и не более того. Как реверсер, LCF-AT вызывает уважение за его мастерство и за
внесённый им вклад в сообщество исследователей программного кода. Чего только стоит его
скрипт VMProtect Ultra Unpacker 1.0 , служащий как раз для распаковки этого упаковщика. Но как
писатель он мне не понравился. После прочтения его туториалов в голове остаётся очень много
вопросов, не все моменты понятны, а иногда и выбранные им методы вызывают у меня
недоумение. Но как говорится критиковать и при этом ничего не делать самому легко, поэтому я
всё-таки решился на написание этого руководства. Скажу заранее писатель из меня тоже не очень,
поэтому - умеете лучше? Напишите сами.... :-)


Что почитать перед началом


Итак, как говорилось выше, VMProtect по своей силе находится где-то между протекторами
среднего и высшего класса. Это обусловлено тем, что VMProtect в своей сущности как протектор
нельзя назвать уж совсем "не проходимым". По моему скромному мнению тот же ASProtect и
Armadillo при грамотной установке этой защиты может доставить намного больше неприятностей.
Сила VMProtect в другом. А именно в его виртуальной машине (VM). Он то, в принципе и
разрабатывался именно как инструмент виртуализации критических кусков кода приложения, а в
дальнейшем при его развитии начали добавляться продвинутые методы защиты, которые мы
привыкли видеть в современных защищённых программах. Что касаемо непосредственно самой
виртуальной машины, то она действительно крута! Достаточно самому повозиться с ней и
посмотреть, сколько туториалов по её разборке вы сможете найти. Надеюсь, вам всё станет
понятно без слов.
Не смотря на сказанное выше взять VMProtect без подготовки навряд ли получится, а если вы
совсем зелёный новичок, то это вообще безнадёжное дело. Поэтому конечно сначала
необходимо почитать имеющуюся на сегодняшний день литературу по этой защите. Что же у нас
есть? Есть у нас, к сожалению совсем немного, а именно:
1. VMP IAT - Flash-туториал на китайском языке от Nooby , рассказывающий о
восстановлении таблицы импорта в VMProtect. Всё объяснение автор даёт на китайском
языке. Если до этого вы уже немного копались в этом протекторе, то разобраться можно. В
противном случае туториал не для новичков.
2. Manual Removing VMProtect 1.223 - туториал от Why Not Bar с переводом на английский
от TAOS . В туториале рассматривается программа VB Decompiler Lite 2.3 (привет GPCH),
которая написана на Visual Basic. Читать не советую, ибо вообще ни о чем. Складывается
такое ощущение, что даже UPX тяжелее распаковывать :-) .
3. Unpacking VMProtect 1.7 & 1.8 - Flash-туториал от LCF-AT состоящий из серии мини-
туториалов. Здесь положено начало скрипту VMProtect Ultra Unpacker 1.0 . Для новичков
будет тяжеловат, хотя одним из преимуществ является то, что в туториале рассматривается
распаковка нескольких программ.
4. Unpacking VMProtect 1.7 & 2.0 - Продолжение предыдущего Flash-туториала от того же
автора. В нем автор обновил скрипт (для работы с новыми версиями протектора) и
добавил в него API Tracer. Стиль изложения всё тот же.
5. VMProtect 1.8 - 2.x API Turbo Tracer v1.2 - Всё тот же самый LCF-AT и опять Flash. В этом
туториале довольно интересно и понятно рассказывается о нахождении OEP (Original Entry
Point) и восстановлении краденных байт. Советую изучить новичкам.
6. VMProtect CRC Bypass Methods - Опять вездесущий LCF-AT . Рассказывается о том, как
можно пройти проверку CRC при Inline патчинге VMProtect. Туториал состоит из серии
flash роликов и кратких печатных инструкций. Суть метода состоит в патчинге PE-заголовка
и подстановке при проверке фейкового (оригинального) файла. Хотя LCF-AT и пишет, что
"...I will create this tutorial again in "Newbie-Style"" - это далеко не для нубиков :-) . Это
именно тот случай, когда автор явно перемудрил, ведь есть способы намного легче.
Можно прочитать только для общего ознакомления.
7. VMProtect Defeating the CRC - туториал от SunBeam в формате PDF об инлайн патчинге
VMProtect. Вот это реально хорошая вещь, рекомендую. Довольно подробно описана сама


проверка VMProtec-та. Туториал на английском языке, но при знании языка сослужит
довольно хорошую службу.
Итак, вот практически и всё, что есть по VMProtect-у в интернете. Не густо, не правда ли? Есть ещё
VMProtect Simple Virtual Machine Overview от ciam , где кратко описывается p-code интерпретатор.
Это два небольших видео и схемы, в которых неподготовленному человеку разобраться довольно
сложно. Удивляет то, что есть же люди, которые довольно хорошо изучили этот протектор, но то
ли лень матушка их одолевает, то ли они просто не хотят делиться своими наработками.


Знакомимся с Unpackme


Начнём знакомиться с нашим unpackme. Эта мега программа :-) написана на Delphi 7, так как в
нашем случае, на чем написана программа, не имеет абсолютно никакого значения. Вот её общий
вид:

Рисунок 1. Общий вид Unpackme

В папке bin рядом с туториалом Вы сможете найти:
1. Unpackme_original.exe - оригинальный и не запакованный анпакми, служит для того
чтобы Вы смогли увидеть "чистый" код до вмешательства VMProtect-а;
2. Unpackme_vmp.exe - упакованный VMProtect-ом файл;
3. Keygen.exe - кейген к анпакми;
4. VMProtectSDK32.dll - dll SDK. В ней находятся все функции необходимые для работы с
защитой протектора;
5. Unpackme.vmp - проект защиты. Можете его использовать для защиты программы;
6. Unpackme_vmp_Unpacked.exe - unpackme распакованный с помощью скрипта.
7. Unpackme_Inline.exe - пропатченный, по технологии Inline анпакми;
8. Unpackme_Inline_Method2.exe - другой метод инлайн патча анпакми;
9. movienizer_patched.exe - пропатченный файл программы Movienizer 6.3.
В папке Source можно найти:
1. Unpackme.7z - исходник unpackme на Borland Delphi 7;
2. Keygen.7z - исходник кейгена.
В папке Tools вы найдёте:
1. VMProtect Ultimate 2.12.7z - последняя на сегодняшний день зарегистрированная и
полнофункциональная версия рассматриваемого протектора;
2. Movienizer 6.3.7z - Каталогизатор фильмов последней версии (портативная версия);
3. OllyDBG 1.10.7z - Моя версия отладчика с используемыми в этом туториале плагинами;
4. PETools 1.5.800 RC7.7z - дампер памяти от NeoX;
5. Scylla 0.9.7z - восстановитель импорта;


6. Process Monitor 3.04.7z - прекрасный шпион за всем, что можно отловить.
И наконец, папка Scripts содержит:
1. Read_CRC.osc - написанный мною для этой статьи скрипт, позволяющий прочитать все
хеши из оригинального файла;
2. CRC_Patched.osc - тоже самое, что и предыдущий, только читающий хеши из патченного
файла;
3. Save_CRC.osc - скрипт, позволяющий сохранить все хеши в отдельный файл для
последующего присоединения их к новой секции;
4. VMProtect Ultra Unpacker 1.0.txt - скрипт для распаковки от LCF-AT.
Так же рядом с этим туториалом можно найти файл Readme.txt , в котором находится краткое
описание и адреса виртуальных машин в анпакми, а также файл Key.txt , в котором находится
заблокированный ключ. Именно этим ключом нам и нужно будет зарегистрировать программу.
Главное меню анпакми содержит:
? File > Exit - Выход из программы;
? Additional > InlineMe (Mutation) - заблокированное подменю, которое нужно будет
активировать. Защищено виртуальной машиной с опцией mutation (мутация);
? Additional > InlineMe (VM) - заблокированное подменю, которое нужно будет активировать.
Защищено виртуальной машиной с опцией VM (виртуализация);
? Additional > Debugger Check - позволяет проверить, находится ли анпакми под отладкой или
нет. Включается в SDK VMProtect. Можете посмотреть, как VMProtect обнаруживает отладчик;
? Additional > Virtual Machine Present - позволяет проверить, запущен ли анпакми под
виртуальной машиной (VMware, Virtual PC, VirtualBox, Sandboxie) или нет. Включается в SDK
VMProtect. Можете посмотреть, как VMProtect обнаруживает виртуалки;
? Additional > Valid Image CRC - позволяет проверить образ программы в памяти на наличие
изменений (патчей, лоадеров и т.д.). Включается в SDK VMProtect;
? Additional > Test Crypted String - показывает динамически расшифрованную в памяти строку.
Можно посмотреть, как протектор это делает в реал-тайме. Включается в SDK VMProtect;
? Help > Register me! - выводит окно регистрации;
? Help > Instruction - показывает инструкции к анпакми;
? Help > About - показывает окно "О программе".


План работы


Теперь давайте разберёмся, что нам нужно будет сделать.
Во-первых, нам нужно будет с помощью скрипта от LCF-AT распаковать программу и немного её
поправить для того, чтобы она нормально запускалась и работала. Остальное нас пока не
интересует. Предназначено исключительно для зелёных нубиков.
Во-вторых, нам нужно будет почистить блэклист для того, чтобы наш заблокированный ключ был
принят программой. Ключ находится в файла Key.txt и имеет вид:
Name : Djeck
Key : WMDB-ESEW-1196-U1JF-15789821
Следующий шаг состоит в том, что нам нужно будет активировать отключённые подменю в
программе. Скажу сразу, что для активации подменю необходимо рядом с анпакми поместить
файл Inlineme.txt . При запуске программа ищет этот файл и если он есть активирует эти подменю.
Но это так, для общего развития. При патчинге анпакми мы должны будем активировать эти
подменю независимо от того, есть файл Inlineme.txt рядом с программой или нет. И самое
интересное, что всё это нам нужно сделать, не распаковывая программу, т.е. с помощью инлайн
патча.
И последнее, что от нас требуется, это как я сказал, посмотреть, что можно будет сделать с
реальной программой Movienizer 6.3 . Необходимо будет разобраться, как её зарегистрировать и
посмотреть насколько правильно авторы сумели установить на неё навесной протектор
VMProtect.
В конце хотелось бы добавить адреса в анпакми, где используются функции SDK VMProtect-а (в
формате начало-конец). Все адреса указаны в отладчике Olly Debugger:
0046C921-0046C969 - Virtual Machine (Mutation) - подменю "Inlineme" № 1
0046CC54-0046CCAB - Virtual Machine (Virtualization) - подменю "Inlineme" № 2
00469AB5-00469E56 - Virtual Machine ( Mutation+Virtualization) - проверка рег. ключа
0046C6D8-0046C700 - Debugger Check (проверка отладчика)
0046C770-0046C7B1 - Virtual Machine Check (проверка виртуальной машины)
0046C810-0046C851 - CRC Check (проверка памяти)
0046C898-0046C8BB - Crypt string constant (криптованная строка "Im stupid crypted string")
По адресу 00469AB5 находится начало функции (собственной разработки) проверки
регистрационного ключа. Она находится под максимальной защитой протектора - Virtual Machine (
Mutation+Virtualization). Если хотите посмотреть и ощутить реальную силу протектора, то желаю
Вам удачи :-) .


Знакомимся с VMProtect


Программа VMProtect относится к новому поколению средств защиты программного
обеспечения. VMProtect поддерживает компиляторы Delphi, Borland C Builder, Visual C/C++, Visual
Basic (native), Virtual Pascal, при этом VMProtect содержит встроенный дизассемблер,
позволяющий работать с файлами форматов EXE, DLL, BPL, OCX, SYS и подключать M P-файл,
создаваемый компилятором, для быстрого выбора участков кода, которые следует защитить. Для
автоматизации операций по защите приложения в VMProtect реализован встроенный скриптовый
язык. Программа VMProtect обладает полной поддержкой всех 32/64-разрядных операционных
систем семейства Windows: Windows 95/98/ME, Windows NT, Windows 2000, Windows XP, Windows
2003, Windows Vista, Windows 7, Windows 8.
Этот протектор создан руками наших программистов и стремительно набирает популярность. Это
конечно вызывает чувство гордости. В самом начале своего развития протектор позволял
добавить в Ваше приложение только виртуальную машину, других средств защиты он практически
не имел. Причём само добавление виртуальной машины происходило буквально за минуту, т.к. в
нем с самого начала существовал встроенный дизассемблер. Затем VMProtect стал обрастать
дополнительными средствами защиты. Чтобы посмотреть, что может предложить нам этот
протектор, достаточно посмотреть на вкладку Опции (Options):

Рисунок 2. Вкладка "Опции"

В общем-то, опции защита памяти, ресурсов и импорта является стандартом практически для всех
коммерческих протекторов, поэтому в VMProect они также присутствуют.
Опция "Упаковывать выходной файл" позволяет сжать защищённый файл, тем самым уменьшив
его размер. Достаточно интересные вещи происходят, когда авторы программного обеспечения
не используют эту опцию. Вы можете патчить файл в отладчике напрямую, так как весь код будет
как на ладони. Вам останется только пропатчить CRC проверку. Очень многие авторы не включают
эту опцию при защите, т.к. мало того, что сам протектор работает очень медленно, то и


распаковка программы в памяти также отнимает лишнее время. Мне лично попадались
программы, которые запускались 1-2 минуты, а то и больше.
Обнаружение отладчика - данная опция препятствует отладке защищённого файла. Существуют 2
типа отладчиков: User-mode (отладчики пользовательского режима: OllyDBG, WinDBG и т.п.) и
Kernel-mode (отладчики режима ядра: SoftICE, Syser и т.п.). Обнаружение отладчика происходит
до передачи управления оригинальной точке входа в программу. В случае обнаружения
отладчика будет показано соответствующее сообщение с прекращением дальнейшего
выполнения программы.
Обнаружение инструментов виртуализации - данная опция препятствует запуску защищённого
файла в различных виртуальных средах: VMware , Virtual PC , VirtualBox , Sandboxie . Обнаружение
виртуальной среды происходит до передачи управления оригинальной точке входа в программу.
В случае обнаружения виртуальной среды будет показано соответствующее сообщение с
прекращением дальнейшего выполнения программы.
Одной из самых интересных секций на вкладке Опции является секция "Компиляция".
Виртуальные Машины - Каждая ВМ будет иметь свой уникальный набор свойств. При
виртуализации различных участков кода будут использованы различные ВМ из указанного числа.
Данная опция затрудняет анализ и декомпиляцию байт-кода, т.к. взломщику придётся
проанализировать все исполнители ВМ, используемые в защищённом файле.
Контроль целостности ВМ объектов - данная опция позволяет неявно контролировать
целостность всех завиртуализированных участков кода и исполнителей ВМ. Неявный контроль
заключается в том, что при нарушении целостности объектов ВМ защищённая программа не будет
показывать никаких сообщений, а результатом подобной проверки станет неправильная работа
завиртуализированного кода, которая может привести к критическим ошибкам и, как следствие, к
полному краху защищённой программы. Также данная опция позволяет отслеживать изменение
целостности исполнителей ВМ, которая нарушается при использовании программных точек
останова при отладке защищённой программы в среде отладчика.
Шифрация регистров на выходе из ВМ - при включённой опции перед выходом из ВМ регистры
процессора будут содержать зашифрованные значения, и расшифровка этих значений происходит
в различных местах для каждого защищённого блока кода. Данная опция препятствует анализу
состояний регистров процессора при выходе из ВМ.
Скрывать константы - при включённой опции в байт-коде нельзя будет найти адреса
переменных или адреса вызываемых функций в явном виде. Данная опция не позволяет защитить
строковые константы.
Также при защите Вашего приложения, возможно присоединить к программе внешнюю dll,
которая при работе программы будет распакована в памяти (т.е. на диске она присутствовать не
будет), указать водяные знаки (чтобы можно было узнать кто "поделился" дистрибутивом
программы), а также дополнить свою программу системой лицензирования (это тоже уже стало
стандартом для коммерческих программ). Если хотите узнать о протекторе больше, почитайте
файл справки, который написан очень хорошо и подробно.


Защита Unpackme


Теперь последнее подготовительно действие - защита нашего анпакми. Защищать будем
зарегистрированным VMProtect, версии 2.12.3
Создаём новый проект, открываем наш файл Unpackme_original.exe (предварительно
переключившись в режим эксперта Настройки -> Режим эксперта ). На первой вкладке видим
список функций и процедур, которые необходимо завиртуализировать:

Рисунок 3. Вкладка "Процедуры для защиты"

VMProtect увидел их сразу, потому что эти процедуры я пометил маркерами в исходном коде.
Есть и другие варианты указания этих самых процедур (читайте файл помощи). Мне просто так
удобнее, хотя авторы советуют это делать с помощью map файлов, т.к. это имеет один важный
плюс.
Почти любая процедура или функция, обладающая локальными переменными или использующая
стек для хранения регистров и/или промежуточных результатов вычислений, имеет так
называемые пролог и эпилог, находящиеся соответственно в начале и в конце скомпилированной
процедуры или функции:


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


Если для выбора виртуализированных участков кода используется M P-файл, то пролог и эпилог
будут тоже завиртуализированы, что повысит защищённость программы. Более того, если одна
виртуализированная функция вызывается из другой виртуализированной функции, то передача
управления между ними будет осуществлена без перехода на адрес вызываемой функции (вызов
будет представлять собой простой переход на другой адрес байт-кода внутри исполнителя
виртуальной машины), что также повысит степень защищённости программы, так как внесённые
взломщиком в точку входа корректировки окажутся бесполезными. При работе с
виртуализированными функциями передача управления точке входа в завиртуализированную
функцию будет осуществлена лишь в случае вызова защищённой функции из незащищённого или
промутированного участка кода.
Вкладки "Лицензии", "DLL Box" и "Скрипт" нас пока не интересуют, поэтому сразу переходим на
вкладку "Опции".
Выставляем здесь следующие опции:

Нажимаем кнопку компиляция и пробуем запустить защищённый файл. Проект защиты VMProtect
находится в папке с анпакми.
Итак, у нас всё готово для того, чтобы наконец-то перейти к непосредственному изучению
VMProtect. Начнём с полной его распаковки с помощью скрипта от LCF-AT .

Обсуждение статьи: Взлом VMProtect защиты. Знакомство, подготовка крэкми (Глава 1) >>>


При перепечатке ссылка на https://exelab.ru обязательна.



Видеокурс ВЗЛОМ