Чтение памяти модулей ядра

Тема в разделе "WASM.NT.KERNEL", создана пользователем Mad666, 24 апр 2009.

  1. Mad666

    Mad666 New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    6
    Хочу прочитать память модулей ядра.
    Делаю чтение по секциям с флагами IMAGE_SCN_CNT_CODE и не установленным флагом IMAGE_SCN_MEM_DISCARDABLE. Последний нужен чтобы не налетать на BSOD при выгруженной секции. (если есть другии идеи можно озвучить)

    Далее чтение секции (Address - начало секции, Len - размер)

    PMDL mdl = IoAllocateMdl ( (PVOID)Address, Len, FALSE, FALSE, NULL);
    BOOLEAN ret = TRUE;
    PUCHAR out = (PUCHAR)Buffer;
    ULONG i = 0;
    ULONG MdlProcessed = 0;

    if ( !mdl )
    {
    return FALSE;
    }


    __try
    {
    MmProbeAndLockPages ( mdl, KernelMode, IoReadAccess );
    }
    __except ( EXCEPTION_EXECUTE_HANDLER )
    {
    IoFreeMdl( mdl );
    return FALSE;
    }

    {
    PCHAR buffer = MmGetSystemAddressForMdlSafe( mdl, NormalPagePriority );

    if( !buffer )
    {
    MmUnlockPages( mdl );
    IoFreeMdl( mdl );
    return FALSE;
    }

    for ( i = 0; i < Len; i++ )
    {
    out[ i ] = *(PUCHAR)( (PUCHAR)buffer + i );
    }

    MmUnlockPages( mdl );
    IoFreeMdl( mdl );
    }

    Все хорошо, но не для всех модулей. Модуль ntoskrnl.exe есть секция PAGEVRFY вот на ней BSOD в функции MmProbeAndLockPages, как и на секции INIT если не исключать IMAGE_SCN_MEM_DISCARDABLE.

    Если вместо MmProbeAndLockPages использовать MmBuildMdlForNonPagedPool то все хорошо, но эта функция только для буферов NonPagedPool следовательно надо гарантировать что все модули грузяться в NonPagedpool.

    Как быть просто исключать по имени не хочеться.
     
  2. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Попробуй посмотреть программку w2k_mem Свена Шрайбера
     
  3. Mad666

    Mad666 New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    6
    Спасибо посмотрел.

    Немного не понял как она работает. Так например при адрессах ядра не чего не выводит, говорит 0 valid bytes.

    Вопрос темы остается в силе.
     
  4. Mad666

    Mad666 New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    6
    Так все таки что не так с секцией PAGEVRFY в ntoskrnl.exe.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Там многие секции после отработки освобождаются, как например INIT или секция релоков. Грузите с диска модуль.
     
  6. Mad666

    Mad666 New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    6
    Я так иделаю только мне надо сравнить то что есть на диске с тем что есть в памяти.

    С диском проблем нет - Гружу, релокаю.
    Потом начинаю по секционно сравнивать, все ок кроме этой PAGEVRFY. Причем пропускаю все IMAGE_SCN_MEM_DISCARDABLE - туда как раз INIT и .reloc и попадают.