首页
社区
课程
招聘
[旧帖] [求助]Ring0 如何通过进程名称获取基地址 0.00雪花
发表于: 2013-5-15 11:22 1837

[旧帖] [求助]Ring0 如何通过进程名称获取基地址 0.00雪花

2013-5-15 11:22
1837
我用 PsSetCreateProcessNotifyRoutine 回调监视 XXX.exe 的加载,然后通过该进程ID获取到eprocess ,但是不知道怎么才能得到该进程的基地址

下面是回调函数的代码,请问有什么办法可以
得到该进程的基地址
VOID LoadExeRoutine  ( 
	IN HANDLE hParentId, IN HANDLE PId,IN BOOLEAN bCreate 
	)
{
	PEPROCESS  EProcess;
	NTSTATUS   status;

	status = PsLookupProcessByProcessId( (ULONG)PId, &EProcess);
	if (!NT_SUCCESS( status ))
	{
		DbgPrint("PsLookupProcessByProcessId()\n");
		return ;
	}


	if ( bCreate )
	{
		if( _stricmp((char *)((ULONG)(EProcess)+0x174),"Client.exe")==TRUE)
		{
			
			DbgPrint(("\n\n+++++++++++++++++++++++++++++++Client.exe++++++++++++++++++++++++++\n\n"));
		}
	}
	return;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
在网上查了一下,解决了这个问题了 http://bbs.byr.cn/#!article/Security/6828
发现 该进程EPROCESS偏移0c4h处的_HANDLE_TABLE .
_HANDLE_TABLE  +0x4 就是 进程的基地

VOID LoadExeRoutine (
IN HANDLE hParentId, IN HANDLE PId,IN BOOLEAN bCreate
)
{
PEPROCESS EProcess;
NTSTATUS status;

status = PsLookupProcessByProcessId( (ULONG)PId, &EProcess);
if (!NT_SUCCESS( status ))
{
DbgPrint("PsLookupProcessByProcessId()\n");
return ;
}


if ( bCreate )
{
if( _stricmp((char *)((ULONG)(EProcess)+0x174),"Client.exe")==TRUE)
{
ULONG aa =*(ULONG*)((ULONG)EProcess+0x0c4);
KdPrint(("Client的基地址为%x \n",*(ULONG*)(aa+4)));
DbgPrint(("\n\n+++++++++++++++++++++++++++++++Client.exe++++++++++++++++++++++++++\n\n"));

}
}
return;
}


用windbg 验证了一下
PROCESS 83621da0   SessionId: 0  Cid: 0514    Peb: 7ffdb000  ParentCid: 06ac
    DirBase: 1418e000  ObjectTable: e1877760  HandleCount: 494.
    Image: Client.exe

这是调试的信息:
Client的基地址为83621da0

+++++++++++++++++++++++++++++++Client.exe++++++++++++++++++++++++++
2013-5-15 17:24
0
游客
登录 | 注册 方可回帖
返回
//