004 人物数据查找和代码编写
文章目录
- 角色血量基址查找
- 分析角色其他属性
- 分析角色名字
- 搜索角色坐标
- 数据整理
- 代码编写
接着我们来开始找游戏数据,以编写自动打怪为目标,找齐这个功能所需要的所有的数据。第一个需要用到的数据就是角色属性。
角色血量基址查找
直接搜索当前人物的血值
修改血值之后再次扫描
接着我们修改第二个数值,然后打开角色属性。发现第一个数值也会跟着修改,说明第一个数值的来源是第二个地址
对这个地址下内存访问断点,断点断下。[rax+0x1AC]是人物血量,这里就可以获得人物血量的两层偏移
[[rsi+0x65C]+0x1AC]
这里继续追rsi的来源
rsi来源于rdx
rdx来源于rbx
rbx来源于rax
进入函数发现rax来源于rbx
rbx来源于rcx
rcx来源于[rcx+0x248]
[[[rcx+0x248]+0x65C]+0x1AC]
再上层有个0x71C的偏移
[[[[rcx+0x71C]+0x248]+0x65C]+0x1AC]
rcx来源于rax,继续跟上面的call
最后可以追到一个基地址
[[[[0x00007FF77C447050+0x71C]+0x248]+0x65C]+0x1AC]
分析角色其他属性
[[[[0x00007FF77C447050+0x71C]+0x248]+0x65C]+0x1AC] 血量
[[[[0x00007FF77C447050+0x71C]+0x248]+0x65C]+0x1B0] 最大血量
[[[[0x00007FF77C447050+0x71C]+0x248]+0x65C]+0x1B4] 蓝量
[[[0x00007FF77C447050+0x71C]+0x248]+0x638] 角色名字
分析角色名字
直接扫描角色名字
把不带后缀的地址全部拉下来,里面有一个绿色的基地址,可以直接用这个基地址
通过修改的方式 确定人物名称的地址
对这个地址下硬件访问断点,断点断下,返回上层
发现这里是调用的系统的函数,接着在这个函数重新下断点
此时[rdi+0x638]是我们要追的地址
rdi来源于rcx
rcx来源于rsi
rsi来源于rax,而rax上面的call就是我们追血量时经过的第一个call。那么角色名字就等于
[[[0x00007FF77C447050+0x71C]+0x248]+0x638]
搜索角色坐标
我们在人物的对象下面并没有找到角色的坐标,那么说明这个坐标有可能是加密了。最快的方法是找到发包函数,然后通过发包函数找到走路call,看走路call传入的参数是什么
这里用CE的话用未知初始值和变动的值去扫描,这里过程省略
[[[0x00007FF77C447050+0x71C]+0x248]+80] X坐标
[[[0x00007FF77C447050+0x71C]+0x248]+84] Y坐标
[[[0x00007FF77C447050+0x71C]+0x248]+88] Z坐标
数据整理
[[[[0x00007FF77C447050+0x71C]+0x248]+0x65C]+0x1AC] 血量
[[[[0x00007FF77C447050+0x71C]+0x248]+0x65C]+0x1B0] 最大血量
[[[[0x00007FF77C447050+0x71C]+0x248]+0x65C]+0x1B4] 蓝量
[[[[0x00007FF77C447050+0x71C]+0x248]+0x65C]+0x13C] 等级
[[[[0x00007FF77C447050+0x71C]+0x248]+0x65C]+0x14C] 经验
[[[[0x00007FF77C447050+0x71C]+0x248]+0x65C]+0x150] 最大经验
[[[0x00007FF77C447050+0x71C]+0x248]+0x638] 角色名字
[[[0x00007FF77C447050+0x71C]+0x248]+80] X坐标
[[[0x00007FF77C447050+0x71C]+0x248]+84] Y坐标
[[[0x00007FF77C447050+0x71C]+0x248]+88] Z坐标偏移:"MMOGame-Win64-Shipping.exe"+0x2F67050
代码编写
首先在_stuObj中添加人物相关的属性
struct _stuObj
{int m_StuType; //0 人物 //--------------------------------公用------------------------------------------------wstring m_Name; //名字 DWORD m_Obj; //对象DWORD m_ID; //ID//--------------------------------角色------------------------------------------------DWORD m_Level; //等级DWORD m_Exp; //经验DWORD m_MaxExp; //最大经验
}
然后在GameData.h
中添加一个函数声明
//人物属性
_stuObj GetRoleData();
函数实现如下:
//获取角色属性
_stuObj GetRoleData()
{_stuObj selfdata;selfdata.m_StuType = Em_Role;//坐标selfdata.m_Obj_Pos.x = ReadFloat(g_SelfObj + 0x80);selfdata.m_Obj_Pos.y = ReadFloat(g_SelfObj + 0x84);selfdata.m_Obj_Pos.z = ReadFloat(g_SelfObj + 0x88);//名字DWORD nameAddr = ReadDword(g_SelfObj + 0x638);selfdata.m_Name = ReadWChar(nameAddr);//属性DWORD dwAttrBase = ReadDword(g_SelfObj + 0x65C);selfdata.m_Obj_HP = ReadDword(dwAttrBase + 0x1AC);selfdata.m_Obj_MaxHP = ReadDword(dwAttrBase + 0x1B0);selfdata.m_Obj_MP = ReadDword(dwAttrBase + 0x1B4);selfdata.m_Level = ReadDword(dwAttrBase + 0x13C);selfdata.m_Exp = ReadDword(dwAttrBase + 0x14C);selfdata.m_MaxExp = ReadDword(dwAttrBase + 0x150);return selfdata;
}
接着输出一下人物信息
//输出角色信息case Em_Role:{__OutputDebugStringW(L"名字:%s 等级:%d 血量:%d 最大血量:%d 蓝量:%d 当前经验:%d 升级经验:%d 坐标(x:%f y:%f z:%f)", m_Name.c_str(), m_Level, m_Obj_HP, m_Obj_MaxHP, m_Obj_MP, m_Exp, m_MaxExp, m_Obj_Pos.x, m_Obj_Pos.y, m_Obj_Pos.z);}break;
然后在MFC的主窗口界面中添加一个按钮响应事件
//人物数据
void MainWnd::OnBnClickedButton1()
{GetRoleData().OutputDebugInfo();
}
按钮事件输出人物数据相关信息。实际效果如图:
这样我们就取到了人物相关的数据了。下一篇文章我们来找周围遍历相关的数据。
Github:https://github.com/TonyChen56/GameReverseNote
完整代码:https://download.csdn.net/download/qq_38474570/79498815
004 人物数据查找和代码编写相关推荐
- C++算法之数据查找的代码
将做工程过程比较重要的代码片段备份一次,如下的代码内容是关于C++算法之数据查找的代码,应该对大家有较大帮助. int find(int array[], int length, int value) ...
- 数据库代码编写_如何将您的职业转变为数据科学-即使您今天不编写代码。
数据库代码编写 by Sam Chow, PhD 由周星驰博士 如何将您的职业转变为数据科学-即使您今天不编写代码. (How to transition your career into Data ...
- 001 从人物血量学习数据查找
文章目录 前言 游戏选择与环境搭建 查找人物血量 查找血量基址 第一条线(简单) 第二条线(一般) 第三条线(困难) 总结 前言 本系列文章旨在从零开始学习游戏辅助的工作流程和开发方法,了解游戏背后的 ...
- 假设有一个字类型的数值arry1,试编写程序统计arry1数值及其后若干数值,在字单元中存储时每个数据中含“1”数据位的个数,并将统计结果保存在res1数组中。数据段的代码定义如下: data seg
假设有一个字类型的数值arry1,试编写程序统计arry1数值及其后若干数值,在字单元中存储时每个数据中含"1"数据位的个数,并将统计结果保存在res1数组中.数据段的代码定义如下 ...
- 使用JSP代码编写index.jsp文件在网页上显示数据库数据
使用JSP代码编写index.jsp文件在网页上显示数据库数据 在index.jsp文件上使用JSP代码编写 可以在网页上以表格的形式显示数据库 内的数据 需要创建一个项目 因为需要用到关于JDBC的 ...
- 响应式编程笔记(二):代码编写
2019独角兽企业重金招聘Python工程师标准>>> 响应式编程笔记(二):代码编写 博客分类: 架构 原文:Notes on Reactive Programming Part ...
- 012 背包二叉树遍历分析和代码编写
文章目录 背包属性遍历 物品名字库遍历 数据整理 代码编写 背包属性遍历 从物品数量入手,搜索2字节 筛选出唯一的值 下两字节的访问断点,鼠标移动到物品上面,断点断下 物品数量=r14+0x10 这里 ...
- 011 吃药call功能分析和代码编写
文章目录 定位吃药call 代码编写 定位吃药call 在编写自动吃药功能之前还需要两个数据,一个是吃药的功能call,另一个是当前的背包遍历,我们先来找吃药call. 首先来到明文封包call头部 ...
- 006 技能数组分析和代码编写
文章目录 技能遍历 技能名字 数据整理 代码编写 现在我们已经有了人物的数据和周围对象的数据,还差一个技能数据和释放技能call,就可以完成自动打怪的功能. 接着我们来找技能遍历的数据 技能遍历 以技 ...
最新文章
- manjaro linux下载软件,manjaro linux
- 牛客网--2019校招--瞌睡
- ios页面间跳转方式总结
- javascript中为某个对象(控件)绑定事件的几种方法
- Maven学习总结(56)—— Maven、Gradle 、 Ant 哪一个构建工具最适合你?
- 通知:小密圈暂停服务
- 计算机操作系统(第二版)庞丽萍 杨富民 第一章	绪论课后答案
- Lisp编制的坡度标注_形位公差自动标注的ATUOLISP程序设计(Ⅰ)
- 浅谈从一维空间到十一维空间
- web服务器共享文件夹,局域网web共享文件夹的方法
- Win10免费升级win11方法
- C++扑克牌类的设计
- Real-Time Rendering 4th Edition 实时渲染第四版 第五章 着色基础(Shading Basics)
- java-php-python-ssm原创网络文学管理系统计算机毕业设计
- MySQL 之 DQL
- 【论文阅读笔记】Automatic Liver and Lesion Segmentation in CT Using Cascaded Fully Convolutional Neural Net
- Apache KafKa阅读官方文档心得
- Echarts 水波图实现
- 大家小心了,骗子QQ 14258588665 买ig骗我2600
- JavaWeb动态网页的方法和代码
热门文章
- AI:2020年6月22日北京智源大会演讲分享之10:40-11:10Daniel教授《 可微分的加权有限状态机及其机器学习应用》、11:10何晓冬教授《启动“智源-京东”任务导向多模态对话大赛》
- 成功解决UserWarning: Update your `Conv2D` call to the Keras 2 API问题
- DL之Encoder-Decoder:Encoder-Decoder结构的相关论文、设计思路、关键步骤等配图集合之详细攻略
- Dataset之CelebAman2woman:CelebAman2woman 数据集的简介、安装、使用方法之详细攻略
- AI公开课:18.05.16 周明博士(MSRA副院长)—北大AI第十一讲之《语言智能的进展》课堂笔记——你了解语言智能
- Python ML环境搭建与学习资料推荐
- spark hbase
- python之time模块和hashlib模块
- 【BZOJ】3456: 城市规划(多项式求ln)
- 后缀自动机序列自动机综合