首页
社区
课程
招聘
[求助]Ring0获取进程名,老梗新问。
发表于: 2016-2-1 22:51 8745

[求助]Ring0获取进程名,老梗新问。

2016-2-1 22:51
8745
首先说下小弟已经踩过的雷...
【1】PsGetProcessImageFileName
        获取不全,原因 UCHAR ImageFileName[16];  【X】
        噗,不知道为什么要有这样一个API被设计了出来
【2】SeLocateProcessImageName
        获取镜像所在路径,但是把镜像文件改名,这个函数得到的还是原来的镜像路径 【X】

用PCHunter进行测试,每次都可以得到正确的镜像路径,请问PCHunter是用什么方法得到的镜像路径和进程名称

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 129
活跃值: (333)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xed
2
Eprocess结构里面有完整的路径
内核加个dpc定时器取路径来更新。

pe文件加载并运行内存中可改名的话,则它要先断开引用的自身磁盘文件对象。

内核取进程全路径,也许楼主用的到。主要是文件对象获取。
这是以前写的老代码。或许可以优化下。
通过挂钩ntcreateprocessex函数获取进程路径。createfile和open file没试过。不知可行与否。

这是windows xp 32bit sp3。

反汇编ntcreateprocessex函数。可看到如下代码。
mov  ebx,[ebp+1ch]   //父进程ID
此处ebx需要转换为handle数据类型。

ns = ObReferenceObjectByHandle( ebx,0, NULL, KernelMode, &pKey, NULL );
pFile = (PFILE_OBJECT)*(ULONG*)( ( char* )pKey + 20 );
pFile = (PFILE_OBJECT)*(ULONG*)( ( char* )pFile );
pFile = (PFILE_OBJECT)*(ULONG*)( ( char* )pFile + 36 );

RtlVolumeDeviceToDosName( pFile->DeviceObject, &usDosName );
RtlCopyUnicodeString( &usFullName, &usDosName );

ExFreePool( usDosName.Buffer );

RtlAppendUnicodeStringToString( &usFullName, &(pFile->FileName) );
RtlUnicodeStringToAnsiString( &akeyname, &usFullName, TRUE );
参数akeyname就是全路径。
2016-2-2 01:23
0
雪    币: 1258
活跃值: (598)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
是这个路径么?
Process->SeAuditProcessCreationInfo.ImageFileName
SeLocateProcessImageName 这个API就是靠获取EPROCESS的结构得到的路径,但是获取不到镜像改名后的路径
2016-2-2 08:51
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
我有个很蠢的办法.....R0取个大概...R3匹配就是了....
2016-2-2 14:54
0
雪    币: 1258
活跃值: (598)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个,没有办法的办法的了

不过绕了一大圈,进程多的时候,会不会出现效率问题?
2016-2-2 16:59
0
雪    币: 4938
活跃值: (977)
能力值: ( LV9,RANK:175 )
在线值:
发帖
回帖
粉丝
6
http://bbs.pediy.com/showthread.php?t=96427
应该满足你了吧
2016-2-2 17:21
0
雪    币: 8
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看看学学
2016-2-6 16:16
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
8
一个ring3的API都可以获取到改名后的文件名:
GetMappedFileName
楼主试一下
2016-2-10 19:18
0
游客
登录 | 注册 方可回帖
返回
//