我的Hook现在有个问题,我要看到所有的进程的启动,可是有个进程A是从svchost.exe里面启动的,我检查时看到A的父进程是svchost.exe,可是就是钩不到创建进程的地方,
CreateProcessA.W\CreateProcessAsUserA.W\myCreateProcessWithLogonW
这几个都钩了,只有在A创建以后我遍历进程列表才看到,很是烦。顺便问一下Windows底层到底有多少种启动进程的方法?请教大家如何钩到创建A进程的地方,分不是问题

解决方案 »

  1.   

    不停地列表进程也可以吧 发现有新进程就暂时把它suspend
      

  2.   

    我也想了解~windows 提供了两套 API 而实际上都是调用执行得都是一个 核心代码~
    我也在了解这方面的知识..
      

  3.   

    PsSetCreateProcessNotifyRoutine(这个函数可以给系统创建进程设置回调函数The PsSetCreateProcessNotifyRoutine routine adds a driver-supplied callback routine to, or removes it from, a list of routines to be called whenever a process is created or deleted.
      

  4.   

    谢谢大家的回答.TO:an_bachelor:不是要不停地列表进程,我是要在创建这个A进程之前拦住判断很多内容,不是要后面再挂起,拦截必须是实时的TO:wjjssnew:两套API是什么意思?TO: DentistryDoctor:钩下Native API也不行,钩了zwCreateProcess,zwCreateProcessExTO:laiyiling:我看一下这个函数,不会要写驱动吧TO:jacklzw88:这个A程序是老外的东西,整张安装光盘,太大没法发,不好意思
      

  5.   

    看了一下,这个PsSetCreateProcessNotifyRoutine是要在驱动里面运行的,不行啊
      

  6.   

    http://www.xfocus.net/articles/200303/495.html
      

  7.   


    NTCreateProcess?http://www.codeproject.com/system/soviet_protector.asp
      

  8.   

    经过多方打探,发现可能是 服务 里面根本不允许hook!好多帖子都说了,那位高人有办法有效的hook住svchost.exe
      

  9.   

    肯定最终都是调用CreateProcessA/W来创建进程的,你是hook不到svchost而已
    你可以强行把挂钩的DLL加载到svchost.dll里面,Detours里面有相应的代码,是改写ThreadContex实现的,可以参考。也可以直接使用CreateRemoteThread直接把加载dll的代码在svchost里面执行,实现在svchost加载dll
      

  10.   

    一般来说,svchost是通过rpc创建进程的,所以你看到父进程就是svchost,像Msn这样的垃圾就是这种加载方式