(失败记录)单机手游《最后战役X》修复飞天BUG:尝试改汇编指令
(失败记录)单机手游《最后战役X》修复飞天BUG:尝试改汇编指令
本文不是教程,下面是一次失败的记录,可能更像是日记吧,如果担心被误导,建议离开本文…(温馨提示)。
打算尝试用修改指令的方式实现(包括判断是否勾选飞天),不确定是否可以成功,至少今天这俩小时没成功。我是个汇编小白,慢慢尝试吧。
前面文章用frida临时实现了飞天,本文仍然接着这个系列往后写。
最后战役X(单机手游)连跳飞天思路点击进入查看全文>文章 赶码人 174 14 5
最后战役X,获取“飞天”选择框选中状态点击进入查看全文文章 赶码人 50 5 1
本系列第一篇文章末尾提到的frida持久化,可以参考这位大佬写的这篇文章,已经很详细,
对于修复这款游戏而言,安装完安装包之后再手动把js放到/data/local/tmp目录不太优雅,可以反编译dex,加几句代码把js资源释放到自己私有目录,比如/data/data/包名/。(理论可行,我没测试)
首先前面说过jumap里面的判断条件,无论咋nop,都飞不起来,具体给人物施加力的函数并不是在这个函数内部调用。这个地方*(_BYTE *)(v5 + 0x58) = 1,这里赋值为0,上面第18行又判断它是否为0,但是这个函数内部并没把这个值设置成0,所以大概是有某个函数(比如各种update函数)在“监视”这个值,发现是1则改成0,然后给角色施加一个向上的力。
说白了就是0x58不能动,那咱指令往哪扩充?我想的是把33和34行干掉,因为4f8ddc这个函数总是和if(!xx)成对频繁出现,感觉和异常处理有关,并且这个异常好像很难触发。
把0x58设置成1的指令:
(修改速度就照着这两行改写,)紧接着的if和4f8ddc的指令:
|
|
因为后面指令还用到X20和X19,前两个LDR要保留,并且需要调整顺序(避免X20被影响),
CBNZ给NOP掉,然后MOV和BL改成MOV和STR:
|
|
然后就失败了,没效果啊(速度达不到10),我也有些疑惑,难不成修改这个值的时机太晚了?明天再看看吧。