104.游戏安全项目-基址的技术原理-基址的本质

news2024/9/21 4:33:34

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:易道云信息技术研究院

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

上一个内容:103.游戏安全项目-基址的技术原理-内存分配

堆上内存地址的分配不固定,然后它和基址之间的联系

下图中的代码,player本身的内存空间在栈上,但是player是一个指针它指向了一个分配的内存空间,然后new Role()它的内存空间是在堆上的,然后在一个游戏里会有很多过程是需要人物属性的,所以player如果是一个局部变量它就会很难访问,比如ui显示、初始化的时候都会用到人物的属性,所以人物属性是一个局部变量会很难用

最好的方式是把 player 写成全局变量,这样多个方法用起来就很容易了,然后这时就涉及到基址了,player写成全局变量之后它的内存地址就不会变了,它就会比如 player 给写到了偏移2000位置,然后偏移2000位置的值就会是 new Role(); 这个,以后访问Role类里的属性时直接从 2000 位置获取就可以了

也就是所有方法都可以跟下图红框位置的代码一样进行访问Role类(player)里的属性了,然后基址的本质就是player地址是确定的然后它又被关联到了Role类上,这时player就叫做基址,也就是基址本质上是一个相对固定的内存地址,通过这个相对固定的内存地址可以链接到其它内存地址,只要它的内存地址不变并且可以链接到其它我们想要的数据那么它就是基址,基址的存在是因为不同的过程需要操作同一个内存空间这个时候就必须要有一个全局变量作为媒介。

以上是最简单的模型,这种模型只需要知道hp就可以得到它附近的内存地址,然后通过 Cheat Engine 查看谁改写了它就可以得到对象头,得到对象的头地址之后搜索有谁保存了对象的头地址,这样就可以得到对象的偏移了(也就是player这样的全局变量)后续只需通过这个全局变量的值来获取对象就可以了

这个游戏的hp是 19F5EDC4 ,重新登录之后它就会有变化了

然后找谁访问了 19F5EDC4 这个地址然后就得到了血量的偏移 然后 19F5EDC4 - 460 = 19F5E964,然后也就是说现在一定是有一个地方存了 19F5E964 这个值

有两个保存了

然后退出游戏之后有一个变成了 0,所以有很大的理由确认它就是基址

虽然它的地址没有变,但是也看出了确实是有一个全局变量存储了人物属性的类地址,这样通过基址计算人物对象地址不管打开多少次游戏都可以准确的找到人物对象地址

然后复杂的情况它是如下图新加了一个结构

原本的 player 放到了 Engine类中,这种情况就变成了二级基址(多级基址)

如果是二级基址的情况再找到player它就在 Cheat Engine 中显示的不是绿色的了,然后它的地址也不确定,也会找到一堆 player,这样的如何找后面写

有些游戏它会有十多级基址,这种情况在设计上是不合理的,但是它确实是存在,存在的原因是它用了游戏引擎(比如虚幻5),然后游戏引擎本身就是一个很大的一个类一个SDK文件,假设游戏引擎它自己就完成了一个6次以上的封装,然后又基于它的封装有进行了封装然后也可能在封装两次之后又进行了封装,几次封装之后十几级基址就有了面对这种游戏有两种解决方式一种是通过逆向分析,另一种是研究引擎的源代码,使用源码分析会比逆向分析简单。

然后还有一种情况是它没有基址就是有的数据它就是没有一个强关联比如游戏的界面,比如按钮鼠标放到按钮上会有效果所以按钮肯定也会是一个对象,按钮这个对象未必会有内存地址,可能会设计一个系统化的方法通过加载配置文件来自动生成然后让它关联某些函数然后让它就可以运行了这种情况并没有用一个全局变量把它关联起来,所以有些时候是找不到基址的也就是游戏里本身并没有关联这些数据,这种情况找不到是很正常的,还比如说游戏中的怪物也是有可能是通过系统化的函数来实现的,也并没有什么全局变量关联怪物的数据。这种没有基址的数据既然游戏可以识别到那说游戏本身是提供了一种函数来区分它,也就可以利用这些函数来区分它。


 

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

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

相关文章

【初阶数据结构】一文讲清楚 “堆” 和 “堆排序” -- 树和二叉树(二)(内含TOP-K问题)

文章目录 前言1. 堆1.1 堆的概念1.2 堆的分类 2. 堆的实现2.1 堆的结构体设置2.2 堆的初始化2.3 堆的销毁2.4 添加数据到堆2.4.1 "向上调整"算法 2.5 从堆中删除数据2.5.1 “向下调整”算法 2.6 堆的其它各种方法接口函数 3. 堆排序3.1 堆排序的代码实现 4. TOP-K问题…

主机和Docker容器之间的文件互传方法汇总

Docker渐渐成为前端的一个工具,它像一个通用包装,可以把各种环境包裹其中,从而实现跨设备的兼容。使用的过程中,往往会需要将本地的文件和docker容器内部的文件互传:将主机的文件传递给容器内,让里面的工具…

【LLM大模型】如何让大模型更好地进行场景落地?

自ChatGPT模型问世后,在全球范围内掀起了AI新浪潮。 有很多企业和高校也随之开源了一些效果优异的大模型,例如:Qwen系列模型、MiniCPM序列模型、Yi系列模型、ChatGLM系列模型、Llama系列模型、Baichuan系列模型、Deepseek系列模型、Moss模型…

sqli-lab靶场学习(二)——Less8-10(盲注、时间盲注)

Less8 第八关依然是先看一般状态 http://localhost/sqli-labs/Less-8/?id1 然后用单引号闭合: http://localhost/sqli-labs/Less-8/?id1 这关的问题在于报错是不显示,那没办法通过上篇文章的updatexml大法处理。对于这种情况,需要用“盲…

从 InnoDB 到 Memory:MySQL 存储引擎的多样性

📃个人主页:island1314 🔥个人专栏:MySQL学习 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 🚀前言 &#x1f525…

PSINS,GNSS速度与SINS滤波的MATLAB代码

文章目录 程序说明主要特点适用范围获取方式运行截图 程序说明 基于PSINS工具箱的GNSS和SINS滤波的MATLAB代码,观测量为GNSS的三轴速度。 专为工程师和研究人员设计,助您轻松实现高精度的导航和定位。 主要特点 高精度滤波算法:结合PSINS和…

内存dump文件分析

目录 dumpsneak攻击步骤: dump 打开Volatility工具目录,C:\Users\Administrator\Desktop\应急工具集\volatility 打开运行输入volatility.exe -f 文件 imageinfo(花费比较长的时间,对于这个mem文件,可以使用Win2012…

【C++初阶】vector模拟实现

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

什么是全国特价电影票api?接口如何对接?

一、全国特价电影票接口对接的基本情况 接口包含信息:电影票API接口中包含影院、影厅、座位、影片、场次、日期及票价等信息。市场需求背景:随着我国电影消费市场的火爆,观影人数增多,除了猫眼、淘票票等平台,各大平台…

SLA 概念和计算方法

SLA 概念和计算方法 SLA SLA:服务等级协议(简称:SLA,全称:service level agreement) 网站服务可用性的一个保证 9越多代表全年服务可用时间越长服务更可靠,停机时间越短,反之亦然…

简单题66-加一(Python)20240918

问题描述&#xff1a; python class Solution(object):def plusOne(self, digits):""":type digits: List[int]:rtype: List[int]"""n len(digits)# 从最后一位开始处理进位for i in range(n - 1, -1, -1):if digits[i] < 9:digits[i] 1re…

xmos 编程指南

并行执行 并行执行时使用par {} 进行并行处理 点灯 #include <stdio.h> #include<xs1.h> #include<timer.h> #include<platform.h>port p XS1_PORT_8C;void hw(unsigned n) { printf("Hello world from task number %u\n", n); } int ma…

多线程---线程的状态及常用方法

1. 线程的状态 在Java程序中&#xff0c;一个线程对象通过调用start()方法启动线程&#xff0c;并且在线程获取CPU时&#xff0c;自动执行run()方法。run()方法执行完毕&#xff0c;代表线程的生命周期结束。 在整个线程的生命周期中&#xff0c;线程的状态有以下六种&#xff…

文件翻译英文是什么软件?5款软件评测助你决策

在企业的日常运营中&#xff0c;文件翻译格式的多样性常常成为沟通效率的瓶颈。 从简单的文本文件到复杂的PDF文档&#xff0c;每一种格式都可能因为其特有的结构和布局&#xff0c;给翻译工作带来额外的挑战。 掌握翻译技巧需要时间和实践&#xff0c;以下是一些实用的翻译技…

数据增强又突破了!升级版“双杀”两大顶会,实现无痛涨点

数据收集和标注的艰难想必大家都有所体会&#xff0c;不仅耗时耗力还很贵&#xff0c;一般人顶不住。那怎么解决&#xff1f;你的“强”&#xff08;数据增强&#xff09;来了~ 数据增强作为一种正则化技术&#xff0c;可以帮助我们在有限的数据下&#xff0c;提高模型的性能。…

Vue.js魔法书:前端开发者的终极指南----指令篇续篇

​个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一个为了让更多人看见许舒雅的宝贝的小白先生 &#x1f921;个人主页&#xff1a;&#x1f517; 许舒雅的宝贝 &#x1f43c;座右铭&#xff1a;深夜两点半的夜灯依旧闪烁&#xff0c;凌晨四点的闹钟不止你一个。 &am…

linux 操作系统下的dhclient命令介绍和案例使用

linux 操作系统下的dhclient命令介绍和案例使用 dhclient 是 Linux 系统中用于动态主机配置协议&#xff08;DHCP&#xff09;客户端的命令。它的主要功能是从 DHCP 服务器获取网络配置&#xff0c;包括 IP 地址、子网掩码、默认网关和 DNS 服务器等信息 dhclient 命令概述 …

如何使用ssm实现校园二手交易平台的设计与开发+vue

TOC ssm641校园二手交易平台的设计与开发vue 研究背景与现状 时代的进步使人们的生活实现了部分自动化&#xff0c;由最初的全手动办公已转向手动自动相结合的方式。比如各种办公系统、智能电子电器的出现&#xff0c;都为人们生活的享受提供帮助。采用新型的自动化方式可以…

速通汇编(六)认识栈,SS、SP寄存器,push和pop指令的作用

一&#xff0c;栈 &#xff08;一&#xff09;栈的特点 栈是一种具有特殊访问方式的存储空间&#xff0c;特殊在于&#xff0c;进出这块存储空间的数据&#xff0c;“先进后出&#xff0c;后进先出” 由于栈的这个“先进后出”的特点&#xff0c;我们可以利用其来很好的操作内…

传输层协议 —— TCP协议(上篇)

目录 1.认识TCP 2.TCP协议段格式 3.可靠性保证的机制 确认应答机制 超时重传机制 连接管理机制 三次握手 四次挥手 1.认识TCP 在网络通信模型中&#xff0c;传输层有两个经典的协议&#xff0c;分别是UDP协议和TCP协议。其中TCP协议全称为传输控制协议&#xff08;Tra…