CS420 课程笔记 P2 - 内存编辑和基础的 GameHacking 尝试

文章目录

    • Introduction
    • Operating System
    • Tools
    • Memory Scanning
    • Memory Scan
    • Examples!
    • Conclusion

Introduction

本节将介绍操作系统的基础知识和内存扫描,这可以说是 game hacking 中最重要的技能,我们不会深入讨论操作系统,因为这本身就是一门独立完整的课程,我们只需要学习 game hacking 有关的部分。

我们将继续学习内存扫描,这是一种在游戏中查找生命值和金币等内容的技术。我们将介绍它是如何进行工作的,最后将演示一些实例让我们简要深入地了解我们需要的操作系统的知识。

Operating System

操作系统可以做很多事情,但这两个是最重要的

  • Hardware management 硬件管理
  • Process management (running exe files) 可执行的文件,当你打开应用程序,操作系统复制确保程序运行

当你 打开一个 exe 文件 时,操作系统会获取该文件并复制到 RAM 中。当我们进行 game hacking 时,我们会在 RAM 而不是在磁盘上破解副本,这意味着我们所做的更改不是永久性的,这是 game hacking 和常见的 software hacking 主要区别

Tools

让我们来介绍一下课程中使用的工具:

  • Cheat Engine 似乎是最著名的工具,发源于2003年,经过大量测试十分稳定
  • Squalr 比较新的CE类软件

由于操作系统对 exe 程序有如此大的权力,我们可以令操作系统帮助我们在游戏中进行 game hacking。每个操作系统都有很多你可以要求它做的事情,功能被称为 API 或库,这术语令人困惑,但实际上只是指其他人编写的代码,我可以使用。

操作系统是用 C 和 C++ 编写的代码,我们可以使用其中的一些代码,当我们在 Windows 上操作时,而 Mac 和 Linux 当然采用他们自己的 API,其中的一些功能非常强大,你只是启动 C++ 或 C# 程序并使用代码来编辑血量、金钱,这就是 CE 和 Squalr 的工作方式

Memory Scanning

按照上一章 game hacking 的一般进程:

  1. Memory scanning
  2. Memory editing
  3. See if it worked

这里的 Memory scanning 就好像按 ctrl + F 在你的浏览器中搜索某些内容,在我们的例子中,想用它来查找生命值、法力值、金币、技能点、玩家的XYZ坐标,找到以后编辑即可。

在程序中找到和生命值有关系的数据就好像在好像大海的 0 和 1 中找到一串有关的数据,科学家很久以前就同意把位分为8个,这8个位称为一个字节,看起来更清晰,所以一切都是八位的倍数不可能有一个只有一位的字节,如果一个数据只有一位,他必须四舍五入到八位。

假如我们找到了玩家的健康状况,假如 00100000 是玩家血量,我们只需要覆盖现有的值 11111111 即可,我们暂时不可能在游戏中插入新数据,这意味着无论谁编写游戏都要提前决定限制,一个字节的数据上限是255,四个字节的上限大约20亿,很多金币之类的数据会采用这个数字。

幸运的是,很多工具会帮我们处理这些数据,我们不用真的去进行二进制文件的内存扫描。

Memory Scan

如果玩家有 100 生命值,我们会假设我们正在搜索最多4个字节长的数据,这是大多数程序员的选择。让我们演示一下问题是什么,他并不像 ctrl + F 那样简单,所以我们可以说它的工作原理和 ctrl + F 一样。

大多数游戏有 1GB 到 8GB 内存占用,这可能有40亿个数字,我们会得到非常多的可能项。

我们需要知道,地址是什么。例如一个程序

0110100 01100001 01110100 0010000 01110100 … 省略数亿个数字

我们可以把程序 exe 文件的第一个字节 0110100 称为 第一个字节 地址0,因为他存在第一个位置,然后是第二个,第三个。

此时比如我们在 第169个字节处找到了数据100,那么他的地址就是169,值就是100。值可以改变,但他的地址几乎不会改变!

Examples!

接下来我们将使用一个示例程序来进行说明:

  1. 打开 Cheat Engine 作为你的逆向工具
  2. 告诉 CE 你正在尝试读取的游戏
    在这里插入图片描述
  3. 现在我们的目标是破解某个特定的数值,比如血量。在 CE 中搜索血量值,我这里是 432,你会发现一大堆数值为 432 的数据,他们大部分是没用的,通过下一步操作进行范围缩小(这里搜索的 Value Type 是 4 Bytes,因为通常血量这样的信息就是用 4 Bytes 存储的)
    在这里插入图片描述
    在这里插入图片描述
  4. 想办法改变你的血量值,穿脱装备或者进行交战,然后进行 Next Scan,这就找到了当前血量值和最大血量值!
    在这里插入图片描述
    在这里插入图片描述
  5. 修改地址在 1CBC9DD0 的数据,也就是玩家当前血量。需要注意的是,有时数据不会马上更新,你需要进行一些操作来刷新屏幕上的数据显示。

Conclusion

在例子中我们学会了找到生命值,这足以让您入门,但我们还需要了解更多内容,比如:

  • 如何找到玩家的 X 和 Y 坐标来编写传送代码,他可能是十万一百万
  • 我们找到的地址在下一次启动游戏时就会毫无意义,不再有效

但掌握当前的技能足够你进行一些单人游戏的 game hacking,思考一下作为游戏开发者如何应对这种 game hacking!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/118380.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

988. 从叶结点开始的最小字符串

988. 从叶结点开始的最小字符串 C代码:DFS /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/// 叶子节点// 每一层用一个pathTop、遇到叶子节点就判断一次;…

Flutter 项目结构文件

1、Flutter项目的文件结构 先helloworld项目,看看它都包含哪些组成部分。首先,来看一下项目的文件结构,如下图所示。 2、介绍上图的内容。 -litb/main.dart文件:整个应用的入口文件,其中的main函数是整个Flutter应…

MATLAB中isequal函数转化为C语言

背景 有项目算法使用matlab中isequal函数进行运算,这里需要将转化为C语言,从而模拟算法运行,将算法移植到qt。 MATLAB中isequal简单介绍 语法 tf isequal(A,B) tf isequal(A1,A2,...,An) 说明 如果 A 和 B 等效,则 tf is…

DHorse v1.3.2 发布,基于 k8s 的发布平台

版本说明 新增特性 构建版本、部署应用时的线程池可配置化; 优化特性 构建版本跳过单元测试; 解决问题 解决Vue应用详情页面报错的问题;解决Linux环境下脚本运行失败的问题;解决下载Maven安装文件失败的问题; 升…

分布式集群框架——有关zookeeper的面试考点

3.掌握Zookeeper的概念 当涉及到大规模分布式系统的协调和管理时,Zookeeper是一个非常重要的工具。 1. 分布式协调服务:Zookeeper是一个分布式协调服务,它提供了一个高可用和高性能的环境,用于协调和同步分布式系统中的各个节点…

操作系统中一些零散的知识点

第三章 内存管理 在虚拟内存系统中,虚拟内存的最大容量是由计算机的地址结构(CPU寻址范围)确定的,而虚拟内存的实际容量是受到“内存大小磁盘空间大小”、“地址线位数”共同制约,取二者最小值实现虚拟内存管理必须有…

【Apollo学习笔记】——规划模块TASK之RULE_BASED_STOP_DECIDER

文章目录 前言RULE_BASED_STOP_DECIDER相关配置RULE_BASED_STOP_DECIDER总体流程StopOnSidePassCheckClearDoneCheckSidePassStopIsPerceptionBlockedIsClearToChangeLaneCheckSidePassStopBuildStopDecisionELSE:涉及到的一些其他函数NormalizeAngleSelfRotate CheckLaneChang…

【包过滤防火墙——firewalld动态防火墙】的简单使用

文章目录 firewald与iptables区别firewalld九个区域firewalld配置方法firewalld参数和命令firewalld两种模式firewalld使用实验 firewalld不要与iptables混用 firewald与iptables区别 iptables 主要是基于接口,来设置规则,从而判断网络的安全性。firewa…

UE4 春节鞭炮

先搞个基类,一个鞭炮的 搞个鞭炮类,存多个鞭炮 在构造函数的位置先生成对应的鞭炮数 将鞭炮绑定到绳子上,随绳子摆动而一起摆动 在基类里面写爆炸事件 最后用Timer去调用

docker-compose 部署 Seata整合nacos,Postgresql 为DB存储

docker-compose 部署 Seata整合nacos,Postgresql 为DB存储 环境 详情环境可参考 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 我这里 <spring.cloud.alibaba-version>2021.1</spring.cloud.alibaba-version>所…

linux的make和makefile学习

linux的make和makefile学习 准备工作使用GNU链接库链接到math库编写复利程序 创建自己的库链接到主目录 不同的C标准系统调用write()获取头文件信息功能测试宏 准备工作 安装GCC和Make工具 安装中文输入法 参考&#xff1a;http://t.csdn.cn/eH0Ow sudo apt-get update sudo…

springboot使用logback配置彩色日志

springboot使用logback配置彩色日志 前言一、logback文件二、效果 前言 应该有很多同学发现&#xff0c;使用了logback以后&#xff0c;我们的控制台日志都变成灰色了&#xff0c;网络上搜到的logback配置大多数没有进行配色&#xff0c;所以会把springboot的默认配色方案给覆盖…

【python爬虫】10.指挥浏览器自动工作(selenium)

文章目录 前言selenium是什么怎么用设置浏览器引擎获取数据解析与提取数据自动操作浏览器 实操运用确认目标分析过程代码实现 本关总结 前言 上一关&#xff0c;我们认识了cookies和session。 分别学习了它们的用法&#xff0c;以及区别。 还做了一个项目&#xff1a;带着小…

数据结构 -作用及基本概念

为什么要使用数据结构 学习数据结构是计算机科学和软件工程领域中非常重要的一门课程。以下是学习数据结构的几个重要原因&#xff1a; 组织和管理数据&#xff1a;数据结构提供了一种组织和管理数据的方式。通过学习不同的数据结构&#xff0c;你可以了解如何有效地存储和操作…

Lesson6---案例:人脸案例

学习目标 了解opencv进行人脸检测的流程了解Haar特征分类器的内容 1 基础 我们使用机器学习的方法完成人脸检测&#xff0c;首先需要大量的正样本图像&#xff08;面部图像&#xff09;和负样本图像&#xff08;不含面部的图像&#xff09;来训练分类器。我们需要从其中提取特…

C++学习笔记总结练习:多态与虚函数

1 多态 多态分类 静态多态&#xff0c;是只在编译期间确定的多态。静态多态在编译期间&#xff0c;根据函数参数的个数和类型推断出调用的函数。静态多态有两种实现的方式 重载。&#xff08;函数重载&#xff09;模板。 动态多态&#xff0c;是运行时多态。通过虚函数机制实…

详细介绍如何基于ESP32实现低功耗的电子纸天气显示器--附完整源码

实现界面展示 这是一款天气显示器,由支持 wifi 的 ESP32 微控制器和 7.5 英寸电子纸(又名电子墨水)显示器供电。当前和预测的天气数据是从 OpenWeatherMap API 获取的。传感器为显示屏提供准确的室内温度和湿度。 该项目在睡眠时消耗约 14μA,在约 10 秒的清醒期…

MATLAB制图代码【第二版】

MATLAB制图代码【第二版】 文档描述 Code describtion: This code is version 2 used for processing the data from the simulation and experiment. Time : 2023.9.3 Author: PEZHANG 这是在第一版基础上&#xff0c;迭代出的第二版MATLAB制图代码&#xff0c;第二版的特点是…

不同路径 II【动态规划】

不同路径 II 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上…

NOR型flash vs NAND型flash

FLASH是一种存储芯片&#xff0c;全名叫Flash EEPROM Memory&#xff0c;通过程序可以修改数据&#xff0c;即平时所说的“闪存”。 闪存可以在软件的控制下写入和擦写数据。其存储空间被分割成相对较大的可擦除单元&#xff0c;成为擦除块&#xff08;erase block&#xff09…