内核获取进程名KeGetProcName
2008-06-14 14:48
281 查看
内核获取进程名,使用EPROCESS中的ImageFileName只能显示15个字节,如下: +0x174 ImageFileName : [16] "aaaaaaaaaaaaaaa" 问了mo哥后发现SeAuditProcessCreationInfo中有ImageFileName 字段,类型为_OBJECT_NAME_INFORMATION,可以从该字段获取全路径和进程名。
一些使用日志记录如下
!process 0 0 ... PROCESS 85a51020 SessionId: 0 Cid: 0218 Peb: 7ffd5000 ParentCid: 0560 DirBase: 25951000 ObjectTable: e20a0738 HandleCount: 35. Image: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNOTEPADaaaaaaaaaaaaaaaaaaaaa.EXE ...
lkd> dt nt!_EPROCESS SeAuditProcessCreationInfo.ImageFileName 85a51020 +0x1f4 SeAuditProcessCreationInfo : +0x000 ImageFileName : 0x85a2de88 _OBJECT_NAME_INFORMATION lkd> dt nt!_OBJECT_NAME_INFORMATION 0x85a2de88 -b +0x000 Name : _UNICODE_STRING "/Device/HarddiskVolume1/Documents and Settings/.../桌面/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNOTEPADaaaaaaaaaaaaaaaaaaaaa.EXE" +0x000 Length : 0x106 +0x002 MaximumLength : 0x108 +0x004 Buffer : 0x85a2de90 "/Device/HarddiskVolume1/Documents and Settings/.../桌面/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNOTEPADaaaaaaaaaaaaaaaaaaaaa.EXE"
代码片断:
一些使用日志记录如下
!process 0 0 ... PROCESS 85a51020 SessionId: 0 Cid: 0218 Peb: 7ffd5000 ParentCid: 0560 DirBase: 25951000 ObjectTable: e20a0738 HandleCount: 35. Image: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNOTEPADaaaaaaaaaaaaaaaaaaaaa.EXE ...
lkd> dt nt!_EPROCESS SeAuditProcessCreationInfo.ImageFileName 85a51020 +0x1f4 SeAuditProcessCreationInfo : +0x000 ImageFileName : 0x85a2de88 _OBJECT_NAME_INFORMATION lkd> dt nt!_OBJECT_NAME_INFORMATION 0x85a2de88 -b +0x000 Name : _UNICODE_STRING "/Device/HarddiskVolume1/Documents and Settings/.../桌面/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNOTEPADaaaaaaaaaaaaaaaaaaaaa.EXE" +0x000 Length : 0x106 +0x002 MaximumLength : 0x108 +0x004 Buffer : 0x85a2de90 "/Device/HarddiskVolume1/Documents and Settings/.../桌面/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNOTEPADaaaaaaaaaaaaaaaaaaaaa.EXE"
代码片断:
DWORD GetProcessNameOffset() { DWORD ProcessNameOffset = 0; PEPROCESS curproc = PsGetCurrentProcess(); int i; for( i = 0; i < 3*PAGE_SIZE; i++ ) { if( !strncmp( "System", (PCHAR) curproc + i, strlen("System") )) { if (i<3*PAGE_SIZE) { ProcessNameOffset = i; DbgMsg("ProcessNameOffset: %.8X",ProcessNameOffset); break; } } } return ProcessNameOffset; } // Length of process name (rounded up to next DWORD) #define PROCNAMELEN 20 /* Maximum length of NT process name */ #define NT_PROCNAMELEN 16 /* ================================================================================================= 复制进程名到指定的缓冲区:ImageFileName =================================================================================================== */ BOOL GetProcessName(PCHAR ImageFileName, DWORD dwProcessNameOffset) { PEPROCESS curproc; char *nameptr; if(dwProcessNameOffset) { curproc = PsGetCurrentProcess(); nameptr = (PCHAR) curproc + dwProcessNameOffset; strncpy(ImageFileName, nameptr, NT_PROCNAMELEN); ImageFileName[NT_PROCNAMELEN] = 0; /* NULL at end */ return TRUE; } return FALSE; } 但是获取全名字还是需要修改,不同系统SeAuditProcessCreationInfo.ImageFileName位置不一样。
相关文章推荐
- 获取当前进程目录 GetCurrentDirectory() 及 获取当前运行模块路径名GetModuleFileName()
- 通过GetProcessImageFileName函数获取进程路径
- GetProcAddressEx跨进程获取导出函数地址
- GetProcAddressEx跨进程获取导出函数地址
- 2014-04-30工作日志:提取文件的路径及使用createprocess时,要用getmodulename获取要执行的模块的路径及调用createprocess时要记得关闭新建的进程
- GetModuleFileName获取当前进程完整路径
- GetProcessImageFileName获取进程路径
- 64位下GetModuleFileName获取不到进程名的原因
- PsGetProcessImageFileName - 获取进程的主模块路径
- GetCurrentDirectory()和GetMoudleFileName()获取进程所在目录
- GetModuleFileName获取当前进程已加载模块的文件的完整路径
- 利用 getsockname 和 getpeername 来获取某一个链接的本地地址和远端地址
- ClassLoader.getResourceAsStream(name);获取配置文件的 f2ac 方法
- javascript下用getElementByClassName获取css定义的类选择符(.class),兼容FF和IE
- 获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName
- 解析Linux内核获取当前进程指针的方法
- 获取本地IP gethostname和gethostbyname
- 获取指定窗口句柄结束进程 OpenProcess FindWindow GetExitCodeprocess TerminateProcess
- 内核驱动程序中获取当前用户进程的进程名的一种方法
- 获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName