Почему не работает скрипт для распаковки vmprotect?
Я скачала скрипт «VMProtect 1.xx — 2.xx Ultra Unpacker v1.0».
И там в архиве были приложения для теста.
И при попытке его распаковать скрипт останавливает свою работу на 4840 строке.
Что может быть не так, то ?
- Вопрос задан более трёх лет назад
- 589 просмотров
31 комментарий
Простой 31 комментарий
Он не останавливает, там же написано что «Process terminated». Что-то не срабатывает видать. Или ложно срабатывает. Может быть там какая-нибудь защита от отладки, может ещё чего подобное. Может быть этот скрипт не способен корректно работать без помощи плагинов PhantOm и StrongOD или аналогичных. В общем экстрасенсы затрудняются ответить 😉
Ternick @Ternick Автор вопроса
pfemidi, Это обычный анпакМе который идёт с этим скриптом в коробке там нет никакой защиты ВООБЩЕ кроме vmprotect. И там стоят все скрипты которые должны стоять и настроены так как и должны быть настроены !
Ternick @Ternick Автор вопроса
pfemidi, И ДА Я УСТАНОВИЛ ТЕ 2 ПЛАГИНА И НАСТРОИЛ ИХ КАК ТАМ НАПИСАНО !
Ternick, тогда может быть этот скрипт заточен на другую версию vmprotect.
Ternick @Ternick Автор вопроса
pfemidi, Тогда где логика со скриптом ложить unpackme если версии не совпадают, это уже бред + там есть видео в которых показывается что и как делать 🙂 Я с пытался распаковать самый простой unpackme и скрипт виснет и останавливается на run и так на любом приложении !
Я скачал именно этот скрипт «на посмотреть». Какой конкретно UnPackMe.exe из примеров не распаковывается? Их там потому что несколько.
Ternick @Ternick Автор вопроса
pfemidi, VMProtect 1.8 AL Manually
И там где то в видео которые в exe упакованные есть гайд как его распаковать.
Ternick @Ternick Автор вопроса
У меня это вообще не работает, у меня под виртуалкой x86_64, а надо чтобы было просто x86. Живого Windows у меня нет и не будет никогда, а переустанавливать на виртуалку x86 мне лениво. Так что sorry.
Ternick, скрипт прекрасно работает и всё распаковывает. Я проверял именно на «VMProtect 1.8 AL Manually» из комплекта этого скрипта. Установил в виртуалке Windows XP SP3 и проверил. Чтобы не быть голословным даже записал видео как этот скрипт распаковывает этот «VMProtect 1.8 AL Manually».
Вот видео в формате mp4 (14 мегов)
Вот на всякий случай то же самое видео в формате avi (82 мега) если вдруг почему-то mp4 не будет показываться.
Скрипт прекрасно отрабатывает, ни на какой строке 4840 не останавливается и полностью распаковывает этот UnPackMe.exe из каталога «VMProtect 1.8 AL Manually».
Ternick @Ternick Автор вопроса
pfemidi, Ок, спасибо. Видимо мне нужно будет нарыть комп на xp 🙂
Вот будет ностальгия 🙂
Ternick, на Windows Seven 32 тоже прошло на ура. На Windows Seven 64 не проверял, а Windows 8 и Windows 10 у меня физически нет ни живых, ни виртуальных и установить неоткуда, я Windows старше семёрки вообще никогда в живую не видел, только на картинках.
Ternick @Ternick Автор вопроса
pfemidi, Как же я вам завидую 🙂
Ternick, а вот на Windows Seven 64 не прошло. Но не скрипт виноват, сам vmprotect просёк что его трассируют и вывел окно с надписью что обнаружен отладчик, дальше он работать не будет и завершился. Так что надо однозначно 32-хбитный Windows и чтобы или XP, или Windows Seven. За 8 и 10 уже ничего не скажу.
Ternick @Ternick Автор вопроса
pfemidi, Ну я с самого начала тупанул и установил sp1 x64 (скрипт работал, но приложение видело что его дебажат и показывало об этом уведомление).
Потом увидел что sp 1 и установил sp3 x32 (не нашёл x64).
И как только в ollydbg перетаскиваю .exe и оно пытается загрузить что то и крашиться.
И я внимательно рассматривал видео пример распаковки и автор использует не ollydbg, а какую то странную версию этого дебагера (которую я так и не нашёл).
Статья Хищник среди нас. Учимся реверсить на примере Predator
Введение
Наверное тебе всегда было интересно, как работают современные малвари. Шифровальщики, ратники, стиллеры и другие популярные вирусы это всего лишь разновидность программ заточенные под определенные задачи. Описывать каждый из них я не стану, а лучше расскажу тебе как специалисты по информационной безопасности вскрывают такое. Для примера я взял когда-то знаменитый стиллер Predator. Он имеет обширный арсенал функций и конечно же крякнутую версию по которой будет проще ориентироваться. Давай приступим к делу.
План работы
Хуже чем отсутствия плана ничего быть не может. Поэтому давай я введу тебя в курс дела. Сначала мы разберем теоретическую часть, где я опишу основы реверс-инженерии и расскажу как это работает. Также тебе придется познакомиться с матчастью, которая плотно связанна с таким типом деятельности. Ну а какая же теория без практики! Для этого мы настроим среду анализа и попробуем вскрыть нашего хищника при помощи популярных утилит. Не буду задерживать, перейдем к основам.
Основы реверс-инженерии
Сейчас, в условиях цифрового мира многие вирусописатели стали прибегать к изощренным способам защиты своего детища от откладки, дизассемблирования и дальнейшего анализа кода. В связи с этим теперь каждый уважающий себя реверс-инженер обязан знать как распаковывать исполняемые файлы. Самые распространенные упаковщики это UPX, VMProtect, FSG и другие. По мимо них создатели вирусов применяют протекторы. Их основная задача это защита исходного кода от посторонних глаз. Как метод защиты применяют обфускацию, шифрование или встраивание функций антиотладки.
Как ты уже догадался, чтобы добраться до заветной частички кода приходится снимать весь обвес, который применял сам разработчик вируса. Такой процесс зависит от запутанности кода. Бывают ситуации, когда вирус имеет стандартный набор защиты, который снимается несколькими утилитами. В других же случаях приходится включать творческий режим и часами колупать защиту, которую придумал автор. Можешь не волноваться, дальше стандартных протекторов в статье я не уйду.
Итак, ты столкнулся с самым стандартным вирусом, который покрыт защитой. Тут есть несколько вариантов развития событий. Ты можешь использовать автоматический распаковщик, которые специально заточены под это. Они основываются уже на известных алгоритмах упаковки и защиты. К примеру, чтобы снять UPX ты можешь использовать UN-PACK. Чтобы вынести защиту ACProtect следует использовать ACKiller, ну а ASProtect ты можешь вынести с ноги используя Stripper.
Второй вариант развития событий это использовать универсальные распаковщики. К примеру QuickUnpack, RL!dePacker или Dr.Web FLY-CODE Unpacker, который основан на движке FLY-CODE антивируса Dr.Web. Отличие от первой ситуации в том, что большую часть работы придется делать самим. В любом случаи такой расклад событий гораздо лучше, чем последний метод о котором я расскажу далее.
Если все же тебе в руки попался профессионал своего дела, то вирус будет покрыть особым типом защиты, который скорее всего будет создан самим разработчиком малвари. Здесь потребуется ручная распаковка с помощью x64dbg или любого другого дизассемблера. Если файл запакован чем-то неизвестным, то это можно распознать по функциям GetProcAddressA, LoadLibraryA или GetModuleHandle из библиотеки kernal.
Как работать с вирусом
- Определение сигнатуры упаковщика;
- Поиск Original Entry Point (OEP);
- Дамп вируса на диске;
- Восстановление кода вируса (таблицы импорта/экспорта);
- Пересборка.
- Entry Point — адрес, по которому передается управление после загрузки программы в оперативную память.
- Breakpoints — точки останова, их используют для анализа выполняемого кода. Таким образом можно узнать где и что выполняется в вирусе.
- Original Entry Point (OEP) — это адрес, с которого бы начала выполняться программа, если бы не была упакован.
- Остановка при чтении;
- Остановка при записи;
- Выполнение памяти по заданному адресу.
- PE-файл — исполняемый EXE-файл, который содержит в себе исполняемый код и данные необходимые для правильной работы программы в системе.
- Virtual Address (VA) — виртуальный адрес элемента в памяти. Адрес загрузки берется из поля OptionalHeader в том случаи если он равен ImageBase.
- Relative Virtual Address (RVA) — относительный виртуальный адрес, он отсчитывается от адреса загрузки, который либо равен ImageBase, либо нет.
- RVA = VA – адрес загрузки
- Находим относительный виртуальный адрес у OEP;
- Дампим полученную малварь;
- Восстанавливаем таблицу импорта;
- Подменяем точку входа на оригинальную.
Разбираем малварь на пальцах
Из заголовка статьи ты мог узнать с какой малварью мы будем работать. Итак наш подозреваемый носит название Predator, что в переводе с английского означает хищник. Красиво звучит, не так ли? Находится в классе стиллеров, программ нацеленных на кражу и передачу паролей пользователя. Имеет обширный выбор функции и может красть не только из браузеров.
В наличие есть три типа передачи информации: PHP, FTP и E-Mail. Думаю объяснять как это работает не стоит. Заглянем в раздел настроек и посмотрим, как там обстоят дела. Из основных моментов это заметание следов путем очистки журнала, запись в автозапуск и отключения различных функций, к примеру вызов диспетчера задач. Дальше описывать я не буду, а попробую создать вирус. Для этого переходим на последнюю вкладку и собираем PE-файл.
Начнем анализ как всегда со статического анализа. Воспользуемся нашим любимым DiE и посмотрим, что он найдет в нашей малвари.
Итак, наш подозреваемый построен при помощи библиотеки NET Framework, значит дела обстоят не так плохо и шансы разреверсить программу не прибегая к ручному дизассемблированию у нас есть. Поэтому можешь выдохнуть, так как учить ассемблер в статье мы не будем. Теперь откроем вкладку с энтропией и посмотрим какие же секции спрятал от нас разработчик.
Как ты видишь статус сжатия присутствует только на секции text. Она является одной из главных и порой именно в ней содержится вся необходимая нам информация. По статусу ты также можешь определить, покрыт ли файл упаковщиком или нет. Обычно если автор программы не прибегает к каким либо мерам защиты своего детища, то процесс сжатия не будет переваливать за 80%. Если же он додумался накинуть оберег для своего творения, то твоя шкала уйдет дальше этих несчастных цифр. Еще это все можно увидеть из графика и его скачкообразного движения вниз и вверх.
А теперь давай закрепим знания по теоретической части. Знания относительных виртуальных адресов тебе пригодится для работы с картой памятью. В DiE ты можешь открыть вкладку Карта памяти и посмотреть, что там происходит.
Здесь тебе и пригодились знания виртуальных адресов. Также ты можешь ознакомиться с расположением секций в коде. Зачастую это полезно, поскольку тебе не приходится часами копашиться в ассемблере и искать нужный адрес. Итак, чтобы продвинуться в нашем расследовании заглянем в таблицу импорта и посмотрим, что у нас твориться там.
А в таблицах импорта у нас все глухо. Лишь одно доказательство того, что вирус использует библиотеку NET. Это ты можешь увидеть если обратишь внимание на библиотеку mscoree.dll. Она отвечает за шаблоны NET Framework.
Итак, теперь мы знаем краткую информацию о нашем вирусе, поэтому давай попробуем добраться до его исходного кода при помощи известных утилит. Более подробно узнать о всех утилитах для вскрытия вирусов и программ можно найти в моей предыдущей статье.
Включаем динамику
Чтобы докопаться до заветной информации воспользуемся ExtremeDumper. Это утилита динамического анализа и с помощью нее мы сможем снять весь обвес по типу обфускатора или криптора. Давай запустим ее попробуем поймать процесс нашего вируса. Заранее предупреждаю, запуск вредоносной программы производить следует только в виртуальной среде. Так ты обезопасишь себя от несанкционированного доступа. После запуска дважды кликаем по нашему вирусу. Далее наведи мышку на окно ExtremeDumper и в выпадающем меню выбери функцию Refresh. Теперь у тебя в поле появился наш вирус. Дампим его и идем по пути готовой работы.
Прежде чем оценить труды дампера закинем сдампленный файл в pestudio. Да, ты сейчас начнешь возмущаться, что мы работаем на динамическом анализе, а не на статическом. Но с помощью этой утилиты ты сможешь посмотреть строки, которые содержит вирус. Выглядит все следующим образом.
Если присмотреться, то наш стиллер создает SQL базу и записывает туда всю собранную информацию. Также в строчках ты можешь найти ссылки и методы подключения по протоколу SMTP (почтовый протокол). Создание, хранение и сохранение — все это ты увидишь в этой утилите.
Повторно запустим наш вирус, но перед этим будем фильтровать трафик при помощи Wireshark. Перед запуском тебе требуется выбрать адаптер. У меня в его роли выступает Беспроводная сеть и поэтому я буду работать именно с ним. Все готово и теперь спустя пару минут перехвата давай попробуем отфильтровать нужные пакеты. Из pestudio мы выяснили, что стиллер делает запросы к определенным сайтам. Начнем копать с протокола HTTP. Для этого в поле фильтрации вводим http. После этого ты увидишь такую картину.
Как ты мог заметить, вирус отправляет уведомления и возвращает ошибку, поскольку я собрал малварь без способов передачи информации. Ты можешь развлечься при помощи фильтров Wireshark и узнать больше информации о нашем подозреваемом. Я этим заниматься не буду, поскольку моя основная задача была убедиться в том, что программа обращается к определенным сайтам для передачи информации. Теперь ты знаешь нужные данные для работы, что же мешает заглянуть под капот и узнать, как написан такой софт?
Для этого я буду использовать достаточно известную утилиту от JetBrains с названием dotPeek. Скачать ты его можешь с
Ссылка скрыта от гостей
. Загружаем, запускаем и работаем. Перетяни вирус на окно декомпилятора и буквально через пару минут случиться магия. Перед тобой явится исходный код вируса в полном объеме. На деле это выглядит так.
Интерфейс хищника стоит на Windows Forms, а также в части импорта библиотек у нас есть сокеты и почты для работы. Все же какая-то защита данных от несанкционированного доступа у нас есть. Это ты можешь увидеть из следующего скриншота.
Малварь шифрует информацию при помощи AES, это ты можешь увидеть в коде, ну а ключи для декодирования у тебя перед глазами. Передача данных проходит по порту 587. Воспользуйся этим при последующем перехвате трафика через акулу. Дам наводку по фильтру. Используй такую строчку, чтобы найти нужную информацию.
tcp.port == 587 || udp.port == 587
Ну или если тебе лень это делать, то читай статью дальше и я расскажу, что нам даст такой фильтр. Этот порт будет работать в том случаи и только в том случаи если ты не оставлял поля отправки данных пустыми. В моем случаи они ничем не заполнены, поэтому вирус передает информацию по стандартному порту 80. Но в основном здесь ты можешь ознакомиться только с пакетами SYN и ACK. Напомню, для чего они нужны.
Обычно, перед тем, как передать пакеты с информацией серверу твое устройство делает предварительное соединения при помощи отправки TCP-пакета с флагом SYN. Он означает то, что устройство хочет провести подключение. Логично? Как по мне вполне. Если ответ от сервера будет положителен то передача начнется. Ну а флаг ACK в пакете TCP говорят о завершении подключения. Я объяснил все максимально коротко, более подробно о работе с TCP соединениями ты узнаешь в других моих статьях. Повторюсь, в моем случаи нет никакой информации кроме этих флагов так как я не указал место, куда стоит отправлять информацию.
Продолжим наше увлекательное путешествие по строчкам кода хищника. Переключимся на ветку RunPE и посмотрим, что импортировал наш софт. Здесь ты увидишь библиотеку kernal32 и ntdll. Импортированных модулей на горизонте не видно. Вернемся к Form1. Тут продолжаем импортируемые модули и натыкаемся на user32. Обычно, если ты такое видишь, то жди беды. Точка входа у нас это SetWindowsHookExA.
Также вирус регистрирует нажатие клавиш, это можно увидеть если ты пролистаешь код ниже. Записывает информацию наш вирус в файл с названием SysInfo.txt. А теперь я расскажу тебе, что за информацию пытался передать наша малварь в акуле. Файл записывается с именем Predator_Painv13_Notification. К нему добавляется имя компьютера, с которого будет отправлено письмо и имеет расширение TXT. В нем содержится текст такого формата: This is an email notifying you that has ran your logger and emails should be sent to you shortly and at interval choosen.
Далее идут детали подключения, а также несколько адресов. Еще вирус меняет значения реестра по пути: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\\Hidden. На заметку, это еще не автозапуск. Он тут реализуется совершенно иным образом. Для этого создается файл с названием autorun.inf и в него записывается следующие строчки:
[autorun] open=Sys.exe action=Run win32
Далее все это дело помещается по такому пути: Software\Microsoft\Windows\CurrentVersion\Run. Да, работа автозапуска работает очень странно, но не нам судить творения других людей. Также наш подозреваемый опирается на программу vbc.exe. Поэтому чисто в теории если ты не установишь библиотеку NET Framework, то хищник обойдет тебя стороной. Советы странные. Такие же странные как заставить пользователя выключить интернет. При первом запуске, чтобы сразу не спалиться стиллер использует timesleep. Не забудем про самое главное, где хранятся логи для дальнейшей отправки. Вся информация как не странно хранится в AppData. Для многих это будет очевидно, но все же не указать это при анализе очень не вежливо.
Также при помощи условного цикла реализуется функция отключения диспетчера задач. На коде все выглядит примерно следующим образом.
while (true) < if (Operators.CompareString(this.TaskManager, "DisableTaskManager", false) != 0) < Process[] processes = Process.GetProcesses(); int index = 0; while (index < processes.Length) < Process process = processes[index]; if (Operators.CompareString(process.ProcessName, "Taskmgr", false) == 0) process.Kill(); checked < ++index; >> > if (Operators.CompareString(this.TaskManager, "DisableTaskManager", false) != 0) < Process[] processes = Process.GetProcesses(); int index = 0; while (index < processes.Length) < Process process = processes[index]; if (Operators.CompareString(process.ProcessName, "taskmgr", false) == 0) process.Kill(); checked < ++index; >>
Помимо этого стиллер убивает реестр, консоль и конфигуратор. Поэтому если ты попытаешься что-либо запустить у тебя ничего не получится. А теперь перейдем к моменту о том, как малварь узнает IP адрес. Способов для определения адреса много, но наш подозреваемый делает запрос к сайту
Ссылка скрыта от гостей
и возвращает ответ для записи. Больше в ветке Form1 искать нечего. Все данные по типу хоста, порта, паролей и логинов храниться в ветке Resources.
Здесь я рассказал как работать с вирусом и что нужно, чтобы получить его исходный код. Давай подведем итоги по нашей статье.
Заключение
Здесь я описал реверс стиллера Хищник, который как и остальные заслуживает должного внимания среди вирусологов. Также мы разобрали основы реверс-инженерии и теперь ты знаешь на базовом уровне то, как работать с малварью. Конечно, это еще не все, что может произойти в реальных условиях. Ты можешь столкнуться с самодельным шифрованием кода и тогда придется прибегать к ручному дизассемблированию. Но об этом я расскажу тебе в другой статье.
Как распаковать файл упакованный vmprotect
Скриншот программы PicPick
PicPick — навороченный комбайн для работы с изображениями. На борту имеется захват экрана, графический редактор, инструмент выбора цвета, цветовая палитра, пиксельная линейка, угломер и многое другое. Готовый файл можно сразу же отправить в облачное хранилище, загрузить на фотохостинг, послать по электронной почте, или залить на FTP. Есть даже бесплатная версия для домашнего использования, но в ней, судя по описанию на офсайте, присутствует реклама. Платная версия рекламу не показывает, но работает в ознакомительном режиме всего 30 дней, что не есть правильно.
Забираем с офсайта дистрибутив платной версии, устанавливаем, смотрим. Основные признаки незарегистрированной версии — окно с предложением активировать вашу копию и характерные надписи в окне «О программе».
Триальное окно
Окно «О программе»
На первый взгляд главный исполняемый файл ничем не упакован, но в папке с программой обнаруживается файл VMProtectSDK32.dll, который жирненько так намекает на использование защиты VMProtect, а в главном файле при более внимательном осмотре обнаруживаются секции «.vmp0» и «.vmp1», что подтверждает первоначальную догадку. Как бы то ни было, отправляем файл на разбор в дизассемблер.
Строки в файле
Поиском по файлу обнаруживаем юникодные строчки, которые появляются в окне «О программе». Это строки для триальной версии, зарегистрированной, и еще какой-то с недоступным ключем. Давайте посмотрим в листинге дизассемблера, где и как эти строки используются.
Code (Assembler) : Убрать нумерациюВыделить код
- . text : 00ECB07A pushdwordptrfs : [ eax ]
- . text : 00ECB07D movfs : [ eax ] , esp
- . text : 00ECB080 leaeax , [ ebp + var_1C ]
- ; Вызвать функцию проверки
- . text : 00ECB083 call sub_EC4FF8
- ; Сохранить ее результат из EAX в ESI
- . text : 00ECB088 movesi , eax
- . text : 00ECB08A moveax , off_10BA35C
- . text : 00ECB08F moveax , [ eax ]
- . text : 00ECB091 mov [ eax ] , esi
- ; Контрольное значение ESI = 2710h ?
- . text : 00ECB093 cmpesi , 2710h
- . text : 00ECB099 jnz loc_ECB123
- . text : 00ECB09F leaeax , [ ebp + var_18 ]
- . text : 00ECB0A2 pusheax
- . text : 00ECB0A3 leaeax , [ ebp + var_A ]
- . text : 00ECB0A6 pusheax
- . text : 00ECB0A7 leaecx , [ ebp + var_9 ]
- . text : 00ECB0AA leaedx , [ ebp + var_8 ]
- . text : 00ECB0AD leaeax , [ ebp + var_4 ]
- . text : 00ECB0B0 call sub_EC52D8
- . text : 00ECB0B5 xoredx , edx
- . text : 00ECB0B7 moveax , [ ebx + 3E8h ]
- . text : 00ECB0BD call sub_544D58
- . text : 00ECB0C2 cmp [ ebp + var_A ] , 0
- . text : 00ECB0C6 jzshort loc_ECB0EA
- . text : 00ECB0C8 movedx , offset aYourLicenseKey
- ; «Your license key is no longer available».
- . text : 00ECB0CD moveax , [ ebx + 430h ]
- . text : 00ECB0D3 call sub_544EA8
- . text : 00ECB0D8 xoredx , edx
- . text : 00ECB0DA moveax , [ ebx + 434h ]
- . text : 00ECB0E0 call sub_544EA8
- . text : 00ECB0E5 jmp loc_ECB22D
- . text : 00ECB0EA ; —————————————-
- . text : 00ECB0EA loc_ECB0EA :
- . text : 00ECB0EA leaeax , [ ebp + var_20 ]
- . text : 00ECB0ED pusheax
- . text : 00ECB0EE movecx , offset aThisProductIsL
- ; «This product is licensed to : «
- . text : 00ECB0F3 movedx , offset aLbllicenseto
- ; «lblLicenseTo»
- . text : 00ECB0F8 moveax , offset aAbout ; «About»
- . text : 00ECB0FD call sub_104A4D8
- . text : 00ECB102 movedx , [ ebp + var_20 ]
- . text : 00ECB105 moveax , [ ebx + 430h ]
- . text : 00ECB10B call sub_544EA8
- . text : 00ECB110 movedx , [ ebp + var_4 ]
- . text : 00ECB113 moveax , [ ebx + 434h ]
- . text : 00ECB119 call sub_544EA8
- . text : 00ECB11E jmp loc_ECB22D
- . text : 00ECB123 ; —————————————-
- . text : 00ECB123 loc_ECB123 :
- ; Контрольное значение ESI = 2711h ?
- . text : 00ECB123 cmpesi , 2711h
- . text : 00ECB129 jnz loc_ECB202
- . text : 00ECB12F leaeax , [ ebp + var_18 ]
- . text : 00ECB132 pusheax
- . text : 00ECB133 leaeax , [ ebp + var_A ]
- . text : 00ECB136 pusheax
- . text : 00ECB137 leaecx , [ ebp + var_9 ]
- . text : 00ECB13A leaedx , [ ebp + var_8 ]
- . text : 00ECB13D leaeax , [ ebp + var_4 ]
- . text : 00ECB140 call sub_EC52D8
- . text : 00ECB145 movdl , 1
- . text : 00ECB147 moveax , [ ebx + 3E8h ]
- . text : 00ECB14D call sub_544D58
- . text : 00ECB152 leaeax , [ ebp + var_24 ]
- . text : 00ECB155 pusheax
- . text : 00ECB156 movecx , offset aUnregisteredTr
- ; «UNREGISTERED : TRIAL»
- . text : 00ECB15B movedx , offset aLbltrial ; «lblTrial»
- . text : 00ECB160 moveax , offset aAbout ; «About»
- . text : 00ECB165 call sub_104A4D8
- . text : 00ECB16A movedx , [ ebp + var_24 ]
- . text : 00ECB16D moveax , [ ebx + 430h ]
- . text : 00ECB173 call sub_544EA8
- . text : 00ECB178 leaeax , [ ebp + var_28 ]
- . text : 00ECB17B pusheax
- . text : 00ECB17C movecx , offset aExpires ; «Expires :»
- . text : 00ECB181 movedx , offset aLbltrialexpire
- ; «lblTrialExpiredDate»
- . text : 00ECB186 moveax , offset aAbout ; «About»
- . text : 00ECB18B call sub_104A4D8
- . text : 00ECB190 leaeax , [ ebp + var_28 ]
Что тут происходит? Вызывается какая-то функция проверки, если она вернула EAX=2710h, то программа считается зарегистрированной, иначе выводится сообщение об оставшемся триальном периоде. Кроме того, у зарегистрированной программы есть два состояния, это когда ключ по какой-то причине уже недоступен, и когда есть регистрационное имя и все остальное сопутствующее. Но в любом из этих «зарегистрированных» режимов программа работает без ограничений. Открываем на редактирование функцию проверки по адресу 00EC4FF8 и вбиваем в ее начало пару команд MOV EAX,2710h и RET. Теперь при любом раскладе программа будет считать себя зарегистрированной. Сохраняем изменения, запускаем. Окно с триальным счетчиком при старте больше не появляется. В окне «О программе» вместо данных триала отображается сообщение, что наш ключ недоступен.
Программа успешно «зарегистрирована»
Если хотите, то можете заменить эту надпись на что-нибудь более благозвучное, хотя основная цель все равно достигнута. Программа работает без ограничений по времени и без надоедливых окон. А что же VMProtect? А ничего, он тут только обеспечивает регистрационную схему, без реализаций функций защиты.
Можно ли распаковать wmprotect?
Есть простенькое приложение (думаю написано на С# или Дельфи) интересует полазить в исходном коде, но мешает противный wmprotect.
Что можно сделать ?(версию не знаю) die не показывает версию и другие анализаторы не показывают.
Думаю одна из новых версий.
Суть приложения оно пытается авторизоваться на api по ключу (на самом деле бесполезный api используется по факту только для авторизации).
И можно ли что либо сделать если зайти в файл хостс и настроить переадресацию с одного сайта на другой ?
(Или это так не работает ?)
+++++++++++++++++++++++
Для декомпиляции нужен .exe до попадания в wmprotect.
В интернете видел что заходили в OllyDbg и при помощи рук или скрипта ставили breakpoint на адреса памяти какие то 🙂
Картинка с одного из роликов:
А ещё видел предложения за деньги распаковать приложения, но видимо никто не откликнулся.
Разве всё так безнадёжно ?
- Вопрос задан более трёх лет назад
- 130 просмотров
3 комментария
Простой 3 комментария
profesor08 @profesor08
Все зависит от того, каким образом было запаковано. Ведь если есть упаковка, то есть и распаковка упакованного в память. Присосить дебагером к процессу и смотри что там в памяти у него. Если увидишь знакомые вызовы, то тебе повезло. Если нет, то печаль, тебе не по зубам, смирись.
Ternick @Ternick Автор вопроса
profesor08, Ещё до конца не уверен, но похоже у меня получилось 🙂
Ternick @Ternick Автор вопроса
profesor08, Хнык хнык, да оно распаковывает всё в память и там есть знакомые переменные и вызовы. Но вот новая проблема 🙁 Я бы хотел этот чистый код сохранить не внося никаких изменений туда, но не могу 🙁
Я использую x64dbg и при дампе появляется вот такая ошибка:
Решения вопроса 0
Ответы на вопрос 1
Тут могло бы быть краткое описание меня
Может не wmprotect, а всё же vmprotect? В любом случае я бы начал с того, что посмотрел что про него говорят на Tuts 4 You.