分享一个 iOS 13.5 beta 3 以前免越狱的国行 Cellular 网络修复方案

背景

前几天 @Lakr233 的 Protein 被群里的暴躁老哥吐槽国行机器网络设置问题 ,于是 Lakr 就让我去看看连个锤子的实现,并把它集成到 Protein 里来做网络修复。

过程

对连个锤子简单分析可知,有两个核心类 AppWirelessDataUsageManager 和 PSAppDataUsagePolicyCache 用于管理 App 的网络权限,在 iOS 12 之后使用的是后者。

我们只需要加载特定的 PrivateFramework,然后执行相应的设置操作即可。

但这里有个问题,在 userland 去做这样的设置需要什么样的前提条件,可能是 uid 也可能是 ent,经过分析和实验发现核心问题在于 ent,我们只要给 App 签上如下的 ent 就可以操作私有类去设置 App 的网络权限了:

<key>com.apple.CommCenter.fine-grained</key>
<array>
    <string>spi</string>
    <string>phone</string>
    <string>identity</string>
    <string>data-usage</string>
    <string>data-allowed</string>
    <string>data-allowed-write</string>
</array>

设置方法也非常的直截了当:

[[c(PSAppDataUsagePolicyCache) sharedInstance] setUsagePoliciesForBundle:bundleId
                                               cellular:YES
                                               wifi:YES];

非越狱

越狱情况下可以轻易的给一个 binary 签上上面的 ent 来达到效果,非越狱则可以利用 Siguza 先前公布的 0day 结合 @ChiChou 大佬的签名脚本配合实现,iOS 13.4.5 beta 3 之前可食用。

项目在此:

3 Likes

@ 暴躁老哥 我们缺一个产品经理

啊这 我以为没人care Psychic Paper了呢 毕竟早就可以越狱了
这样的话https://github.com/Halo-Michael/Prometheus

1 Like

写的很乱不要打我(◐‿◑)

资瓷
紫薯布丁

1 Like

发现一个bug,ViewController.m第313行方法名错了,跟前面一个重复了,直接copy的吧^_^

没有重复 紫薯布丁

不是应该是这个吗:setAppCellularDataEnabled

啊这 好像是的

1 Like