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

2024-03-09 21:04

本文主要是介绍外挂的本质以及进程相关的内容,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

外挂的本质

外挂(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.chinasem.cn/article/791940

相关文章

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

Node Linux相关安装

下载经编译好的文件cd /optwget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gztar -xvf node-v10.15.3-linux-x64.tar.gzln -s /opt/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/ln -s /opt/nod

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java 进程 返回值

实现 Callable 接口 与 Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。 public class MyCallable implements Callable<Integer> {public Integer call() {return 123;}} public static void main(String[] args

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat