免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了
内容参考于:易道云信息技术研究院
上一个内容: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数据包带来的数据类型,生成角色信息类