【天刀系列】坐标对象分析

[复制链接]
查看: 18   回复: 0

41

主题

41

帖子

272

积分

超级版主

Rank: 8Rank: 8

积分
272
发表于 2021-5-27 22:06:33 | 显示全部楼层 |阅读模式
经过对《天涯明月刀》角色属性对象的分析,我们并没有在其中找到角色的坐标,而由于公式较短,没有过多偏移,所以得出结论,角色坐标并没有和血量等属性放在同一个对象下,于是我们通过CE进行重新搜索。
搜索浮点型,很快得到两个结果(如图)
C:\Users\AKM\AppData\Local\YNote\data\qq4EBD6EA8DB709B20B5FA91D19DC75C0E\a0c7269c62c04cf9925f045035b5d0bc\1.png
1.png

对于这样一款大型的3D游戏来说,只搜索到了两个坐标的结果,显然是很不正常的,所以我们猜想这个坐标值也许也进行了一些加密。有两个办法去处理这个情况,第一是直接对得到的结果下写入断点,分析其真正的来源,第二是通过未知初始值从新进行扫描。为了方便,也为了研究加密的过程,我们选择第一个办法。
通过OD对其中的一个地址下写入断点,游戏很快断下(如图)
2.png


C:\Users\AKM\AppData\Local\YNote\data\qq4EBD6EA8DB709B20B5FA91D19DC75C0E\bf88e441878144b3a44eaea96253789a\2.png
我们向上分析,可以得到一个+0偏移,继续分析来源,经过了很多层参数的传递,并最终来源与018BEE85 处 call    dword ptr [26EDF14]的第三个参数(如图)
3.png


C:\Users\AKM\AppData\Local\YNote\data\qq4EBD6EA8DB709B20B5FA91D19DC75C0E\13fcad69b750465faebe97882537dcfe\3.png
这第三个参数是一个堆栈地址,也就是说是临时存放坐标值的,我们继续分析这个临时坐标的来源。由于第三个参数+0,也就是[ebp-28]存放的是X坐标,所以我们向上找[ebp-28]的来源,得到018BEE47处的  fstp    dword ptr [ebp-28]是X坐标的来源,这是从浮点栈ST0中传递的(如图)
4.png


C:\Users\AKM\AppData\Local\YNote\data\qq4EBD6EA8DB709B20B5FA91D19DC75C0E\c415678bf9a04849b463df9e3912af44\4.png
而ST0又来源于018BEE41   处的fld     dword ptr [eax+4],这里的eax又是一个堆栈地址,向上分析其来源,经过多次参数传递,来源与018BAC9F     处的   call    edx的第二个参数(如图)
5.png


C:\Users\AKM\AppData\Local\YNote\data\qq4EBD6EA8DB709B20B5FA91D19DC75C0E\d09155bf1df547be8f0abad3d84370d3\5.png
第二个参数并不是上面的push 0,这里被直接跳过了,所以来源与018BAC4F 处的  push    eax(如图)
6.png


C:\Users\AKM\AppData\Local\YNote\data\qq4EBD6EA8DB709B20B5FA91D19DC75C0E\4ad09c6f819848f0884a646dd6ebd51b\6.png
而eax来源于ebp-20,那么[ebp-20+4],也就是[ebp-1C]则来源于018BAC63 处的  fld     dword ptr [ebp-2C],对上面的浮点数运算进行分析,得出来源于018BAC3E 处的 [ebp-2C]与[3CA3908]的商,[3CA3908]等于100,所以坐标的加密公式其实是本地显示坐标乘以100。
继续分析[ebp-2C],来源于018BABE3 处的  fld     dword ptr [esi],返回后得到来源00B7EB07  处的  push    044DB9C8(如图)
7.png


C:\Users\AKM\AppData\Local\YNote\data\qq4EBD6EA8DB709B20B5FA91D19DC75C0E\102694b3ae2441f989387e67953b9be7\7.png
这是一个仅仅存放坐标的基地址,也不是我们想要的对象,所以我们还要继续分析里面坐标的来源,并在00B7EAAA  处得到  fstp dword ptr [44DB9C8]。
向上分析[ebp-24]的来源,来源于00B7EA36   处的 call    edx内部,在函数内部得到+90,+9C等偏移(如图)(如图)
8.png


9.png


C:\Users\AKM\AppData\Local\YNote\data\qq4EBD6EA8DB709B20B5FA91D19DC75C0E\df0a8c3b311048a4bcbb5354c832cdef\8.png
C:\Users\AKM\AppData\Local\YNote\data\qq4EBD6EA8DB709B20B5FA91D19DC75C0E\c4861c6d93c540f28f2b046ba61088d7\9.png
返回后可以得到+94偏移和基地址[414A7A8](如图)
10.png


C:\Users\AKM\AppData\Local\YNote\data\qq4EBD6EA8DB709B20B5FA91D19DC75C0E\f4335dabb6a14e41bbf55311011746b9\10.png
这样我们就得到了坐标的完整公式如下
[[[[414A7A8]+94]+404]+9C]+90        X坐标 (本地显示*100)

公式并不复杂,关键在加密过程的分析,如果直接搜索未知初始值可以跳过加密过程,不过得到结果较多,分辨真正的来源也比较麻烦。


来亦何哀, 去亦何苦?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4 © 2001-2018 Comsenz Inc.