Sui
Sui copied to clipboard
BinderWrapper 遇到 IBinder.FLAG_ONEWAY 导致鉴权错误
该 Demo 的功能是设置 MIUI 的进程白名单,成功时会输出如下日志:
D/ProcessManager: update CL:[com.netease.cloudmusic]
使用 Shizuku 时功能正常,输出如下日志:
D/Service: transact: uid=10527, descriptor=miui.IProcessManager, code=8
使用 Sui 时发生鉴权错误,找到如下日志:
W/Service: Permission Denial: transactRemote from pid=0 is not an attached client
已在多台设备上进行测试,均产生此问题。
定位到打日志的位置,发现该错误由 clientRecord == null
引起,向上继续定位到 ClientManager#findClient(int uid, int pid)
:
public ClientRecord findClient(int uid, int pid) {
for (ClientRecord clientRecord : clientRecords) {
if (clientRecord.pid == pid && clientRecord.uid == uid) {
return clientRecord;
}
}
return null;
}
可能是由于 oneway 导致此处 获取到的 pid 为 0,导致没有匹配到正确的 clientRecord
不知道我的猜想是否正确,还请开发者帮忙看看。
试试 https://github.com/RikkaApps/Sui/runs/5954086487
正常了,非常感谢!