• 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
    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两份不同的类库,如果使用本类库有疑惑的地方可以在本人下方留言。

     
  • 相关阅读:
    es6实现简单模板编译
    JavaScript实现自定义短信模板
    关于JavaScript设计模式的学习(二)
    js获取可编辑区域光标位置
    关于JavaScript设计模式(一)
    为什么axios请求接口会发起两次请求
    axios基本用法
    webpack 配置文件
    IDEA系列(六)一This file is indented with tabs instead of 4 space
    IDEA系列(五)一控制台中文乱码
  • 原文地址:https://www.cnblogs.com/gc2013/p/4661213.html
Copyright © 2020-2023  润新知