我查阅了一下相关C#方面的资料,却没有发现有提供过关于api-hook方面的资web
料包括应用库由此本人编写一套inline-hook的库用于支持x6四、x86上的基于在c#
clr的公共语言,如: c#、c+/clr、vb.net 所有均可以使用该类库改变底层api执api
行结果,如咱们须要制做抓包工具,或者拦截某个ActiveX对象内部调用的函数 app
用处普遍 有些人在制做“截包”工具时是经过使用SPI,但也能够经过本技术实现函数
调用MessageBox.Show("Hello world", "Advapi32")时会跳转到CB_MessageBox函数工具
MessageBox.Show()这个方法在下层中会调用MessageBoxW函数,不信咱们能够试oop
试,上面的代码执行后结果与最上面的相同。本类库提供分别需求.net 2 / 4的两种学习
不一样的类库,基本知足开发的须要 不过这一块一直是C++方面的哦不过我相信之后ui
会是C#作这一块,不过与其等到到时候再提供类库 不如早些提供类库,你们不须要this
去研究我类库中怎么去实现的,虽然类库我稍微混淆了一下 不过大家要去学习也不
是很困难,不过我是懒得去讨论在下层怎么实现的 DLL是没有打入版权的信息,很
简单你在属性中看不到任何信息,除了一个内部名称以外没有任何信息,因此你不
必担忧 下面是解释InlineHook中导出的函数接口及释义。
InlineHook.GetProcAddress(string strLibraryName, string strMethodName) // 取函数地址(库文件, 函数名)
InlineHook.GetProcAddress(System.Delegate d) // 取函数地址(有效委托)
InlineHook.Install(System.IntPtr oldMethodAddress, System.IntPtr newMethodAddress) // 安装钩子(源函数地址, 新函数地址)
InlineHook.Resume() // 恢复钩子
InlineHook.Suspend() // 挂起钩子
InlineHook.Uninstall() // 卸载钩子
Sample:
CAT(inline-hook) http://pan.baidu.com/s/1kTKjFPt // 示例地址含类库
每一个版本文件夹中都包含x86 / x64两份不一样的类库,若是使用本类库有疑惑的地方能够在本人下方留言。