对于这种FPS游戏来说,玩家的血量并不是很关键,不过想分析玩家对象内的其他信息,还是要从血量作为突破口的。
但是由于试驾场是很少有发包的,包括战车的攻击等等,所以只能通过正常匹配战斗进行扫描。又由于匹配模式中没有敌方单位不会乖乖的让我们去扫描血量,所以我们要以角色的对象为突破口。
前面的文章中有角色对象的分析,我们直接拿来使用。在角色的血量上下访问断点,游戏很快断下(如图)
由于访问代码很多,所以断下的位置可能不同。返回后继续向上分析可以的到一个数组(如图)
012FDE46处的and edi, dword ptr [ecx+edx*4]中edi始终为-1,所以只需要分析后面的数组即可。向上分析ecx可以直接得到基地址[1FC76AC]。
而继续分析edi的来源,在012FDE31 得到lea edx, [eax+eax*2],再经过add eax, 2AAD和and eax, 0FFF,就得到了数组序号的来源。
经过整理可以得到公式如下
[[Crossout.exe+0F876AC]+(ID&0FFF+2AAD)*C]+0BC 血量
[[Crossout.exe+0F876AC]+(ID&0FFF+2AAD)*C]+0C0 最大血量
[[Crossout.exe+0F876AC]+(ID&0FFF+2AAD)*C]+02B0 X
[[Crossout.exe+0F876AC]+(ID&0FFF+2AAD)*C]+02B4 Z
[[Crossout.exe+0F876AC]+(ID&0FFF+2AAD)*C]+02B8 Y
下访问断点时,不同的访问代码返回的位置也不同,不过最终得到的遍历代码都是相同的。