老文章——修改可执行文件路径和参数

看雪上看到一篇老文章,六年半前的。关于动态修改可执行文件路径和参数。

Ring3可以修改PEB的ProcessParameters成员的一些值,Ring0通过修改EPROCESS的ImageFileName成员值。可以瞒过一些东西。

但是现在看来这都不太现实,主防不会傻到这种程度,不过思路确实很有意思,而且它的代码中有一段很有启发性,解决了EPROCESS在不同系统上的不同。


ULONG GetNameOffsetInEProcss()
{
  PEPROCESS pProcess = NULL;
  ULONG i = 0;
  pProcess = PsGetCurrentProcess();
  for ( i = 0; i < 0x1000; i++)
  {
    if ( strncmp( "System", (PUCHAR)pProcess  + i, strlen("System")) == 0)
    {
	return i;
    }
  }
  return 0;
}

在DriverEntry中调用,可以找到ImageFileName域的偏移。