определить базовый адрес драйвера в kernel-mode

Тема в разделе "WASM.NT.KERNEL", создана пользователем vlaman, 21 дек 2006.

  1. vlaman

    vlaman New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2004
    Сообщения:
    49
    хай!

    подскажите плиз
    каким образом можно определить базовый адрес загрузки драйвера? из kernel-mode, тобишь из драйвера.
    надо это для того чтоб найти оригинальные адреса функций (которые перехвачены).

    спасибо
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. ULONG GetKernelBase(){
    2.     ULONG cb = 0, i;
    3.     PSYSTEM_MODULE_INFORMATION p = NULL;
    4.     NTSTATUS ns;
    5.  
    6.     ZwQuerySystemInformation(SystemModuleInformation, &p, 0, &cb);
    7.     if (!cb)
    8.         return 0;
    9.     p = ExAllocatePool(PagedPool, cb);
    10.     if (!p)
    11.         return 0;
    12.     ns = ZwQuerySystemInformation(SystemModuleInformation, p, cb, &cb);
    13.     if (ns != STATUS_SUCCESS)
    14.         goto exit;
    15.     for (i = 0; i < p->dwCount; i++)
    16.         if (mystrcmp("ntoskrnl.exe", &(p->Modules[i].ImageName[p->Modules[i].ModuleNameOffset])) == 1)
    17.             return (ULONG)p->Modules[i].Base;
    18. exit:
    19.     ExFreePool(p);
    20.     return 0;
    21. }
    соответственно вместо "ntoskrnl.exe" имя твоего драйвера.
     
  3. vlaman

    vlaman New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2004
    Сообщения:
    49
    спасибо! буду ковырять
     
  4. vlaman

    vlaman New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2004
    Сообщения:
    49
    да, ещё вопрос - где можно найти корректные хэдеры на структуру SYSTEM_MODULE_INFORMATION ?
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. typedef enum _SYSTEM_INFORMATION_CLASS {
    2.     SystemBasicInformation,
    3.     SystemProcessorInformation,
    4.     SystemPerformanceInformation,
    5.     SystemTimeOfDayInformation,
    6.     SystemNotImplemented1,
    7.     SystemProcessesAndThreadsInformation,
    8.     SystemCallCounts,
    9.     SystemConfigurationInformation,
    10.     SystemProcessorTimes,
    11.     SystemGlobalFlag,
    12.     SystemNotImplemented2,
    13.     SystemModuleInformation,
    14.     SystemLockInformation,
    15.     SystemNotImplemented3,
    16.     SystemNotImplemented4,
    17.     SystemNotImplemented5,
    18.     SystemHandleInformation,
    19.     SystemObjectInformation,
    20.     SystemPagefileInformation,
    21.     SystemInstructionEmulationCounts,
    22.     SystemInvalidInfoClass1,
    23.     SystemCacheInformation,
    24.     SystemPoolTagInformation,
    25.     SystemProcessorStatistics,
    26.     SystemDpcInformation,
    27.     SystemNotImplemented6,
    28.     SystemLoadImage,
    29.     SystemUnloadImage,
    30.     SystemTimeAdjustment,
    31.     SystemNotImplemented7,
    32.     SystemNotImplemented8,
    33.     SystemNotImplemented9,
    34.     SystemCrashDumpInformation,
    35.     SystemExceptionInformation,
    36.     SystemCrashDumpStateInformation,
    37.     SystemKernelDebuggerInformation,
    38.     SystemContextSwitchInformation,
    39.     SystemRegistryQuotaInformation,
    40.     SystemLoadAndCallImage,
    41.     SystemPrioritySeparation,
    42.     SystemNotImplemented10,
    43.     SystemNotImplemented11,
    44.     SystemInvalidInfoClass2,
    45.     SystemInvalidInfoClass3,
    46.     SystemTimeZoneInformation,
    47.     SystemLookasideInformation,
    48.     SystemSetTimeSlipEvent,
    49.     SystemCreateSession,
    50.     SystemDeleteSession,
    51.     SystemInvalidInfoClass4,
    52.     SystemRangeStartInformation,
    53.     SystemVerifierInformation,
    54.     SystemAddVerifier,
    55.     SystemSessionProcessesInformation
    56. } SYSTEM_INFORMATION_CLASS;
    57.  
    58. typedef struct _SYSTEM_MODULE{
    59.     ULONG   Reserved[2];
    60.     PVOID   Base;
    61.     ULONG   Size;
    62.     ULONG   Flags;
    63.     USHORT  Index;
    64.     USHORT  Unknown;
    65.     USHORT  LoadCount;
    66.     USHORT  ModuleNameOffset;
    67.     CHAR    ImageName[256];
    68. } SYSTEM_MODULE, *PSYSTEM_MODULE;
    69.  
    70. typedef struct _SYSTEM_MODULE_INFORMATION {
    71.     ULONG dwCount;
    72.     SYSTEM_MODULE Modules[1];
    73. } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
    Я использую такие структуры.