Введение и обзор применения x64dbg в качестве инструмента для анализа вредоносных программ. x64dbg — отладчик с открытым исходным кодом для Windows, который часто используется в качестве инструмента анализа вредоносных программ. Отладчик предназначен для пошагового выполнения кода, что позволяет отслеживать его действия. Отладчики необходимы для поиска и устранения ошибок, однако они также позволяют декомпилировать вредоносные программы.
Этой публикацией мы открываем серию из четырех статей о x64dbg.
Часть 1. Что такое x64dbg и как им пользоваться?
Часть 2. Распаковка вредоносного ПО с помощью x64dbg
Часть 3. Обзор Stack Memory
Часть 4. Анализ вредоносного ПО с помощью x64dbg
![](https://habrastorage.org/getpro/habr/upload_files/94d/0a4/c6f/94d0a4c6feee0676dafc5f9bc0c49333.png)
Обзор x64dbg
В отличие от программиста, у которого при отладке есть доступ к собственному исходному коду, аналитики вредоносных программ обычно сталкиваются с компилированным кодом на языке ассемблера (например, с файлом Windows .exe или .dll ). Ассемблер — низкоуровневый язык программирования, предназначенный для определенной архитектуры компьютера, такой как 64-разрядная архитектура (отсюда название x64dbg). Существуют также отладчики для 32-разрядной архитектуры, известные под названием x32dbg. Аналитик вредоносной программы редко начинает работу с использования отладчика. Сначала он выполняет статический анализ и может даже запустить вредоносное ПО на виртуальной машине с помощью ряда инструментов для анализа на поведенческом уровне, чтобы попытаться понять, что делает вредоносное ПО. После этого запускается отладчик для распаковки вредоносного ПО и последующего анализа его конкретных функций — так называемого декомпилирования.
Как установить x64dbg
Это не потребует особых усилий. Его можно загрузить со страницы загрузки на официальном сайте https://x64dbg.com/.
Примечание. Не пытайтесь анализировать вредоносное ПО без предварительной настройки безопасной виртуализированной среды. x64dbg не следует устанавливать на вашем хост-компьютере для анализа вредоносных программ.
Следует загружать последнюю версию x64dbg, которая расположена в разделе загрузок на сайте x64dbg и имеет формат ZIP-архива. Содержимое можно извлечь в любую папку по выбору, а для запуска программного обеспечения достаточно открыть отдельные двоичные файлы. Установка не предполагает выполнения каких-либо шагов. Как упоминалось ранее, программа представлена в двух версиях: одна для 64-разрядных двоичных кодов, а вторая — для 32-разрядных. Существует также еще одна версия — x96 (64 + 32). С ее помощью пользователь может просто перетаскивать вредоносное ПО на значок программы, и после проверки архитектуры будет загружаться соответствующая версия отладчика.
Для чего предназначено каждое окно?
![](https://habrastorage.org/getpro/habr/upload_files/7a9/681/c80/7a9681c806db782e46248f81694f662c.png)
При открытии вредоносной программы в x64dbg отладчик поначалу может казаться довольно сложной и запутанной программой. В отладчике имеется шесть основных областей: пять окон и главная панель инструментов, о них мы расскажем ниже.
Главная панель инструментов X64dbg
![](https://habrastorage.org/getpro/habr/upload_files/055/df9/004/055df9004bd84b12c013401b55c7a576.png)
В самой верхней части окна отображается имя анализируемого файла 267.exe, идентификатор процесса, который был выделен операционной системой, а также анализируемый в настоящее время модуль (о необходимости использования модуля будет рассказано в следующей статье). Значки на панели инструментов — ключ для изучения ассемблерного кода вредоносного ПО. Основные значки для лучшего понимания начинающими пользователями показаны на рисунке ниже.
![](https://habrastorage.org/getpro/habr/upload_files/6e6/32f/6a0/6e632f6a0fa4e829b60bf2b254db9966.png)
Значки довольно просты и понятны:
Значок папки: открыть файл для анализа;
Круговая стрелка: вернуться к началу программы;
Значок «стоп»: остановить программу, если она запущена в x64dbg;
Значок стрелки: запустить программу;
Значок паузы: приостановить выполнение программы.
Чаще всего аналитик вредоносного ПО использует последние два. Один из них представлен в виде стрелки, указывающей вниз и имеющей небольшой кружок под ней. Эта кнопка называется Step Into («Шаг с заходом»), а следующий значок — кнопка Step Over («Шаг с обходом»). Вредоносное ПО состоит из множества функций, которые написаны или импортированы его разработчиком. Для анализа конкретной функции аналитику необходимо выполнить «Шаг с заходом» в функцию, чтобы просмотреть ее ассемблерный код. В противном случае, если функция не представляет интереса, нажимается кнопка «Шаг с обходом». Об этих функциях будет подробно рассказано в следующей статье. В строке со вкладками внизу изображения содержатся различные области просмотра и данные, которые упрощают анализ.
![](https://habrastorage.org/getpro/habr/upload_files/07d/137/507/07d137507bc2153dc69108d735466a99.png)
Ниже описаны наиболее важные вкладки:
CPU («ЦП»): отображает ассемблерный код сверху вниз.
![](https://habrastorage.org/getpro/habr/upload_files/c2a/89b/caf/c2a89bcaffa52c08f4e457f3121a9902.png)
Graph («График»): графическое представление, которое позволяет пользователю наглядно посмотреть, какая функция вызывается другой. Они похожи на другие инструменты, такие как IDAPro и Ghidra.
![](https://habrastorage.org/getpro/habr/upload_files/5ae/806/202/5ae8062023e11715cdefa67a515c59b8.png)
Breakpoints («Контрольные точки»): позволяет выполнить поиск инструкций или строк, представляющих интерес, и задать контрольные точки для этих инструкций. Затем x64dbg позволяет пользователю выполнять программу до тех пор, пока она не достигнет контрольной точки, с целью ее дальнейшего анализа. На изображении ниже показаны некоторые контрольные точки, которые заданы в функциях Windows CreateDirectoryW и WriteFile.
![](https://habrastorage.org/getpro/habr/upload_files/27c/99f/006/27c99f006cedbfed8f0d7a6b1ded651e.png)
Memory Map («Карта распределения памяти»): показывает, какие данные хранятся в памяти, а также путь к ним. В приведенном ниже примере раздел анализируемой вредоносной программы .text расположен по адресу 00F21000. Столбец Protection («Защита») также показывает, является ли эта область памяти исполняемой, читаемой или доступной для записи. На эту информацию указывают флажки E, R и W. Эти данные пригодятся чуть позже, когда мы покажем, как использовать карту распределения памяти для распаковки вредоносного ПО.
![](https://habrastorage.org/getpro/habr/upload_files/f78/08d/527/f7808d527280bfba2ceff8e3f4b13e09.png)
Call Stack («Стек вызовов»): полезная функция после установки контрольной точки на определенной функции Windows. На предыдущем изображении контрольная точка была установлена на CreateDirectoryW, поэтому при каждом создании вредоносным ПО каталога на скомпрометированном устройстве срабатывает эта контрольная точка, и x64dbg останавливается на данной функции. Используя стек вызовов, можно увидеть, какой код, написанный автором вредоносного ПО, называется CreateDirectoryW, и определить место создания этого каталога и способ его вызова.
![](https://habrastorage.org/getpro/habr/upload_files/cd2/487/506/cd24875064fbc6996b47b868b156e783.png)
Главное окно X64dbg
![](https://habrastorage.org/getpro/habr/upload_files/e7e/d83/9dc/e7ed839dc320b33d4623c97dbb8f9ff3.png)
В главном окне x64dbg находится содержимое выбранной вкладки; по умолчанию этой вкладкой является вкладка CPU («ЦП»), содержащая ассемблерные инструкции. Первый столбец содержит EIP (указатель команд). Он просто указывает на следующий запускаемый фрагмент кода. Во втором столбце показаны адреса с инструкциями в пределах двоичного кода, поэтому в приведенном выше примере EIP указывает на адрес 0138CD97. Третий столбец представляет собой шестнадцатеричное представление инструкций в столбце 4. Столбец 4 — месторасположение ассемблерных инструкций. Опять же, в приведенном выше примере показан EIP, указывающий на следующую инструкцию, которую нужно запустить, а именно push ebp. Пятый столбец содержит данные, заполненные x64dbg, или заметки, добавленные аналитиком. В приведенном выше примере видно, что 0138CD97 — это «точка входа» вредоносного ПО, то есть начало кода его разработчика и место начала основной функции. Третий столбец с ассемблерными инструкциями — вероятно, наиболее важный, поскольку именно эти данные используются аналитиком вредоносного ПО при определении назначения программы. Ниже приведено несколько наиболее распространенных инструкций:
PUSH: поместить значение в стек
POP: вывести значение из стека
CALL: выполнить функцию
RET: вернуть значение выполненной функции
JMP: перейти по адресу
CMP: сравнить два значения
MOV: переместить данные из одного места в другое.
ADD: прибавить значение
SUB: вычесть значение
Окно x64dbg с информацией о регистрах
![](https://habrastorage.org/getpro/habr/upload_files/f5f/fe3/209/f5ffe32096a9ea4d1e8ead1da89d0043.png)
Следующее окно содержит информацию о регистрах. Регистры используются программой для хранения данных, к которым можно обращаться для последующего использования, и некоторые из них предназначены для вполне конкретных целей.
![](https://habrastorage.org/getpro/habr/upload_files/598/2c2/bc2/5982c2bc2b79d3b407e237428255844a.png)
EAX: сложить, умножить и вернуть значения
EBX: общий регистр, используемый для различных операций
ECX: используется в качестве счетчика
EDX: общий регистр, используемый для различных операций
EBP: ссылка на аргументы и локальные переменные
ESP: указывает на последний аргумент в стеке
ESI / EDI: используется в инструкциях по переносу памяти
EIP — не регистр, а указатель инструкции, указывающий на текущую инструкцию в x64dbg. В этом поле указан адрес расположения инструкции.
Окно x64dbg с информацией о стековой памяти
![](https://habrastorage.org/getpro/habr/upload_files/9dc/5e4/144/9dc5e4144b2119edfa0988bdc2bce969.png)
В третьем окне отображаются параметры, которые перенесены в стек. Подробнее об этом окне будет написано в следующей статье, рассказывающей о том, как работает stack memory.
Окно x64dbg со стеком и данными
![](https://habrastorage.org/getpro/habr/upload_files/18e/4a8/82f/18e4a882fc7363cf20b52b1461daf366.png)
В четвертом окне содержится стек и помещенные в него данные, а также адреса в памяти, с которыми они сопоставляются. Оно также будет более подробно описано в следующей статье.
Окно x64dbg с данными дампа
![](https://habrastorage.org/getpro/habr/upload_files/bf6/8cf/665/bf68cf665df295b903e3780c6bc8f43b.png)
Шестое и последнее окно содержит данные дампа. Окна «дампа» позволяют пользователю видеть, какие данные хранятся в регистре или какие данные расположены по определенному адресу.
Надеемся, что эта статья дала вам представление о том, что такое x64dbg и как перемещаться по инструменту. В следующих нескольких статьях будет описана методика, используемая для декомпилирования вредоносных программ, стековая память и способы ее использования отладчиком x64dbg. Кроме того, будут приведены примеры некоторых вредоносных программ и продемонстрировано несколько навыков декомпилирования.