发布于:2017-12-11 10:42 | 125344次阅读 作者: 外部投稿
很多3D游戏对于技能的调用,往往都会选择调用外层的功能函数,而避免调用封包,因为这类游戏的技能封包往往都比较复杂,参数较多,不方便调用,外层的功能函数参数却非常简单。以《天涯明月刀》为例,我们比较一下功能函数和封包的差别,并分析封包结构内容。 首先我们来看一下外层功能函数的调用 push 1 push 技能ID mov ecx,[Base_Role_Coord] mov ecx,[ecx+Offset_Coord1] call Call_ReleaseSkills
这是一个非常简单的功能函数,参数除了一个立即数0x1之外就只剩一个技能ID了,而ecx的分析也很简单。 接下来我们看一下技能封包(如图) 这是唐门·千魂裂的封包,封包长度为41,经过多次对比,以及对技能对象的分析,可以得到如下结果 $ ==> >28DB3D9C +0 [[Base_Role_Coord]+Offset_Coord1] $+4 >00D74D95 +4 技能ID $+8 >0000002A +8 [SkillsPacket-4]+1 $+C >80000000 +C [SkillsPacket] $+10 >00000002 +10 00000002 $+14 >044BE700 +15 X*100 $+18 >04BE0200 +19 y*100 $+1C >0024FA00 +1D Z*100 可以传0 $+20 >28DB4700 +20 [[Base_Role_Coord]+Offset_Coord1]+A00 $+24 >28DB3D9C +24 [[Base_Role_Coord]+Offset_Coord1] $+28 >00000000 +28 00000000 $+2C >000003D8 +2C 000003D8 $+30 >EB608000 +31 朝向,X轴正向为0,逆时针转到X轴负向递增为+π,顺时针转到 X轴负向递减为-π $+34 >0285923F +35 EC028592 $+38 >000000EC +39 00000000 $+3C >00000000 +3C 00000000 $+40 > 00 +40 00000000
左边是OD中直接复制出的封包,右边是修正后的偏移,我们发现这里的参数很多,几乎每一个字节都有特定的含义,对于+31处的技能朝向我画了一个草图(如图)PS:画图水平实在是烂,大家凑合看下 通过对比可以发现,封包的结构无论是分析还是调用都非常麻烦,如果不是有特殊需求,比如脱机,防检测,或者外层严重VM无法分析等,不会选择用技能封包来做辅助。
|
最新评论
发表评论