65.网络游戏逆向分析与漏洞攻防-利用数据包构建角色信息-根据解析好的角色数据还原对应数据结构

本文主要是介绍65.网络游戏逆向分析与漏洞攻防-利用数据包构建角色信息-根据解析好的角色数据还原对应数据结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了

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

上一个内容:64.解析角色初始化数据包输出角色数据内容

通过上一个内容把关键的28数据包解析出来了,然后上一个内容解析出来的数据是前面跟着一个英文的文本后面跟着对应的数据,但是实际用的时候肯定不会要这个英文文本的,所以接下来创建一个角色的类,这个类用来代表角色、玩家,然后根据上一个内容里解析出来的数据对类进行填充,如果将来角色信息有数据更新了,把更新的操作对接到这个类上,然后再更新这个角色类,正常来说是这样的一个玩法,之前分析的应该是接收的10数据包是修改数据,所以28数据包对接到初始化创建类,10数据包对接到修改类,本次就是要把角色类这个数据结构给写出来

解析之后的28数据包,但下方的东西不是完整的,但也可以看出它包含了人物所有信息了

id:324923858031232259
x:-450.867004 h:9.444011 y:868.926025
Name = 今晚打老虎  // 名字
VisualRange = 50.000000 // 视野,VisualRange中文意思是Visual视野Range范围,连起来就是视野范围
Type = 2
Sex = 1
Photo = gui\BG_team\TeamRole\Teamrole_zq_humF_001.PNG
Camp = 1 // 营地,在游戏里应该是种族的意思
Race = 1 // Race中文意思是比赛,不知道是什么
Job = 1 // Job是工作的意思,在游戏里应该是职业
Level = 3 // 等级,之前打了几个怪升了两级,所以3是正确的
CurArea = 10400000
SceneTriggerConfig = kewerj01
SkillEnergyList = 0:1;2:1;6:1
EnergyUpgradeNum = 100
IsHunterTreasure = 1
AdjustOrient = 1
MPUpSpeed = 5
MaxHPAdd = 1548 // 这个应该是装备给的血量
MaxMPAdd = 91 // 这个应该是装备给的蓝量
HPRatio = 100
MPRatio = 100
MaxHP = 458 // 没有装备时的血量
MaxMP = 121 // 没有装备时的蓝量
HP = 2006 // 当前血量
MP = 212 // 当前蓝量
FightPower = 3420 // 战力
AV = 100
EY = 100
DP = 100
AVRatio = 100
EYRatio = 66
DPRatio = 100
MaxRC = 100
MaxAV = 100
MaxEY = 151
MaxFS = 100
MaxDP = 100
Gravity = 9.800000 // 重力的意思,把这个值改大应该可以跳的更高
JumpSpeed = 4.500000 // 跳的速度,把这个值改大应该可以提高跳完成的速度
MoveSpeed = 5.000000 // 移动速度,把这个值改大应该可以提高移动速度
WalkSpeed = 1.500000 // 行走速度,把这个值改大应该可以提高行走速度
RunSpeed = 5.000000 // 运行速度,不知道什么意思,应该是控制游戏整体的速度吧
DropHeightPub = 10.000000 // 落差高度杆不知什么意思
ArtKey = 101011
Face = 21031 // 脸
Eyes = 21039 // 眼睛
TattooColor = 16777215 // 纹身颜色
SkinMtl = 22131 // 皮肤
HairColor = 22132 // 头发的颜色
SkinColor = 22140 // 皮肤的颜色
Hat = 122011 // 帽子
Cloth = 112011 // 布
Pants = 132011 // 裤子
Shoes = 142011 // 鞋子
Gloves = 152011 // 手套
Tattoo = 296018 // 纹身
RWeapon = 289041 // Weapon中文是武器的意思,R应该是英文右的缩写,所以应该是右手武器
RWeaponID = TY_Sword_0001 // 右手武器id
ChangePKModule = 1 // 更改PK模块
PKProtected = -1 // PK的保护,修改它的值应该可以不回被PK
ChallengeState = 1 // 挑战状态
GuardSkill = 1111
BufferListStr = Buff_Ch1685_01_1,0111-001-1711377995-8499,1,16794883-75652231,-1,0,0|
UnderWaterSpeed = -8.000000 // 水下航速,应该是在水下的速度
CurUnderWaterValue = 88.000000 // 水下值
TransJobList = 21,22,23
CantTransJob = 1,1;1,1;1,1
TransConditionId = 151;151;151
CurInsPoint = 2
Force = 1 // 力
SafeTime = 180
SafeModeEquipLv = 2
SafeModeEquipStar = 2
SafeModeEquipStr = 1,1,1,1,1,1,1,1,1,1,1,1
SafeModeJewelStr = 1,1,1,1,1,1,1,1,1,1,1,1
LastOffLineTime = 45406.905556 // 上次离线时间
LastAddress = 120.225.22.88 // 上次的ip地址
CloneScoreTopRefreshTime = 13358275737151 // 中文意思是克隆得分最高刷新时间,不知道在游戏中是什么
CloneWeekLimitCount = 7
CloneWeekLimitCountMax = 7
ArenaID = -1 // 竞技场id
ArenaSinglePoints = 1000 // 中文意思是竞技场单点,不知道在游戏中什么意思
RelivePositon = 1,-514.361023,21.870001,847.015991,2.632000 // 重新起动位置,应该是复活点的位置吧
ReliveLocalFirst = 1 // 
RelivePerfectFirst = 1
ReliveCityFirst = 1
ReliveNoNearPos = 1
PlayerExp = 182 // 玩家经验值
PlayerUpgradeExp = 375 // 玩家升级经验
RankLevel = 1
UpgradeHonor = 850
CanAddHonorPoint = 1000
Physical = 89
MaxPhysical = 89
DayMaxGainGold = 100000000
AutoQuestFlag = 1
EveRecLevel = 3
OnlineTime = 25/20/31/33 // 中文意思是上线时间,但是这个值很奇怪,很明显不是时间

然后使用 Cheat Engine 看看游戏是怎样表示这个数据结构的,然后看到这个游戏用的非主流技术(Cheat Engine中的两个地址数据结构都一样),看着像直接把28数据包带着英文一起拼接起来的,它这种的游戏中肯定会有一个系统性的方法,就是给它一个HP就能返回HP的值,逆向的时候找到这个函数,可以直接用,游戏用的这种数据结构就会导致用面向对象的思想去逆向会找不到角色相关的数据,但是有了上方分析的表,在看这个结构会清楚它的一个套路

通过上方解析28的套路成功找出,血量地址,如下图

然后下一个内容,使用C++通过,09数据包带来的数据类型,生成角色信息类


这篇关于65.网络游戏逆向分析与漏洞攻防-利用数据包构建角色信息-根据解析好的角色数据还原对应数据结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/938574

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出