NTSTATUS MyEnumKernelModule(IN CHAR* str,OUT ULONG *moduleadd,OUT ULONG *modulesie)
{ NTSTATUS status = STATUS_SUCCESS; ULONG n = 0; ULONG i = 0; PSYSTEM_MODULE_INFORMATION_ENTRY module = NULL; PVOID pbuftmp = NULL; ANSI_STRING ModuleName1,ModuleName2; BOOLEAN tlgstst= FALSE; //如果找到了指定模块则设置为TRUE //利用11号功能 枚举内核模块 status = ZwQuerySystemInformation(11, &n, 0, &n); //申请内存 pbuftmp = ExAllocatePool(NonPagedPool, n); //再次执行,将 枚举结果放到指定的内存区域 status = ZwQuerySystemInformation(11, pbuftmp, n, NULL); module = (PSYSTEM_MODULE_INFORMATION_ENTRY)((PULONG )pbuftmp + 1 ); //初始化字符串 RtlInitAnsiString(&ModuleName1,str); n = *((PULONG)pbuftmp ); for ( i = 0; i < n; i++ ) { RtlInitAnsiString(&ModuleName2,&module[i].ImageName); //DbgPrint("%d\t0x%08X 0x%08X %s\n",module[i].LoadOrderIndex,module[i].Base,module[i].Size,module[i].ImageName); if (RtlCompareString(&ModuleName1,&ModuleName2,TRUE) == 0) { DbgPrint("MyEnumKernelModule:%s:%0X \n",ModuleName2.Buffer,module[i].Base); *moduleadd = module[i].Base; *modulesie = module[i].Size; tlgstst = TRUE; break; } } ExFreePool(pbuftmp); if tlgstst == FALSE) { return FAILED_TO_OBTAIN_FUNCTION_ADDRESSES; } return status; } |
转至:http://bbs.pediy.com/showthread.php?t=185057&highlight=%E6%9E%9A%E4%B8%BE+%E4%B8%BE%E9%A9%B1+%E9%A9%B1%E5%8A%A8 |
枚举内核模块
最新推荐文章于 2022-08-16 12:04:00 发布