博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# inline-hook / api-hook
阅读量:6948 次
发布时间:2019-06-27

本文共 1554 字,大约阅读时间需要 5 分钟。

我查阅了一下相关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]
 
  1. [DllImport("user32", EntryPoint = "MessageBoxW", CharSet = CharSet.Unicode)]  
  2. public static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType);  
  3.   
  4. [STAThread]  
  5. static void Main(string[] args)  
  6. {  
  7.     InlineHook ich = new InlineHook();  
  8.     ich.Install(ich.GetProcAddress("user32", "MessageBoxW"), ich.GetProcAddress(new MessageBoxW(CB_MessageBox)));  
  9.     // MessageBox.Show("Hello world", "Advapi32");  
  10.     MessageBox(IntPtr.Zero, "Hello world", "Advapi32", 0);  
  11.     Console.ReadKey(false);  
  12. }  

试,上面的代码执行后结果与最上面的相同。本类库提供分别需求.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两份不同的类库,如果使用本类库有疑惑的地方可以在本人下方留言。

 

 
你可能感兴趣的文章
Gtest:Using visual studio 2017 cross platform feature to compile code remotely
查看>>
Android Span的简单使用
查看>>
Aggressive cows 二分不仅仅是查找
查看>>
人的成长,注定是一场孤独的旅途 ...(360doc)
查看>>
iOS开发UI基础—手写控件,frame,center和bounds属性
查看>>
死锁排查的小窍门 --使用jdk自带管理工具jstack
查看>>
unity3d 动态添加地面贴图 草地
查看>>
P1101 单词方阵
查看>>
安卓开发者必备的42个链接
查看>>
DeadLine
查看>>
2018-2019 Exp2 后门原理与实践
查看>>
bzoj5137 [Usaco2017 Dec]Standing Out from the Herd
查看>>
Mysql压缩包版zip的安装方法
查看>>
UWP 动画
查看>>
浅析设计模式(二)——工厂方法模式
查看>>
ubuntu设置开机开启小键盘[Linux]
查看>>
syq小姐姐的分享的历年考试经验
查看>>
linux 实践2.2 编译模块
查看>>
FAQs: 当在Outlook Explorer中右击邮件时,如何向上下文菜单添加按钮?(VSTO技术)...
查看>>
使用Java纯代码实现MySQL的连接
查看>>