<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>VMProtect &#8211; PT ESC</title>
	<atom:link href="/tag/vmprotect/feed/index.xml" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Wed, 30 Sep 2026 19:20:16 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>/wp-content/uploads/2026/09/cropped-cropped-large_icon-32x32.png</url>
	<title>VMProtect &#8211; PT ESC</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Учимся восстанавливать импорты VMProtect</title>
		<link>/learning-to-restore-vmprotect-imports/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Thu, 07 Nov 2024 17:59:38 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[malware]]></category>
		<category><![CDATA[TI]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[VMProtect]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d1%83%d1%87%d0%b8%d0%bc%d1%81%d1%8f-%d0%b2%d0%be%d1%81%d1%81%d1%82%d0%b0%d0%bd%d0%b0%d0%b2%d0%bb%d0%b8%d0%b2%d0%b0%d1%82%d1%8c-%d0%b8%d0%bc%d0%bf%d0%be%d1%80%d1%82%d1%8b-vmprotect/</guid>

					<description><![CDATA[Учимся восстанавливать импорты VMProtect ⚙️ VMProtect — один из самых используемых протекторов ВПО. При этом зачастую злоумышленники ленятся и используют лишь простые опции защиты — обфускацию точки входа и импортов. Ранее мы…]]></description>
										<content:encoded><![CDATA[<p><strong>Учимся восстанавливать импорты VMProtect</strong> ⚙️</p>
<p>VMProtect — один из самых используемых протекторов ВПО. При этом зачастую злоумышленники ленятся и используют лишь простые опции защиты — обфускацию точки входа и импортов.</p>
<p>Ранее <a href="https://t.me/ptescalator/118" rel="noopener" target="_blank">мы уже научились</a> настраивать виртуальную среду для отладки ВПО, а также познакомились с эмулятором Speakeasy. Воспользуемся этими знаниями, чтобы попытаться восстановить импорты VMP. </p>
<p>Сдампим процесс (важно, чтобы в нем на момент дампа была достигнута OEP, тогда VMP инициализирует все внутренние структуры для работы), откроем дамп в IDA и позволим ей разметить символы библиотек. </p>
<p>Далее посмотрим, как выглядят обфусцированные импорты (<em>скриншот 1</em>). Видно, что VMP вставил вызов на свою секцию вместо вызова оригинальной библиотеки, а вызываемая функция состоит из кучи (на первый взгляд) мусорных инструкций.</p>
<p>❗️ <strong>Однако это не совсем так.</strong> Если провалиться в этот вызов в отладчике, то в какой-то момент на стеке окажется настоящий адрес API. <em>Пример трассировки смотрите на скриншоте 2</em>.</p>
<p>Попробуем это автоматизировать. Для начала необходимо собрать интересующий нас список вызовов. Логика простая: вызов идет из текстовой секции в секцию VMP (<em>скриншот 3</em>). Для краткости будем считать, что адреса этих секций в дампе нам уже известны.</p>
<p>Напишем логику для разрешения полученных адресов, для этого загрузим модуль из дампа как шеллкод в Speakeasy и добавим хук с проверкой каждой инструкции на <code>ret</code>. Дополнительно ограничим максимальную глубину трассировки и будем сохранять количество шагов для каждого импорта. Итоговое содержимое хука, а также функцию инициализации шеллкода в эмуляторе можно увидеть <em>на скриншоте 4</em>.</p>
<p>Функция запуска эмулятора представлена <em>на скриншоте</em> 5. Он выполняется несколько раз, чтобы обойти ситуацию, когда после выполнения нескольких мусорных инструкций повреждается его внутреннее состояние и попытки прочитать что-то после всегда завершаются ошибками.</p>
<p>Теперь объединим все вместе и посмотрим на результаты (<em>скриншот 6</em>). Опираясь на собранную информацию, можно разметить большую часть импортов в исходном образце.</p>
<p>👀 <strong>Итого: </strong>мы научились минимальными усилиями восстанавливать импорты VMP, что значительно упрощает анализ таких образцов. При желании можно применить аналогичный подход для запущенных процессов, а также пропатчить и пересобрать образец с правильными адресами API, как это делает, например, <a href="https://github.com/0xnobody/vmpdump" rel="noopener" target="_blank">vmpdump</a>.</p>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/11/photo_110@07-11-2024_17-59-38-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/11/photo_110@07-11-2024_17-59-38-1024x1024.jpg 1024w, /wp-content/uploads/2024/11/photo_110@07-11-2024_17-59-38-300x300.jpg 300w, /wp-content/uploads/2024/11/photo_110@07-11-2024_17-59-38-150x150.jpg 150w, /wp-content/uploads/2024/11/photo_110@07-11-2024_17-59-38-768x768.jpg 768w, /wp-content/uploads/2024/11/photo_110@07-11-2024_17-59-38.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/11/photo_111@07-11-2024_17-59-38-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/11/photo_111@07-11-2024_17-59-38-1024x1024.jpg 1024w, /wp-content/uploads/2024/11/photo_111@07-11-2024_17-59-38-300x300.jpg 300w, /wp-content/uploads/2024/11/photo_111@07-11-2024_17-59-38-150x150.jpg 150w, /wp-content/uploads/2024/11/photo_111@07-11-2024_17-59-38-768x768.jpg 768w, /wp-content/uploads/2024/11/photo_111@07-11-2024_17-59-38.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="728" height="1024" src="/wp-content/uploads/2024/11/photo_112@07-11-2024_17-59-38-728x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/11/photo_112@07-11-2024_17-59-38-728x1024.jpg 728w, /wp-content/uploads/2024/11/photo_112@07-11-2024_17-59-38-213x300.jpg 213w, /wp-content/uploads/2024/11/photo_112@07-11-2024_17-59-38-768x1080.jpg 768w, /wp-content/uploads/2024/11/photo_112@07-11-2024_17-59-38.jpg 910w" sizes="auto, (max-width: 728px) 100vw, 728px" /></figure>
<figure class="wp-block-image"><img width="794" height="1024" src="/wp-content/uploads/2024/11/photo_113@07-11-2024_17-59-38-794x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/11/photo_113@07-11-2024_17-59-38-794x1024.jpg 794w, /wp-content/uploads/2024/11/photo_113@07-11-2024_17-59-38-233x300.jpg 233w, /wp-content/uploads/2024/11/photo_113@07-11-2024_17-59-38-768x991.jpg 768w, /wp-content/uploads/2024/11/photo_113@07-11-2024_17-59-38.jpg 992w" sizes="auto, (max-width: 794px) 100vw, 794px" /></figure>
<figure class="wp-block-image"><img width="728" height="1024" src="/wp-content/uploads/2024/11/photo_114@07-11-2024_17-59-38-728x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/11/photo_114@07-11-2024_17-59-38-728x1024.jpg 728w, /wp-content/uploads/2024/11/photo_114@07-11-2024_17-59-38-213x300.jpg 213w, /wp-content/uploads/2024/11/photo_114@07-11-2024_17-59-38-768x1080.jpg 768w, /wp-content/uploads/2024/11/photo_114@07-11-2024_17-59-38.jpg 910w" sizes="auto, (max-width: 728px) 100vw, 728px" /></figure>
<p><span class="hashtag">#ti</span> <span class="hashtag">#malware</span> <span class="hashtag">#tip</span> <span class="hashtag">#VMProtect</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
