首页
社区
课程
招聘
[旧帖] ring0和ring3中 怎么列出当前加载的所有驱动模块? 0.00雪花
发表于: 2009-12-20 01:48 5673

[旧帖] ring0和ring3中 怎么列出当前加载的所有驱动模块? 0.00雪花

2009-12-20 01:48
5673
如题 我不确定是在ring0还是在ring3下实现 如果可能的话 帮忙把两个方法都提供一下 3Q

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 4583
活跃值: (3567)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
2
你搜一下"枚举内核模块"、"枚举驱动"之类的关键字,没搜?

最正经的办法(ring 0 ring 3基本一样)

        Status      = ZwQuerySystemInformation
        (
            SystemModuleInformation,
            Buffer,
            BufferSize,
            &ReturnLength
        );

至于一大堆不正经的办法,用上面的关键字搜
2009-12-21 09:10
0
雪    币: 445
活跃值: (52)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
下面有个方法:

typedef struct _SYSTEM_MODULE_INFORMATION // Information Class 11
{
ULONG Reserved[2];// +0
PVOID Base; // +08h
ULONG Size; // +0ch
ULONG Flags; // +10h
USHORT Index; // +14h
USHORT Unknown; // +16h
USHORT LoadCount; // +18h
USHORT ModuleNameOffset;/// +1Ah
CHAR ImageName[256]; // +1Ch
} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
int main(int argc, char* argv[])
{
// _asm int 3
CHAR WinDir[MAX_PATH]={0};
// WCHAR drvName[]=L"\\123.txt";
// GetSystemDirectory(sysDir, MAX_PATH);
ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation;
PSYSTEM_MODULE_INFORMATION smi;
DWORD *pRet;
DWORD nRetSize;
int i;
// _asm int 3
ZwQuerySystemInformation=(ZWQUERYSYSTEMINFORMATION)GetProcAddress(LoadLibrary("ntdll.dll"),"ZwQuerySystemInformation");
ZwQuerySystemInformation(0xb,&pRet,0,&nRetSize);
pRet=(DWORD*)GlobalAlloc(GMEM_ZEROINIT,nRetSize);

ZwQuerySystemInformation(0xb,pRet,nRetSize,&nRetSize);
int n=*pRet;
smi=(PSYSTEM_MODULE_INFORMATION)((PULONG)pRet+1);
DWORD basea=(DWORD)smi;
char *p;
for(i=0;i<n;i++)
{
memset(WinDir,0,MAX_PATH);
GetWindowsDirectory(WinDir, MAX_PATH);
strlwr(smi->ImageName);
if(smi->ImageName[0]==0x5c||smi->ImageName[0]==0x3F)
{
if (smi->ImageName[1]==0x77&&
smi->ImageName[2]==0x69&&
smi->ImageName[3]==0x6E&&
smi->ImageName[4]==0x64&&
smi->ImageName[5]==0x6F)
{
p=strstr(smi->ImageName+1,"\\");
if (p)
{
strcat(WinDir,p);
}
}
else if (smi->ImageName[1]==0x3F)
{
memset(WinDir,0,MAX_PATH);
strcpy(WinDir,smi->ImageName+4);
}
else
{
p=strstr(smi->ImageName+1,"\\");
if (p)
{
strcat(WinDir,p);
}

}
}
else
{
memset(WinDir,0,MAX_PATH);
strcat(WinDir,smi->ImageName);
}
printf("0x%08X %s\n",smi->Base,WinDir);
smi=(PSYSTEM_MODULE_INFORMATION)(basea+0x11c*(i+1));
//smi++;
}

return 0;
}
2009-12-21 13:56
0
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
r3的方法啊,应该注明!
2010-4-8 12:55
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习一下  菜鸟看这个有点难度
2010-4-8 20:13
0
游客
登录 | 注册 方可回帖
返回
//