Автоматическая классификация дампов сбоев в объеме.

Вопрос или проблема

У меня есть 198 дампов памяти Windows (.DMP), и мне нужно определить, какие из них имеют отношение к анализу.

На мой взгляд, дамп памяти должен содержать как минимум следующую информацию:

  • имя исполняемого файла, который завершился с ошибкой
  • версия исполняемого файла
  • код исключения (например, C0000005 для нарушения доступа)
  • время сбоя

Инструмент

  • должен принимать каталог в качестве параметра и затем переименовывать файлы в формате {exe} {версия} {код исключения} {время}.DMP или в соответствии с настраиваемой схемой именования.

  • должен работать на Windows

  • быть бесплатным (предпочтительно с открытым исходным кодом)

  • должен быть инструментом командной строки.

  • работать в офлайне (за исключением загрузки символов)

Я пробовал:

  • использовать скрипт WinDbg и запускать через cdb. Это не очень интересно.

Ответ или решение

Автоматическая массовая классификация дампов памяти Windows

В аналитике ИТ-систем часто встречается задача обработки дампов памяти, и работа с ними может быть неэффективной без применения автоматизации. Рассмотрим, как можно создать инструмент для автоматической классификации и переименования дампов памяти Windows, используя язык программирования и доступные инструменты.

Задача

У вас имеется 198 файлов дампов памяти с расширением .DMP, и ваша цель состоит в том, чтобы определить их релевантность для дальнейшего анализа. Важной информацией, которую необходимо извлечь из каждого дампа, являются:

  • Название исполняемого файла, который завершился аварийно
  • Версия исполняемого файла
  • Код исключения (например, C0000005 для нарушения доступа)
  • Время возникновения сбоя

Решение

Для реализации данного инструмента предложим использовать существующий инструмент от Microsoft — WinDbg, который поддерживает сценарное выполнение и может запускаться из командной строки. Для удобства, ниже приведен пример на Python, который автоматически обрабатывает файлы дампов.

Шаги по реализации

  1. Использование WinDbg и его сценариев: WinDbg можно использовать для извлечения необходимой информации из дампа. Для этого создадим скрипт отладки:

    !analyze -v
    .symfix
    .reload

    Этот скрипт позволит автоматически получать исключения и дополнительную информацию о сбое.

  2. Запись информации о дампе в выходной файл: Используя Python и библиотеку subprocess, можно вызвать WinDbg для каждого .DMP файла и извлечь нужные поля.

  3. Переименование файлов: После получения информации, файлы могут быть переименованы в формате: {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. Убедитесь, что все зависимости установлены, а также проверьте корректность работы с образами дампов в вашей среде. Это решение имеет ряд преимуществ:

  1. Эффективность: Значительно экономит время на обработку большого количества файлов.
  2. Автоматизация: Минимизация человеческого вмешательства и возможность интеграции в другие процессы анализа.
  3. Открытость: Следуя принципам open-source, вы можете модифицировать код под свои нужды.

Обратите внимание, что WinDbg является мощным инструментом, который может предоставлять более детальную информацию об ошибках, поэтому рекомендуется изучить его возможности для настройки вашего сценария.

Оцените материал
Добавить комментарий

Капча загружается...