场景
- 驱动中获取当前上下文进程的进程名
- 通过
PsGetCurrentProcess
函数来获取当前调用驱动的进程的EPROCESS
结构的地址,EPROCESS
结构的0x174
偏移(现在就是要实现动态定位这个硬编码)处存放着进程名。
思路
- 驱动程序的入口
DriverEntry
是运行在System
进程中的; - 通过
PsGetCurrentProcess
可以获取System
进程的内核EPROCESS
结构的地址; - 从该地址开始搜索特征码
System
字符串; - 找到了便是
EPROCESS
的进程名存放的偏移处,计算得到进程名在EPROCESS
结构中的偏移offset
; - 应用层调用驱动的时候,就可以直接在该偏移处获取当前进程名。
DWORD GetProcessNameOffset()
{
PEPROCESS curproc;
DWORD procNameOffset;
//获取EPROCESS结构的地址
curproc = PsGetCurrentProcess();
for(int i=0; i< 4096; i++)
{
if( !strncmp( "System", (PCHAR) curproc + i, strlen("System") ))
{
procNameOffset = i;
return procNameOffset;
}
}
return 0;
}
优化
可以使用 Sunday
搜索匹配算法,大大提高搜索效率。