首页
社区
课程
招聘
[求助]hook 通讯问题
发表于: 2014-8-14 19:39 8610

[求助]hook 通讯问题

2014-8-14 19:39
8610
收藏
免费 0
支持
分享
最新回复 (46)
雪    币: 142
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
能留个你q不呢?我发图给你看看嘛!
2014-8-16 11:30
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
不会啊。WriteProcessMemory是内核态的函数,要是阻塞了,那还 了得?直接系统挂了,只会返回成功与否,把图发这里就行了。--!说不准有更明白人的,还帮你解答呢
2014-8-16 11:31
0
雪    币: 142
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
2014-8-16 11:34
0
雪    币: 142
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
Hook ZwTerminateProcess 后,主进程判断后决定放行还是拦截的通信模式!
2014-8-16 11:39
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
挂ntdll里啦?那你的Hook程序也要到Ntdll 里找空间塞进去。然后把TerminateProcess的相关参数发到共享内存中,Hook的程序负责共享内存部份。然后主进程轮询,共享内存标志位
2014-8-16 11:43
0
雪    币: 142
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
能具体点流程不?
2014-8-16 11:44
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
你还是到内核里做吧,Xuetr也是内核中检测出来 的。
到内核中给NtTerminateProcess挂个内连,如果有人要结束进程,你就在内核中过滤他的参数,如果不合格就进接返回失败,这个办法即简单又安全,进程间,如果想搞这种检测,就必须attach到对方进程。然后读写相应内存,把Hook留在对方内存里。然后共享内存,两连通信,你能理解我的意思不?
2014-8-16 11:52
0
雪    币: 142
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
就是比较小菜啊,内核搞不动啊
2014-8-16 11:55
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
你去看两块内容:
一、内核驱动开发的相关资料
二、商业软件保护的资料。
在内核里搞远比你在进程间搞容易的多,而且想在进程间搞,需要把内核玩透了才行
2014-8-16 11:59
0
雪    币: 142
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
好的,感谢你的建议哈
2014-8-16 12:02
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
不客气。切记莫心急,基础很重要
2014-8-16 12:03
0
雪    币: 261
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
主线程结束了,WaitForSingleObject是会返回的

这么说吧……典型的多个生产者一个消费者的情形,给你个例子参考,几乎可以复制了
http://blog.csdn.net/zdl1016/article/details/5156280
2014-8-16 20:36
0
雪    币: 142
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
我测试的时候,WaitForSingleObject 在等待OPenMutex句柄的时候,对方如果在没有setevent之前就被结束了,WaitForSingleObject 会卡死
2014-8-21 21:04
0
雪    币: 261
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
你可以WaitForMultipleObjectsEx,一个Event,一个主线程句柄
2014-8-21 21:37
0
雪    币: 142
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
主进程 CreateEvent( nil, FALSE, FALSE, 'Global\test' ); 是这样的。MyZwCreateProcessEx 里面是这样的
zxc:=OpenEvent(EVENT_ALL_ACCESS, FALSE, 'Global\test');
WaitForSingleObject(zxc,20000);

这样创建一个进程就会开始等待,但是这个时候我的主进程在没有SetEvent结束后,还是在等待状态。就一直要等到20秒
2014-8-21 21:48
0
雪    币: 142
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
主进程被结束后,OpenEvent依然可以打开

http://blog.csdn.net/morewindows/article/details/7823572
遗弃问题,请问大婶们能解决不呢?
2014-8-21 21:52
0
雪    币: 261
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
WaitForMultipleObjectsEx……等待event句柄和主进程句柄,在进程结束或者setevent,WaitForMultipleObjectsEx都可以返回,通过返回值可以知道是进程结束还是setevent
2014-8-22 09:33
0
雪    币: 142
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
能不能示范一个列子呢,大婶,感谢你的思路啊!
2014-8-22 13:24
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
进程通讯?用mailslot就行了,简单直接
2014-8-22 13:54
0
雪    币: 142
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
可以倒是可以,就是效率上没的,事件+内存映射那么好,感谢yuchengton的思路!
2014-8-22 14:01
0
雪    币: 142
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
进程通信所有的我都测试过,管道和邮件都有一个问题,可能大家没怎么遇到过,但是我遇到过,主进程退出后,wait邮件曹的函数,和 wait管道 的函数,依然不会立即返回的,会卡主!
2014-8-22 14:05
0
雪    币: 261
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
我不记得pascal里数组怎么写了……就用C代码好了
HANDLE h[2]={hEvnet, hProcess};
DWORD ret = WaitForMultipleObjectsEx(2,h,FALSE,20*1000,FALSE);
switch (ret)
...
2014-8-22 16:25
0
游客
登录 | 注册 方可回帖
返回
//