为啥不利用修改 apk 的 manifest 来控制软件行为?

2018-01-17 17:07:34 +08:00
 s82kd92l
现有控制软件行为的方案,绿守 /黑域 /写轮眼 /xposed 无一不是入侵式的,对 root/adb 要求很高效果却不完美,为啥没大神做基于 manifest 编辑+自签名打包来做到免 root 限制流氓呢?

Manifest 就像是 apk 和 android 系统签订的一份合约, 其内容完全决定了 android 沙盒如何限制 apk 的行为。Google 目前的做法是让用户无条件接受这份合约( 6.0 之前)或者只有极小协商空间(就是 6.0 的可选权限)。如果能修改 manifest,用户可以达到这些效果(从简单到难):
1. 修改 targetSdkVersion 很多新系统对流氓的控制,流氓都会通过 target 老旧的 sdk 来应付,如果能自己改 targetSdkVersion,流氓们只能在 8.1 下面乖乖睡觉,在 6.0 下面乖乖把部分敏感权限选择权交给用户
2. 直接删除 /添加权限申明。6.0 下面的权限只有部分是可选的,通过修改 manifest,所有权限用户都能控制
3. 直接修改 /删除四大组件的申明 让 broadcastreceiver 再也收不到“开机 /网络变更 /摄像头开启”之类的唤醒,直接禁用 service/content provider, 或者使其无法向第三方开放。

如此以来,再也不需要在运行时控制自启动 /切断唤醒路径, 因为新合约让流氓无路可走。还有 Oreo 对 bound service/content provider 没有约束的情况,manifest 也可以弥补。只要限制得当,这个沙盒能比 iOS 更加给力。
改完后重新打包,尽量做到每个 apk 单独签名。还有就是最好把 apk 的原始签名加入 manifest 中,这样升级的时候可防止下载到一个已经被人动过手脚的 apk。

如果要做这种修改软件,界面可以像写轮眼那样非常清晰明了。如果能借绿色守护的处方语法就更好了,那样小白就可以利用网上现成的处方来决定哪些权限 /组建可删可改以及怎么改。免 root,流程简单,效果超过现有方案,为啥没人做呢?
14844 次点击
所在节点    Android
65 条回复
imcczy
2018-01-19 16:27:02 +08:00
@s82kd92l #58 另外补充一点,应用内部是可以通过反射调用系统 API 的,这个就涉及到 BInder 本身的机制说起来太麻烦,其实就是反射的对象是一个本地代理对象。其他 App 的代码话,只要能够获取到对应的 Application 对象就可以了,或者直接手动加载 dex。
yuriko
2018-01-19 18:12:40 +08:00
@s82kd92l 没错啊,我说的是跨应用反射,所以取到的代码当然是跑在自己进程里的没问题。如果 DexLoader 能找到对应的代码,反射一份说不定可以跑啊。
s82kd92l
2018-01-19 21:07:36 +08:00
@yuriko 你要是能做到跨应用反射,去谷歌那领几百万美元奖金绝对没问题。
yuriko
2018-01-21 10:59:04 +08:00
@s82kd92l 如果你不信我也没办法,我现在就是用的这反射去操作别的 APK 实现 UI 耦合剥离,APK1 去加载 APK2 里的 UI 组件,这样就不用同时更新两个 APK 了的意思。

@imcczy 基本一个意思,能拿到对应的 Application 或者 DexLoader 相关就能加载对应的代码,反射可以随便玩。我这边用的 SystemUID 和 platform 的签名,不知道这方面有什么特别的限制么?
s82kd92l
2018-01-21 12:41:37 +08:00
@yuriko @imcczy 你们是说拿到别人的 Application Context,还是说在 PackageManager 里面的 ApplicationInfo ? SystemUID,你是说你写的是随系统安装的 priv-app 吗?

稍微警醒点的 app 应该不会随便把 context 拱手送人,因为这就菊花外漏任人宰割了。当然很多第三方 sdk 可能会强行索取 context 不给就罢工,然后 sdk 可能偷偷把 context 走私出去?可是 android 系统级服务又不是傻子不会用调用第三方 sdk.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/423679

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX