-
-
[求助]ZwMapViewOfSection问题
-
发表于:
2014-6-30 03:05
7149
-
我在process_create_routine里面监视到一个进程启动了
然后我获取进程的全路径
利用这个路径 来打开并且映射到内存里
映射的过程很奇怪
第一张图显示的是映射成功了的
地址也有
到第二张这里的时候不正常了
我试图用WINDBG来访问这些内存空间 发现只能访问一小段
后面的根本就没有东西 导致我分析这个文件失败?到底是什么原因呢

#define SEC_IMAGE 0x1000000
BOOL
get_version_info_by_path_name(
IN PUNICODE_STRING PathName,
IN LPWSTR lpNameType,
OUT LPWSTR lpBuffer
)
{
NTSTATUS status = STATUS_SUCCESS;
HANDLE hFile = NULL;
HANDLE hSection = NULL;
ULONG_PTR ViewBase = 0;
BOOL bStatus = FALSE;
do
{
//UNICODE_STRING usName;
//RtlInitUnicodeString( &usName, lpPathName );
OBJECT_ATTRIBUTES oa = { 0 };
InitializeObjectAttributes( &oa,
PathName,
OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE,
0,
0 );
IO_STATUS_BLOCK isb = { 0 };
//打开文件
status = ZwOpenFile(&hFile, FILE_EXECUTE, &oa, &isb, FILE_SHARE_READ, FILE_NON_DIRECTORY_FILE);
if( STATUS_SUCCESS != status )
{
break;
}
oa.ObjectName = NULL;
//创建Section
status = ZwCreateSection( &hSection,
SECTION_ALL_ACCESS,
&oa,
0,
PAGE_EXECUTE,
SEC_IMAGE,
hFile );
if( STATUS_SUCCESS != status )
{
break;
}
SIZE_T ViewSize = 0;
//把内核文件映射到内存
status = ZwMapViewOfSection(
hSection,
NtCurrentProcess(),
(PVOID *)(PVOID)&ViewBase,
NULL,
PAGE_SIZE,
NULL,
&ViewSize,
ViewShare,
0,
PAGE_READONLY);
if ( !ViewBase )
break;
__try
{
ProbeForRead((PVOID)ViewBase, ViewSize, 1);
//获取版本信息
bStatus = GetModuleInternalName( (PVOID)ViewBase, lpNameType,lpBuffer );
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
}
} while( FALSE );
if( NULL != ViewBase )
{
ZwUnmapViewOfSection( NtCurrentProcess(), (PVOID)ViewBase );
}
if( NULL != hSection )
{
ZwClose( hSection );
}
if( NULL != hFile )
{
ZwClose( hFile );
}
return bStatus;
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课