【明日方舟】0.7.27版修改思路【一】(无限生命+无限cost+全图放置+干员无敌)
本帖最后由 我是大哥陈 于 2019-5-13 12:48 编辑*修改有封号风险,使用需谨慎
工作原因,好久没上论坛了,FGO现在加了sign验证之后操作起来很麻烦(其实是不会)暂时放弃了。
最近发现这个游戏挺火的,下下来看了下,没有签名验证,没有加密没有混淆,比较适合新手用来练手,而且估计后续版本也会加固,所以能爽就赶快爽一下吧。
0.解包
U3D的游戏,老样子,把libil2cpp.so拖入IDA慢慢解析。
用Il2CppDumper打开libil2cpp.so和global-metadata.dat,把函数的地址找出来。
思路一:
1.无限生命
搜索关键字“health”、“hp”、“life”等,最后定位在一个函数“get_lifePoint()”上面,同时还看到下面有一个“get_maxLifePoint()”
那么思路就很明确了,我可以让get_lifePoint这个方法直接跳转到get_maxLifePoint上,这样的意思就是获取生命值的地方都会变成生命最大值,也会等于无敌了。
现在介绍跳转的计算方法,可以看到get_lifePoint的地址是0x1A26CC8,而get_maxLifePoint的地址是0x1A26BF0,小于get_lifePoint的地址,需要向上跳转。先在IDA里跳到这两个地址,右键选Rename,手动修改函数名,方便自己理解。
向上跳转的计算方法就是0x1A26CC8-0x1A26BF0=D8,因为一行是4个bytes所以要除以4,D8÷4=36,向上跳转需要+1,36+1=37,向上跳转需要用FFFFFF相减,即FFFFFF-37=FFFFC8就是跳转地址的OPCODE。
再在后面加上跳转命令B,B的OPCODE是EA,同时需要把地址倒序填写,得到最终的opcode是C8 FF FF EA,再加上BX LR即1E FF 2F E1,在IDA里验证一下:
修改前:
修改后:
验证没问题,用UE修改后拖入data\data\com.hypergryph.arknights\libs\里覆盖文件(需要root),省去了重新打包的时间,进入游戏后发现就算怪物跑到终点,生命值也不会扣除,修改成功。
2.无限cost
这个就更简单了,搜索过程中发现了get_cost()这个函数,八成就是花费了。但是没有找到类似Maxcost的函数。
玩游戏的时候我们知道最大cost是99,到了就不会再加了,那就直接手动赋值吧,跳转到0x1A273F8,直接给R0赋值成99:
修改前:
修改后:
进入游戏后,发现cost一直是99,干员随便放:
至此无限生命+无限cost就修改完了,愉快地进游戏玩耍,但事情没这么简单,第二天就被封号了!!!
看来是修改得有点暴力,直接改数值太容易被查出来了,成品也就先不放了。
下一篇将会介绍如何通过修改逻辑来达到同样目的。
下一篇:https://www.52pojie.cn/thread-954846-1-1.html 第二天就封好了xswl 那个计算跳转偏移的结果是对的,但是思路不太对
0x1A26CC8-0x1A26BF0=D8
因为B跳转指令后面的立即数是用24bit表示26bit数(arm指令4字节对齐的原因,所有后2bit可以省去),所以D8>>2就是D8/4=0x36
又因为arm处理器3级流水线的原因,PC不指向当前指令,指向+2个指令处,所以向上跳转得加2,所以0x36+2=0x38,然后计算补码,先将0x38-1,再用0xffffff去减,结果就是0xffffff-(0x38-1)=0xffffc8 谢谢楼主的分享,看看思路:lol 秀啊!!!!!!!!!!!!!!!! 本帖最后由 丹下樱 于 2019-5-13 12:17 编辑
大佬厉害啊 不玩这个游戏,但是感觉很有用,谢谢分享 是个狼人,现在大佬都这么玩的吗! ??楼主 我用了论坛的破解版方舟,现在一只担心被封号,已经过了24小时了……我的号是不是要没了, {:301_986:}{:301_986:}哈哈,封号就很灵性了 所以到底是用什么软件直接打开apk文件的。。。