200请教高手,拦截API(200分)

  • 主题发起人 主题发起人 wuling
  • 开始时间 开始时间
W

wuling

Unregistered / Unconfirmed
GUEST, unregistred user!
如何象在DOS拦截中断一样拦截API调用
 
用钩子函数,例如如果知道API函数发出的消息类型,你可以专门写一个<br>处理该类消息的钩子函数,<br>Delphi深度历险上面有一个钩子函数的例子
 
呵呵<br>我这里有个拦截API的程序<br><br>要的话<br>mail to <br>wrench@263.net <br>跟我说一声
 
-)wrench<br>cmldy@263.net<br>thanks
 
:-)wrench<br>bigtt@263.net<br>thanks
 
wrench &nbsp;给你去了信,没见你回信<br>wuolong@yeah.net<br>thanks<br>
 
:-)wrench<br>C.g.Lee@263.net<br>thanks<br>
 
给我一封吧!谢谢!我的Email:luoxq_263@21cn.com
 
me too,please.<br>jacer@263.net
 
也给我一份吧,谢谢
 
elan@chinaren.com,thanks wrench
 
各位<br>我的备份资料的硬盘出了问题<br>可能要等几日才行
 
能不能也给我一份,感谢!<br>xiaxx@mail.csuep.edu.cn
 
到Delphi 32位深度历险去找一个hook的程序吧。<br>所谓拦截只能拦截消息,不能直接拦截Api。要想拦截API,首先需要你了解这个Api<br>的消息机制才行。如果这个Api函数不发送消息的话,你什么也拦截不到的,除非你<br>重新仿制一个DLL来替换原来的DLL。如果你有整个Dll的说明,仿制Dll并不是很难<br>实现的,多数的函数只需要调用原来的Dll,只需要把你要拦截的函数重新写一下就<br>行了。
 
API和消息不一样,所以拦截消息的方法不能用于拦截API。应该得到API入口地址,<br>将自己的一端代码写到那里,一旦调用这个API,就先执行自己的部分,然后恢复<br>执行原来的API。<br>至于怎么将代码写到API入口,这个在Win16里简单一些(记得是有未公开的Windows<br>函数可以将代码段(API入口)设置为数据段,然后在那里写一些东西),在Win32<br>里麻烦一些,大概是GetProcAddress得到API入口,用WriteProcessMemory写。<br>具体可以到http://bbs2.sina.com.cn/show.shtml?tech:richwin问周田鼠,<br>他比较了解。
 
我也在正在考虑怎么截获api的动作,如果能把原理说细点就好了。<br>看样子这个类似于dos下的改中断。<br>如果有消息告诉我一下好吗?
 
To wrench &nbsp;<br>me too,please.<br>Charles_zou@yeah.net
 
用detours吧!<br>-------------------------<br>M$的detours是一个工具包,<br>可以任意拦截Win32的函数。<br>它的作法是替换目标函数的前几条指令为一个无条件跳转,<br>转到用户提供的旁路函数(detour function),<br>目标函数保护在跳回函数(tramploline function)中,<br>跳回函数中包括目标函数的前几条指令和一个无条件跳转跳回原目标函数的后面的指令。<br>旁路函数还可以通过从跳回函数中调用原目标函数来替换和扩展目标函数的语义,<br>----------------------<br>请看本论坛“(300分!!)如何代替系统函数?”问题的讨论<br>请看本论坛“detour怎么用,高手们请进!!!”问题的讨论<br><br>
 
后退
顶部