
Многоплатформенный инструмент для сбора памяти.

WinPmem долгое время был драйвером для извлечения памяти с открытым исходным кодом в Windows. Ранее он находился в проекте Rekall, но недавно был отделен в собственный репозиторий.
Это версия для Windows. Версия для Linux, Linpmem, находится по адресу: https://github.com/Velocidex/Linpmem
Этот код был первоначально разработан в Google, но выпущен под лицензией Apache.
WinPmem — это инструмент для извлечения физической памяти со следующими возможностями:
Открытый исходный код
Поддержка Win7 - Win 10, x86 + x64. WDK7600 может использоваться для поддержки WinXP. По умолчанию предоставляемые исполняемые файлы WinPmem будут скомпилированы с WDK10, поддерживая Win7 - Win10 и имея более современный код.
Три независимых метода чтения, с двумя методами создания полного дампа памяти. Один метод всегда должен работать даже при наличии руткитов режима ядра.
Поддержка образов сырых дампов памяти (raw).
Используется интерфейс чтения устройства вместо записи образа из ядра, как в некоторых других имиджерах. Это позволяет иметь сложный имиджер в пользовательском пространстве (например, копирование по сети, хеширование и т.д.), а также проводить анализ на работающей системе (например, можно запускать непосредственно на устройстве).
Файлы в этом каталоге (включая исходные коды WinPmem и подписанные бинарные файлы) доступны по следующей лицензии: Apache License, Version 2.0
Существует два исполняемых файла WinPmem: winpmem_mini_x86.exe и winpmem_mini_x64.exe. Обе версии содержат оба драйвера (32- и 64-разрядные версии).
Слово mini в имени бинарного файла означает, что этот имиджер является простым имиджером — он может создавать образы только в формате RAW. Ранее мы выпускали имиджер WinPmem на основе AFF4, но он еще не обновлен до нового драйвера. Сообщите нам, если вам нужен имиджер на основе AFF4.
Программа на Python в настоящее время находится в разработке, но работает как демонстрация того, как можно использовать имиджер из Python.
Эта программа наиболее проста в использовании для реагирования на инциденты, так как не требует других зависимостей, кроме самого исполняемого файла. Программа автоматически загружает правильный драйвер (32- или 64-разрядный) и является самодостаточной.
winpmem_mini_x64.exe physmem.raw
Записывает сырой образ в physmem.raw, используя метод извлечения по умолчанию.
winpmem_mini_x64.exe
Выводит справку по использованию / краткое руководство.
Для извлечения сырого образа с использованием конкретно метода MmMapIoSpace:
winpmem.exe -1 myimage.raw
Драйвер будет автоматически выгружен после извлечения образа!
Из-за того, как Microsoft спроектировала функцию MJ READ, чтение из физической памяти в Winpmem завершится ошибкой STATUS_INVALID_PARAMETER, если указан физический адрес больше половины максимального значения UINT64. Например, это верно, если кто-то хочет читать из более высоких частей физической памяти и имеет огромный объем физической памяти (более 9,223,372,036,854,775,807). Это звучит крайне маловероятно, но современные объемы оперативной памяти продолжают расти.
Исходный код WinPmem поддерживает как запись в память, так и чтение. Эта возможность является отличным учебным инструментом, поскольку многие методы сокрытия руткитов можно эмулировать путем прямой записи в память.
Эту функцию следует использовать с крайней осторожностью!
ПРИМЕЧАНИЕ: Поскольку это довольно опасная возможность, в подписанных бинарных драйверах поддержка записи отключена. Вы можете пересобрать драйверы для создания тестовых подписанных бинарных файлов, если хотите использовать эту функцию. Неподписанные бинарные файлы (фактически самоподписанные с тестовым сертификатом) не могут загружаться в обычной системе, поскольку они являются тестовыми самоподписанными, но вы можете разрешить загрузку неподписанных драйверов в тестовой системе, выполнив команду (см. https://docs.microsoft.com/en-us/windows-hardware/drivers/install/the-testsigning-boot-configuration-option:
Bcdedit.exe -set TESTSIGNING ON
и перезагрузитесь. Вы увидите небольшой текст "Test Mode" на рабочем столе, напоминающий, что эта машина настроена на тестовые подписанные драйверы.
Кроме того, поддержка записи должна быть включена во время загрузки:
winpmem.exe -w -l
Это загрузит драйверы и включит поддержку записи.
Winpmem, как и Linpmem, не существовали бы без работы наших предшественников из (теперь завершенного) проекта REKALL: https://github.com/google/rekall.
Этот проект также был бы невозможен без поддержки широкого сообщества DFIR:
Наши участники с открытым исходным кодом: