Malgan1s/malware-dynamic-analysis
GitHub: Malgan1s/malware-dynamic-analysis
一份专注于 Windows 恶意软件动态分析与逆向实战的实验指南,解决如何在真实场景中通过调试与日志关联识别与验证威胁的问题。
Stars: 0 | Forks: 0
# 操作系统安全。恶意软件分析
**Целью работы** является получение практических навыков продвинутого динамического анализа ВПО в ОС Windows, реверс-инжиниринга шелл-кода и поиска угроз по журналам Sysmon и Process Monitor
## 目录
- [1 Введение](#1-введение)
- [2 Основная часть](#2-основная-часть)
- [2.1 Подготовка среды и настройка отладчика](#21-подготовка-среды-и-настройка-отладчика)
- [2.2 Анализ вызова VirtualAlloc](#22-анализ-вызова-virtualalloc)
- [2.3 Точки останова на InternetOpenA и InternetConnectA](#23-точки-останова-на-internetopena-и-internetconnecta)
- [2.4 Подмена вредоносного домена и правка hosts](#24-подмена-вредоносного-домена-и-правка-hosts)
- [2.5 Дамп и анализ шелл-кода](#25-дамп-и-анализ-шелл-кода)
- [2.6 Проверка по журналам Sysmon и Process Monitor](#26-проверка-по-журналам-sysmon-и-process-monitor)
- [3 Заключение](#3-заключение)
# 1 介绍
В ходе лабораторной работы проводился продвинутый анализ вредоносного
программного обеспечения с целью выявления его поведения, механизмов
маскировки и способов взаимодействия с системой. Основное внимание
уделялось динамическому исследованию исполняемого файла: настройке
отладчика, отслеживанию загрузки системных библиотек, анализу выделяемых
участков памяти, останову на ключевых API-вызовах и поиску участков,
содержащих шелл‑код.
В процессе анализа была выполнена подмена вредоносного домена в памяти,
фиксация изменённых данных в файле hosts и подтверждение сетевой
активности через диагностические инструменты. Дополнительно был извлечён
и исследован шелл‑код, что позволило выявить признаки дешифровки и
скрытого разрешения API‑символов. Полученные результаты демонстрируют
полный цикл анализа ВПО – от момента его загрузки до обнаружения
сетевых артефактов – и формируют практические навыки выявления и
нейтрализации вредоносной активности в операционных системах.
# 2 主要部分
## 2.1 准备环境和调试器配置
Для начала устанавливаем ОС Windows и отключаем сетевой адаптер для
сетевой изоляции гостевой ОС:

Далее делаем снимок состояния виртуальной машины:

Для начала настроить отладчик, включив в окне «Параметры» \> «События»
галочку «Загрузка системной DLL». Это позволит отслеживать загрузку
новых библиотек в запущенный отлаживаемый процесс.

## 2.2 分析 VirtualAlloc 调用
Для начала устанавливаем точку останова на точку входа программы:

Затем устанавливаем точку останова на API-символ
kernel32.dll:VirtualAlloc:

После добавления точки останова можно нажать на F9 и попасть на останов
на API-вызове VirtualAlloc со значением в стеке 0x40. Это значение
соответствует аргументу при вызове VirtualAlloc (аргумент flProtect),
равному PAGE_EXECUTE_READWRITE:

В значении регистра ESI хранится адрес участка памяти (0x0041653B), где
хранится зашифрованный набор данных. Этот набор данных является
позиционно-независимым кодом (шелл-кодом), который в явном виде будет
доступен в памяти чуть позже.
Далее, если выполнить до точки выхода из функции (сочетание Ctrl + F9),
то можно в EAX увидеть возвращаемое значение из API-функции – это адрес
начала выделенного участка памяти. В данном случае – это значение
0x001E0000. После нажатия правой кнопкой мыши «Перейти в дамп»: в дампе
можно выбрать какой-либо байт и создать там аппаратную точку останова на
запись – в случае, если туда будет производиться запись, то отладка
остановится:

Вероятнее всего, туда может быть записан шелл-код или нужные для ВПО
данные.
Затем можно открыть карту памяти и увидеть выделенную область памяти с
опцией PAGE_EXECUTE_READWRITE:

Как видно на рисунке, выделенных областей памяти с такой же опцией
немного. Таким образом, выделение памяти с опцией PAGE_EXECUTE_READWRITE
является аномалией. В такие области часто записывается шелл-код. Однако
в нашем случае шелл-код будет записан, но не в данную область. Поэтому
изначальная гипотеза по останову на API-вызове VirtualAlloc для поиска
записи шелл-кода в данном ВПО не сработала.
## 2.3 InternetOpenA 和 InternetConnectA 的断点
Далее будет производиться загрузка системных библиотек DLL в память
процесса. После того, когда будет загружена библиотека wininet.dll
(первый рисунок ниже), необходимо установить точки останова на API-символы
InternetOpenA (второй рисунок ниже) и InternetConnectA (третий рисунок ниже).



После добавления точек останова рекомендуется продолжить выполнение
программы путем нажатия F9 и попасть на вызов функции InternetOpenA:

Далее продолжим выполнение программы путем нажатия F9. Как видно на
рисунке ниже, в регистр EAX попадает адрес участка памяти (0x02B1FD14),
куда записан домен для разрешения вредоносного домена
bestguesspass\[.\]info.

## 2.4 恶意域名替换与 hosts 编辑
Затем перейдем к дампу памяти, в котором хранится имя вредоносного
домена, и заменим первые несколько байт домена на GeorgySazonov (заменим
ровно столько символов, чтобы не выйти за границу массива). Строку в
дампе будем менять посимвольно, заменяя каждый байт на код нужного
ASCII-символа.

После замены нужных символов берем получившуюся строку и добавляем в
файл hosts с адресом 127.0.0.1:

## 2.5 转储与 shellcode 分析
Далее перейдем в дизассемблированный код по адресу, который является
выделенным на вершине стека (0x00C6016B):

Данный адрес является адресом адресом возврата из функции, из которой был
произведен библиотечный вызов InternetConnectA. Если посмотреть
внимательнее, то с адреса начала страницы 0x00C60000 приведен листинг
шелл-кода. В нем есть несколько процедурных вызовов по адресам EB03D2 и
EB03AB:

Далее будет рассказано про эти функции чуть подробнее.
Перейдем к карте памяти, убедимся, что страница в памяти так же имеет
опцию PAGE_EXECUTE_READWRITE, и выполним дамп памяти шелл-кода в файл:

## 2.6 通过 Sysmon 和 Process Monitor 日志进行验证
Продолжим выполнение программы (нажмем F9). Т.к. точек останова
больше нет, то вредоносная программа выполнится целиком. Это можно найти
в журнале Sysmon с фильтром по событию с EventID = 22. В данном случае
выполнен в Telerik Fiddler:

Также это событие можно найти в логах Process monitor:

# 3 结论
Выполненная лабораторная работа включала продвинутый динамический и
статический анализ исследуемого файла: была выполнена настройка
отладчика и установка контрольных точек (включая отслеживание загрузки
системных DLL и точки останова на VirtualAlloc, InternetOpenA,
InternetConnectA), исследованы выделенные участки памяти и выполнен дамп
найденного шелл-кода, выполнена замена имени вредоносного домена и
добавление соответствующей записи в файл hosts для перехвата разрешения,
а также подтверждение результатов по журналам (Sysmon, Process Monitor /
Telerik Fiddler) и последующий разбор выгруженного кода в IDA Pro. В
рамках данной работы получены знания об основах анализа ВПО в ОС
Windows. В рамках данной работы получены навыки реверс-инжиниринга ВПО и
поиска угроз по журналам логов.
标签:DAST, Process Monitor, RFI远程文件包含, Shellcode 分析, Sysmon, VirtualAlloc, Windows 安全, 主机文件修改, 云资产清单, 合规性检查, 域名替换, 恶意软件分析, 网络连接分析, 课程实验, 逆向工程