赞
踩
外挂(Cheat software 或 Hacks) 的本质是一种未经授权的软件,它通过修改或干预正常软件、游戏或系统的运行方式来提供给用户不公平的优势或功能。外挂的实现方法多种多样,其中一种常见的方式确实是通过进程内存入侵。
这种方式的外挂直接读取或修改另一个程序的运行时内存。在游戏中,这可能用于获取玩家位置、健康值、弹药数量等信息,或者直接修改这些值以获得不公平的优势。这种方法通常涉及以下技术:
内存扫描: 扫描目标进程的内存以查找特定的值或模式。
内存注入: 将代码注入到目标进程中,该代码可以修改内存中的值。
API 钩子: 拦截和/或修改目标程序对操作系统API的调用。
例子:
假如我们能通过某种工具扫描到游戏进程中的内存值,就可以对其中的内容进行遍历,我们可以在游戏前实验,比如我们的血量是 100,那么我们先扫描 100 的值的内存,然后我们可能被打了,扣到了 90 ,那么我们再通过扫描 90 的内存值,最后将两次扫描都符合的值,基本上就可以确认是我们血量的内存值了。那么这时候对它进行修改,也就完成了血量的修改。
其余的内存注入或者 API 调用大致意思相近。
其他方法
除了进程内存入侵外,外挂还可能采用其他技术,如:
修改游戏文件: 更改游戏的配置文件或资源文件,以改变游戏行为或解锁功能。
网络干预: 通过修改游戏客户端与服务器之间的网络通信来改变游戏状态或玩家数据。
机器学习和图像识别: 使用图像识别技术自动检测屏幕上的对象,并根据这些信息自动执行操作,例如自动瞄准(Aimbot)。
物理外挂:比如拿放大镜哈哈哈哈(乱说的)
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)是指运行在同一台计算机上的两个或多个进程之间交换数据或信号的方式。进程间通信是操作系统提供的一种机制,可以实现进程之间的同步、互斥和数据交换。下面我介绍几种常见的进程间通信方式及其实际应用场景:
管道(Pipe)
命名管道(FIFO)
信号(Signal)
消息队列(Message Queue)
共享内存(Shared Memory)
信号量(Semaphore)
套接字(Sockets)
总的来说,不同的进程间通信机制适用于不同的场景。管理员可根据所需的通信量、数据交换方式、实时性等因素选择合适的IPC技术。合理使用这些IPC方式,能够提高分布式应用程序的性能、可扩展性和可靠性。
这里只是粗略的介绍了下进程相关的内容与外挂的内容,下一章我们针对进程与线程等做更详细的介绍。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。