外挂的本质以及进程相关的内容

外挂的本质以及进程内存相关的内容

外挂的本质

外挂(Cheat software 或 Hacks) 的本质是一种未经授权的软件,它通过修改或干预正常软件、游戏或系统的运行方式来提供给用户不公平的优势或功能。外挂的实现方法多种多样,其中一种常见的方式确实是通过进程内存入侵。

如何实现

进程内存入侵

这种方式的外挂直接读取或修改另一个程序的运行时内存。在游戏中,这可能用于获取玩家位置、健康值、弹药数量等信息,或者直接修改这些值以获得不公平的优势。这种方法通常涉及以下技术:

内存扫描: 扫描目标进程的内存以查找特定的值或模式。
内存注入: 将代码注入到目标进程中,该代码可以修改内存中的值。
API 钩子: 拦截和/或修改目标程序对操作系统API的调用。

例子:
假如我们能通过某种工具扫描到游戏进程中的内存值,就可以对其中的内容进行遍历,我们可以在游戏前实验,比如我们的血量是 100,那么我们先扫描 100 的值的内存,然后我们可能被打了,扣到了 90 ,那么我们再通过扫描 90 的内存值,最后将两次扫描都符合的值,基本上就可以确认是我们血量的内存值了。那么这时候对它进行修改,也就完成了血量的修改。

其余的内存注入或者 API 调用大致意思相近。

其他方法

除了进程内存入侵外,外挂还可能采用其他技术,如:
修改游戏文件: 更改游戏的配置文件或资源文件,以改变游戏行为或解锁功能。
网络干预: 通过修改游戏客户端与服务器之间的网络通信来改变游戏状态或玩家数据。
机器学习和图像识别: 使用图像识别技术自动检测屏幕上的对象,并根据这些信息自动执行操作,例如自动瞄准(Aimbot)。
物理外挂:比如拿放大镜哈哈哈哈(乱说的)

DMA

DMA(Direct Memory Access)直接内存访问,是一种计算机系统中用于高速数据传输的技术。DMA 允许外部设备(例如显卡、声卡等)直接访问系统内存,而无需通过中央处理器(CPU)。这种直接访问可以提高数据传输的效率和速度。在游戏中,DMA 也可以被外挂程序用于读取和修改游戏进程的内存,因此防止 DMA 的滥用也是反外挂的一部分。游戏开发者可以采取一些措施,如限制 DMA 访问权限或使用内存保护技术来减少外挂的可能性。

比如我们经常会在电视中看到早些年通过插入 USB 来使用外挂,实际上就是通过 DMA 实现的。

在早期,一些外挂程序确实利用了 USB 设备通过 DMA 访问系统内存的特性来进行攻击。这种攻击方式被称为 “BadUSB”。BadUSB 攻击利用了 USB 设备的固件漏洞,通过修改 USB 设备的> 固件,使其在插入计算机时执行恶意代码,从而实现对计算机系统的入侵。

这种攻击方式确实在一定程度上绕过了传统的软件防护机制,因为操作系统通常会信任插入的 USB 设备,并允许其进行 DMA 访问。然而,随着安全意识的提高,操作系统和硬件厂商采取了一些措施来减轻此类攻击的风险。

反外挂?

理论上经过了上述的一些内容,大家应该基本知道了外挂的本质就是对游戏进程的内存入侵,然后篡改其中的值,然后实现了血量或者金钱的变化处理。那么反外挂是怎么做的呢?

内存扫描: 游戏或软件定期扫描进程的内存,检测异常的代码或数据结构。例如,游戏可以扫描玩家角色的内存,查找修改速度或无敌状态的外挂程序。如果发现异常,游戏可以采取相应措施,如封禁外挂使用者。

CRC 检测: CRC 是一种数据完整性检验方法,用于检测内存数据是否被修改。游戏或软件可以计算内存区域的 CRC 值,并与预期值进行比较。例如,游戏可以计算玩家背包内物品数据的 CRC 值,如果与预期不符,可能表示外挂程序修改了物品数量。

随机化: 游戏或软件可以随机化关键数据的存储位置,使外挂程序难以定位和修改这些数据。例如,游戏可以随机化玩家血量值的存储位置,使外挂程序无法准确找到并修改血量值。

加密和解密: 游戏或软件可以使用加密算法对关键数据进行加密,并在需要时进行解密。例如,游戏可以加密玩家金币数量的存储,只有在需要使用金币时才进行解密,这样可以减少外挂程序修改金币数量的可能性。

反调试技术: 游戏或软件可以使用各种技术来防止外挂程序进行调试。例如,游戏可以检测调试器的存在,如果检测到调试器,则采取相应措施,如中断游戏进程或隐藏关键数据。

客户端-服务器验证: 游戏可以通过与服务器进行交互来验证客户端的合法性。服务器可以检查玩家的行为是否合规,并排除外挂程序的影响。例如,游戏可以通过服务器验证玩家的游戏行为是否与服务器端数据一致,以防止外挂程序修改游戏数据。

课外视频

理解和入侵 Linux 进程地址空间 (mmap 系统调用;地址空间修改) 南京大学2023
有兴趣的可以看一下南京大学 jyy 老师说的这一章节的内容,最后面也有介绍到使用工具获取内存内容和实现内存入侵的内容。

进程相关

进程是什么

进程是操作系统进行资源分配和调度的基本单位。操作系统负责进程控制,包括创建、撤销、挂起、恢复等基本操作。每个进程就像一个独立的 “应用容器”,拥有自己的地址空间、数据栈、运行环境等资源。同一台计算机上的多个进程相互独立、不受干扰。

从编程的角度来看,进程对应着运行中的程序实例。通过fork()等系统调用可以创建新进程。进程间通信是编程模型的重要组成部分,常见的通信方式包括管道、消息队列、共享内存等。编程中处理并发时,通常要结合进程和线程的概念。

进程里有什么

进程中包含了许多重要的内容和结构,这些内容共同构成了进程的运行环境和状态。让我们逐一介绍一下:

1、内存区域

  • 代码区域:存储可执行程序代码
  • 数据区域:存储全局变量 -堆区:动态分配的内存,通过malloc等申请
  • 栈区:每个线程拥有的私有栈空间,用于函数调用

2、描述信息

  • 进程ID(PID)
  • 用户ID和组ID(UID,GID)
  • 进程状态:运行、就绪、阻塞等

3、环境变量

  • 保存进程的运行环境配置信息

4、工作目录

  • 进程启动和运行的当前目录

5、文件描述符

  • 进程打开的文件的引用

6、信号处理机制

  • 注册信号处理函数,响应各种信号

7、资源利用情况

  • CPU利用率、内存占用等

8、进程关系

  • 父子进程、兄弟进程等

这些内容构成了进程的完整运行环境,内核通过进程控制块(PCB)来管理和维护。

我们提到的游戏外挂,就是通过读取/修改目标进程的内存数据来实现。但由于内存访问受到保护,需要使用一些特殊手段,如调试器注入或内核级驱动来获取相应权限。

总的来说,这些进程内容各自扮演不同的角色:

  • 内存区域用于存储指令、数据
  • 描述信息用于内核标识和管理进程
  • 环境变量决定了进程运行环境
  • 工作目录和文件描述符与文件系统交互
  • 信号处理机制与外部事件交互
  • 资源利用数据用于统计和调度
  • 进程关系体现了进程的父子层级

进程通讯

进程间通信(IPC)是指运行在同一台计算机上的两个或多个进程之间交换数据或信号的方式。进程间通信是操作系统提供的一种机制,可以实现进程之间的同步、互斥和数据交换。下面我介绍几种常见的进程间通信方式及其实际应用场景:

  1. 管道(Pipe)

    • 概念: 最简单的进程通信机制,用于有血缘关系的父子进程或兄弟进程间通信。数据的传输是单向的。
    • 实例: Unix/Linux系统中,shell的管道命令 “|” 就是利用了管道进行进程间通信。如 “ps aux | grep python” 命令,ps进程和grep进程之间通过匿名管道完成数据传递。
  2. 命名管道(FIFO)

    • 概念: 去除了管道只能在有血源关系的进程间使用的限制,任何进程均可访问命名管道,它以一个文件的形式存在于文件系统中。
    • 实例: 服务器和多个客户端进程可通过命名管道进行通信,如Unix域套接字在本地通信的时候会使用命名管道。
  3. 信号(Signal)

    • 概念:信号是一种异步的通信方式,用于在发生特定事件时通知进程。可将其视为软件中断。
    • 实例: 当用户按下 Ctrl+C 时,SIGINIT信号被发送给前台进程,从而使进程终止。守护进程可以通过 SIGTERM 等信号来 gracefully 关闭程序。
  4. 消息队列(Message Queue)

    • 概念: 存放在内核中的链接字符串队列,支持先入先出操作,可实现任意进程间的通信。
    • 实例: 消息队列广泛用于分布式应用或实时工业控制系统,如股票交易系统将指令通过消息队列传递给相应的交易程序。
  5. 共享内存(Shared Memory)

    • 概念: 映射一个能被两个或更多进程所访问的内存段,可提供最快的IPC方式。
    • 实例: IPC服务使用共享内存减少数据拷贝次数。进程间可通过读写共享内存区实现高效通信,如X Window中的共享内存传输像素数据。
  6. 信号量(Semaphore)

    • 概念: 用于实现进程间的互斥与同步,防止出现竞态条件。
    • 实例: 在多个进程需要访问共享资源(如共享内存)时,使用信号量来控制对资源的访问,确保资源不被多个进程同时访问和修改。
  7. 套接字(Sockets)

    • 概念: 套接字是最高级的进程间通信机制,支持本地和网络通信。可以设计更复杂的应用层协议。
    • 实例: 网络编程中的客户端-服务器通信基本都是通过套接字实现的,如Web浏览器与Web服务器的交互。

总的来说,不同的进程间通信机制适用于不同的场景。管理员可根据所需的通信量、数据交换方式、实时性等因素选择合适的IPC技术。合理使用这些IPC方式,能够提高分布式应用程序的性能、可扩展性和可靠性。

这里只是粗略的介绍了下进程相关的内容与外挂的内容,下一章我们针对进程与线程等做更详细的介绍。

引用

理解和入侵 Linux 进程地址空间 (mmap 系统调用;地址空间修改) 南京大学2023
外挂如何绕过反作弊

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

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

相关文章

Unity 让角色动起来(动画控制器)

下载素材: 导入后,找到预制体和动画。 新建动画控制器,拖动到预制体的新版动画组件上。 建立动画关系 创建脚本,挂载到预制体上。 using System.Collections; using System.Collections.Generic; using UnityEngine;public c…

Swift SwiftUI 学习笔记 2024

Swift SwiftUI 学习笔记 2024 一、资源 视频资源 StanfordUnivercity 公开课 2023: https://cs193p.sites.stanford.edu/2023 教程 Swift 初识:基础语法:https://docs.swift.org/swift-book/documentation/the-swift-programming-language/guidedtour/…

工地安全反光衣穿戴监测报警摄像机

工地安全反光衣穿戴监测报警摄像机是为了提高工地施工人员的安全意识和监管效率而设计的。这种设备结合了反光衣、监测系统和报警摄像机的功能,可以有效减少工地事故的发生。 首先,工地安全反光衣是一种具有高度可见度的服装,能够使穿戴者在夜…

SpringBoot如何修改pom依赖的默认版本号

1、找到SpringBoot父工程依赖。 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.5.RELEASE</version> </parent>2、ctrl 鼠标左键点击<artifact…

程序如何知道mqtt设备是否在线

在做物联网设备的时候经常会碰到设备的在线与掉线 问题&#xff1a;emqx如何来实现这个在线与掉线 实现&#xff1a;添加一个规则&#xff0c;程序监控这个规则 1、SELECT * FROM "$events/client_connected", "$events/client_disconnected" 2、添加一…

全量知识系统的完整设计考虑和规划 之序 内容规划

一个隐形的九宫格 规划的内容 根据前面关于因子分析、知识表征和结构特征等个方面和智能聊天工具的沟通和分析&#xff0c;我重新梳理了一下&#xff0c;对全量知识系统运营的组织结构及其组织层次和组织模式 的设计&#xff0c;得出一个大致的内容框架。如下&#xff1a; 知…

离散数学——(4)

目录 1.主析取范式 2.大项 3.主合区范式 4.范式的求法 真值表法 5.推理理论 直接证法 1.主析取范式 2.大项 3.主合区范式 4.范式的求法 真值表法 5.推理理论 直接证法

【C++】手把手教你模拟实现 vector

目录 一、构造/析构/拷贝 1、构造函数 1️⃣无参的构造函数 2️⃣带参的构造函数 3️⃣类模板的构造函数 2、析构函数 3、拷贝构造 二、修改操作 1、reserve 【错误版本】 &#x1f31f;【解答】正确版本 2、resize 3、push_back 4、pop_back 5、insert 6、era…

pytorch(六、七)多维特征数据的输入、加载数据集的类

文章目录 多维特征数据的输入代码 加载数据集概念np.loadtxt()读取数据dataloadertorchvision获取数据集代码 三种梯度下降批量梯度下降BGD随机梯度下降SGD小批量随机梯度下降MBGD代码 多维特征数据的输入 对于一个多维数据&#xff0c;其行表示一个样本&#xff0c;列表示样本…

基于Java的社区买菜系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1.2 菜品分类模块2.1.3 菜品档案模块2.1.4 菜品订单模块2.1.5 菜品收藏模块2.1.6 收货地址模块 2.2 可行性分析2.3 用例分析2.4 实体类设计2.4.1 菜品分类模块2.4.2 菜品档案模块2.4.3…

Linux内存映射

目录 背景 一、什么是内存映射&#xff1f; 二、mman函数 1.权限问题 2.总线错误 3.内存权限 4.读文件内容 5.映射与文件 6.非法参数错误 7.偏移量大小 8.映射内存大小 8.1 申请6k,访问5k 8.2 申请2k&#xff0c;访问3k 8.3 返回值检查 三、内存映射实现 四…

SSH移植到BusyBox

手动编译SSH安装挺麻烦的&#xff0c;本文主要是我大量借鉴和实践总结出来的流程&#xff0c;一步一按照做不会有太大问题。 移植平台&#xff1a;IMX6UL(迅为开发板) 根文件系统&#xff1a;BusyBox 所有操作都建议不要在root账户下运行&#xff0c;并且make install的安装路…

【Python】专栏文章索引

为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 Python 目录&#xff1a; &#xff08;一&#xff09;装饰器函数 &#xff08;二&#xff09;牛客网—软件开发-Python专项练习 &#xff08;三&#xff09;装饰器函数 &#xff08;四&#xff0…

【深度学习】自动求导中有时为什么要先sum()再backward()

创作日志&#xff1a; 在看李沐学深度学习&#xff0c;“深度学习中&#xff0c;我们的目的不是计算微分矩阵&#xff0c;而是批量中每个样本单独计算的偏导数之和”&#xff0c;对这句话一知半解&#xff0c;自己动手推导一下。 一、理解 在深度学习中&#xff0c;被求导的对…

CSS的盒子模型:掌握网页设计的基石!

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

学完Efficient c++ (28-31)

条款 28&#xff1a;避免返回 handles 指向对象的内部成分 考虑以下Rectangle类&#xff1a; struct RectData {Point ulhc;Point lrhc; };class Rectangle { public:Point& UpperLeft() const { return pData->ulhc; }Point& LowerRight() const { return pData-…

使用huggingface实现ALGN进行图像-文本相似性匹配

目录 引言 使用范例 AlignConfig 参数详解 AlignTextConfig 参数详解 示例 AlignVisionConfig 参数详解 示例 AlignProcessor 参数 主要方法 AlignModel 参数 方法 示例 AlignTextModel 参数 前向传播方法 forward 返回值 示例代码 AlignVisionModel 参…

Linux的进程调度实现

经常被问到进程的调度算法有哪些&#xff0c;什么先进先出、短进程优先、时间片轮转、多级反馈多列等等算法能说一大堆&#xff1f;那具体的&#xff0c;linux内核使用了什么样的算法&#xff0c;且来探究一下。 本文所引用源码基于linux内核2.6.34版本。 目录 调度器类 从 s…

探索 PostgreSQL 的高级数据类型 - 第 1 部分

数组和枚举 PostgreSQL 因其可扩展性和多功能性而备受欢迎&#xff0c;除了传统的整数和字符串之外&#xff0c;它还提供了多种数据类型。其中&#xff0c;包括数组和枚举&#xff0c;其为开发者提供了高级的数据建模能力。本文中&#xff0c;我们将深入研究这些复杂的数据类型…

Unity中PICO实现 隔空取物 和 接触抓取物体

文章目录 前言一、隔空取物1、XR Grab Interactable2、调节扔出去时的相关系数3、用手柄射线指向需要抓取的物体后&#xff0c;按下侧边扳机键即可抓取 二、接触抓取物体1、替换手柄上抓取物体的脚本2、在手柄上添加 接触抓取物体的脚本3、在手柄上添加碰撞盒触发器4、在需要抓…