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

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

相关文章:

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

文章目录 IntroductionFinding save filesStringsUnicodeExample!Value searchHealth searchConclusion Introduction 这节课我们将学习编辑十六进制,主要用于编辑保存文件,但十六进制编辑涉及的技能可以很好地转移到: Save file editingRe…...

计算机毕设之Python的高校成绩分析(含文档+源码+部署)

本系统阐述的是一个高校成绩分析系统的设计与实现,对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计,描述,实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构。…...

【Sentinel】核心API-Entry与Context

文章目录 一、Entry1、Entry的声明2、使用API自定义资源3、基于SentinelResource注解标记资源 二、Context1、Context介绍2、Context的初始化3、AbstractSentinelInterceptor4、ContextUtil 一、Entry 1、Entry的声明 默认情况下,Sentinel会将controller中的方法作…...

HashMap源码阅读解惑

HashMap的hash函数(1.8) 首先1.7的是四次扰动,1.8做了优化。 简单的说就是对key做hashCode操作,然后将得到的32为散列值向右位移16位,再与hashCode做异或计算。实质上是把一个数的低16位与他的高16位做异或运算。 st…...

如何解决前端传递数据给后端时精度丢失问题

解决精度丢失 有时候我们在进行修改操作时,发现修改既不报错也不生效。我们进行排查后发现服务器端将数据返回给前端时没有出错,但是前端js将数据进行处理时却出错了,因为id是Long类型的,而js在处理后端返回给前端的Long类型数据…...

使用Maven创建父子工程

📚目录 创建父工程创建子模块创建子模块示例创建认证模块(auth) 结束 创建父工程 选择空项目: 设置:项目名称,组件名称,版本号等 创建完成后的工程 因为我们需要设置这个工程为父工程所以不需要src下的所有文件 在pom…...

Vue+elementUI 导出word打印

import JSZipUtils from "jszip-utils"; import JSZip from "pizzip"; import Docxtemplater from "docxtemplater"; npm安装以上依赖 首先维护个word模板 导出方法 //导出wordskipOutWord(row) {var printData rowconst data JSON.parse(JS…...

数学建模-点评笔记 9月3日

1.摘要:关键方法和结论(精炼的语言)要说明,方法的合理性和意义也可以说明。 评委先通过摘要筛选(第一轮) 2.时间序列找异常值除了3西格玛还有针对时间序列更合适寻找的方法 3.模型的优缺点要写的详细一点…...

使用Spring来管理对象关系映射(ORM)

简介 对象关系映射(Object-Relational Mapping,简称ORM)是一种技术,用于在面向对象程序和关系型数据库之间进行数据的映射。Spring框架提供了强大的支持来简化和优化ORM开发过程。本文将介绍如何使用Spring来管理对象关系映射。 …...

【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka

作者简介 前言 博主之前写过一个完整的MQ系列,包含RabbitMQ、RocketMQ、Kafka,从安装使用到底层机制、原理。专栏地址: https://blog.csdn.net/joker_zjn/category_12142400.html?spm1001.2014.3001.5482 本文是该系列的清单综述&#xf…...

算法:删除有序数组中的重复项---双指针[3]

1、题目: 对给定的有序数组 nums 删除重复元素,在删除重复元素之后,每个元素只出现一次,并返回新的长度,上述操作必须通过原地修改数组的方法,使用 O(1) 的空间复杂度完成。 2、分析特点: 题目…...

AR产业变革中的“关键先生”和“关键力量”

今年6月的WWDC大会上,苹果发布了头显产品Vision Pro,苹果CEO库克形容它: 开启了空间计算时代。 AR产业曾红极一时,但因为一些技术硬伤又减弱了声量,整个产业在起伏中前行。必须承认,这次苹果发布Vision P…...

通过 Blob 对二进制流文件下载实现文件保存下载

原理&#xff1a;前端将二进制文件做转换实现下载: 请求后端接口->接收后端返回的二进制流(通过二进制流&#xff08;Blob&#xff09;下载,把后端返回的二进制文件放在 Blob 里面)->再通过file-saver插件保存 页面上使用&#xff1a; <span click"downloadFil…...

微信小程序使用lime-echart踩坑记录

一、使用echarts包 微信小程序项目使用的是uni-app&#xff0c;插件是lime-echart&#xff0c;版本一开始安装的是lime-echart-0.7.9&#xff1b;在项目分包之后&#xff0c;为了避免主包过大&#xff0c;就将这个插件也一并搬到了分包中&#xff0c;在微信开发者工具中表现出…...

Unity 编辑器资源导入处理函数 OnPostprocessTexture :深入解析与实用案例

Unity 编辑器资源导入处理函数 OnPostprocessTexture 用法 点击封面跳转下载页面 简介 在Unity中&#xff0c;我们可以使用编辑器资源导入处理函数&#xff08;OnPostprocessTexture&#xff09;来自定义处理纹理资源的导入过程。这个函数是继承自AssetPostprocessor类的&…...

stable diffusion实践操作-宽高设置以及高清修复

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、SD宽高怎么设置&#xff1f;1.1 宽高历史 二、高清修复1. 文生图中的高清修复1.按钮Hires.fix2.不同放大算法对比1.第一类2.第二类3.第三类4.第四类5.第五类6.第六类7.第七类8.第八类9.第九类10.第十类11…...

利用微调的deberta-v3-large来预测情感分类

前言&#xff1a; 昨天我们讲述了怎么利用emotion数据集进行deberta-v3-large大模型的微调&#xff0c;那今天我们就来输入一些数据来测试一下&#xff0c;看看模型的准确率&#xff0c;为了方便起见&#xff0c;我直接用测试集的前十条数据 代码&#xff1a; from transfor…...

opencv旋转图像

0 、使用旋转矩阵旋转 import cv2img cv2.imread(img.jpg, 1) (h, w) img.shape[:2] # 获取图像的宽和高# 定义旋转中心坐标 center (w / 2, h / 2)# 定义旋转角度 angle 90# 定义缩放比例 scale 1# 获得旋转矩阵 M cv2.getRotationMatrix2D(center, angle, scale)# 进行…...

容器资料: Docker和Singularity

容器资料 Docker和Singularity Docker比较适合测试: 环境适配,每种环境对应一个容器。Docker需要host宿主机上运行Docker服务(root权限),隔离性很高&#xff0c;但会牺牲性能&#xff0c;对GPU环境支持不好(需要安装NVIDIAN公司的插件才能把GPU暴露给container) Sigularity可…...

如何确认linux的包管理器是yum还是apt,确认之后安装其他程序的时候就需要注意安装命令

打开终端 输入apt&#xff0c;下图中提示未找到命令&#xff0c;则基本上包管理工具就是用yum的 输入yum&#xff0c;我们看到有打印信息&#xff0c;则说明包管理工具是yum的&#xff0c;离线安装命令使用rpm...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

OPENCV图形计算面积、弧长API讲解(1)

一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积&#xff0c;这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能&#xff0c;常用的API…...

Spring事务传播机制有哪些?

导语&#xff1a; Spring事务传播机制是后端面试中的必考知识点&#xff0c;特别容易出现在“项目细节挖掘”阶段。面试官通过它来判断你是否真正理解事务控制的本质与异常传播机制。本文将从实战与源码角度出发&#xff0c;全面剖析Spring事务传播机制&#xff0c;帮助你答得有…...