BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / security / #34334同步于 2012/5/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖

[求助]关于HOOK拦截进程的问题……

cslei54
2012/5/19镜像同步7 回复
查了很多资料,可都不能很好解决问题…… 我希望能够支持XP和WIN7两种系统,功能是在程序运行前先获取程序的路径。 但在进行APIHook (用改变函数地址的方式Hook) 的过程中一直有问题无法解决…… API HOOK的代码参考这里弄的:http://blog.csdn.net/jacklam200/article/detail/4302652 据说是《WINDOWS内核编程》里提供的APIHook类代码,但无奈学校图书馆居然没这本书……[ema1] 资料显示: XP下进程创建过程的函数调用顺序是 CreateProcessW->CreateProcessInternalW->NtCreateProcessEx WIN7下进程创建过程的函数调用顺序是 未知的函数(不是CreateProcessW)->CreateProcessInternalW->NtCreateUserProcess 我的Hook结果:拦截成功指的是进入自己写的处理函数,失败就是没有进入。 在XP下 CreatePrcoessW 拦截成功 CreateProcessInternalW 拦截失败 (经调试确认Hook加载成功,函数地址更改成功) 在WIN7下 CreatePrcoessW 拦截失败 (这是必然的,WIN7不默认调用它了) CreateProcessInternalW 拦截失败 (经调试确认Hook加载成功,函数地址更改成功) NtCreateUserProcess 拦截成功 另:拦截OpenProcess和TerminalProcess在两个系统中是成功的。[ema12] 疑问1: 按理说拦截CreateProcessInternalW应该在两个系统中都成功才对,网上看别人大多也都是拦截CreateProcessInternalW成功,就连360和QQ管家也是的…… 这个问题怎么样都没法解决。 疑问2: 退一步说,其实在两个系统都能Hook到一个进程创建的函数,在XP算是解决了,因为CreateProcessW的参数1就代表了程序路径。 可是WIN7下只能拦截到内核(ntdll.dll中)的NtCreateUserProcess函数,微软没有公开其函数体,经网上牛人逆推,函数体大致如下(没人知道到底长什么样……): DWORD NtCreateUserProcess( PHANDLE ProcessHandle, PHANDLE ThreadHandle, PVOID Parameter2, PVOID Parameter3, PVOID ProcessSecurityDescriptor, PVOID ThreadSecurityDescriptor, PVOID Parameter6, PVOID Parameter7, PVOID ProcessParameters, PVOID Parameter9, PVOID pProcessUnKnow); 但是其中没有固定存储路径的参数。 (据说是参数2和参数11,但大家的实验结果都是有的时候存路径,有的时候没存路径)。 所以请大牛解惑啊…… 为什么不能Hook到CreateProcessInternalW呢? (针对不同API的Hook过程几乎一模一样,其余API都可以成功,所以应该不是代码的问题) 或者怎么从NtCreateUserProcess的参数里获得程序路径呢? 或者WIN7到底到底是怎么调用进程创建的呢? 真的查了很多资料……无结果……在此先跪谢…………[ema1]
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
SBHao2机器人#1 · 2012/5/19
纯帮顶
lianyan机器人#2 · 2012/5/20
bangding 【 在 SBHao2 的大作中提到: 】 : 纯帮顶
cslei54机器人#3 · 2012/5/20
顶。。。
heshanshan机器人#4 · 2012/5/20
顶~~~~~~~
cslei54机器人#5 · 2012/5/20
哪位大牛有类似的成功代码给小弟测试或者参考一下么?……
b78859793机器人#6 · 2012/5/22
也许资料显示的有误 没有走中间那个函数呢 不如加个操作系统判断各做各的
cslei54机器人#7 · 2012/5/22
有人说WIN7是先调用了CreateProcessAsUser,但加了进去仍然hook不能…… 最后还是用NtCreateUserProcess里面取出路径。。。暂时还没发现不稳定