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

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

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

Java如何将文件内容转换为MD5哈希值

《Java如何将文件内容转换为MD5哈希值》:本文主要介绍Java如何将文件内容转换为MD5哈希值的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java文件内容转换为MD5哈希值一个完整的Java示例代码代码解释注意事项总结Java文件内容转换为MD5

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序