游戏辅助编程(一)修改内存

简介: 单机游戏:瘟疫公司 Plague Inc:Evolved开发工具:VisualStudio 2017其他工具:Cheat Engine 6.4项目目标: 通过修改DNA点数,让瘟疫更快进化,从而赢得游戏。

单机游戏:瘟疫公司 Plague Inc:Evolved


开发工具:VisualStudio 2017


其他工具:Cheat Engine 6.4


项目目标


       通过修改DNA点数,让瘟疫更快进化,从而赢得游戏。


微信图片_20220424133746.jpg


关键技术


1.找到代表“DNA点数”这个变量的内存地址


       使用工具Cheat Engine扫描到 DNA点数的内存地址,具体怎么使用这里就不赘述了。


       工具的大概原理是:比如游戏刚开始时,DNA点数是8,那么扫描一遍内存值是8的所有地址,进行保留。过一段时间后增长至10,那么从刚才保留的内存地址列表,扫描一遍当前内存值是10的地址。如此循环,直到无法再过滤。


       有时,过滤后只剩一个内存地址,那么这个地址即是代表DNA点数的内存。有时会剩2-4个或更多,这时有可能是游戏UI或其他模块定义了一套该模块独立使用的变量,同时使用订阅者模式订阅了该变量,这样每次此变量发生变化时,会通知其他模块同时更新。这时可以依次修改这些内存的值,并在游戏中操作,看下到底是哪个变量在起作用。


       此时,亦可直接通过CE来修改内存数值。在扫描时,读取内存数值,亦可通过编程来实现。


微信图片_20220424133935.jpg


2.编程修改内存


       1)获取游戏窗口句柄


 HWND hwnd_Game = FindWindow(NULL, L"Plague Inc: Evolved");


   2)获取游戏进程ID


     DWORD ProcessID;
            GetWindowThreadProcessId(hwnd_Game, &ProcessID);


   3)获取游戏进程


  HANDLE h_process = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);


4)修改内存


     int ret = WriteProcessMemory(h_process, (LPVOID)0x4F2E000C, &num, 4, NULL);


   当ret为0时,修改失败,为1时,修改成功。



   至此,项目目标已实现。为了更方便的游戏,可以写一个循环,把DNA点数锁定在200,类似打怪游戏的锁血。


   完整代码如下:


微信图片_20220424134332.jpg



相关文章
|
3月前
|
缓存 安全 Java
Java并发编程进阶:深入理解Java内存模型
Java并发编程进阶:深入理解Java内存模型
48 0
|
2月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
2月前
|
存储 并行计算 算法
CUDA统一内存:简化GPU编程的内存管理
在GPU编程中,内存管理是关键挑战之一。NVIDIA CUDA 6.0引入了统一内存,简化了CPU与GPU之间的数据传输。统一内存允许在单个地址空间内分配可被两者访问的内存,自动迁移数据,从而简化内存管理、提高性能并增强代码可扩展性。本文将详细介绍统一内存的工作原理、优势及其使用方法,帮助开发者更高效地开发CUDA应用程序。
|
2月前
|
缓存 Linux C语言
C语言 多进程编程(六)共享内存
本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
|
4月前
|
监控 Java 图形学
【性能优化篇】U3D游戏卡顿大作战:内存与渲染效率的极致提升
【7月更文第12天】在Unity3D游戏开发领域,性能优化是决定玩家体验好坏的关键一环。游戏频繁卡顿,不仅破坏了沉浸式体验,还可能造成玩家流失。本文将深入探讨如何有效解决U3D游戏卡顿问题,特别聚焦于内存管理和渲染效率两大核心领域,助力开发者打造流畅丝滑的游戏世界。
375 0
|
4月前
|
设计模式 缓存 安全
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
42 0
|
4月前
|
设计模式 安全 Java
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
114 0
|
3月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
385 0
|
30天前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
61 1
|
1月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。