zoukankan      html  css  js  c++  java
  • .Net 截取第三方进程/应用程序的函数方法并替换其实现

    一.实现目标:在第三方应用程序运行时,启动应用程序监控第三方应用程序指定函数方法,在指定函数方法被调用时,拦截该方法并可修改函数方法的内容及返回值。

    二.背景条件

    1. 应用程序是.Net应用程序
    2. 拦截程序和第三方应用程序在同一设备上
    3. 知悉第三方应用程序调用的函数方法名称及传参和返回值

    二使用开源类库:

    1. DotNetDetour :生成Hook,将被拦截函数方法实现替换为拦截程序中设置的实现
    2. FastWin32  :      将Hook注入到第三方程序中

    三.使用方法

    3.1第三方函数实现

    public class ProcessService
    {
    public ProcessResponse GetProcessInfo(ProcessRequest request)
    {
    return new ProcessResponse()
    {
    Name = "这是TargetClient 客户端(第三方程序)",
    Version = request.Version
    };
    }
    }
    

      

    3.2Hook部分

    引用DotNetDetour类库,并在覆盖类内引用IMethodHook接口,按如下格式实现,“GetProcessInfo”为第三方程序需要被拦截的函数名称,“”“GetProcessInfo_Original”为占位方法,此部分内容为原始方法是否实现的内容,为空即可

    //被覆盖后的函数实现
    [HookMethod("Jlion.Process.Target.Client.ProcessService", null, null)]
    public object GetProcessInfo([RememberType("Jlion.Process.Target.Client.Model.ProcessRequest", false)] object request)
    {
    var json = JsonConvert.SerializeObject(request);
    TextHelper.LogInfo($"json:{json}");
    var name = "这是Jlion.Process.HookCore.HookService dll. 改写TargetClient 客户端的GetProcessInfo(obj)后得到的结果";
    return new ProcessResponse()
    {
    Name = name,
    Version = "改写的dll 版本"
    };
    }
    //实现一个占位方法,此方法代表被Hook覆盖的原始方法
    [OriginalMethod]
    public object GetProcessInfo_Original([RememberType("Jlion.Process.Target.Client.Model.ProcessRequest", false)] object request)
    {
    return null;
    }
     
    

      

    3.3 注入部分

    在拦截程序启动部分需引用FastWin32类库,负责将Hook内容注入到第三方程序中,具体操作为调用Injector.InjectManaged函数,截图如下:

    参数含义:

    • processId:目标进程的进程id ->pid
    • assemblyPath:核心Hook 注入的dll 绝对路径
    • typeName:Hook 初始化方法的命名空间
    • methodName : 注入后执行的方法名称
    • argument : 方法所需要的参数
    • returnValue:返回注入后运行的方法返回值

    3.4Hook生效

    引用DotNetDetour,调用下列函数:

    1. MethodHook.Install();

    3.5  在上述操作操作执行完成后,拦截程序与第三方程序都在运行状态下时可测试,  实例Demo下载

    写这个的目的更多的是记录下自己学习的过程,详细内容可查看下方链接,写的很详细,超赞

    参考资料:https://www.cnblogs.com/jlion/p/12897963.html

  • 相关阅读:
    NHibernate学习之二
    ETL学习之四:SQL Server Integration Services入门
    NHibernate学习之五:三种常见的配置方法。
    ORACLE执行计划入门
    C# default關鍵字
    WordPress Mail On Update插件跨站请求伪造漏洞
    WordPress Colormix主题多个安全漏洞
    nginx 'ngx_http_parse.c'栈缓冲区溢出漏洞
    Apache HTTP Server日志内终端转义序列命令注入漏洞
    WordPress wpFileManager插件‘path’参数任意文件下载漏洞
  • 原文地址:https://www.cnblogs.com/Khan-Sadas/p/12936229.html
Copyright © 2011-2022 走看看