CS420 课程笔记 P4 - 以16进制形态编辑游戏文件

文章目录

    • Introduction
    • Finding save files
    • Strings
    • Unicode
    • Example!
    • Value search
    • Health search
    • Conclusion

Introduction

这节课我们将学习编辑十六进制,主要用于编辑保存文件,但十六进制编辑涉及的技能可以很好地转移到:

  • Save file editing
  • Resources editing
  • Raw memory editing
  • Packet editing

这些都是我们将学习的有用技术,因此十六进制编辑也有三个主要步骤:

  1. Find info in save file that you want to hack
  2. Hex edit the file
  3. See if it worked

Finding save files

  1. 选项一 Just google it - 没有必要在这上面努力工作并花费时间精力
  2. 选项二 API monitoring - 询问操作系统去查看游戏使用了哪些文件,你可以拦截游戏保存文件的请求,这样就可以知道游戏使用了什么文件
    • 游戏使用 OS Calls 去读写文件
    • 系统更新文件在 Hard drive 硬盘上
    • 使用 Process Monitor 可以查看游戏在请求系统做什么,同样的,很多反作弊系统也通过查看有没有恶意软件在进行一些危险请求来确认游戏是否被攻击

微软官网下载 Process Monitor 并解压出来后打开即可

在这里插入图片描述

你可以使用 Find 工具

在这里插入图片描述

或者使用作者更喜欢的 Include Process From Window,你只需要把这个拖动到某个窗口上,接下来程序就只会显示你筛选的那个窗口的信息了

在这里插入图片描述
因为游戏是从数据中进行流式传输的,所以他会不断访问,如下:

在这里插入图片描述
所以让我们忽略 ReadFile 这种 Operation,只关注保存文件时的事件,只需要右键 ReadFile 然后 Exclude 即可

当我们购买一个物品消耗了一波金币,会发现 CreateFile 事件,路径是某个文件夹下的 Global.sqa 我们只需要购买一些东西并使用该工具,即可隔离保存文件!

Strings

很棒!我们已经发现了保存文件所在的目录,但在我们开始编辑文件之前,我们需要了解字符串。

回到我们对文件的理解,文件和程序似乎不是一个东西,但两者之间有很多相似之处,到目前为止我们学习的一切东西都适用于文件和计算机程序,由字节信息组成,我们学习了整数如何存储,现在我们要了解一下字符串如何存储:

73 71 75 61 6C 6C 79 00 00 00 00 00 00 … 省略后续的 00

这串字符的意思是 squally,如果你查看字节,你会发现有一个十六进制字符代表 squally 中的每个字符,在这情况下,73代表s,71代表q 等等,还留下了一堆 00,这些零似乎没有意义,他们只是额外的空间,如果我们决定在编程时向单词中添加更多文本,这些 00 有一个特殊的名称,被称为空终止符,程序员必须决定一个单词可以有多少个字母,任何未使用的字母都只是零。

现代的编程语言比如 C++ C# Python 可能不会让你看到额外的零,只有一个零或者甚至根本没有。

你会注意到 73 代表 s,这是 ASCII 编码,你可以通过 google baidu 来找到对应的表!

Unicode

有些时候可能不使用英文来玩游戏,这时候想解决这个简单的问题不要困惑,所以有一个叫做 Unicode 的标准,可以显示我们想要在计算机上显示的所有语言,最流行的是 utf-8,因为它建立在 ASCII 标准上,utf-16 也十分流行:

  • A - ASCII -> 0100 0001
  • A - UTF-8 -> 0100 0001
  • A - UTF-16 -> 0000 0000 0100 0001
  • 日语a - UTF-8 -> 1110 0011 1000 0001 1000 0010
  • 日语a - UTF-8 -> 0011 0000 0100 0010

如果我们用 utf-8 编码这个日语的符号,将会占用 3个bytes,使用 utf-16 将会占用 2个bytes。因此在 Hex 编辑器中,你可以选择显示文本和不同的编码

Example!

在之前的例子中我们找到了 Global.sqa 它就是我们发现的文件,我们先使用 Ctrl+c、Ctrl+v 进行备份,接下来我们使用 HxD 编辑器来查看该文件。

在这里切换每一行显示的字符数量
在这里插入图片描述

打开右侧的数据检视
在这里插入图片描述

编辑器会自动尝试将这些字节转换成 ASCII 字符,那么我们要在里面查找金币数量,只需要按 Ctrl + F 并输入 GOLD,找到1个匹配项以后我们就可以充分相信,这后面的数据存储的就是 GOLD,我们可以猜测,接下来的 4个bytes 存储的就是金币,因为大多数金币使用 int32 存储

举例在植物大战僵尸中,数据存储在 user1.dat 中,金币在圈起来的位置,修改后保存即可更改玩家的金币数量,在这里只是使用备份作为参考,修改后实际上并没有作用,需要进行内存修改!
在这里插入图片描述
注意,在计算机内部存在小端序和大端序两种数据排布方式:

  • 小端序 Little Endian E7 03 00 00 = 999
  • 大端序 Big Endian 00 00 03 E7 = 999

人类阅读和书写数字的顺序是大端序,但在计算机中往往是通过小端序来排布设置的,所以我们直接阅读 HxD 中的 bytes 数据是无意义的,但在数据检视中查看,HxD 会帮你排布好数据真实的顺序~

Value search

我们接下来讨论数值搜索,这次还是修改金币,但这一次通过不同的方式来做。我们很幸运可以通过 GOLD 这个字来获得金币,因为数据是按照字典方式来存储的,但如果游戏使用了不同的编程方式这就无效了

更可靠的办法是,我们通过金币的数值来搜索数据,记住我们的金币数值比如 679,然后按 Ctrl + F 在 HxD 中搜索整数,这就可以找到金币所在的位置了!

在这里插入图片描述

Health search

上面的情况是最幸运的,有时候我们不止有一个匹配项,这次试试把生命值从 8 修改到 16 吧,当你在文件中搜索 8 有时你会发现数百个匹配项,我们不可能一个一个修改保存尝试。

  1. 把你 8 生命值的存档保存,然后备份命名 8health.spa
  2. 去游戏里恢复或降低生命值,总之让生命值产生变化
  3. 打开分析工具,把光标放在同一开始的地方,按 F6 开始对比!

在这里插入图片描述
在这里插入图片描述

Conclusion

对于某些游戏,这两种办法可能都不生效

  • 有可能游戏重启以后,玩家和怪物的对象整体地址会变化,可能会交换或者其他
  • 第一种办法可行性更小,很多时候游戏不会编码字典

同时为了反作弊,可能会有其他办法阻止你修改

  • Anti-cheat Integrity checks (checksums)
  • Encrypted filles

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

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

相关文章

【go-zero】使用自带Redis方法

yaml配置文件 RedisS:Host: Type: Pass: config增加 RedisS struct {Host stringType stringPass string}svc文件 type * struct {RedisClient *redis.Redis } func *(c config.Config) * {sqlConn : sqlx.NewMysql(c.DB.DataSource)return &*{RedisClient: redis.New(c…

linux配置网络的几种常用方法

linux配置ip地址有多种不同的方法,大家可以根据自己的需要来使用不同的方法配置ip地址。 方法一 ifconfig命令 使用 ifconfig 命令配置 IP 地址ifconfig 命令用于查看和配置网络接口, 可以使用该命令为网络接口配置 IP 地址。假设需要配置 eth0 网卡的…

Flutter实现CombineExecutor进行多个异步分组监听,监听第一个异步执行的开始和最后一个异步执行结束时机。

1.场景 我们在调用接口时,很多时候会同时调用多个接口,接口都是异步执行,我们很难知道调用的多个接口哪个会最后执行完成,我们有时候需要对最后一个接口执行完成的时机监听,所以基于该需求,设计了CombineE…

Shell 运算符及语法结构

目录 一、Shell运算符 1.1 表达式expr 1.2 运算操作 1.3 操作实例 二、Shell条件判断 2.1 基本语法 2.2 值、权限、类型、多条件判断 三、Shell流程控制 3.1 if 流程语法 3.2 case 流程语法 3.3 for 流程语法 3.4 内部运算符 3.5 while循环流程语法 四、Shell读…

TOOLLLM: FACILITATING LARGE LANGUAGE MODELS TO MASTER 16000+ REAL-WORLD APIS

本文是LLM系列的文章之一,针对《TOOLLLM: FACILITATING LARGE LANGUAGE MODELS TO MASTER 16000 REAL-WORLD APIS》的翻译。 TOOLLLMs:让大模型掌握16000的真实世界APIs 摘要1 引言2 数据集构建3 实验4 相关工作5 结论 摘要 尽管开源大型语言模型&…

前端图形图像的框架

前端图形图像方面有许多强大的框架和库,使得开发者能够更容易地创建丰富的视觉效果和复杂的图形应用。下面列举了一些主要的框架和库: 1. Three.js Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了相…

如何将两个pdf合并成一个?pdf合并技巧分享

在日常工作过程当中,我们经常需要处理一些文件,而文件的处理往往是琐碎的,想要提高工作效率,需要选择一些合适的方法,并掌握一定的技巧,那么,如何将两个pdf合并成一个?pdf合并技巧有哪些呢?接…

java实现状态模式

状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为。在状态模式中,对象将其行为委托给表示不同状态的状态对象,这些状态对象负责管理其行为。以下是在 Java 中实现状态模式的一般步骤: 创建一个状态接口&#xff…

AFG EDI 解决方案

AFG一直是汽车行业出境物流的专家,不仅运输汽车,同时也提供模块化IT解决方案,用于接收、控制、互联以及整个车辆调度过程的可视化和监控。 对于物流行业而言,如果已经确定了供应链整合的目标,但却没有明确的计划及足够…

【线上问题】很抱歉,如果没有 JavaScript 支持,将不能正常工作

目录 一、问题说明二、解决方式 一、问题说明 1.修改了nginx的配置 2.postman调用接口正常,浏览器访问接口200,但无数据 3.浏览器访问,nginx没有访问记录,接口请求到不了应用服务 4.原因不祥 二、解决方式 1.清理了浏览器缓存

mac下配置JDK环境

一、下载安装 下载地址:Java Downloads | Oracle,选择适用于Mac OS的JDK版本,点击下载即可。 下载完之后,直接安装: 安装过程非常简单,按“继续”按钮一直下一步即可。 二、配置环境变量 上一步骤&#x…

c++线程

pthread(部分内容来自菜鸟教程) 创建线程 创建一个 POSIX 线程&#xff1a; #include <pthread.h> pthread_create (thread, attr, start_routine, arg) pthread_create 创建一个新的线程&#xff0c;并让它可执行。 参数&#xff1a; thread &#xff1a;指向线程标…

Opencv 图像金字塔----高斯和拉普拉斯

原文&#xff1a;图像金字塔----高斯和拉普拉斯 图像金字塔是图像中多尺度表达的一种&#xff0c;最初用于机器视觉和图像压缩&#xff0c;最主要用于图像的分割、融合。 高斯金字塔 ( Gaussian pyramid): 高斯金字塔是由底部的最大分辨率图像逐次向下采样得到的一系列图像…

基于docker快速搭建facechain环境

前言 最近facechain比较火&#xff0c;之前在huggingface试过&#xff0c;在SD的落地场景上提供了思路。 这两天刚拿到一台RTX3090的服务器&#xff0c;在本地部署也遇到了两个问题&#xff0c;给大家分享一下。 一、facechain是什么&#xff1f; 官方是这样说的&#xff1a…

(九)mmdetection源码解读:训练过程中训练数据的调用DataLoader

目录 一、DataLoader创建过程中二、利用实例化data_loaders进行训练 一、DataLoader创建过程中 在训练过程train_detector函数中调用build_dataloader函数 train_detector(model, datasets, cfg, distributedFalse, validateTrue) #train_detector函数中 data_loaders [buil…

# 磁盘引导方式相关知识之BIOS、msdos、MBR、UEFI、gpt、esp、csm

磁盘引导方式相关知识之BIOS、msdos、MBR、UEFI、gpt、esp、csm 磁盘、分区、引导等知识经常似懂非懂&#xff0c;不能完全说清楚&#xff0c;梳理下&#xff1a; 序号主板芯片引导方式支持的磁盘分区表类型支持的磁盘分区表格式对应引导位置备注1BIOS传统方式&#xff08;俗…

我的区块链笔记

区块链 中心化的账本&#xff0c;个人节点和中心节点的地位不对等&#xff0c;中心节点说了算。去中心化&#xff0c;个人节点就是公平的&#xff0c;根据一套规则&#xff0c;叫做公比机制。 区块链的本质&#xff0c;就是数据存储方式 区块链使用密码学算法产生的区块&…

利用AI技术提升乳腺癌诊断准确率

背景&#xff1a; 乳腺癌是全球女性最常见的癌症之一&#xff0c;早期诊断和治疗对提高治愈率和生存率至关重要。传统的乳腺X光检查和病理学诊断方法存在一定的误诊和漏诊率。近年来&#xff0c;人工智能技术在医学领域得到了广泛应用&#xff0c;为提升乳腺癌诊断准确率提供了…

企微SCRM营销平台MarketGo-ChatGPT助力私域运营

一、前言 ChatGPT是由OpenAI&#xff08;开放人工智能&#xff09;研发的自然语言处理模型&#xff0c;其全称为"Conversational Generative Pre-trained Transformer"&#xff0c;即对话式预训练转换器。它是GPT系列模型的最新版本&#xff0c;GPT全称为"Gene…

指针进阶(一)

指针进阶 1. 字符指针面试题 2. 指针数组3. 数组指针3.1 数组指针的定义3.2 &数组名VS数组名 3.3 数组指针的使用4. 数组传参和指针传参4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参 前言 指针的主题&#xff0c;我们在初级阶段的《指针》章节已经接…