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

17.第二阶段x64游戏实战-人工遍历二叉树结构

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

本次游戏没法给

内容参考于:微尘网络安全

上一个内容:16.第二阶段x64游戏实战-分析二叉树结构

上一个内容里把二叉树的结构写了写,本次手动遍历一次二叉树,增加一下印象

首先来到下图红框位置,也就是二叉树的基址

然后在内存窗口跳转过去

然后右击选择地址

然后之前找人物名字、坐标的时候也找到了一个人物的公式

[[[[0x00007FF65557EE38]+0x98]+0x1B0]+0x18]+0x30 // 人物名字

[[[[[[[[[0x00007FF69E23EE38]+0x80]]+0x10]]]+0x28]+0x1B0]+0x18]+0x8 // 附近怪物的百分比血量

可以发现一件事都有 +0x1B0]+0x18] 这个,这可以说明 [[[[[[[0x00007FF69E23EE38]+0x80]]+0x10]]]+0x28] 是一个npc对象(就是玩家、怪物、宝箱、药材等数据,这些东西其实也都属于npc,只是叫法不同)

这也可以说明 [[[[[[[[[0x00007FF69E23EE38]+0x80]]+0x10]]]+0x28]+0x1B0]+0x18] + 0x30位置是npc的名字,接下来验证这件事

验证一下上方写的是不是真的,首先右击进入地址

进入之后来到0x80位置,如下图红框

可以看到下图红框像是一个数量0x88位置是数量,附近npc的数量

然后如下图进入0x80的地址

它先进入的是0x8位置,也就是说第一个数据的公式应该是 [[[[[[[[[0x00007FF69E23EE38]+0x80]]+0x8]]]+0x28]+0x1B0]+0x18]+0x8,本来[[[[0x00007FF69E23EE38]+0x80]]+0x10]现在是[[[[0x00007FF69E23EE38]+0x80]]+0x8]

[[[[0x00007FF69E23EE38]+0x80]]+0x8]也就是下图红框的位置

然后如下图,红框里的是0x18位置数据是01,蓝框里的是0x19位置,数据是00,代码中对0x19判断了是不是0,只有数据是0才会进入循环,也就表示当前二叉树是有下一个数据的(下一个二叉树结构)

然后下图红框位置0x20,二叉树的id(应该就是用它进行的排序)

然后通过[[0x000001C776B1EA50+0x1B0]+0x18]+0x30这个公式应该可以得到一个名字,但它是一个无效的表达式,难倒我们的公式错了?

然后进入左边的数据(二叉树结构)注意现在在第一个二叉树结构进行的 在内存窗口中跳转到知道QWORD

进入之后

然后使用它0x28位置的值 [[0x000001C7000001C7+0x1B0]+0x18]+0x30 也就是这个公式再次尝试跳转,还是不行

然后再回到第一个二叉树(按键盘上的减号就能往上回了),如下图这次进入它右边的二叉树里

再使用它的0x28位置的数据 [[0x000001C7656DABF0+0x1B0]+0x18]+0x30

这次就可以了

然后点击确定进行跳转,跳转之后可以看到名字了,中文名看到的可能是乱码,需要进行设置,如下图选择代码页

然后选择GBK或System,Windows系统一般都是GBK,System会自动检测系统选择系统的编码(代码页),选择好点击确定就可以看到名字了,

名字,现在是第二个二叉树,放到是我们玩家角色的地址,下图里是我角色的名字

然后再回到二叉树,如下图再看看其它二叉树是什么

这个二叉树没有东西

再回到上一个二叉树(我们玩家角色的二叉树)看看右边的二叉树结构,下图并不是从上一个二叉树找到的是从第一个二叉树里找到的,这是一个怪物的名字

通过上面的分析可以看出npc的数据并不一定在什么位置,手动分析很累,分析多了头就晕了,反正就是这样的一个逻辑了,可以证明我们玩家角色也在这个二叉树里,附近npc也在二叉树里,npc和我们的人物结构也都一样不需要重新找了直接用就行了,下一章使用代码遍历这个二叉树来得到附近的npc

0x00007FF7F244A0E8 - 0x00007FF7F1B00000=0x94A0E8


img

http://www.xdnf.cn/news/111565.html

相关文章:

  • 给git配置SSH(github,gitee)
  • 【前端】【业务场景】【面试】在前端项目中,当涉及大量数据渲染时,如何提高渲染性能并避免页面卡顿?
  • uniapp 安卓离线本地打包,Android Studio生成apk包
  • 27、Session有什么重⼤BUG?微软提出了什么⽅法加以解决?
  • Linux 命令行与 vi/vim 编辑器完全指南
  • continue插件实现IDEA接入本地离线部署的deepseek等大模型
  • 想要从视频中提取背景音乐怎么搞?其实视频提取音频非常简单
  • 金融系统上云之路:云原生后端架构在金融行业的演化与实践
  • 以太网的mac帧格式
  • 基于Vulkan Specialization Constants的材质变体系统
  • 第三篇:Django创建表关系及生命周期流程图
  • Java后端开发面试题(含答案)
  • java kafka
  • 初始https附带c/c++源码使用curl库调用
  • Java 调用webservice接口输出xml自动转义
  • 关于 xpath 查找 XML 元素的一点总结
  • 2025新版懒人精灵零基础及各板块核心系统视频教程-全分辨率免ROOT自动化开发
  • Docker从0-1搭建个人云盘(支持Android iOS PC)
  • 关于Safari浏览器在ios<16.3版本不支持正则表达式零宽断言的解决办法
  • 汽车自动驾驶介绍
  • OpenHarmony 开源鸿蒙北向开发——hdc工具使用及常用命令(持续更新)
  • 数据库进阶之MySQL 程序
  • ARINC818协议一些说明综述
  • onlyoffice8.3.3发布了-豆豆容器市场同步更新ARM64版本
  • 【CAPL实战:以太网】对IPv4报文的Payload部分进行分片并创建分片包
  • 从Kafka读取数据
  • Cephalon端脑云:神经形态计算+边缘AI·重定义云端算力
  • Trae或者VsCode无法识别相对路径(不自动切换工作目录)
  • 高光谱相机在生物医学中的应用:病理分析、智慧中医与成分分析
  • React在什么情况下需要用useReducer