CS420 课程笔记 P5 - 内存编辑 数据类型

news2024/10/7 14:33:45

文章目录

    • Introduction
    • Data types
      • Booleans
      • Negative numbers (Signed integers)
      • Floating-point numbers (fractional numbers)
    • Unknown value scans
      • Health finding
      • Float finding (Player position hack / Teleport hack)
    • Additional things

Introduction

这节课将结束数据类型并涵盖更高级的 game hacking 技巧,特别是学习如何编辑我们看不到的数字,例如玩家的 XYZ 坐标或者没有显示数字的血条,这被称为 未知值扫描,因此数据类型只是计算机上存储信息的方式,我们已经学到了很多比如 ASCII 和 Unicode,当然我们还有负数和浮点小数还没涉及

Data types

我们已经学到的数据类型总结:

  • byte = UInt8 1byte 最大255
  • unsigned short = UInt16 2bytes 最大65535
  • unsigned integer = UInt32 4bytes 最大42亿
  • unsigned long = UInt64 8bytes
  • string (variable)
  • char 1byte 最大255

接下来介绍更多数据类型,日后他们将在课程中统称为 Data 数据!

Booleans

在游戏中,很多情况下我们需要将值表示为 true 或 false,比如:

  • 怪物是否活着 isAlive = true or false
  • 火把是否打开 isOn = true or false

当我们在计算机中存储数据时,我们使用 1 表示 true,0 表示 false,你可能会想计算机只需要 1bit 即可保存一个 bool 类型的数据,很不幸,计算机使用了整个 byte 来保存一个 bool 值,这就是使用 8个bit 作为一个 byte 分组的副作用

有些游戏可能会用 bit flag 技术来优化,比如黑暗之魂3,但这实际上很少见,为了应对这个情况,已经是一种非常先进的 game hacking 技术了

值得一提的是,有些编程语言还会浪费更多,甚至使用 4bytes 也就是一个 int32 的空间来存储 bool,通常 C 和 C++ 占用 1byte,C# 占用 4bytes,而 Java 要占用 8bytes

Negative numbers (Signed integers)

到目前为止我们只了解正数,让我们来介绍一下负数:

  • 第一位 Sign bit 作为符号位,0 为正,1 为负
  • 后面作为数字的值存储

这里涉及一个负数补码反码系统,视频作者在这里跳过,这个系统介绍起来足够消耗一个小时甚至更多

对于笔记作者来说,一个简单的补码记忆方式是:如果第一位是0,那么就当正常的二进制数
否则如果第一位是1,那么就减去一个特殊的数字即可,比如 1000 0000,等于 0 - 128,或者 1111 等于 7 - 8 = -1
7 - 8 里面的 7 是后三位的和,8 是第一位的权值

Floating-point numbers (fractional numbers)

有两种实现的方法,一种是浮点,一种是双精度,这两种数据类型几乎相同,但有细微的差别

  • 第一位 Sign bit 作为符号位,0 为正,1 为负
  • 后面 8 位作为 exponent 指数位
  • 最后 23 位作为 mantissa(fraction)

而双精度 double 作为科学用,一般很少在游戏中出现,但实际上是差不多的,float 同样需要 4bytes 存储

  • 10.5f 浮点数后面一般加 f 作为标志
  • 10.5 double 后面一般没有 f

Unknown value scans

现在我们将上面学到的应用到真正的 game hacking 技术中,我们尝试找到一个没有血条数值的怪物的生命值

Health finding

我们可能可以猜测怪物的生命值是100,但往往不正确,所以我们:

  1. 先收集所有数值
  2. 在游戏中想办法改变怪物的生命值,比如让怪物受到一次攻击
  3. 查找所有减少或者改变了的数值

这就使得数值范围得到了缩小,最终找到生命值!

Float finding (Player position hack / Teleport hack)

位置通常使用浮点数存储,我们先用 CE 查找未知的数值,类型选择 FLOAT

在这里插入图片描述
在这里插入图片描述
然后在游戏中移动,我们不知道移动了多少,只知道移动了,在 CE 中继续扫描,通过选择:

  • Unchanged value
  • Changed value
  • Increased value
  • Decreased value

最终可以缩小范围找到你需要的值!

在这里插入图片描述
最后你会发现很多棘手的事情,比如玩家可能旁边有宠物,这就需要你自行针对游戏的特性想一些办法了~

现在我们留下了这些数据,把他们放到下面去

在这里插入图片描述
然后选中所有,按下空格来冻结住!程序很有可能会崩溃,因为你冻结了一些指针或者天知道是什么的东西,通过这样来缩小范围最终找到正确的值!

在这里插入图片描述
当你找到了 X 地址,你可以简单地加4,来找到玩家的 Y 地址,因为 FLOAT 占用 4bytes,游戏会彼此相邻地存储坐标,因为这就是程序员制作游戏的方式

Additional things

当你退出游戏重新进入并修改那个地址的数值时,有时你会发现数值有效,有的则锁定在了 0,这是因为一种叫做静态和动态的东西,现在你只需要记得有些 game hacking 会在您重新启动游戏时再次起作用,而大多数则不会!

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

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

相关文章

POI实现word文档导出

1 需求 在列表页面中点击合同按钮,跳转到合同页面 页面中有下载按钮,点击下载按钮,把页面展示的内容导出到word中。 2 分析 2.1 POI操作Word的API介绍 poi对低版本的doc本身支持的就不好所以我们直接说高版本的docx版本的api。 1、poi…

朴素,word,任何参考文献导入endnote

朴素,word,任何参考文献导入endnote 注意:对于以下这几种不做阐述,看其他帖子都有讲述: 这里的参考文献指的是类似于: [1]. Li Y, Lu Y, Huo X, et al. Bandgap tuning strategy by cations and halide io…

【python零基础入门学习】python基础篇之文件对象open、模块以及函数的使用(三)

本站以分享各种运维经验和运维所需要的技能为主 《python》:python零基础入门学习 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…

【人月神话】重新探索人月神话:软件工程的现实与挑战

人月神话是一篇由美国软件工程师弗雷德里克布鲁克斯所写的软件工程经典之作,最早发表于1975年。这篇文章的全名是《人月神话:软件工程的神话与现实》(The Mythical Man-Month: Essays on Software Engineering),它涵盖…

智慧导览|智能导游系统|AR景区导览系统|景区电子导览

随着文旅市场的加快复苏,以及元宇宙、VR、AR、虚拟数字人等新兴技术的快速发展,文旅行业也正在加快数字化转型的步伐,向智慧景区建设迈进。为满足不同年龄段游客的游览需要,提升旅游服务体验,越来越多的旅游景区、博物…

BlueStore BlueFS rocksdb 关联性梳理

Tag: ceph 12.2.4 BlueStore空间初始化 BlueStore磁盘空间管理 总述 OSD挂载目录基于文件系统管理,Slow、WAL、DB空间区域基于裸盘管理;Slow区域:此类空间主要用于存储对象数据,由BlueStore管理,其中分配于BlueFS空…

如何将枯燥的大数据进行可视化处理?

在数字时代,大数据已经成为商业、科学、政府和日常生活中不可或缺的一部分。然而,大数据本身往往是枯燥的、难以理解的数字和文字,如果没有有效的方式将其可视化,就会错失其中的宝贵信息。以下是一些方法,可以将枯燥的…

Python入门 类class 基础篇

记住一句话:类是模板,而实例则是根据类创建的对象。 我初学时对类的理解是从类的字面上,可以片面的认为它是一个种类,它是相似特征的抽像,也就是相似的东西,可以把相似特征的事务抽象成一个类。&#xff0…

基于串口校时的数字钟设计

文章目录 设计目标硬件设计数码管串口 软件设计顶层模块串口接收模块数据处理模块时钟模块串口发送模块 总结 设计目标 环境:ACX720开发板 实现功能: 数码管能够显示时分秒能够接收串口数据修改时间能够将当前时间以1s一次速率发送到电脑 硬件设计 数…

java之SpringBoot基础篇、前后端项目、MyBatisPlus、MySQL、vue、elementUi

文章目录 前言JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作(一)JC-1-2.SpringBoot入门程序制作(二)JC-1-3.SpringBoot入门程序制作(三)JC-1-4.SpringBoot入门程序制作(四)…

virtualbox 扩展磁盘大小

此处设置完成后,还需要进入虚拟机,实际扩展磁盘大小 参考 https://zhuanlan.zhihu.com/p/319431032

搭一个shinyAPP就是一篇《Bioinformatics》?

写在前面 原本想引用一番shiny,结果并没有检索出shiny研发团队所发表的论文,倒是有诸多shiny爱好者搭建shinyApp所发表的文章。例如这篇题为“ShinyGO: a graphical gene-set enrichment tool for animals and plants”、于2020年发表于《Bioinformatic…

【AWS】如何用SSH连接aws上的EC2实例(虚拟机)?

目录 0.环境 1.连接结果示例 2.SSH连接思路 3.具体步骤 1)安装并运行ssh服务 2)启动ssh服务 3)在AWS上找到正在运行的EC2实例,并且根据提供的ssh连接语句进行连接 0.环境 windows 11 64位 前提: 有aws账户&…

B. Swap and Reverse

Problem - B - Codeforces 思路:这个题想复杂了,对于第一个条件,我们发现其实就是可以对所有的奇数位置之间任意交换,所有的偶数位置之间任意交换,对于第二个条件来说,如果k为奇数是没有意义的,…

2022年12月 C/C++(七级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程(1~8级)全部真题・点这里 第1题:走迷宫 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。 给定一个迷宫,求从左上角走到右下角最少需要走多少步…

跑得快的快递和跑得慢的快递差在哪些环节?

快递速度是现代物流的核心竞争力之一,对于电商行业和消费者而言,快捷、高效的快递服务意味着更好的购物体验和更高的客户满意度。大家都有过这样的经历:有时候我们选择了跑得快的快递公司,包裹几乎可以说是眨眼间就到达了目的地&a…

​SIGIR 2023 | 用于序列推荐的多兴趣预训练框架

©PaperWeekly 原创 作者 | 唐作立 单位 | 武汉大学硕士生 研究方向 | 推荐系统 引言 在推荐系统中,由于用户具备多种兴趣的特点,使用多兴趣学习(Multi-interest Learning)对用户进行建模能够带来显著的性能提升,…

【2023集创赛】加速科技杯二等奖作品:基于ATE的电源芯片测试设计与性能分析

本文为2023年第七届全国大学生集成电路创新创业大赛(“集创赛”)加速科技杯二等奖作品分享,参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼…

自然语言处理 微调大模型ChatGLM-6B

自然语言处理 微调大模型ChatGLM-6B 1、GLM设计原理2、大模型微调原理1、P-tuning v2方案2、LORA方案 1、GLM设计原理 bert的主要任务是随机的去除掉某个单词,使用上下文将其预测出来(相当于完形填空任务); GPT的主要任务是根据前…

idea配置gitLab

前言:网上有很多类似的文章,但描述不够详细 步骤1:安装git 如果安装成功再次点击TEST按钮展示如下:git版本 步骤2:idea配置gitlab 查看当前项目管理的 远程仓库再git的地址,该地址可是gitLab的&#xff0…