Вопрос или проблема
У меня есть 198 дампов памяти Windows (.DMP), и мне нужно определить, какие из них имеют отношение к анализу.
На мой взгляд, дамп памяти должен содержать как минимум следующую информацию:
- имя исполняемого файла, который завершился с ошибкой
- версия исполняемого файла
- код исключения (например, C0000005 для нарушения доступа)
- время сбоя
Инструмент
-
должен принимать каталог в качестве параметра и затем переименовывать файлы в формате
{exe} {версия} {код исключения} {время}.DMP
или в соответствии с настраиваемой схемой именования. -
должен работать на Windows
-
быть бесплатным (предпочтительно с открытым исходным кодом)
-
должен быть инструментом командной строки.
-
работать в офлайне (за исключением загрузки символов)
Я пробовал:
- использовать скрипт WinDbg и запускать через
cdb
. Это не очень интересно.
Ответ или решение
Автоматическая массовая классификация дампов памяти Windows
В аналитике ИТ-систем часто встречается задача обработки дампов памяти, и работа с ними может быть неэффективной без применения автоматизации. Рассмотрим, как можно создать инструмент для автоматической классификации и переименования дампов памяти Windows, используя язык программирования и доступные инструменты.
Задача
У вас имеется 198 файлов дампов памяти с расширением .DMP, и ваша цель состоит в том, чтобы определить их релевантность для дальнейшего анализа. Важной информацией, которую необходимо извлечь из каждого дампа, являются:
- Название исполняемого файла, который завершился аварийно
- Версия исполняемого файла
- Код исключения (например, C0000005 для нарушения доступа)
- Время возникновения сбоя
Решение
Для реализации данного инструмента предложим использовать существующий инструмент от Microsoft — WinDbg, который поддерживает сценарное выполнение и может запускаться из командной строки. Для удобства, ниже приведен пример на Python, который автоматически обрабатывает файлы дампов.
Шаги по реализации
-
Использование WinDbg и его сценариев: WinDbg можно использовать для извлечения необходимой информации из дампа. Для этого создадим скрипт отладки:
!analyze -v .symfix .reload
Этот скрипт позволит автоматически получать исключения и дополнительную информацию о сбое.
-
Запись информации о дампе в выходной файл: Используя Python и библиотеку
subprocess
, можно вызвать WinDbg для каждого .DMP файла и извлечь нужные поля. -
Переименование файлов: После получения информации, файлы могут быть переименованы в формате:
{exe} {version} {exception code} {time}.DMP
.
Пример кода на Python
import os
import subprocess
import re
from datetime import datetime
def extract_info(dmp_file):
output = subprocess.check_output(['windbg', '-z', dmp_file, '-c', '!analyze -v; q'], encoding='utf-8')
# Пример простого поиска данных
exe_name = re.search(r'(.+?)\s+\(.*?\)', output)
exception_code = re.search(r'ExceptionCode:\s+0x([A-F0-9]+)', output)
crash_time = datetime.now().strftime("%Y%m%d_%H%M%S") # Время получения, можно заменить на реальное время из дампа
exe_name = exe_name.group(1) if exe_name else 'unknown'
version = '1.0' # Это значение нужно получать по версии исполняемого файла
return exe_name, version, exception_code.group(1) if exception_code else 'unknown', crash_time
def process_dumps(dmp_directory):
for filename in os.listdir(dmp_directory):
if filename.endswith('.DMP'):
dmp_file_path = os.path.join(dmp_directory, filename)
exe_name, version, exception_code, crash_time = extract_info(dmp_file_path)
new_name = f"{exe_name} {version} {exception_code} {crash_time}.DMP"
new_file_path = os.path.join(dmp_directory, new_name)
os.rename(dmp_file_path, new_file_path)
# Пример использования
process_dumps('C:/path/to/dump/files')
Итог
Таким образом, вы можете создать простой, но эффективный инструмент для автоматической обработки дампов памяти Windows. Убедитесь, что все зависимости установлены, а также проверьте корректность работы с образами дампов в вашей среде. Это решение имеет ряд преимуществ:
- Эффективность: Значительно экономит время на обработку большого количества файлов.
- Автоматизация: Минимизация человеческого вмешательства и возможность интеграции в другие процессы анализа.
- Открытость: Следуя принципам open-source, вы можете модифицировать код под свои нужды.
Обратите внимание, что WinDbg является мощным инструментом, который может предоставлять более детальную информацию об ошибках, поэтому рекомендуется изучить его возможности для настройки вашего сценария.