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

简介: 单机游戏:瘟疫公司 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



相关文章
|
缓存 安全 Java
Java并发编程进阶:深入理解Java内存模型
Java并发编程进阶:深入理解Java内存模型
85 0
|
5月前
|
存储 缓存 Java
【高薪程序员必看】万字长文拆解Java并发编程!(5):深入理解JMM:Java内存模型的三大特性与volatile底层原理
JMM,Java Memory Model,Java内存模型,定义了主内存,工作内存,确保Java在不同平台上的正确运行主内存Main Memory:所有线程共享的内存区域,所有的变量都存储在主存中工作内存Working Memory:每个线程拥有自己的工作内存,用于保存变量的副本.线程执行过程中先将主内存中的变量读到工作内存中,对变量进行操作之后再将变量写入主内存,jvm概念说明主内存所有线程共享的内存区域,存储原始变量(堆内存中的对象实例和静态变量)工作内存。
163 0
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
存储 并行计算 算法
CUDA统一内存:简化GPU编程的内存管理
在GPU编程中,内存管理是关键挑战之一。NVIDIA CUDA 6.0引入了统一内存,简化了CPU与GPU之间的数据传输。统一内存允许在单个地址空间内分配可被两者访问的内存,自动迁移数据,从而简化内存管理、提高性能并增强代码可扩展性。本文将详细介绍统一内存的工作原理、优势及其使用方法,帮助开发者更高效地开发CUDA应用程序。
|
缓存 Linux C语言
C语言 多进程编程(六)共享内存
本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
|
监控 Java 图形学
【性能优化篇】U3D游戏卡顿大作战:内存与渲染效率的极致提升
【7月更文第12天】在Unity3D游戏开发领域,性能优化是决定玩家体验好坏的关键一环。游戏频繁卡顿,不仅破坏了沉浸式体验,还可能造成玩家流失。本文将深入探讨如何有效解决U3D游戏卡顿问题,特别聚焦于内存管理和渲染效率两大核心领域,助力开发者打造流畅丝滑的游戏世界。
988 0
|
设计模式 缓存 安全
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
103 0
|
3月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
833 0
|
3月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
238 0

热门文章

最新文章