吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11331|回复: 56
收起左侧

[Android 原创] 解除某Unity游戏的30帧帧率限制

  [复制链接]
ColdThunder11 发表于 2020-9-30 21:57
本帖最后由 ColdThunder11 于 2020-10-1 08:28 编辑

!!!本教程仅供技术交流之用,任何对软件的修改都有可能造成封号后果,请须知!!!
技术交流贴不要引战!
本人菜鸡一枚,如有错误望指正。
Tips:本文章里的所有注入操作均基于Magisk和Riru,因为使用这种方式进行注入不易被反作弊检测,基本无需特别对抗反作弊。
最近某基于Unity的手游上线,在IOS上是支持60帧的,但是在安卓上或许是出于稳定性考虑,并没有开放60帧。既然是Unity制作的,安卓大概率也有设置帧率的地方(事实上就是,通过手动修改配置文件也可以解锁),只是UI给隐藏了,那么干就完事了。
首先解包观察lib,确定是使用il2cpp模式编译的,且使用的某大厂的加固方案。但是目前为止几乎所有的il2cpp加固方案都防止不了内存dump,二话不说先搞下来一份libil2cpp.so。
接下来要知道Unity中如何设置目标帧率,Unity中通过修改Application.targetFrameRate来修改帧率上限。使用与该游戏相同的Unity版本写一个test.cs脚本,在Start中写入Application.targetFrameRate = 60;,挂到默认相机上。使用il2cpp模式编译安卓的安装包,编译完成后使用il2cppdumper获取有关信息,使用ghidra(当然喜欢IDA也可以)打开libil2cpp.so文件,使用脚本完成命名后定位到Start函数,发现其进行了一个如下的调用:
clipboard.png
跟踪进入函数内,发现里面有一个非常明显的字符串。
clipboard2.png
在从游戏中dump出来的libil2cpp.so中搜索该字符串,很容易从引用中定位到该函数(这里的函数已经经过重命名)。
clipboard3.png
clipboard4.png
这里的函数体与我们自己编译的有一定差距,估计是热更新插件或者反作弊对其进行了修改,不过问题不大,只要知道它是实现这个功能的就行了。找到函数位置后应该可以直接尝试注入程序调用该函数来修改目标帧率,不过我们并不知道合适的调用时机,因此在这里我不使用这种方案。我们查看该函数的全部引用,还好个数不多。逐个尝试进行注入修改来找到可能是加载配置文件的函数(我似乎没有找到AArch64下好用的基于地址进行inline hook的框架,如果有老哥知道欢迎推荐我一个),最终确认为这里。
clipboard5.png
为了省事,我直接修改字节码使其始终设置目标帧率为60帧,主要代码如下。
[C] 纯文本查看 复制代码
unsigned long hack_addr = base_addr + 0x03c771a4;
unsigned char* tmp = (unsigned char*)(void*)hack_addr;
if(tmp[1]==0x03){
    void* page_start = (void*)(hack_addr - hack_addr % PAGE_SIZE);
    if (-1 == mprotect(page_start, PAGE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC)) {
        LOGW("mprotect failed(%d)", errno);
        return NULL;
    }
    tmp[0]=0xe1;
    tmp[1]=0x0f;
    tmp[2]=0x1e;
    tmp[3]=0x32;
    if (-1 == mprotect(page_start, PAGE_SIZE, PROT_READ | PROT_EXEC)) {
        LOGW("mprotect failed(%d)", errno);
        return NULL;
    }
}

根据Riru-ModuleTemplate编写Riru模块对游戏进行注入修改,注意修改完成后要还原内存为rx,否则可能被检测到游戏异常。
上机测试,成功解锁60帧。
clipboard6.png

----------
更新:游戏现已开放60帧

免费评分

参与人数 13吾爱币 +13 热心值 +12 收起 理由
睡懒觉的猫 + 1 + 1 谢谢@Thanks!
gaoyonggang66 + 1 + 1 热心回复!
Feifei66677122 + 1 + 1 热心回复!
叁拾 + 1 谢谢@Thanks!
56598006 + 1 用心讨论,共获提升!
Shimmer + 1 + 1 可惜这游戏现在开了60.。。但整体画面还是糊的
CrazyNut + 3 + 1 膜拜大佬
AlanSilence + 1 + 1 谢谢@Thanks!
内瑟斯 + 1 + 1 牛逼
asq56747277 + 1 + 1 谢谢@Thanks!
chinawolf2000 + 1 + 1 热心回复!
st君 + 1 谢谢@Thanks!
19183311119 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

1102617448 发表于 2020-10-1 13:09
原神吧,感觉挺无聊的,我pc上玩两天了,感觉游戏背景和任务系统都不咋样,就是美工做的不错。
虽然这游戏是全平台的,但是手机上玩很点按钮麻烦,不如pc上体验好。
alphires 发表于 2020-10-1 12:31
XYLT2020 发表于 2020-10-1 00:48
话说为什么要多写一些代码来加以限制呢?

市场啊,并不是所有用户都使用高端机型,应该说大部分用户都是使用的中低端机器,但很明显他们不该被放弃。一般来说游戏开发shader都要分三个层次来适配机型,这种适配除了专门的硬件合作产商之外都不是很精细,也就不那么具有适配针对性;再一点,有的机器的确满足条件,但是耗电也是需要考虑到的问题,如果用户在充电时运行程序(事实上大多数时候都是这样),那么机器性能效率就得另作考虑,这些以及更多都是限定的原因。
jian19950220 发表于 2020-9-30 21:59
mrbones1979 发表于 2020-9-30 22:02
难道是原声?
七度空间 发表于 2020-9-30 22:25
我也是猜原神的
秋雨凉 发表于 2020-9-30 22:35
这说的是原神吧?
19183311119 发表于 2020-9-30 22:43
谢谢大佬分享
st君 发表于 2020-9-30 23:07
大佬66666
然悟星陨 发表于 2020-9-30 23:08
给真正的大佬敬礼,希望大佬看看pc改键能不能实现
雾都孤尔 发表于 2020-9-30 23:12
同样希望能改改PC版的,谢谢!
XYLT2020 发表于 2020-10-1 00:48
话说为什么要多写一些代码来加以限制呢?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 13:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表