SSDT中当多个程序同时HOOK某个函数时,怎么办他们的关系
SSDT中当多个程序同时HOOK某个函数时,怎么处理他们的关系?
例如:假设HOOK 系统函数OPEN,
A程序 钩住open后 变成 Aopen
B程序 在A的基础上 钩住Aopen后 变成 Bopen
C程序 在B的基础上 钩住Bopen后 变成Copen
正常情况下逻辑是: 现在Open地址已经是Copen了,这时引发Copen,发现不是所需对象就传给Bopen,发现又不是所需对象再传给Aopen,最后都不是就传给Open 。
但是一旦中间B程序关闭,这时Copen无法传给Bopen。HOOK就会开始失败。
所以简单的靠修改函数地址来HOOK似乎并不可靠,有没有办法解决?
==========================================================
我想到的办法就是利用消息机制,当触发Open时 ,开发程序内部截获出由哪个引发的Open,条件成立则完成他自身的Open,用完立刻恢复Open。这样我觉得才够动态,不会因为hook函数地址被恢复而造成程序失败;但是我现在有些技术上的问题,就是利用什么工具或者办法截获系统调用某个函数 “之前” 事件,最好能授之以渔而非鱼,能举个例最好 ?
非常感谢。
------解决思路----------------------
http://www.cnblogs.com/hibernate6/archive/2012/02/21/2521938.html
例如:假设HOOK 系统函数OPEN,
A程序 钩住open后 变成 Aopen
B程序 在A的基础上 钩住Aopen后 变成 Bopen
C程序 在B的基础上 钩住Bopen后 变成Copen
正常情况下逻辑是: 现在Open地址已经是Copen了,这时引发Copen,发现不是所需对象就传给Bopen,发现又不是所需对象再传给Aopen,最后都不是就传给Open 。
但是一旦中间B程序关闭,这时Copen无法传给Bopen。HOOK就会开始失败。
所以简单的靠修改函数地址来HOOK似乎并不可靠,有没有办法解决?
==========================================================
我想到的办法就是利用消息机制,当触发Open时 ,开发程序内部截获出由哪个引发的Open,条件成立则完成他自身的Open,用完立刻恢复Open。这样我觉得才够动态,不会因为hook函数地址被恢复而造成程序失败;但是我现在有些技术上的问题,就是利用什么工具或者办法截获系统调用某个函数 “之前” 事件,最好能授之以渔而非鱼,能举个例最好 ?
非常感谢。
------解决思路----------------------
http://www.cnblogs.com/hibernate6/archive/2012/02/21/2521938.html