突破 Windows NT 内核进程监视设置限制.docxVIP

突破 Windows NT 内核进程监视设置限制.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
突破 Windows NT 内核进程监视设置限制

/list.php?id=48突破 Windows NT 内核进程监视设置限制Author:??PolyMetaEmail:???PolyMeta@Homepage: Date:????2007-06-10 监视进程创建和销毁,最常用的手段就是用 PsSetCreateProcessNotifyRoutine() 设置一个CALLBACK函数来完成。该函数的原形如下:VOID(*PCREATE_PROCESS_NOTIFY_ROUTINE) (IN HANDLE ParentId,IN HANDLE ProcessId,IN BOOLEAN Create); NTSTATUSPsSetCreateProcessNotifyRoutine(IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,IN BOOLEAN Remove);安全类软件,诸如防火墙,AV,包括系统自身也在用这种方法来监视进程。不要问我为啥,有文档的东西,大家都喜欢用。问题出来了,你有没有想过自己的监控回调函数就一定能设置成功吗?很不幸的告诉你,不一定。特别是在非正规软件充斥internet的今天。原因很简单:PsSetCreateProcessNotifyRoutine 最多只能设置8个回调函数,这点很多玩内核的人都知道。然而狼多肉少,大家都想通过进程创建监控对付自己脑海中的敌人.于是乎,自古以来抢地盘的战争又在这里爆发了。 最残忍的抢地盘手段:为了自己的回调函数能够正常设置成功,干脆把之前其它软件设置的回调一并干掉,也不管是正规或者非正规软件,反正挡路者死!这下好,用户倒霉了,很多软件包括防火墙咋不好使了呢? 作为正规软件或者有道德的非正规软件作者就开始郁闷了,既要让自己的软件生效,又要不影响用户的正常使用。难题既然出来了,就得想出来解决办法。于是NTSTATUSPsSetCreateProcessNotifyRoutineMustSuccess(IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,IN BOOLEAN Remove);这个函数就诞生,该函数被笔者封装到了一个lib里面供兄弟们写驱动的时候使用,用以代替原始的 PsSetCreateProcessNotifyRoutine 函数,使用方法和它一模一样。该函数的特点就是可以使通过它设置的进程监控回调函数,无论在8个蹲位是否已经被占满的情况下都可以设置成功,并且可以和之前由其它软件设置的进程监控回调函数和平共存。工作原理:PsSetCreateProcessNotifyRoutineMustSuccess(NotifyRoutine)||||获得PspCreateProcessNotifyRoutine地址\/ GetPspCreateProcessNotifyRoutine()||||调用原始函数 \/ PsSetCreateProcessNotifyRoutine(NotifyRoutine) 调用GetFastRefObject()|| /pCallBackRoutineBlock 设置成功|| 设置失败则直接操作 保存 | || //\/PspCreateProcessNotifyRoutine[1] 或 ||成员Function || || | \/ ||||替换为 \pOldNotifyRoutine \/||^ over调用\/ 再调用|[新进程创建]或AgentProcessMonitor/| ||| ||先调用|调用 \/ \ NotifyRoutine 也不知道画的流程清晰不,核心的工作原理就是真对PspCreateProcessNotifyRoutine[PSP_MAX_CREATE_PROCESS_NOTIFY] 这个有8个蹲位的(#define PSP_MAX_CREATE_PROCESS_NOTIFY 8 ) 数组进行操作而已。实质上PsSetCreateProcessNotifyRoutine 这个函数也就是对 PspCreateProcessNotifyRoutine 数组进行操作,把用户设置的NotifyRoutine给存到这个数组里面,当有新进程创建的时候,

文档评论(0)

wnqwwy20 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档