[源码] x86 PsSetCreateProcessNotifyRoutine回调改commandline参数demo
本帖最后由 1171320344 于 2016-7-24 19:19 编辑前几天在问答区看到有朋友问这个问题,问能不能改,怎么改,这是demo,献丑了
编译环境,VS2013 + WDK8.1
这是VS2013完整项目
我这里无法编译,能否提供个可编译的版本并说明测试方法?
WDK7里,无论XP FREE、WIN7X86 FREE、WIN7X64 FREE都无法编译。1>errors in directory d:\temp\change-cmdline
1>d:\temp\change-cmdline\work.h(233) : error C2146: syntax error : missing ')' before identifier 'PRKPROCESS'
1>d:\temp\change-cmdline\work.h(233) : error C2085: 'Process' : not in formal parameter list
1>d:\temp\change-cmdline\work.h(233) : error C2085: '_Out_' : not in formal parameter list
1>d:\temp\change-cmdline\work.h(233) : error C2146: syntax error : missing ',' before identifier 'PRKAPC_STATE'
1>d:\temp\change-cmdline\work.h(233) : error C2146: syntax error : missing ',' before identifier 'ApcState'
1>d:\temp\change-cmdline\work.h(233) : error C2059: syntax error : ')'
1>d:\temp\change-cmdline\work.h(234) : error C2146: syntax error : missing ')' before identifier 'PRKAPC_STATE'
1>d:\temp\change-cmdline\work.h(234) : error C2085: 'KeUnstackDetachProcess' : not in formal parameter list
1>d:\temp\change-cmdline\work.h(234) : error C2146: syntax error : missing ',' before identifier 'PRKAPC_STATE'
1>d:\temp\change-cmdline\work.h(234) : error C2146: syntax error : missing ',' before identifier 'ApcState'
1>d:\temp\change-cmdline\work.h(234) : error C2059: syntax error : ')'
1>d:\temp\change-cmdline\work.h(235) : error C2085: 'PsGetProcessPeb' : not in formal parameter list
1>d:\temp\change-cmdline\work.h(236) : error C2085: 'NtTerminateProcess' : not in formal parameter list
1>d:\temp\change-cmdline\work.h(244) : error C2085: 'ObOpenObjectByPointer' : not in formal parameter list
1>d:\temp\change-cmdline\work.h(245) : error C2085: 'PsGetProcessImageFileName' : not in formal parameter list
1>d:\temp\change-cmdline\liketest.c(7) : error C2085: 'DriverUnload' : not in formal parameter list
1>d:\temp\change-cmdline\liketest.c(7) : error C2143: syntax error : missing ';' before '{'
1>d:\temp\change-cmdline\liketest.c(11) : error C2065: 'pDriverObj' : undeclared identifier
1>d:\temp\change-cmdline\liketest.c(11) : error C2223: left of '->DeviceObject' must point to struct/union
1>d:\temp\change-cmdline\liketest.c(11) : error C2198: 'IoDeleteDevice' : too few arguments for call
1>d:\temp\change-cmdline\liketest.c(74) : error C2065: 'DriverUnload' : undeclared identifier
1>d:\temp\change-cmdline\work.h(233) : error C2146: syntax error : missing ')' before identifier 'PRKPROCESS'
1>d:\temp\change-cmdline\work.h(233) : error C2085: 'Process' : not in formal parameter list
1>d:\temp\change-cmdline\work.h(233) : error C2085: '_Out_' : not in formal parameter list
1>d:\temp\change-cmdline\work.h(233) : error C2146: syntax error : missing ',' before identifier 'PRKAPC_STATE'
1>d:\temp\change-cmdline\work.h(233) : error C2146: syntax error : missing ',' before identifier 'ApcState'
1>d:\temp\change-cmdline\work.h(233) : error C2059: syntax error : ')'
1>d:\temp\change-cmdline\work.h(234) : error C2146: syntax error : missing ')' before identifier 'PRKAPC_STATE'
1>d:\temp\change-cmdline\work.h(234) : error C2085: 'KeUnstackDetachProcess' : not in formal parameter list
1>d:\temp\change-cmdline\work.h(234) : error C2146: syntax error : missing ',' before identifier 'PRKAPC_STATE'
1>d:\temp\change-cmdline\work.h(234) : error C2146: syntax error : missing ',' before identifier 'ApcState'
1>d:\temp\change-cmdline\work.h(234) : error C2059: syntax error : ')'
1>d:\temp\change-cmdline\work.h(235) : error C2085: 'PsGetProcessPeb' : not in formal parameter list
1>d:\temp\change-cmdline\work.h(236) : error C2085: 'NtTerminateProcess' : not in formal parameter list
1>d:\temp\change-cmdline\work.h(244) : error C2085: 'ObOpenObjectByPointer' : not in formal parameter list
1>d:\temp\change-cmdline\work.h(245) : error C2085: 'PsGetProcessImageFileName' : not in formal parameter list
1>d:\temp\change-cmdline\work.c(11) : error C2085: 'CreateProcessNotify' : not in formal parameter list
1>d:\temp\change-cmdline\work.c(11) : error C2143: syntax error : missing ';' before '{'
1>d:\temp\change-cmdline\work.c(16) : error C2065: 'Create' : undeclared identifier
1>d:\temp\change-cmdline\work.c(18) : error C2065: 'ProcessId' : undeclared identifier
1>d:\temp\change-cmdline\work.c(24) : error C2275: 'KAPC_STATE' : illegal use of this type as an expression
1>d:\temp\change-cmdline\work.c(24) : error C2146: syntax error : missing ';' before identifier 'ApcState'
1>d:\temp\change-cmdline\work.c(24) : error C2065: 'ApcState' : undeclared identifier
1>d:\temp\change-cmdline\work.c(24) : error C2275: 'PPEB' : illegal use of this type as an expression
1>d:\temp\change-cmdline\work.c(24) : error C2146: syntax error : missing ';' before identifier 'peb'
1>d:\temp\change-cmdline\work.c(24) : error C2065: 'peb' : undeclared identifier
1>d:\temp\change-cmdline\work.c(25) : error C2065: 'ApcState' : undeclared identifier
1>d:\temp\change-cmdline\work.c(25) : error C2708: 'KeStackAttachProcess' : actual parameters length in bytes differs from previous call or reference
1>d:\temp\change-cmdline\work.c(26) : error C2065: 'peb' : undeclared identifier
1>d:\temp\change-cmdline\work.c(26) : error C4013: 'PsGetProcessPeb' undefined; assuming extern returning int
1>d:\temp\change-cmdline\work.c(29) : error C2065: 'peb' : undeclared identifier
1>d:\temp\change-cmdline\work.c(29) : error C2223: left of '->ProcessParameters' must point to struct/union
1>d:\temp\change-cmdline\work.c(29) : error C2065: 'peb' : undeclared identifier
1>d:\temp\change-cmdline\work.c(29) : error C2223: left of '->ProcessParameters' must point to struct/union
1>d:\temp\change-cmdline\work.c(32) : error C2065: 'peb' : undeclared identifier
1>d:\temp\change-cmdline\work.c(32) : error C2223: left of '->ProcessParameters' must point to struct/union
1>d:\temp\change-cmdline\work.c(35) : error C2275: 'UNICODE_STRING' : illegal use of this type as an expression
1>d:\temp\change-cmdline\work.c(35) : error C2146: syntax error : missing ';' before identifier 'Unicode_tmp'
1>d:\temp\change-cmdline\work.c(35) : error C2065: 'Unicode_tmp' : undeclared identifier
1>d:\temp\change-cmdline\work.c(36) : error C2065: 'Unicode_tmp' : undeclared identifier
1>d:\temp\change-cmdline\work.c(37) : error C2065: 'peb' : undeclared identifier
1>d:\temp\change-cmdline\work.c(37) : error C2223: left of '->ProcessParameters' must point to struct/union
1>d:\temp\change-cmdline\work.c(37) : error C2065: 'Unicode_tmp' : undeclared identifier
1>d:\temp\change-cmdline\work.c(40) : error C2065: 'peb' : undeclared identifier
1>d:\temp\change-cmdline\work.c(40) : error C2223: left of '->ProcessParameters' must point to struct/union
1>d:\temp\change-cmdline\work.c(40) : error C2065: 'Unicode_tmp' : undeclared identifier
1>d:\temp\change-cmdline\work.c(42) : error C2065: 'peb' : undeclared identifier
1>d:\temp\change-cmdline\work.c(42) : error C2223: left of '->ProcessParameters' must point to struct/union
1>d:\temp\change-cmdline\work.c(53) : error C4013: 'KeUnstackDetachProcess' undefined; assuming extern returning int
1>d:\temp\change-cmdline\work.c(53) : error C2065: 'ApcState' : undeclared identifier
1>d:\temp\change-cmdline\work.c(72) : error C2065: 'CreateProcessNotify' : undeclared identifier
1>d:\temp\change-cmdline\work.c(81) : error C2065: 'CreateProcessNotify' : undeclared identifier
1>link : error LNK1181: cannot open input file 'd:\temp\change-cmdline\objfre_win7_x86\i386\liketest.obj' Tesla.Angela 发表于 2016-7-24 19:05
我这里无法编译,能否提供个可编译的版本并说明测试方法?
WDK7里,无论XP FREE、WIN7X86 FREE、WIN7X64 FR ...
额,这个...我是用vs2013 写的, 文件->打开->Convert Sourecs /...直接打开Sourecs 就OK了... 1171320344 发表于 2016-7-24 19:10
额,这个...我是用vs2013 写的, 文件->打开->Convert Sourecs /...直接打开Sourecs 就OK了... ...
我看到你的SOURCES文件了,我是直接用WDK7切换到源码目录然后BLD编译的,但是失败了。 Tesla.Angela 发表于 2016-7-24 19:12
我看到你的SOURCES文件了,我是直接用WDK7切换到源码目录然后BLD编译的,但是失败了。 ...
这个工程是WDK8.1的,按理说用的函数都差不多,应该没问题的啊 1171320344 发表于 2016-7-24 19:14
这个工程是WDK8.1的,按理说用的函数都差不多,应该没问题的啊
小问题,给我改好了,主要是你里面有些警告,用FREE是编译不过的。
利用IE测试效果很好。已经加高亮、精华和水晶币。
研究东西就需要LZ这种较真的精神。 发现一个奇怪的问题,你这个东西只对改IE进程命令行的效果很好,但是对CHROME就无效了。
DBGVIEW显示已更改,但是实际无效。直接在CMD里用命令行启动【chrome www.baidu.com】是有效的。
以下是我修改过的代码,你原来PWCHAR *tmp是不对的。VOID CreateProcessNotify
(
IN HANDLE ParentId,
IN HANDLE ProcessId,
IN BOOLEAN Create
)
{
NTSTATUS status = STATUS_SUCCESS;
PEPROCESS pEprocess = NULL;
if (Create)
{
status = PsLookupProcessByProcessId(ProcessId, &pEprocess);//没有ObDereferenceObject
if (NT_SUCCESS(status))
{
PFILE_OBJECT FilePointer = NULL;
KAPC_STATE ApcState;
PPEB peb;
PCHAR procName = PsGetProcessImageFileName(pEprocess);
status = PsReferenceProcessFilePointer((PEPROCESS)pEprocess, &FilePointer);
KeStackAttachProcess((PRKPROCESS)pEprocess, &ApcState);
peb = PsGetProcessPeb(pEprocess);
//DbgPrint("++++%wZ+++++%wZ\r\n", &peb->ProcessParameters->CommandLine, &peb->ProcessParameters->ImagePathName);
if
(
peb->ProcessParameters->CommandLine.Length - peb->ProcessParameters->ImagePathName.Length <= 6 &&
(!_strnicmp(procName,"iexplore.exe",12) || !_strnicmp(procName,"chrome.exe",10))
)
{
UNICODE_STRING Unicode_tmp;
PWCHAR tmp = (PWCHAR)(peb->ProcessParameters->CommandLine.Buffer);
wcscat(tmp, L" www.baidu.com");
RtlInitUnicodeString(&Unicode_tmp, tmp);
peb->ProcessParameters->CommandLine = Unicode_tmp;
peb->ProcessParameters->WindowTitle = Unicode_tmp;
DbgPrint("--->%wZ\r\n", &peb->ProcessParameters->CommandLine);
}
KeUnstackDetachProcess(&ApcState);
}
}
} Tesla.Angela 发表于 2016-7-24 19:46
发现一个奇怪的问题,你这个东西只对改IE进程命令行的效果很好,但是对CHROME就无效了。
DBGVIEW显示已更改 ...
多谢指点,这玩意当时只是发现改了有效果了就没深研究,多谢指点 Tesla.Angela 发表于 2016-7-24 19:46
发现一个奇怪的问题,你这个东西只对改IE进程命令行的效果很好,但是对CHROME就无效了。
DBGVIEW显示已更改 ...
我测试chrome有效果的....测试平台是win7 x86 chrome是最新版的 Tesla.Angela 发表于 2016-7-24 19:46
发现一个奇怪的问题,你这个东西只对改IE进程命令行的效果很好,但是对CHROME就无效了。
DBGVIEW显示已更改 ...
x64下失效的原因 默认得到的是x64的peb 改了肯定没有效果 方法你肯定知道了 kz丶cn 发表于 2016-7-26 11:54
x64下失效的原因 默认得到的是x64的peb 改了肯定没有效果 方法你肯定知道了 ...
有道理,你这么一说我秒懂了。我当时测试的正好是64位IE和32位的CHROME。 感谢各位人才
页:
[1]