# Решение задачи forensics 11-3

## Цель
Из дампа памяти Windows определить COM-идентификатор, используемый вредоносным модулем для повышения привилегий, и собрать итоговый флаг.

## Исходные данные
- Файл дампа: `win_mlwr.dmp`
- Инструменты: Volatility 3, Ghidra

## Шаг 1. Поиск целевого процесса
Сначала получаем список процессов в дампе:

```bash
vol.py -f "win_mlwr.dmp" windows.pslist.PsList
```

Во выводе присутствует процесс `firefox.exe` с PID `5984`, который далее используется для извлечения артефактов.

Фрагмент вывода:

```text
Volatility 3 Framework 2.26.2
PID   PPID  ImageFileName  Offset(V)          Threads  SessionId  Wow64  CreateTime
5984  4260  firefox.exe    0x8f0cc95b1080     16       1          False  2026-03-11 15:55:11.000000 UTC
8188  2324  notepad.exe    0x8f0cc95e8080     6        1          False  2026-03-11 15:55:24.000000 UTC
```

Ответ на первый контрольный вопрос задачи: `firefox`.

## Шаг 2. Извлечение образа из памяти процесса
Извлекаем связанные с процессом объекты:

```bash
vol.py -f "win_mlwr.dmp" windows.dumpfiles.DumpFiles --pid 5984
```

Среди результатов присутствует исполняемый файл, извлеченный из `ImageSectionObject`.

Фрагмент вывода:

```text
Cache                FileObject       FileName                                             Result
ImageSectionObject   0x8f0cc7fe9900   firefox.exe48C499001B1E8AD24FD1F.exeифратор.exe     file.0x8f0cc7fe9900.0x8f0cc8f23410.ImageSectionObject.firefox.exe48C499001B1E8AD24FD1F.exeифратор.exe.img
```

## Шаг 3. Реверс извлеченного бинарного файла
Открываем извлеченный файл в Ghidra. Анализ показывает, что строковые литералы хранятся в зашифрованном виде и восстанавливаются вспомогательными функциями во время выполнения.

Для подтверждения этого достаточно посмотреть на типичный декомпилированный фрагмент функции расшифровки:

```c
void FUN_7ff70f1d1f90(void)
{
	long long lVar1;
	char bVar2;
	ushort *puVar3;
	unsigned long long uVar4;
	char bVar5;
	char bVar6;
	char bVar7;
	bool bVar8;

	lVar1 = *(long long *)ThreadLocalStoragePointer;
	if ((*(uint *)(lVar1 + 0x140) & 1) == 0) {
		*(undefined1 *)(lVar1 + 0x152) = 0;
		*(uint *)(lVar1 + 0x140) = *(uint *)(lVar1 + 0x140) | 1;
		*(undefined2 *)(lVar1 + 0x150) = 0x59;
		*(undefined4 *)(lVar1 + 0x148) = 0x5000d7;
		*(undefined4 *)(lVar1 + 0x14c) = 0xc40059;
	}
	if (*(char *)(lVar1 + 0x152) == '\0') {
		puVar3 = (ushort *)(lVar1 + 0x148);
		uVar4 = 1;
		do {
			bVar6 = (char)uVar4;
			bVar5 = bVar6 - 1;
			bVar2 = ((char)(0x15a1b3fe59377 >> (bVar6 + 2 & 7)) ^ (char)(0x15a1b3fe59377 >> (bVar5 & 7)))
							* -0x62 ^ bVar5;
			bVar7 = ((char)(0x15a1b3fe59377 >> (bVar6 - 2 & 7)) ^ (char)(0x15a1b3fe59377 >> (bVar6 & 7)))
							* 's' ^ bVar5 * ']';
			bVar5 = ((char)(0x15a1b3fe59377 >> (bVar6 - 4 & 7)) ^
							(char)(0x15a1b3fe59377 >> ((char)(uVar4 + 1) & 7))) * -0x49 ^ bVar5 * '/';
			bVar6 = (char)*puVar3;
			bVar6 = (bVar6 >> 2 ^ bVar6 << 2) & 0x33 ^ bVar6 << 2;
			bVar6 = (bVar6 << 4 | bVar6 >> 4) ^ bVar7 + bVar5 + bVar2;
			bVar6 = (bVar6 >> 1 | bVar6 << 7) ^ bVar5 ^ 0x5a;
			bVar7 = (bVar6 >> 3 | bVar6 << 5) - bVar7;
			*puVar3 = (ushort)(char)((bVar7 >> 2 | bVar7 * '@') ^ bVar2);
			bVar8 = uVar4 < 5;
			puVar3 = puVar3 + 1;
			uVar4 = uVar4 + 1;
		} while (bVar8);
		*(undefined1 *)(lVar1 + 0x152) = 1;
	}
	return;
}
```

При анализе таких функций обнаруживаются, в частности, следующие строки:

```text
"Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}"
"{912EA6F0-1E25-450F-83A9-460441924B61}"
```

Первая строка указывает на использование механизма COM Elevation (монкер `Elevation:Administrator!new`). Вторая строка содержит CLSID целевого COM-объекта.

## Шаг 4. Подтверждение через импорты и вызовы
Дополнительно проверяем импорты бинарного файла:
- импортируется `OLE32.dll`;
- используется `CoCreateInstance`.

Это подтверждает работу с COM-объектами. По кросс-ссылкам видно, что найденный CLSID участвует в цепочке полезной нагрузки, связанной с повышением привилегий.

Ключевые точки анализа в декомпиляции:
- основная функция полезной нагрузки: `0x7ff70f219a60`;
- функция, в которой используется `CoCreateInstance`: `0x7ff70f294fc0`.

## Вывод и флаг
Формат флага требует COM-идентификатор без фигурных скобок, поэтому итоговое значение:

```text
COM_912EA6F0-1E25-450F-83A9-460441924B61
```
