从游戏学习逆向工程:OW的ECS架构

从知乎借来一张图

OW的ECS模式是,在entity_admin的地方,可以获取到游戏的所有实体。每一个实体都有不同的组件。从组件的地址可以读到相关内容。守望先锋的反作弊中,应用了动态加密,对组件的读取位置进行了加密保护,需要decrypt后才能获得。

对于常见的组件,例如健康/可见性 /技能CD/英雄名称/位置等等,全部都有对应的组件ID。我们需要在entity_admin处,首先获得到该实体的ComponentParent,和LinkParent,再将它和对应的组件ID传入相应的解密函数,即可获得读取信息的地址。

值得注意的是,某些内容是多重加密的,例如Visbility,Outline和Skill。例如我们在解密得到VisBase之后,通过读取+0xA0和+0x98两个位置的uint64_t值,可以获得用来解密Vis的两个key。传入decryptVis函数之后,即可获得是否可见的布尔值。

当然,我们在entity_admin获得到的实体,是包含玩家/可互动实体/场景(如地板)等等在内。对于不同种类的实体,所拥有的component当然也不同。借此我们可以进行筛选做一个filter,只挑选出玩家。这是非常简单的,如我们只选择具有health_component的实体,就可以过滤出玩家/炮台等。将这些Push进我们的entities Vector就可以了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值