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

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用