飞郁乄九州寒 发表于 2021-5-27 22:11:34

【天刀系列】角色对象与属性简单加密

在数据分析时,属性加密的情况很常见,有些加密比较复杂,有些则比较简单,而对于角色属性的加密,往往都不会做的太难,因为调用频繁的位置做过多的加密很影响代码的效率。《天涯明月刀》中的角色属性就做了简单的加密,我们来对其进行分析。
首先用CE扫描其血量的DWORD型,并通过怪物攻击角色改变血量进行过滤,并最终得到一个结果(如图)
file:///C:/Users/AKM/AppData/Local/YNote/data/qq4EBD6EA8DB709B20B5FA91D19DC75C0E/412e65463cfe4fbf8a601cb0089c6ccf/1.png


接下来通过OD对这个地址下访问断点,很快游戏断下,如果血量已经回满,则需要打开角色属性栏才会断下(如图)



file:///C:/Users/AKM/AppData/Local/YNote/data/qq4EBD6EA8DB709B20B5FA91D19DC75C0E/1412378816c64c24ab99496332a6019d/2.png
正常来说我们需要分析的esi的来源,但是经过分析我们发现这样得到的公式并不是很适合我们去调用,而且对得到的这个地址的血量进行改写并不能有效的改变本地的显示效果,所以我们尝试分析edi的来源。
向上分析edi的来源,得到来源与00FE46A6 处的 and   eax, edx,而对上面的代码进行观察,发现edx始终为0xFFFFFFFF(如图)



file:///C:/Users/AKM/AppData/Local/YNote/data/qq4EBD6EA8DB709B20B5FA91D19DC75C0E/70486602f2d54e1d8aa5b4c6291ad499/3.png
所以我们只需要继续分析eax的来源即可,eax来源于00FE4684 处的 xor   eax, A59CF5B6,这是一个很简单的属性加密,就是由于这个加密,导致了我们无法直接通过CE搜索到真正的角色对象下的血量。
继续分析eax的来源得到+FC偏移,而ebx来源于00FE4648处call    005AEC20的返回值(如图)



file:///C:/Users/AKM/AppData/Local/YNote/data/qq4EBD6EA8DB709B20B5FA91D19DC75C0E/4f584b4a7d274bfe85b5ffb882e27bdc/4.png
而这个函数里我们可以得到一个遍历,这样去取角色对象并不是很方便,所以根据角色对象的特殊性,我们对ebx也就角色对象的起始地址进行扫描,得到了一个基地址(如图)



file:///C:/Users/AKM/AppData/Local/YNote/data/qq4EBD6EA8DB709B20B5FA91D19DC75C0E/8dfa064efb544e03b310ac3925f200b7/5.png
再代码断中查找所有常量,可以得到很多结果,这说明我们可以直接使用这个基地址(如图)



file:///C:/Users/AKM/AppData/Local/YNote/data/qq4EBD6EA8DB709B20B5FA91D19DC75C0E/1a61b4579c8748cea2544d12ae187f76/6.png
得到角色对象的公式候,只需要对角色对象下的属性一一解密并进行分析,并对照本地的角色属性值,就可以得到大部分属性偏移。



tt1985 发表于 2021-6-10 10:00:38

iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii:o
页: [1]
查看完整版本: 【天刀系列】角色对象与属性简单加密