当前位置: 首页 > news >正文

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!

相关文章:

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

文章目录 IntroductionOperating SystemToolsMemory ScanningMemory ScanExamples!Conclusion Introduction 本节将介绍操作系统的基础知识和内存扫描,这可以说是 game hacking 中最重要的技能,我们不会深入讨论操作系统,因为这本身就是一门…...

【sql】MongoDB 查询 高级用法

【sql】MongoDB 查询 高级用法 一、基本查询指定字段 db.getCollection(students).find({}, {name: 1, score: 1}) 二、指定字段别名 db.getCollection(students).find({}, {"name":1, "score":1, "grade":"$grade.grade"}) 这里将…...

监督学习的介绍

一、定义 监督学习是利用一组已知类别的样本调整分类器的参数,使其达到所要求性能的过程,也称为监督训练或有教师学习。它是一种机器学习的方法,目的是让模型能够从已知的输入和输出之间的关系中学习,并且能够对新的输入做出正确…...

【DRONECAN】(三)WSL2 及 ubuntu20.04 CAN 驱动安装

【DRONECAN】(三)WSL2 及 ubuntu20.04 CAN 驱动安装 前言 这一篇文章主要介绍一下 WSL2 及 ubuntu20.04 CAN 驱动的安装,首先说一下介绍本文的目的。 大家肯定都接触过 ubuntu 系统,但是我们常用的操作系统都是 Windows&#x…...

Databricks 入门之sql(二)常用函数

1.类型转换函数 使用CAST函数转换数据类型(可以起别名) SELECTrating,CAST(timeRecorded as timestamp) FROMmovieRatings; 支持的数据类型有: BIGINT、BINARY、BOOLEAN、DATE 、DECIMAL(p,s)、 DOUBLE、 FLOAT、 INT、 INTERVAL interva…...

Simulink建模与仿真(3)-Simulink 简介

分享一个系列,关于Simulink建模与仿真,尽量整理成体系 1、Simulink特点 Simulink是一个用来对动态系统进行建模、仿真和分析的软件包。使用Simulink来建模、分析和仿真各种动态系统(包括连续系统、离散系统和混合系统),将是一件非常轻松的事…...

(超简单)将图片转换为ASCII字符图像

将一张图片转换为ASCII字符图像 原图: 效果图: import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileWriter; import java.io.IOException;public class ImageToASCII {/*** 将图片转换为A…...

In-Context Retrieval-Augmented Language Models

本文是LLM系列文章,针对《In-Context Retrieval-Augmented Language Models》的翻译。 上下文检索增强语言模型 摘要1 引言2 相关工作3 我们的框架4 实验细节5 具有现成检索器的上下文RALM的有效性6 用面向LM的重新排序改进上下文RALM7 用于开放域问答的上下文RALM…...

多种免费天气api

多种免费天气api推荐 一、高德天气二、格点天气三、香港天文台 一、高德天气 api说明文档:https://lbs.amap.com/api/webservice/guide/api/weatherinfo 实例代码: import requests# 香港天文台API的URL api_url "https://restapi.amap.com/v3/w…...

深度学习推荐系统(五)DeepCrossing模型及其在Criteo数据集上的应用

深度学习推荐系统(五)Deep&Crossing模型及其在Criteo数据集上的应用 在2016年, 随着微软的Deep Crossing, 谷歌的Wide&Deep以及FNN、PNN等一大批优秀的深度学习模型被提出, 推荐系统全面进入了深度学习时代, 时至今日&am…...

图神经网络教程之HAN-异构图模型

异构图 包含不同类型节点和链接的异构图 异构图的定义:节点类别数量和边的类别数量加起来大于2就叫异构图。 meta-path元路径的定义:连接两个对象的复合关系,比如,节点类型A和节点类型B,A-B-A和B-A-B都是一种元路径。 …...

Jupyter lab 配置

切换jupyterlab的默认工作目录 在终端中输入以下命令 PS C:\Users\Administrator> jupyter-lab --generate-config Writing default config to: C:\Users\Administrator\.jupyter\jupyter_lab_config.py它就会生成JupyterLab的配置文件(如果之前有这个文件的话…...

股票行情处理:不复权,前复权,后复权

不复权的话,K线图能真实反应股价历史的除权信息,缺点是会留有大缺口,股价走势不连续,不能直观感受股价的涨跌波动。 前复权是以目前股价为基准复权,可以很清楚的看到股价的历史高点、低点,以及目前股价所处…...

ip地址、LINUX、与虚拟机

子网掩码,是用来固定网络号的,例如255,255,255,0,表明前面三段必须为网络号,后面必须是主机号,那么怎么实现网络复用呢,例如使用c类地址,但是正常子网掩码是255,255,255,…...

MySQL存储过程

存储过程 1、存储过程简介 存储过程与函数的直接效果类似,只不过存储过程,封装的是一组sql语句。 mysql数据库存储过程是一组为了完成特定功能的sql语句的集合。 存储过程这个功能时从5.0版本才开始支持的,它可以加快数据库的处理速度&…...

element-ui 自定义loading加载样式

element-ui 中的 loading 加载功能,默认是全屏加载效果, 设置局部,需要自定义样式,自定义的方法如下: import { Loading } from element-uiVue.prototype.$baseLoading (text) > {let loadingloading Loading.s…...

04-Apache Directory Studio下载安装(LDAP连接工具)

1、下载 官网下载Apache Directory Studio 注意Apache Directory Studio依赖于jdk,对jdk有环境要求 请下载适配本机的jdk版本的Apache Directory Studio,下图为最新版下载地址 Apache Directory Studio Version 2.0.0-M16 基于 Eclipse 2020-12,最低要…...

vmware虚拟机(ubuntu)远程开发golang、python环境安装

目录 1. 下载vmware2. 下载ubuntu镜像3. 安装4. 做一些设置4.1 分辨率设置4.2 语言下载4.3 输入法设置4.4 时区设置 5. 直接切换管理员权限6. 网络6.1 看ip6.2 ssh 7. 本地编译器连接远程服务器7.1 创建远程部署的配置7.2 文件同步7.3 远程启动项目 8. ubuntu安装golang环境8.1…...

Elasticsearch文档多个输入字段组成ID实现方法

1、场景描述: 使用Elasticsearch时,有时会需要指定文档id的场景,当文档id需要多个字段组成时,这种业务怎么处理呢? 2、问题描述: 现有一个ElasticSearch文档,假设文档id由userid、 eventTime…...

编译链接实战(15)rdynamic选项的用途

文章目录 rdynamic作用栈回溯 rdynamic作用 看下gcc man手册的解释: Pass the flag -export-dynamic to the ELF linker, on targets that support it. This instructs the linker to add all symbols, not onlyused ones, to the dynamic symbol table. This opti…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...