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,一经查实,立即删除!

相关文章

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读…

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

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

AFG EDI 解决方案

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

mac下配置JDK环境

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

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

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

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

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

指针进阶(一)

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

NLP(2)--Transformer

目录 一、Transformer概述 二、输入和输出 三、Encoder 四、Decoder 五、正则化处理 六、对于结构的改进? 七、AT vs NAT 八、Cross-attention 一、Transformer概述 Transformer模型发表于2017年Google团队的Attention is All you need这篇论文,…

蓝桥杯打卡Day1

文章目录 全排列八皇后 一、全排列IO链接 本题思路:本题是一道经典的全排列问题&#xff0c;深度优先搜索即可解决。 #include <bits/stdc.h>constexpr int N10;std::string s; std::string ans; int n; bool st[N];void dfs(int u) {if(un){std::cout<<ans<…

前后端数据加密传输基于AES+RSA实现

前后端数据加密传输基于AESRSA实现 什么是AES和RSA AES AES&#xff08;Advanced Encryption Standard&#xff09;是一种对称加密算法&#xff0c;它的加密速度快&#xff0c;安全性也比较高&#xff0c;是目前广泛使用的加密算法之一。AES的密钥长度可以选择128位、192位和…

NetSuite海鲜书 - 知识会汇编 用户篇 2023

NetSuite2021年初夏&#xff0c;NetSuite知识会成立。它由本人&#xff0c;上海德之匠信息技术有限公司的毛岩喆&#xff08;江湖人称Rick&#xff09;发起建立。建立的初衷秉承Rick个人博客“学问思辨&#xff0c;企业信息化路上的行者”的理念&#xff0c;期望能够在NetSuite…

Flink基础

Flink architecture job manager is master task managers are workers task slot is a unit of resource in cluster, number of slot is equal to number of cores(超线程则slot2*cores), slot一组内存一些线程共享CPU when starting a cluster,job manager will allocate a …

docker快速安装-docker一键安装脚本

1.下载/配置安装脚本 touch install-docker.sh #!/bin/bash #mail:ratelcloudqq.com #system:centos7 #integration: docker-latestclear echo "######################################################" echo "# Auto Install Docker …

大数据组件-Flume集群环境搭建

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

AOP到底是啥

AOP到底是啥 前言面向切面编程到底是啥意思那么要怎么实现面向切面编程呢&#xff1f;成果 前言 回忆起来&#xff0c;第一次听到这三字母是博主在上大二的时候&#xff0c;那时候看的一脸懵逼&#xff0c;现在马上研二了才想起来回顾下。 只记得当时面向对象编程还没整明白&…

TDengine(2):wsl2+ubuntu20.04+TDengine安装

一、ubuntu系统下提供了三种安装TDengine的方式&#xff1a; 二、通过 apt 指令安装失败 因为是linux初学者&#xff0c;对apt 指令较为熟悉&#xff0c;因此首先使用了该方式进行安装。 wget -qO - http://repos.taosdata.com/tdengine.key | sudo apt-key add -echo "…

【Linux】文件

Linux 文件 什么叫文件C语言视角下文件的操作文件的打开与关闭文件的写操作文件的读操作 & cat命令模拟实现 文件操作的系统接口open & closewriteread 文件描述符进程与文件的关系重定向问题Linux下一切皆文件的认识文件缓冲区缓冲区的刷新策略 stuout & stderr 什…

STM32 硬件IIC 控制OLED I2C卡死问题

#更新通知&#xff1a;2023-09-06 STM32L151 固件库 使用I2C 太难了&#xff0c;又宕机了&#xff0c;建议不要在固件库版本上尝试硬件IIC 了&#xff0c;一般人真用不了&#xff0c;直接使用软件模拟的&#xff0c;或者不要使用固件库了&#xff0c;用HAL 库吧&#xff0c;据说…

既要炫酷好看,又要出图快?可视化大屏模板了解下!

可视化大屏模板可以在很大程度上满足炫酷好看和出图快的需求。使用模板可以节约制作时间&#xff0c;像奥威BI系统就上线了大量的可视化大屏模板。这些模板实际上都是一张张完整的可视化大屏报表&#xff0c;从数据源到数据分析模型&#xff0c;再到数据可视化图表和智能分析功…