目录

最后战役X,获取“飞天”选择框选中状态

目录

最后战役X,获取“飞天”选择框选中状态

赶码人

为了避免读者浪费时间,提前声明:本文仅适用于《最后战役X》这款单机安卓手游。(64位)

https://i0.hdslb.com/bfs/article/02db465212d3c374a43c60fa2625cc1caeaab796.png

搜0搜1也能找到选择框选中状态,但是既然当前已经得到了so的符号,肯定有更快更优雅的办法,

找选择框,最开始想的是搜checkbox,搜不到,那就翻代码,把看着像游戏作者写的函数,都大概浏览一下,比如uidm(猜测是“ui代码”)开头的函数,men开头的函数,诸如此类,

unity游戏,xxxxupdate函数很重要,会很频繁的被调用(比如unity中的update函数每帧都会调用一次),带有update的函数多看看,在men$$FixedUpdate函数能发现一个名字带有UI和toggle的函数,那么就可以积累了,下次再想找选择框,除了搜checkbox,还可以搜toggle,找组件,就搜UI。

https://i0.hdslb.com/bfs/article/0743084840d41251e6d22ae6b50062608353d0e3.png@942w_314h_progressive.png

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/2bbbf36d3781b42fa8e99139b924bcf70f288ee7.png

之前这篇文章提到过,dump.cs可以直接看到偏移。上图那个注释部分就是根据这个文件写出来的。另外,men是类,FiexdUpdate是这个类的一个方法,通常这种情况,逆向视角看到的参数一,就表示调用这个方法的对象的地址,所以这里a1就是一个men类的实例,0x20的位置就是uidm对象,以此类推,v7是个Toggle对象,名字是rjbd,猜测是“人机不动”。

接下来,双击这个UnityEngine_UI_Toggle__get_isOn,发现获取状态很简单,这个状态就存储在Toggle对象地址的0xF8这个偏移的位置。

https://i0.hdslb.com/bfs/article/e89b1c182cef59562721e759930ca72546a7e5db.png@710w_110h_progressive.png

https://i0.hdslb.com/bfs/article/02db465212d3c374a43c60fa2625cc1caeaab796.png

咱要找的不是“人机不动”,而是要找飞天的选择框,直接对着UnityEngine_UI_Toggle__get_isOn按X,

https://i0.hdslb.com/bfs/article/6d6eaf24032673d1f8fb6f93eac9e24abaff25e4.png@942w_344h_progressive.png

有个move的函数,看着就像是和飞天判断有点关系,过去看看:

https://i0.hdslb.com/bfs/article/baf1feb5e005ba45c05dfee3ab16f46744893110.png@942w_686h_progressive.png

那么这里就是游戏作者的飞天想法了,看看都做了啥:UnityEngine_Rigidbody__set_useGravity设置重力为0、然后设置了个啥属性,用了UnityEngine_Rigidbody__set_isKinematic这个函数,这个函数有啥功能,我不知道。不扯这些了,赶紧搞到飞天选择框选中状态的基址偏移。

接下来就差a1了,刚才说了,a1可能就是个uidm对象的地址,我没学过unity,但我感觉似乎每个类都有Start方法,百度搜了一下:当Update函数第一次被调用前会调用Start函数

那么作用就类似于构造函数吧,去uidm$$Start函数看看:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/88e587a54c03c85e2861c68e0dda8a7e7fe32342.png@942w_362h_progressive.png

注意第91行,这是bss段的数据,libil2cpp.so+A8BDD0,然后93行,窝草,把uidm对象地址直接就放到了[[[libil2cpp.so+A8BDD0]+0xB8]],这种难度,我不禁想到了这个视频:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/f1638727fac710e0bc3933196363fa95dfa44b22-20220206102003826.png

那么飞天选中状态的基址偏移就有了:[[[[libil2cpp.so+A8BDD0]+0xB8]]+0x68 ]+ 0xf8

https://i0.hdslb.com/bfs/article/1a74800ed6d0e0dad2c34c7ca440d1a894ba3501.png@942w_567h_progressive.png