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.hqwc.cn/news/169101.html

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

相关文章

知识蒸馏概述及开源项目推荐

文章目录 1.介绍2.知识2.1 基于响应的知识&#xff08;response-based&#xff09;2.2 基于特征的知识(feature-based)2.3 基于关系的知识(relation-based) 3.蒸馏机制3.1 离线蒸馏3.2 在线蒸馏3.3 自蒸馏 4.教师-学生架构5.蒸馏算法5.1 对抗性蒸馏&#xff08;Adversarial Dis…

vim相关命令讲解!

本文旨在讲解vim 以及其相关的操作&#xff01; 希望读完本文&#xff0c;读者会有一定的收获&#xff01;好的&#xff0c;干货马上就来&#xff01; 初识vim 在讲解vim之前&#xff0c;我们首先要了解vim是什么&#xff0c;有什么作用&#xff1f;只有了解了vim才能更好的理…

【CASS精品教程】cass3d 11.0加载超大影像、三维模型、点云数据

CAD2016+CASS11.0(内置3d)下载与安装: 【CASS精品教程】CAD2016+CASS11.0安装教程(附CASS11.0安装包下载)https://geostorm.blog.csdn.net/article/details/132392530 一、cass11.0 3d支持的数据 cass11.0中的3d模块增加了多种数据的支持,主要有: 1. 三维模型 点击…

ROC 曲线详解

前言 ROC 曲线是一种坐标图式的分析工具&#xff0c;是由二战中的电子和雷达工程师发明的&#xff0c;发明之初是用来侦测敌军飞机、船舰&#xff0c;后来被应用于医学、生物学、犯罪心理学。 如今&#xff0c;ROC 曲线已经被广泛应用于机器学习领域的模型评估&#xff0c;说…

算法导论6:摊还分析,显式与隐式

P258 摊还分析概念 聚合分析&#xff0c;利用它&#xff0c;我们证明对于n&#xff0c;一个n个操作的序列最坏情况下的花费的总时间为T(n)&#xff0c;因此&#xff0c;在最坏情况下&#xff0c;每个操作的平均代价&#xff08;摊还代价&#xff09;为T(n)/n 举了例子来形容这…

Clickhouse学习笔记(9)—— 语法优化

ClickHouse 的 SQL 优化规则是基于 RBO(Rule Based Optimization&#xff09;实现的 官方数据集的使用 为了方便测试CK的语法优化规则&#xff0c;尝试使用官方提供的数据集&#xff1b; 需要使用的数据集是visits_v1和hints_v1&#xff1a; Anonymized Web Analytics Data …

【LeetCode刷题-二分查找】--162.寻找峰值

162.寻找峰值 方法一&#xff1a;寻找最大值 题目保证了nums[i]≠nums[i1]&#xff0c;所以数组nums中最大值两侧的元素一定严格小于最大值本身&#xff0c;因此最大值所在的位置就是一个可行的峰值位置 class Solution {public int findPeakElement(int[] nums) {int idx 0…

ubuntu18-recvfrom接收不到广播报文异常分析

目录 前言 一、UDP广播接收程序 二、异常原因分析 总结 前言 在ubuntu18.04系统中&#xff0c;编写udp接收程序发现接收不到广播报文&#xff0c;使用抓包工具tcpdump可以抓取到广播报文&#xff0c;在此对该现象分析解析如下文所示。 一、UDP广播接收程序 UDP广播接收程序如…

win下安卓打包指南

win下安卓打包指南 0、缘起 换了台电脑竟然忘了怎么打包&#xff0c;还好有笔记&#xff0c;用软件打包也挺好&#xff0c;但是我感觉用 命令行 更有操作感&#xff0c;分享下。 1、下载并配置apktool&#xff08;放在C://Windows无需配置环境变量&#xff0c;需要java环境&…

【Python大数据笔记_day06_Hive】

hive内外表操作 建表语法 create [external] table [if not exists] 表名(字段名 字段类型 , 字段名 字段类型 , ... ) [partitioned by (分区字段名 分区字段类型)] # 分区表固定格式 [clustered by (分桶字段名) into 桶个数 buckets] # 分桶表固定格式 注意: 可以排序[so…

免费3D骨架工具

免费3D骨架工具 : https://posemy.art/ ControlNet 1.1http://www.coloradmin.cn/o/839105.html?actiononClick https://pan.baidu.com/s/1rh39DI9xVbguLO5l7O4pjA yqqe  网盘里的 预处理器/downloads文件夹&#xff08;包含所有预处理器&#xff09;直接放在 extensions/sd…

智安网络|探索人机交互的未来:自然语言处理的前沿技术

自然语言处理是人工智能领域中研究人类语言和计算机之间交互的一门学科。它涉及了语言的理解、生成、翻译、分类和摘要等多个方面。随着人们对自然语言处理的重视和需求不断增长&#xff0c;成为了热门的研究方向。 首先&#xff0c;我们需要了解自然语言处理的基本概念。自然…