好友
阅读权限20
听众
最后登录1970-1-1
|
我是大哥陈
发表于 2019-5-13 12:45
本帖最后由 我是大哥陈 于 2019-8-28 12:37 编辑
上一篇:https://www.52pojie.cn/thread-954800-1-1.html
上一篇介绍了无限生命和无限cost的初次实现,但悲剧的是第二天就被封号了,这次来仔细搞一下。
*本篇是本人亲测安全运行7天且未被封号后放出的,请谨慎使用,如被封号后果自负哦。
2019.8.28
-更新0752版,去掉了无限生命,保留无敌、无限cost、全图放置、可重复放置干员。
-再次修改了无敌的判定为get_side,感谢@NewsJai 的帖子
2019.7.15
-修改了敌我判定逻辑,不再根据SP判断(看到大家反馈新本带SP的BOSS打不死),改为用get_isPlayerCharacter(感谢198楼老哥的提示),现在敌我判断应该正常了。
-关于倍攻倍防的问题,我暂时没找到好的修改方法,另一位兄弟的旧的倍攻倍防修改版加固了,没法比对,只能等他更新了。
2019.7.9
-发现居然还有人存活,那就更新一下最新版吧,去掉了无限生命,也就是漏怪的话基地会掉血,以降低封号概率。下载地址在最底部。
2019.5.16.
-第9天,官服已挂,谨慎下载。
2019.5.15.
-已更新0728的修改版成品,下载地址在底部。
1.无限生命
打开IDA,在get_lifePoint()上按X寻找调用该方法的地方,逐一分析
发现OnEnemyReachedExit这个函数在0x01A2DAD8处调用了get_lifePoint(),看起来像是个突破口,手动填补前后范围内的函数后进行分析:
意思很明确了,在敌人到达出口的时候,会获取当前的lifepoint,如果敌人不等于0,就获取敌人会降低多少lifepoint,然后相减,再调用set_lifePoint设置新的生命值,完成扣除生命的操作。
这里修改的思路也很简单,将:
00 10 46 E0 SUB R1, R6, R0
改成
06 10 A0 E1 MOV R1,R6
即直接把当前的lifepoint赋给新的生命值,不做相减操作。
进入游戏测试,发现敌人到达终点后同样不掉血,修改成功。
2.无限cost
同样,在IDA上逐个查看调用get_cost()的地方并手动解析,最后发现两处感兴趣的地方:名为get_readyToSpawn()和SpawnCharacterOrToken的函数调用了它,先看get_readyToSpawn:
这是一个bool型函数,返回的值应该就是判断每个干员的cost是否足够,不够的话会显示黑色,够的话才会高亮显示,所以改成一直返回1应该就好。直接暴力修改圈出来的两处,强行使其跳转:
修改前:
.text:0207171C 10 00 00 BA BLT loc_2071764
.text:02071764 05 00 A0 E1 MOV R0, R5
修改后:
text:0207171C 10 00 00 EA B loc_2071764
.text:02071764 01 00 A0 E3 MOV R0, #1
再来看SpawnCharacterOrToken:
经过简单分析,应该是在放置干员的时候会作出判断,如果花费大于目前cost的话就放置失败,否则就放置成功,以R7是否等于0来判断,R7等于0的话就算放置成功。
于是作出修改,将0赋值给R7即可,将:
01 70 00 C3 MOVGT R7, #1
改成
00 70 A0 E3 MOV R7, #0
进入游戏后测试,发现即时cost不够也能放置干员,cost会正常扣除。
重要的是,账号已经安全运行5天,暂时未被封号!这也是我其实之前就做出来了,现在才发出来的原因。我们修改的宗旨安全第一嘛。
3.全图放置
在搜索过程中还发现很多名为checkbuildable的函数:
在IDA里逐个分析后,发现这些函数最后都指向同一个地址为0x205DA8C的不知名函数:
不管三七二十一,先改成直接返回1试试看再说:
将红圈处直接改为:
01 00 A0 E3 MOV R0, #1
进入游戏后发现。。。所有干员都能全地形放置了(飞龙骑脸怎么输):
同时还有一个意外发现,就是干员撤退或死亡后,重新放置的话卡片还在,也就是说可以重复放置干员:
敌人:
4.干员无敌
光是老家无敌也不行啊,我们没法愉快滴刷剿灭400杀,因为干员不是无敌的QvQ
这块比较麻烦,因为测试下来,所有人的扣血判定都是用的同一个函数,所以如果不区分敌我的话,所有人都会变成无敌。
而游戏里又没有区分敌我的判定,只能自己找出己方和敌方有哪些不同之处,再进行区分。
经过我两天的测试,参考了贴吧别人的拆包数据:https://tieba.baidu.com/p/6124319585
从移动速度、HP恢复、甚至是阻挡数量来判断,都无法作出区分,最后在maxSp,也就最大能量值上找到了突破口。
也就是说,敌人是没有能量的,而我方干员基本都是有能量条的(辣鸡干员除外),所以我们修改成有能量条的角色都无敌就行了。
无敌的判定有很多种,这里我从get_isUndeadable这个函数下手:
在IDA中找到该函数,发现只有一处SetHpInternal调用了了它:
分析结果:先获取get_isUndeadable的值,如果为0,则S16=0.0,否则S16=1.0。很明显,这里的S16就是血量,如果对象不是不死的,则血量改为0,如果对象是不死的,则将血量改为1。
修改思路:改为获取get_maxSp(),如果最大能量大于0,则将血量改为1,否则的话血量为0,这样就从能量上将敌我区分开来,有能量的人变为无敌,没能量的人除外。
修改后:
关于如何取得跳转地址的OPCODE,在上一篇已经作了介绍,这里就不细说了。
需要说明的是这里的给浮点寄存器S16赋值的时候,不像给通用寄存器赋值那么简单,其中0.0小数是存在函数尾部,并根据偏移量调用的:
而1.0这个小数可以直接用:
00 8A B7 EE VMOV.F32 S16, #1.0
原样复制OPCODE来实现。
最后进游戏测试,发现有能量的角色的HP只会将为1而不会死亡:
于是干员无敌就达成了,剿灭400杀达成!
但是还有个遗留问题,如果以后出现了有SP的敌人,那该敌人也会无敌,所以如果大家发现更好的突破口可以告诉我哈。
关于根据Cost来判断,我已经试过了,我也以为干员都是有cost的敌人没有,但是测试结果并不是这样。。。测试下来发现敌人的cost也是大于0的,区分不出来,阻挡数量也是如此。
5.关于加速
有人问游戏自带的2倍速太慢了能不能加速,实际是可以的,可以自行修改里面的timescale来达到修改倍速的效果,这个也是U3D自带的功能,具体可以百度U3D的相关文档。
而且游戏里其实有3倍速的选项,但是目前没开放,不知道什么原因。
但是通过抓包发现,每次战斗后都会上传战斗时间,其他的战斗数据都加密了不知道还上传了哪些,所以战斗时间如果太短的话很可能就直接被封号了,故没做修改。
最后附上成品so文件,so使用方法(官服和bilibili服通用):
手机:
Root用户可以直接替换data\data\com.hypergryph.arknights\libs下的同名文件即可。
非Root用户需要将该so放入APK中的lib\armeabi-v7a下替换原文件,再自己重新签名安装。
模拟器:
模拟器比较特殊,因为会用x86的运行库,所以需要自己改。
Root用户:手动打开原版apk,复制其中的lib\armeabi-v7a到data\data\com.hypergryph.arknights\libs下覆盖同名文件;再用该so替换。
非Root用户:手动打开原版apk,用该so替换其中的lib\armeabi-v7a,然后删除其中的lib\x86文件夹,重新签名安装。
顺便发个成品直装版APK:
官服版(已更新2019.5.14):
B服版:
2019.5.15更新0728版:
单独so文件:
单独so文件.0728.(官服B服通用).txt
(66 Bytes, 下载次数: 200)
官服:
修改版APK.0728.(官服).txt
(66 Bytes, 下载次数: 635)
B服:
修改版APK.0728.(B服) .txt
(66 Bytes, 下载次数: 293)
2019.7.9更新0731版:
单独so文件:
单独so文件.0731.(官服B服通用).txt
(66 Bytes, 下载次数: 65)
官服:
修改版APK.0731.(官服).txt
(66 Bytes, 下载次数: 158)
B服:
修改版APK.0731.(B服) .txt
(66 Bytes, 下载次数: 74)
单独so文件:
单独so文件.0731.(官服B服通用).20190715.txt
(66 Bytes, 下载次数: 145)
官服:
修改版APK.0731.(官服) .20190715.txt
(66 Bytes, 下载次数: 488)
B服:
修改版APK.0731.(B服) .20190715.txt
(66 Bytes, 下载次数: 211)
2019.8.28更新0752版:
单独so文件:
单独so文件.0752.(官服B服通用).txt
(71 Bytes, 下载次数: 188)
官服:
修改版APK.0752.(官服).txt
(71 Bytes, 下载次数: 480)
B服:
修改版APK.0752.(B服).txt
(71 Bytes, 下载次数: 210)
|
-
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|