|
本帖最后由 Tesla.Angela 于 2010-7-9 13:12 编辑
拿网上Ring 3的代码转成Ring 0的,没什么价值,发这里当是灌水了。
#include <ntddk.h>
NTKERNELAPI NTSTATUS ObOpenObjectByPointer( IN PVOID Object,IN ULONG HandleAttributes,IN PACCESS_STATE PassedAccessState,IN ACCESS_MASK DesiredAccess,IN POBJECT_TYPE ObjectType,IN KPROCESSOR_MODE AccessMode,OUT HANDLE Handle );
NTKERNELAPI NTSTATUS ZwQuerySystemInformation(ULONG SystemInformationClass,PVOID SystemInformation,ULONG SystemInformationLength,PULONG ReturnLength);
NTKERNELAPI NTSTATUS ZwAllocateVirtualMemory(HANDLE ProcessHandle,PVOID *BaseAddress,ULONG_PTR ZeroBits,PSIZE_T RegionSize,ULONG AllocationType,ULONG Protect);
NTKERNELAPI NTSTATUS ZwFreeVirtualMemory(HANDLE ProcessHandle,PVOID *BaseAddress,PSIZE_T RegionSize,ULONG FreeType);
typedef struct _SYSTEM_MODULE_INFORMATION
{
ULONG Reserved[2];
PVOID Base;
ULONG Size;
ULONG Flags;
USHORT Index;
USHORT Unknown;
USHORT LoadCount;
USHORT ModuleNameOffset;
CHAR ImageName[256];
} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
HANDLE GetCurrentProcess()
{
HANDLE hprocess;
ObOpenObjectByPointer(PsGetCurrentProcess(),0,0,0,0,0,&hprocess) ;
return hprocess;
}
int EnumKernelDlls()
{
NTSTATUS status = STATUS_SUCCESS;
ULONG moduleNum,len,retLen;
PSYSTEM_MODULE_INFORMATION module = NULL;
HANDLE CurProc = GetCurrentProcess();
PVOID buf=0;
int ii=0;
ZwQuerySystemInformation(11,NULL,0,&len);//DbgPrint("len= %d\n",len);
status=ZwAllocateVirtualMemory(CurProc,&buf,0,&len,MEM_COMMIT,PAGE_READWRITE);
if (!NT_SUCCESS(status))
{
DbgPrint("allocate failed !\n");
return 0;
}
status=ZwQuerySystemInformation(11,buf,len,&retLen);
if (!NT_SUCCESS(status))
{
DbgPrint("query failed!\n");
return 0;
}
module=(PSYSTEM_MODULE_INFORMATION)((PULONG)buf+1);
moduleNum=*((PULONG)buf);
DbgPrint("\n--------------------------------------------------------------------\n");
for (ii=0;ii<moduleNum;ii++)
{
DbgPrint("ID:%3d\tBaseAddress:0x%08X\tModuleName:%12s\tsize:%7d\n",
ii+1,
module->Base,
module->ImageName + module->ModuleNameOffset,
module->Size);
module++;
}
DbgPrint("--------------------------------------------------------------------\n");
ZwFreeVirtualMemory(CurProc,&buf,&len,MEM_RELEASE);
return 0;
}
顺便赞一下老罗的代码高亮软件,真好用。 |
|