C# inline-hook / api-hook

王朝学院·作者佚名  2016-05-21
窄屏简体版  字體: 小  |  中  |  大  |  超大  

C# inline-hook / api-hook我查阅了一下相关C#方面的资料,却没有发现有提供过关于api-hook方面的资

料包括应用库由此本人编写一套inline-hook的库用于支持x64、x86上的基于在

clr的公共语言,如: c#、c+/clr、vb.net 全部都可以使用该类库改变底层api执

行结果,如我们需要制作抓包工具,或者拦截某个ActiveX对象内部调用的函数

用处广泛 有些人在制作“截包”工具时是通过使用SPI,但也可以通过本技术实现

调用MessageBox.Show("Hello world", "Advapi32")时会跳转到CB_MessageBox函数

MessageBox.Show()这个方法在下层中会调用MessageBoxW函数,不信我们可以试

[csharp]view plaincopy[DllImport("user32",EntryPoint="MessageBoxW",CharSet=CharSet.Unicode)]publicstaticexternintMessageBox(IntPtrhWnd,stringlpText,stringlpCaption,uintuType);[STAThread]staticvoidMain(string[]args){InlineHookich=newInlineHook();ich.Install(ich.GetPRocAddress("user32","MessageBoxW"),ich.GetProcAddress(newMessageBoxW(CB_MessageBox)));//MessageBox.Show("Helloworld","Advapi32");MessageBox(IntPtr.Zero,"Helloworld","Advapi32",0);Console.ReadKey(false);}试,上面的代码执行后结果与最上面的相同。本类库提供分别需求.net 2 / 4的两种

不同的类库,基本满足开发的需要 不过这一块一直是C++方面的哦不过我相信以后

会是C#做这一块,不过与其等到到时候再提供类库 不如早些提供类库,大家不需要

去研究我类库中怎么去实现的,虽然类库我稍微混淆了一下 不过你们要去学习也不

是很困难,不过我是懒得去讨论在下层怎么实现的 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两份不同的类库,如果使用本类库有疑惑的地方可以在本人下方留言。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航