目录

(失败记录)单机手游《最后战役X》修复飞天BUG:尝试改汇编指令

目录

(失败记录)单机手游《最后战役X》修复飞天BUG:尝试改汇编指令

赶码人

本文不是教程,下面是一次失败的记录,可能更像是日记吧,如果担心被误导,建议离开本文…(温馨提示)。

打算尝试用修改指令的方式实现(包括判断是否勾选飞天),不确定是否可以成功,至少今天这俩小时没成功。我是个汇编小白,慢慢尝试吧。

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

前面文章用frida临时实现了飞天,本文仍然接着这个系列往后写。

最后战役X(单机手游)连跳飞天思路点击进入查看全文>文章 赶码人 174 14 5

最后战役X,获取“飞天”选择框选中状态点击进入查看全文文章 赶码人 50 5 1

本系列第一篇文章末尾提到的frida持久化,可以参考这位大佬写的这篇文章,已经很详细,

https://i0.hdslb.com/bfs/article/card/8429dc24f7c6098a2594f7661c8ab9c7a3dd3fe4.png

对于修复这款游戏而言,安装完安装包之后再手动把js放到/data/local/tmp目录不太优雅,可以反编译dex,加几句代码把js资源释放到自己私有目录,比如/data/data/包名/。(理论可行,我没测试)

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

首先前面说过jumap里面的判断条件,无论咋nop,都飞不起来,具体给人物施加力的函数并不是在这个函数内部调用。这个地方*(_BYTE *)(v5 + 0x58) = 1,这里赋值为0,上面第18行又判断它是否为0,但是这个函数内部并没把这个值设置成0,所以大概是有某个函数(比如各种update函数)在“监视”这个值,发现是1则改成0,然后给角色施加一个向上的力。

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/7f990efe9a50c44b63dcc2ce18cced6eab3e8367.png@896w_584h_progressive.png

说白了就是0x58不能动,那咱指令往哪扩充?我想的是把33和34行干掉,因为4f8ddc这个函数总是和if(!xx)成对频繁出现,感觉和异常处理有关,并且这个异常好像很难触发。

把0x58设置成1的指令:

(修改速度就照着这两行改写,)紧接着的if和4f8ddc的指令:

1
2
3
4
5
.text:0000000000720020                 LDR             X20, [X19,#0xA0]
.text:0000000000720024                 LDR             X19, [X19,#0xB0]
.text:0000000000720028                 CBNZ            X20, loc_720034
.text:000000000072002C                 MOV             X0, XZR
.text:0000000000720030                 BL              sub_4F8DDC

因为后面指令还用到X20和X19,前两个LDR要保留,并且需要调整顺序(避免X20被影响),

CBNZ给NOP掉,然后MOV和BL改成MOV和STR:

1
2
3
4
5
.text:0000000000720020                 MOV             W8, #0x41200000
.text:0000000000720024                 STR             W8, [X20,#0x6C]
.text:0000000000720028                 NOP
.text:000000000072002C                 LDR             X20, [X19,#0xA0]
.text:0000000000720030                 LDR             X19, [X19,#0xB0]

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/4a8b93cefc02edede6c3483eb7417477f80c5ae3.png@545w_249h_progressive.png

然后就失败了,没效果啊(速度达不到10),我也有些疑惑,难不成修改这个值的时机太晚了?明天再看看吧。