C#动态拦截并覆盖第三方进程的函数,实现函数篡改(外挂)

今天在看之前收藏的一个pdf文档(介绍C#外挂的相关知识的),结合网上的东西及个人的理解才有了这篇文章。

参考文章:

【精选】一文带解读C# 动态拦截覆盖第三方进程中的函数(外挂必备)_zls365365的博客-CSDN博客

DotNetDetour - 万能的开源 .NET 代码 Hook 神器

测试环境:

visual studio 2017

.net framework 4.0

测试步骤如下:

一    第三方客户端程序编写(即要被篡改函数的客户端)

1.1  新建名为TargetClient的winform窗体应用程序,.net framework选4.0

1.2 新建类TargetTestClass,并编辑如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace TargetClient
{public class TargetTestClass{public string Test(){return "hello world";}}
}

其中Test方法就是我们要篡改的方法

1.3  在默认的Form1窗体拖入一个按钮,并把按钮名称改为"测试",如下图:

1.4  按钮点击方法如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace TargetClient
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){string ret=new TargetTestClass().Test();MessageBox.Show(ret);}}
}

1.5  运行并点击"测试"按钮输出英文的hello world,如下图:

二  注入客户端程序编码

2.1  新建名为InjectClient的winfrom窗体程序,.net framework选4.0

2.2  添加Jlion.DotNetDetour包引用,如下图:

2.3  添加名为InjectClass的类,并继承IMethodHook接口,用于编辑覆盖被篡改方法的逻辑,如下:

using DotNetDetour;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace InjectClient
{public class InjectClass:IMethodHook{//TargetClient.TargetTestClass这个要被篡改方法的TargetTestClass类的全路径(即TargetClient.exe客户端中的类TargetTestClass的全路径,即命名空间+类名)//Test为被篡改的方法名,要保持一致[HookMethod("TargetClient.TargetTestClass")]public string Test(){return "世界,你好呀";}//实现一个占位方法,要被覆盖的原方法,命名格式为:被篡改的方法名+_Original[OriginalMethod]public string Test_Original(){return null; //这里写什么无所谓,能编译过即可}}
}

注意:

TargetClient.TargetTestClass这个要被篡改方法的TargetTestClass类的全路径(即TargetClient.exe客户端中的类TargetTestClass的全路径,即命名空间+类名)

Test为被篡改的方法名,要保持一致

Test_Original是要被覆盖的原方法,命名格式为:被篡改的方法名+_Original

2.3  新建方法安装注册类HookService,为注入做准备,并编辑如下:

using DotNetDetour;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace InjectClient
{public class HookService{/// <summary>/// 必须为静态方法/// </summary>/// <param name="paramValue">暂时没用到</param>/// <returns></returns>public static int Start(string paramValue){try{MethodHook.Install();}catch{return -1;}return 1;}}
}

其中Start方法的名称根据你的喜好来起,但该方法必须是静态方法。

2.4  方法都准备好了,那就要编写注入的逻辑了,安装注入包FastWin32,如下图:

2.5  新增注入服务类InjectService,并编辑如下:

using FastWin32.Diagnostics;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace InjectClient
{public class InjectService{//注入的核心dll 路径public static string path = AppDomain.CurrentDomain.BaseDirectory + "InjectClient.exe";/// <summary>/// 进程id/// </summary>public static uint pid = 0;/// <summary>/// 启动/// </summary>public static void Start(){Inject();}#region 私有方法private static void Inject(){try{Injector.InjectManaged(pid, path, "InjectClient.HookService", "Start", "测试参数,暂时没用到", out int returnValue);MessageBox.Show("注入成功了呀");}catch (Exception ex){MessageBox.Show(ex.Message);}}#endregion}
}

其中InjectClient.HookService这个名称是前面安装注册类HookService的(命名空间+类名)

Start是前面安装注册类HookService的Start方法名称

2.3  在Form1界面中拖入一个文本标签、文本框和一个按钮,布局及名称如下图:

并编辑代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace InjectClient
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 注入按钮的逻辑/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnInject_Click(object sender, EventArgs e){//获取界面输入的进程IdInjectService.pid = Convert.ToUInt32(this.txtPid.Text.Trim());InjectService.Start();}}
}

2.4  生成项目备用

三  综合测试

3.1  运行要被篡改的客户端程序TargetClient.exe,如下图:

可以看到被篡改前输出还是英文的hello world

3.2  运行注入程序InjectClient.exe

3.3 打开window的任务管理器,找到TargetClient.exe对应的进程Pid,如下图:

可以看到TargetClient.exe对应的进程Pid为27580,你的大概率不是这个

3.4  把TargetClient.exe对应的进程Pid为27580输入到注入程序InjectClient.exe中并点击注入按钮,如下图,可以看到注入成功了

3.5  再来点击TargetClient.exe的测试按钮

可以看到输出中文的世界你好了,证明方法被成功注入。

这就可以干很多坏事了,如把别人的系统登录方法该篡改了(不管是混淆过或者没被混淆过的代码,都有方法拿到,这里就不展开了),你懂的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/138338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决内存泄漏问题,Profiler工具的使用介绍

什么是内存泄漏 内存泄漏&#xff08;Memory Leak&#xff09;是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放&#xff0c;造成系统内存的浪费&#xff0c;导致程序运行速度减慢甚至系统崩溃等严重后果。 以上是官方针对内存泄漏的说法。说的通俗一点&#x…

在IDEA中使用maven项目总结

一 什么是maven Maven本身也是Java写的&#xff0c;他是一款服务于Java平台的自动化构建工具 Maven是一个项目管理工具&#xff0c;旨在简化软件项目的构建、依赖管理和项目信息管理。它使用基于项目对象模型&#xff08;Project Object Model&#xff0c;POM&#xff09;的…

「我在淘天做技术」音视频技术及其在淘宝内容业务中的应用

作者&#xff1a;李凯 一、前言 近年来&#xff0c;内容电商似乎已经充分融入到人们的生活中&#xff1a;在闲暇时间&#xff0c;我们已经习惯于拿出手机&#xff0c;从电商平台的直播间、或者短视频链接下单自己心仪的商品。 尽管优质的货品、实惠的价格、精致的布景、有趣的…

基于SSM的科技公司门户网站

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Vatee万腾的科技决策力奇迹:Vatee科技决策力的独特之选

在金融投资的复杂领域中&#xff0c;Vatee万腾以其独特的科技决策力创造了一场真正的奇迹。这不仅是一种引领投资者走向成功的选择&#xff0c;更是一种开启新时代的科技决策奇迹。 Vatee的科技决策力背后蕴藏着强大的智慧和创新。通过大数据分析、智能算法的运用&#xff0c;V…

LoRAShear:微软在LLM修剪和知识恢复方面的最新研究

LoRAShear是微软为优化语言模型模型(llm)和保存知识而开发的一种新方法。它可以进行结构性修剪&#xff0c;减少计算需求并提高效率。 LHSPG技术&#xff08; Lora Half-Space Projected Gradient&#xff09;支持渐进式结构化剪枝和动态知识恢复。可以通过依赖图分析和稀疏度…

jupyter notebook中markdown改变图像大小

文章目录 &#x1f56e;原始图像&#x1f56e;改变图像大小&#x1f56e;使图像靠左 在 jupyter notebook中&#xff0c;导入的图片过大&#xff0c;想要改变图像的大小 &#x1f56e;原始图像 &#x1f56e;改变图像大小 复制小括号里面的内容到src后面&#xff0c;满足<…

【操作系统内核】线程

【操作系统内核】线程 为什么需要线程 比如我要做一个视频播放器&#xff0c;就需要实现三个功能&#xff1a; ① 从磁盘读取视频数据 ② 对读取到的视频数据进行解码 ③ 对解码的数据进行播放 如果串行执行&#xff08;通过一个进程来执行&#xff09;&#xff1a; 那么…

JavaScript从入门到精通系列第三十三篇:详解正则表达式语法(二)

文章目录 一&#xff1a;正则表达式 1&#xff1a; 检查一个字符串中是否有. 2&#xff1a;第二种关键表达 3&#xff1a;第三种关键表达 ​编辑4&#xff1a;第四种关键表达 5&#xff1a;第五种关键表达 6&#xff1a;第六种关键表达 二&#xff1a;核心表达二 1&am…

SSH 远程登录 WSL

更新ssh设置 sudo apt-get update sudo apt-get remove openssh-server sudo apt-get install openssh-server 编辑网络配置 sudo vi /etc/ssh/sshd_config &#xff08;1&#xff09;修改ssh服务监听端口和监听地址 &#xff08;2&#xff09;修改ssh服务允许使用用户名密码…

rabbitmq延迟队列发送与取消

安装延迟插件 根据rabbitmq的版本下载插件版本 # 延迟队列插件下载地址 https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases# 将本地下载好的插件复制到docker里 # docker cp rabbitmq_delayed_message_exchange-3.9.0.ez 容器名:/plugins docker cp r…

API低代码开发应用场景

什么是API低代码开发平台 API低代码开发平台是一种基于低代码开发的技术平台&#xff0c;它可以帮助企业快速构建和部署API应用程序。该平台通过提供可视化的开发工具、预定义的组件和模板、自动化的代码生成等功能&#xff0c;使得开发者可以在不需要编写大量代码的情况下&am…

IP可视对讲实时录制系统

介绍 软件架构 技术支持 CallRecored介绍 IP可视对讲实时录制系统设计了数据库表&#xff0c;并完成了数据库建模&#xff0c;采用了视频编解码技术&#xff0c;高效网络传输&#xff0c;磁盘高效读写技术&#xff0c;以及提供开放接口。 系统客户端采用扁平化UI&#xff0c;…

SPSS曲线回归

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

ZZ308 物联网应用与服务赛题第H套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;H卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用的…

认识继承和多态

1 继承 1.1 为什么需要继承 Java 中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&#xff0c;但是现实世界错综复杂&#xff0c;事物之间可能会存在一些关联&#xff0c;那在设计程序里就需要考虑 比如&a…

集合贴4——QA机器人设计与优化

基础课21——知识库管理-CSDN博客文章浏览阅读342次&#xff0c;点赞6次&#xff0c;收藏2次。知识库中有什么信息内容&#xff0c;决定了智能客服机器人在回答时可以调用哪些信息内容&#xff0c;甚至可以更简单地理解为这是智能客服机器人的话术库。https://blog.csdn.net/22…

第二十九章 目标检测中的测试模型评价指标(车道线感知)

前言 近期参与到了手写AI的车道线检测的学习中去&#xff0c;以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新&#xff0c;力求完整精炼&#xff0c;引人启示。所需前期知识&#xff0c;可以结合手写AI进行系统的学习。 介绍 自动驾驶的一大前提是保证人的安全…

高频SQL50题(基础版)-3

文章目录 主要内容一.SQL练习题1.1174-即时食物配送代码如下&#xff08;示例&#xff09;: 2.550-游戏玩法分析代码如下&#xff08;示例&#xff09;: 3.2356-每位教师所教授的科目种类的数量代码如下&#xff08;示例&#xff09;: 4.1141-查询近30天活跃用户数代码如下&…