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数据包带来的数据类型,生成角色信息类


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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java对象不再使用时,为什么要赋值为 null

相信大家在面试Java开发的时候,会遇到比较多的问题是Java的内存管理,这里面涉及到Java垃圾回收机制,以及JVM调优等等,那么今天跟大家讨论一个问题:Java对象不再使用时,为什么要赋值为 null ? 1、Java内存管理 在Java中,对象是在堆内存中分配的。 这部分内存用于存储…

YES-100B数显压力试验机

一、简介 本机采用主机与液压系统集于一体的结构形式,结构紧凑,小巧玲珑。采用液压加荷、电子测力,具有加荷数率显示,峰值保持等功能,并配有微型打印机。本机适用于水泥抗压、建筑砂浆抗压试验,也可用于混…

Jammy@Jetson Orin - Tensorflow Keras Get Started: 000 setup for tutorial

JammyJetson Orin - Tensorflow & Keras Get Started: 000 setup for tutorial 1. 源由2. 搭建环境2.1 安装IDE环境2.2 安装numpy2.3 安装keras2.4 安装JAX2.5 安装tensorflow2.6 安装PyTorch2.7 安装nbdiff 3. 测试DEMO3.1 numpy版本兼容问题3.2 karas API - model.compil…

YOLOV5 TensorRT部署 BatchedNMS(engine模型推理)(下)

主要是在王新宇代码的基础上改进,引入对BatchedNMS的解码 文章目录 1. 修改yolov5.cpp2.修改yololayer.h1. 修改yolov5.cpp 首先增加全局变量,名字根据转onnx时修改的节点名字来,查看onnx文件可以看到,顺序不要弄错。 const char *INPUT_NAME = “images”; const char …

在Git中如何查看工作目录与暂存区的差异?

文章目录 在Git中查看工作目录与暂存区的差异查看工作目录与暂存区差异的命令示例代码及说明: 在Git中查看工作目录与暂存区的差异 当你在使用Git进行版本控制时,经常需要了解工作目录(Working Directory)中的文件与暂存区&#…

【Linux系统编程】基础指令(二)

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

1分钟掌握 Python 函数参数

任何编程语言函数都是非常重要的一部分,而在进行函数调用时,了解函数的参数传递方式是非常有必要的。Python中支持哪些传参方式呢? Python中的传参方式是比较灵活的,主要包括以下六种: 按照位置传参按照关键字传参默…

算法基础:并查集详解

并查集 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学…

开源框架-链路追踪(SkyWalking)

SkyWalking 极简入门 | Apache SkyWalking 开发环境配置: -javaagent:D:\xxxxx\yyyy\skywalking-agent.jar -DSW_AGENT_NAMEspringboot-xxxx-demo -DSW_AGENT_COLLECTOR_BACKEND_SERVICES127.0.0.1:11800

在“美国死海”边的科研盛会 ACM CCS‘24 截稿日期逼近 行动要快

会议之眼 快讯 亲爱的学者们,第31届ACM CCS 2024(ACM Conference on Computer and Communications Security)即计算机和通信安全会议将于 2024 年 10月14日-18日在美国盐湖城举行!作为信息安全领域的四大顶会之一,ACM CCS一直备受…

LAPGAN浅析

LAPGAN 引言 在原始 GAN和CGAN中,还只能生成 16*16, 28*28, 32*32 这种低像素小尺寸的图片。而LAPGAN首次实现 64*64 的图像生成。与其一下子生成这么大的图像 (包含信息量这么多),不如一步步由小到大,这样每一步生成…

redis常用数据结构

redis常用数据结构 Redis 底层在实现下面数据结构的时候,会进行特定的优化,来达到节省时间/空间的效果。 内部结构 String raw(最基本的字符串),int(实现计数功能,当value为整数的时候会用整…