标签:自己 lse 调用 类库 text help process 客户 使用方法
一.实现目标:在第三方应用程序运行时,启动应用程序监控第三方应用程序指定函数方法,在指定函数方法被调用时,拦截该方法并可修改函数方法的内容及返回值。
二.背景条件
二使用开源类库:
三.使用方法
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函数,截图如下:
参数含义:
3.4Hook生效
引用DotNetDetour,调用下列函数:
3.5 在上述操作操作执行完成后,拦截程序与第三方程序都在运行状态下时可测试, 实例Demo下载
写这个的目的更多的是记录下自己学习的过程,详细内容可查看下方链接,写的很详细,超赞
参考资料:https://www.cnblogs.com/jlion/p/12897963.html
标签:自己 lse 调用 类库 text help process 客户 使用方法
原文地址:https://www.cnblogs.com/Khan-Sadas/p/12936229.html