хай! подскажите плиз каким образом можно определить базовый адрес загрузки драйвера? из kernel-mode, тобишь из драйвера. надо это для того чтоб найти оригинальные адреса функций (которые перехвачены). спасибо
Код (Text): ULONG GetKernelBase(){ ULONG cb = 0, i; PSYSTEM_MODULE_INFORMATION p = NULL; NTSTATUS ns; ZwQuerySystemInformation(SystemModuleInformation, &p, 0, &cb); if (!cb) return 0; p = ExAllocatePool(PagedPool, cb); if (!p) return 0; ns = ZwQuerySystemInformation(SystemModuleInformation, p, cb, &cb); if (ns != STATUS_SUCCESS) goto exit; for (i = 0; i < p->dwCount; i++) if (mystrcmp("ntoskrnl.exe", &(p->Modules[i].ImageName[p->Modules[i].ModuleNameOffset])) == 1) return (ULONG)p->Modules[i].Base; exit: ExFreePool(p); return 0; } соответственно вместо "ntoskrnl.exe" имя твоего драйвера.
Код (Text): typedef enum _SYSTEM_INFORMATION_CLASS { SystemBasicInformation, SystemProcessorInformation, SystemPerformanceInformation, SystemTimeOfDayInformation, SystemNotImplemented1, SystemProcessesAndThreadsInformation, SystemCallCounts, SystemConfigurationInformation, SystemProcessorTimes, SystemGlobalFlag, SystemNotImplemented2, SystemModuleInformation, SystemLockInformation, SystemNotImplemented3, SystemNotImplemented4, SystemNotImplemented5, SystemHandleInformation, SystemObjectInformation, SystemPagefileInformation, SystemInstructionEmulationCounts, SystemInvalidInfoClass1, SystemCacheInformation, SystemPoolTagInformation, SystemProcessorStatistics, SystemDpcInformation, SystemNotImplemented6, SystemLoadImage, SystemUnloadImage, SystemTimeAdjustment, SystemNotImplemented7, SystemNotImplemented8, SystemNotImplemented9, SystemCrashDumpInformation, SystemExceptionInformation, SystemCrashDumpStateInformation, SystemKernelDebuggerInformation, SystemContextSwitchInformation, SystemRegistryQuotaInformation, SystemLoadAndCallImage, SystemPrioritySeparation, SystemNotImplemented10, SystemNotImplemented11, SystemInvalidInfoClass2, SystemInvalidInfoClass3, SystemTimeZoneInformation, SystemLookasideInformation, SystemSetTimeSlipEvent, SystemCreateSession, SystemDeleteSession, SystemInvalidInfoClass4, SystemRangeStartInformation, SystemVerifierInformation, SystemAddVerifier, SystemSessionProcessesInformation } SYSTEM_INFORMATION_CLASS; typedef struct _SYSTEM_MODULE{ ULONG Reserved[2]; PVOID Base; ULONG Size; ULONG Flags; USHORT Index; USHORT Unknown; USHORT LoadCount; USHORT ModuleNameOffset; CHAR ImageName[256]; } SYSTEM_MODULE, *PSYSTEM_MODULE; typedef struct _SYSTEM_MODULE_INFORMATION { ULONG dwCount; SYSTEM_MODULE Modules[1]; } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION; Я использую такие структуры.