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 и отключаем сетевой адаптер для сетевой изоляции гостевой ОС: ![Отключение сетевого адаптера гостевой ОС](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/b45849fbd1173000.png) Далее делаем снимок состояния виртуальной машины: ![Выполнение снимка состояния виртуальной машины](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d0183d611e173001.png) Для начала настроить отладчик, включив в окне «Параметры» \> «События» галочку «Загрузка системной DLL». Это позволит отслеживать загрузку новых библиотек в запущенный отлаживаемый процесс. ![Настройка параметров по событиям загрузки системных DLL](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/2cb57c9572173002.png) ## 2.2 分析 VirtualAlloc 调用 Для начала устанавливаем точку останова на точку входа программы: ![Останов на точке входа программы](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/1aa7a983d3173004.png) Затем устанавливаем точку останова на API-символ kernel32.dll:VirtualAlloc: ![Точка останова на VirtualAlloc](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/735c36e2ef173005.png) После добавления точки останова можно нажать на F9 и попасть на останов на API-вызове VirtualAlloc со значением в стеке 0x40. Это значение соответствует аргументу при вызове VirtualAlloc (аргумент flProtect), равному PAGE_EXECUTE_READWRITE: ![Вызов API VirtualAlloc](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a1cee763b4173006.png) В значении регистра ESI хранится адрес участка памяти (0x0041653B), где хранится зашифрованный набор данных. Этот набор данных является позиционно-независимым кодом (шелл-кодом), который в явном виде будет доступен в памяти чуть позже. Далее, если выполнить до точки выхода из функции (сочетание Ctrl + F9), то можно в EAX увидеть возвращаемое значение из API-функции – это адрес начала выделенного участка памяти. В данном случае – это значение 0x001E0000. После нажатия правой кнопкой мыши «Перейти в дамп»: в дампе можно выбрать какой-либо байт и создать там аппаратную точку останова на запись – в случае, если туда будет производиться запись, то отладка остановится: ![Добавление аппаратной точки останова на запись в область памяти](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/89f8a2db69173008.png) Вероятнее всего, туда может быть записан шелл-код или нужные для ВПО данные. Затем можно открыть карту памяти и увидеть выделенную область памяти с опцией PAGE_EXECUTE_READWRITE: ![Карта памяти](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/824871fadc173009.png) Как видно на рисунке, выделенных областей памяти с такой же опцией немного. Таким образом, выделение памяти с опцией PAGE_EXECUTE_READWRITE является аномалией. В такие области часто записывается шелл-код. Однако в нашем случае шелл-код будет записан, но не в данную область. Поэтому изначальная гипотеза по останову на API-вызове VirtualAlloc для поиска записи шелл-кода в данном ВПО не сработала. ## 2.3 InternetOpenA 和 InternetConnectA 的断点 Далее будет производиться загрузка системных библиотек DLL в память процесса. После того, когда будет загружена библиотека wininet.dll (первый рисунок ниже), необходимо установить точки останова на API-символы InternetOpenA (второй рисунок ниже) и InternetConnectA (третий рисунок ниже). ![Загрузка библиотеки wininet.dll](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/bfdbc15e54173011.png) ![Добавление точки останова на InternetOpenA](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/fcfec79d4e173012.png) ![Добавление точки останова на InternetConnectA](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/c578ceb191173013.png) После добавления точек останова рекомендуется продолжить выполнение программы путем нажатия F9 и попасть на вызов функции InternetOpenA: ![Вызов API-функции InternetOpenA](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/70bba6f80c173015.png) Далее продолжим выполнение программы путем нажатия F9. Как видно на рисунке ниже, в регистр EAX попадает адрес участка памяти (0x02B1FD14), куда записан домен для разрешения вредоносного домена bestguesspass\[.\]info. ![Вызов API-функции InternetConnectA](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/7ff6d045c0173017.png) ## 2.4 恶意域名替换与 hosts 编辑 Затем перейдем к дампу памяти, в котором хранится имя вредоносного домена, и заменим первые несколько байт домена на GeorgySazonov (заменим ровно столько символов, чтобы не выйти за границу массива). Строку в дампе будем менять посимвольно, заменяя каждый байт на код нужного ASCII-символа. ![Замена имени домена на GeorgySazonov](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/cb7750d91d173018.png) После замены нужных символов берем получившуюся строку и добавляем в файл hosts с адресом 127.0.0.1: ![Добавление полученной строки в файл hosts](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/5b07775861173019.png) ## 2.5 转储与 shellcode 分析 Далее перейдем в дизассемблированный код по адресу, который является выделенным на вершине стека (0x00C6016B): ![Переход к дизассемблированному коду](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/cbb93cfc3c173021.png) Данный адрес является адресом адресом возврата из функции, из которой был произведен библиотечный вызов InternetConnectA. Если посмотреть внимательнее, то с адреса начала страницы 0x00C60000 приведен листинг шелл-кода. В нем есть несколько процедурных вызовов по адресам EB03D2 и EB03AB: ![Общий листинг шелл-кода](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/8ed5154f28173022.png) Далее будет рассказано про эти функции чуть подробнее. Перейдем к карте памяти, убедимся, что страница в памяти так же имеет опцию PAGE_EXECUTE_READWRITE, и выполним дамп памяти шелл-кода в файл: ![Выполнение дамп памяти шелл-кода в файл](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/8f5b3094ec173024.png) ## 2.6 通过 Sysmon 和 Process Monitor 日志进行验证 Продолжим выполнение программы (нажмем F9). Т.к. точек останова больше нет, то вредоносная программа выполнится целиком. Это можно найти в журнале Sysmon с фильтром по событию с EventID = 22. В данном случае выполнен в Telerik Fiddler: ![Разрешение измененного вредоносного доменного имени](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/94d2da5bbf173025.png) Также это событие можно найти в логах Process monitor: ![Событие в логах Process monitor](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/c5b1bd7c6b173027.png) # 3 结论 Выполненная лабораторная работа включала продвинутый динамический и статический анализ исследуемого файла: была выполнена настройка отладчика и установка контрольных точек (включая отслеживание загрузки системных DLL и точки останова на VirtualAlloc, InternetOpenA, InternetConnectA), исследованы выделенные участки памяти и выполнен дамп найденного шелл-кода, выполнена замена имени вредоносного домена и добавление соответствующей записи в файл hosts для перехвата разрешения, а также подтверждение результатов по журналам (Sysmon, Process Monitor / Telerik Fiddler) и последующий разбор выгруженного кода в IDA Pro. В рамках данной работы получены знания об основах анализа ВПО в ОС Windows. В рамках данной работы получены навыки реверс-инжиниринга ВПО и поиска угроз по журналам логов.
标签:DAST, Process Monitor, RFI远程文件包含, Shellcode 分析, Sysmon, VirtualAlloc, Windows 安全, 主机文件修改, 云资产清单, 合规性检查, 域名替换, 恶意软件分析, 网络连接分析, 课程实验, 逆向工程