SetWindowHookEx不能HOOK命令行(cmd.exe) Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiAPI/html/delphi_20061203132155126.html
最近写了个API HOOK的小软件
利用SetWindowHookEx 实现对所有进程的HOOK
但是发现 SetWindowHookEx (WH_WH_GETMESSAGE)对cmd.exe 不起作用(平台WIN2003),后来我又试了 WH_CALLWNDPROCRET ,WH_KEYBOARD ,WH_MOUSE ,都对cmd.exe不起作用 ,想请教下是否有别的方法进入cmd.exe的进程,利用CreateRemoteThread是可以注入cmd.exe的,但总不能用时钟来刷新进程列表,发现cmd.exe就注入吧,SetWindowHookEx本是我认为的最好的办法,但发现对cmd.exe不起作用,所以想请教下是否还有别的更好的办法,谢谢
是不支持的!
Hook API,监控CreateProcess相关API,就不需要用时钟来刷新进程列表
感谢楼上的答复,我回去尝试下
看到你名字里的网址,才想起我还从你那下过东西呢
高手就是高手,在你面前总有“我怎么就没想到”的那种感觉
在《SetWindowHookEx不能HOOK命令行(cmd.exe) 》
您让我“监控CreateProcess相关API”
我回去尝试了下,效果是有的,但是在对cmd.exe的时候,好象还有点小问题
我先将我的尝试步骤说下:
1.我先 HOOK CreateProcess ,替换为一个同格式和参数的空函数,效果为不能运行任何新的进程,包括cmd.exe 说明 HOOK CreateProcess 的做法是正确的,也达到了目的了
2.接着我写了个远程线程注入的函数,根据进程ID 来进程注入 测试成功
3.然后我又写了个 CreateProcess 的例子,函数的最后一个参数返回了创建的进程的ID 等信息
看来是完全可行的,于是我修改了APIHOOK的那个DLL,将CreateProcess HOOK
替换CreateProcess的自定义函数里,我返回原函数的结果,让新的自定义的CreateProcess函数能达到原函数的效果,同时在后面加了 注入线程的函数,将原CreateProcess返回里最后个参数的返回的进程的ID 做为参数,理论上是能成功达到我的目的的,但是测试发现,别的进程都能成功注入,我测试了很多,包括VBS 脚本,但是 cmd.exe 依然没能注入,上面测试了 手工 注入cmd.exe是可行的 ,但为什么在以CreateProcess返回的进程ID为参数时,会出现cmd.exe 不能被注入,其他的都可以的,这让我百思不得其解,所以就给您发消息,希望能再次获得您的帮助 谢谢