找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
楼主: 1171320344

[源码] x86 PsSetCreateProcessNotifyRoutine回调改commandline参数demo

[复制链接]

1

主题

62

回帖

1

精华

铂金会员

积分
1486
发表于 2016-7-24 17:49:04 | 显示全部楼层 |阅读模式
本帖最后由 1171320344 于 2016-7-24 19:19 编辑

前几天在问答区看到有朋友问这个问题,问能不能改,怎么改,这是demo,献丑了
编译环境,VS2013 + WDK8.1

test.zip (5.46 KB, 下载次数: 13, 售价: 1 水晶币)


这是VS2013完整项目 testsss.zip (128.77 KB, 下载次数: 8825)

QQ截图20160724191907.png

评分

参与人数 1水晶币 +100 收起 理由
Tesla.Angela + 100 赞一个!

查看全部评分

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2016-7-24 19:05:50 | 显示全部楼层
我这里无法编译,能否提供个可编译的版本并说明测试方法?
WDK7里,无论XP FREE、WIN7X86 FREE、WIN7X64 FREE都无法编译。
  1. 1>errors in directory d:\temp\change-cmdline
  2. 1>d:\temp\change-cmdline\work.h(233) : error C2146: syntax error : missing ')' before identifier 'PRKPROCESS'
  3. 1>d:\temp\change-cmdline\work.h(233) : error C2085: 'Process' : not in formal parameter list
  4. 1>d:\temp\change-cmdline\work.h(233) : error C2085: '_Out_' : not in formal parameter list
  5. 1>d:\temp\change-cmdline\work.h(233) : error C2146: syntax error : missing ',' before identifier 'PRKAPC_STATE'
  6. 1>d:\temp\change-cmdline\work.h(233) : error C2146: syntax error : missing ',' before identifier 'ApcState'
  7. 1>d:\temp\change-cmdline\work.h(233) : error C2059: syntax error : ')'
  8. 1>d:\temp\change-cmdline\work.h(234) : error C2146: syntax error : missing ')' before identifier 'PRKAPC_STATE'
  9. 1>d:\temp\change-cmdline\work.h(234) : error C2085: 'KeUnstackDetachProcess' : not in formal parameter list
  10. 1>d:\temp\change-cmdline\work.h(234) : error C2146: syntax error : missing ',' before identifier 'PRKAPC_STATE'
  11. 1>d:\temp\change-cmdline\work.h(234) : error C2146: syntax error : missing ',' before identifier 'ApcState'
  12. 1>d:\temp\change-cmdline\work.h(234) : error C2059: syntax error : ')'
  13. 1>d:\temp\change-cmdline\work.h(235) : error C2085: 'PsGetProcessPeb' : not in formal parameter list
  14. 1>d:\temp\change-cmdline\work.h(236) : error C2085: 'NtTerminateProcess' : not in formal parameter list
  15. 1>d:\temp\change-cmdline\work.h(244) : error C2085: 'ObOpenObjectByPointer' : not in formal parameter list
  16. 1>d:\temp\change-cmdline\work.h(245) : error C2085: 'PsGetProcessImageFileName' : not in formal parameter list
  17. 1>d:\temp\change-cmdline\liketest.c(7) : error C2085: 'DriverUnload' : not in formal parameter list
  18. 1>d:\temp\change-cmdline\liketest.c(7) : error C2143: syntax error : missing ';' before '{'
  19. 1>d:\temp\change-cmdline\liketest.c(11) : error C2065: 'pDriverObj' : undeclared identifier
  20. 1>d:\temp\change-cmdline\liketest.c(11) : error C2223: left of '->DeviceObject' must point to struct/union
  21. 1>d:\temp\change-cmdline\liketest.c(11) : error C2198: 'IoDeleteDevice' : too few arguments for call
  22. 1>d:\temp\change-cmdline\liketest.c(74) : error C2065: 'DriverUnload' : undeclared identifier
  23. 1>d:\temp\change-cmdline\work.h(233) : error C2146: syntax error : missing ')' before identifier 'PRKPROCESS'
  24. 1>d:\temp\change-cmdline\work.h(233) : error C2085: 'Process' : not in formal parameter list
  25. 1>d:\temp\change-cmdline\work.h(233) : error C2085: '_Out_' : not in formal parameter list
  26. 1>d:\temp\change-cmdline\work.h(233) : error C2146: syntax error : missing ',' before identifier 'PRKAPC_STATE'
  27. 1>d:\temp\change-cmdline\work.h(233) : error C2146: syntax error : missing ',' before identifier 'ApcState'
  28. 1>d:\temp\change-cmdline\work.h(233) : error C2059: syntax error : ')'
  29. 1>d:\temp\change-cmdline\work.h(234) : error C2146: syntax error : missing ')' before identifier 'PRKAPC_STATE'
  30. 1>d:\temp\change-cmdline\work.h(234) : error C2085: 'KeUnstackDetachProcess' : not in formal parameter list
  31. 1>d:\temp\change-cmdline\work.h(234) : error C2146: syntax error : missing ',' before identifier 'PRKAPC_STATE'
  32. 1>d:\temp\change-cmdline\work.h(234) : error C2146: syntax error : missing ',' before identifier 'ApcState'
  33. 1>d:\temp\change-cmdline\work.h(234) : error C2059: syntax error : ')'
  34. 1>d:\temp\change-cmdline\work.h(235) : error C2085: 'PsGetProcessPeb' : not in formal parameter list
  35. 1>d:\temp\change-cmdline\work.h(236) : error C2085: 'NtTerminateProcess' : not in formal parameter list
  36. 1>d:\temp\change-cmdline\work.h(244) : error C2085: 'ObOpenObjectByPointer' : not in formal parameter list
  37. 1>d:\temp\change-cmdline\work.h(245) : error C2085: 'PsGetProcessImageFileName' : not in formal parameter list
  38. 1>d:\temp\change-cmdline\work.c(11) : error C2085: 'CreateProcessNotify' : not in formal parameter list
  39. 1>d:\temp\change-cmdline\work.c(11) : error C2143: syntax error : missing ';' before '{'
  40. 1>d:\temp\change-cmdline\work.c(16) : error C2065: 'Create' : undeclared identifier
  41. 1>d:\temp\change-cmdline\work.c(18) : error C2065: 'ProcessId' : undeclared identifier
  42. 1>d:\temp\change-cmdline\work.c(24) : error C2275: 'KAPC_STATE' : illegal use of this type as an expression
  43. 1>d:\temp\change-cmdline\work.c(24) : error C2146: syntax error : missing ';' before identifier 'ApcState'
  44. 1>d:\temp\change-cmdline\work.c(24) : error C2065: 'ApcState' : undeclared identifier
  45. 1>d:\temp\change-cmdline\work.c(24) : error C2275: 'PPEB' : illegal use of this type as an expression
  46. 1>d:\temp\change-cmdline\work.c(24) : error C2146: syntax error : missing ';' before identifier 'peb'
  47. 1>d:\temp\change-cmdline\work.c(24) : error C2065: 'peb' : undeclared identifier
  48. 1>d:\temp\change-cmdline\work.c(25) : error C2065: 'ApcState' : undeclared identifier
  49. 1>d:\temp\change-cmdline\work.c(25) : error C2708: 'KeStackAttachProcess' : actual parameters length in bytes differs from previous call or reference
  50. 1>d:\temp\change-cmdline\work.c(26) : error C2065: 'peb' : undeclared identifier
  51. 1>d:\temp\change-cmdline\work.c(26) : error C4013: 'PsGetProcessPeb' undefined; assuming extern returning int
  52. 1>d:\temp\change-cmdline\work.c(29) : error C2065: 'peb' : undeclared identifier
  53. 1>d:\temp\change-cmdline\work.c(29) : error C2223: left of '->ProcessParameters' must point to struct/union
  54. 1>d:\temp\change-cmdline\work.c(29) : error C2065: 'peb' : undeclared identifier
  55. 1>d:\temp\change-cmdline\work.c(29) : error C2223: left of '->ProcessParameters' must point to struct/union
  56. 1>d:\temp\change-cmdline\work.c(32) : error C2065: 'peb' : undeclared identifier
  57. 1>d:\temp\change-cmdline\work.c(32) : error C2223: left of '->ProcessParameters' must point to struct/union
  58. 1>d:\temp\change-cmdline\work.c(35) : error C2275: 'UNICODE_STRING' : illegal use of this type as an expression
  59. 1>d:\temp\change-cmdline\work.c(35) : error C2146: syntax error : missing ';' before identifier 'Unicode_tmp'
  60. 1>d:\temp\change-cmdline\work.c(35) : error C2065: 'Unicode_tmp' : undeclared identifier
  61. 1>d:\temp\change-cmdline\work.c(36) : error C2065: 'Unicode_tmp' : undeclared identifier
  62. 1>d:\temp\change-cmdline\work.c(37) : error C2065: 'peb' : undeclared identifier
  63. 1>d:\temp\change-cmdline\work.c(37) : error C2223: left of '->ProcessParameters' must point to struct/union
  64. 1>d:\temp\change-cmdline\work.c(37) : error C2065: 'Unicode_tmp' : undeclared identifier
  65. 1>d:\temp\change-cmdline\work.c(40) : error C2065: 'peb' : undeclared identifier
  66. 1>d:\temp\change-cmdline\work.c(40) : error C2223: left of '->ProcessParameters' must point to struct/union
  67. 1>d:\temp\change-cmdline\work.c(40) : error C2065: 'Unicode_tmp' : undeclared identifier
  68. 1>d:\temp\change-cmdline\work.c(42) : error C2065: 'peb' : undeclared identifier
  69. 1>d:\temp\change-cmdline\work.c(42) : error C2223: left of '->ProcessParameters' must point to struct/union
  70. 1>d:\temp\change-cmdline\work.c(53) : error C4013: 'KeUnstackDetachProcess' undefined; assuming extern returning int
  71. 1>d:\temp\change-cmdline\work.c(53) : error C2065: 'ApcState' : undeclared identifier
  72. 1>d:\temp\change-cmdline\work.c(72) : error C2065: 'CreateProcessNotify' : undeclared identifier
  73. 1>d:\temp\change-cmdline\work.c(81) : error C2065: 'CreateProcessNotify' : undeclared identifier
  74. 1>link : error LNK1181: cannot open input file 'd:\temp\change-cmdline\objfre_win7_x86\i386\liketest.obj'
复制代码

1

主题

62

回帖

1

精华

铂金会员

积分
1486
 楼主| 发表于 2016-7-24 19:10:19 | 显示全部楼层
Tesla.Angela 发表于 2016-7-24 19:05
我这里无法编译,能否提供个可编译的版本并说明测试方法?
WDK7里,无论XP FREE、WIN7X86 FREE、WIN7X64 FR ...

额,这个...我是用vs2013 写的, 文件->打开->Convert Sourecs /...直接打开Sourecs 就OK了...

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2016-7-24 19:12:31 | 显示全部楼层
1171320344 发表于 2016-7-24 19:10
额,这个...我是用vs2013 写的, 文件->打开->Convert Sourecs /...直接打开Sourecs 就OK了... ...


我看到你的SOURCES文件了,我是直接用WDK7切换到源码目录然后BLD编译的,但是失败了。

1

主题

62

回帖

1

精华

铂金会员

积分
1486
 楼主| 发表于 2016-7-24 19:14:08 | 显示全部楼层
Tesla.Angela 发表于 2016-7-24 19:12
我看到你的SOURCES文件了,我是直接用WDK7切换到源码目录然后BLD编译的,但是失败了。 ...

这个工程是WDK8.1的,按理说用的函数都差不多,应该没问题的啊

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2016-7-24 19:24:37 | 显示全部楼层
1171320344 发表于 2016-7-24 19:14
这个工程是WDK8.1的,按理说用的函数都差不多,应该没问题的啊


小问题,给我改好了,主要是你里面有些警告,用FREE是编译不过的。
利用IE测试效果很好。已经加高亮、精华和水晶币。
研究东西就需要LZ这种较真的精神。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2016-7-24 19:46:23 | 显示全部楼层
发现一个奇怪的问题,你这个东西只对改IE进程命令行的效果很好,但是对CHROME就无效了。
DBGVIEW显示已更改,但是实际无效。直接在CMD里用命令行启动【chrome www.baidu.com】是有效的。
以下是我修改过的代码,你原来PWCHAR *tmp是不对的。
  1. VOID CreateProcessNotify
  2. (
  3.     IN HANDLE ParentId,
  4.     IN HANDLE ProcessId,
  5.     IN BOOLEAN Create
  6. )
  7. {
  8.         NTSTATUS                status = STATUS_SUCCESS;
  9.         PEPROCESS                pEprocess = NULL;
  10.         if (Create)
  11.         {
  12.                 status = PsLookupProcessByProcessId(ProcessId, &pEprocess);//没有ObDereferenceObject
  13.                 if (NT_SUCCESS(status))
  14.                 {
  15.                         PFILE_OBJECT        FilePointer = NULL;
  16.                         KAPC_STATE ApcState;
  17.                         PPEB peb;
  18.                         PCHAR procName = PsGetProcessImageFileName(pEprocess);
  19.                         status = PsReferenceProcessFilePointer((PEPROCESS)pEprocess, &FilePointer);
  20.                         KeStackAttachProcess((PRKPROCESS)pEprocess, &ApcState);
  21.                         peb = PsGetProcessPeb(pEprocess);
  22.                         //DbgPrint("++++%wZ+++++%wZ\r\n", &peb->ProcessParameters->CommandLine, &peb->ProcessParameters->ImagePathName);
  23.                         if
  24.                         (
  25.                                 peb->ProcessParameters->CommandLine.Length - peb->ProcessParameters->ImagePathName.Length <= 6 &&
  26.                                 (!_strnicmp(procName,"iexplore.exe",12) || !_strnicmp(procName,"chrome.exe",10))
  27.                         )
  28.                         {
  29.                                 UNICODE_STRING Unicode_tmp;
  30.                                 PWCHAR tmp = (PWCHAR)(peb->ProcessParameters->CommandLine.Buffer);
  31.                                 wcscat(tmp, L" www.baidu.com");
  32.                                 RtlInitUnicodeString(&Unicode_tmp, tmp);
  33.                                 peb->ProcessParameters->CommandLine = Unicode_tmp;
  34.                                 peb->ProcessParameters->WindowTitle = Unicode_tmp;
  35.                                 DbgPrint("--->%wZ\r\n", &peb->ProcessParameters->CommandLine);
  36.                         }
  37.                         KeUnstackDetachProcess(&ApcState);
  38.                 }
  39.         }
  40. }
复制代码

1

主题

62

回帖

1

精华

铂金会员

积分
1486
 楼主| 发表于 2016-7-24 20:03:32 | 显示全部楼层
Tesla.Angela 发表于 2016-7-24 19:46
发现一个奇怪的问题,你这个东西只对改IE进程命令行的效果很好,但是对CHROME就无效了。
DBGVIEW显示已更改 ...

多谢指点,这玩意当时只是发现改了有效果了就没深研究,多谢指点

4

主题

145

回帖

0

精华

金牌会员

积分
1189
发表于 2016-7-26 11:43:10 | 显示全部楼层
Tesla.Angela 发表于 2016-7-24 19:46
发现一个奇怪的问题,你这个东西只对改IE进程命令行的效果很好,但是对CHROME就无效了。
DBGVIEW显示已更改 ...

我测试chrome有效果的....测试平台是win7 x86 chrome是最新版的

4

主题

145

回帖

0

精华

金牌会员

积分
1189
发表于 2016-7-26 11:54:18 | 显示全部楼层
Tesla.Angela 发表于 2016-7-24 19:46
发现一个奇怪的问题,你这个东西只对改IE进程命令行的效果很好,但是对CHROME就无效了。
DBGVIEW显示已更改 ...

x64下失效的原因 默认得到的是x64的peb 改了肯定没有效果 方法你肯定知道了

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2016-7-26 12:03:49 | 显示全部楼层
kz丶cn 发表于 2016-7-26 11:54
x64下失效的原因 默认得到的是x64的peb 改了肯定没有效果 方法你肯定知道了 ...


有道理,你这么一说我秒懂了。我当时测试的正好是64位IE和32位的CHROME。

8

主题

68

回帖

0

精华

钻石会员

积分
4115
发表于 2016-8-10 17:10:56 | 显示全部楼层
感谢各位人才
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表