为啥不利用修改 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,流程简单,效果超过现有方案,为啥没人做呢?
10013 次点击
所在节点    Android
65 条回复
honeycomb
2018-01-17 21:36:54 +08:00
@xingda920813

谢谢!

我觉得也是,其它 appops 项目的也都是这样,在最后做一次兜底,如果有什么高级别 target SDK 新增的限制会在前面。
s82kd92l
2018-01-17 21:39:08 +08:00
@zjb861107 开源即可
skylancer
2018-01-17 21:47:00 +08:00
@s82kd92l 都来用 xposed 治理了我为什么还要用修改 manifest 来 revoke 权限呢,事实上 Lucky Patcher 也是利用了 art
cache 修改来覆盖 manifeat 的。签名常态都要靠 xposed 来欺骗,我为什么不用 xposed 插件来 revoke app 权限? 所以你一切想法就是不合实际的脱裤子放屁
skylancer
2018-01-17 21:47:18 +08:00
fest.. 拼写错了
manhere
2018-01-17 23:36:40 +08:00
my android tools 就是这种工具啊
fan123199
2018-01-18 00:09:11 +08:00
权限的话,如果原来 apptarget 小于 26,那么应该是没适配,改了 target 一样跑不起来。
DioV
2018-01-18 01:49:58 +08:00
别的不说,对于一般用户来说修改权限带来的直接影响就是应用的无法使用。因为代码对于用户是一个黑盒的状态,要像修改 /关闭权限而不影响使用几乎是不可能实现的。
windflyer
2018-01-18 07:21:53 +08:00
补充一点。

如果直接在 AndroidManifest.xml 里禁用(我猜是删除掉声明),app 即使可以启动,但可能会有未被捕获的异常抛出,导致崩溃。
huclengyue
2018-01-18 08:40:00 +08:00
@s82kd92l java 有反射,禁用也可以拿到,你说的那些,禁用了都可以拿到就是麻烦点
lackywind
2018-01-18 09:43:41 +08:00
说了这么多,或许你需要一份源码自己定制系统吧
find2bHusky
2018-01-18 10:14:12 +08:00
异想天开
honeycomb
2018-01-18 10:48:22 +08:00
@huclengyue 今天有个新闻说 P 可能会进一步限制(包括通过反射)访问私有 API
s82kd92l
2018-01-18 11:19:16 +08:00
@huclengyue @honeycomb 获取签名的函数是通过 IBinder 在 ActivityMangerService 的系统进程中实现的,java 反射怎么可能穿越进程甚至穿越不同 UID 呢?
honeycomb
2018-01-18 12:30:10 +08:00
@s82kd92l 应该不是同一件事。今天的新闻内容是说 aosp 出了几个 commit,进一步阻止使用源码里被 hide 注解掉的方法(目前有一些可以通过反射调用)。
yuriko
2018-01-18 13:28:02 +08:00
@s82kd92l 我用反射取到过别的 apk 的代码,取决于 dexloader 的逻辑,我觉得顺着这个上去应该有办法?
yingfengi
2018-01-18 21:23:20 +08:00
my android tools 是个好东西
有个论坛,一个网友搞的,bbs.letitfly.me 应该是这个链接?
或者我的友链里面找找。
imcczy
2018-01-19 01:51:11 +08:00
楼主应该是没有了解过 Android 应用安全以及 Android 系统安全这些,想的太简单了,牵一发而动全身……而且这本身就是一个攻防博弈的过程,不存在一劳永逸的方法。楼主的方法可能对小厂的应用有用,大厂的想都别想…
s82kd92l
2018-01-19 15:18:13 +08:00
@skylancer 试了试改高德地图,配合这个补丁 https://github.com/Lanchon/haystack,有效运行。

@yuriko 反射只能对自身进程有效,哪怕是对同一个 app 下的另一个进程都无效,更何况是对不同 UID 下的进程。

@imcczy 应用安全 apk 加壳我不熟,但系统安全,包括 linux 内核 /selinux/binder/permission 机制我都很熟,aosp 各种系统服务源代码也没少看。


还有最近有了免 root 的 xposed 的方案:https://github.com/haygcao/VAExposed,这个是一个薄容器,里面甚至自带签名伪造功能,无需 xposed: https://github.com/haygcao/VAExposed/blob/master/VirtualApp/lib/src/main/java/com/lody/virtual/server/pm/parser/PackageParserEx.java#L53
当然,这个东西既然与 apk 本身运行与同一个进程中,那么就容易利用反射来针对。
s82kd92l
2018-01-19 15:29:08 +08:00
imcczy
2018-01-19 16:04:48 +08:00
@s82kd92l #58 既然你接触过这些那也应该了解你的方法只对部分应用有效嘛。。你提到的方法,以及类似 VA 这样的沙盒这块学术界目前已经有非常多的研究了,其实就是权限隔离,方法五花八门,但是我目前还没有看到比较好的能用实际运用的方案。主要是,修改应用以及签名欺骗这些太容易被针对了。

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

https://www.v2ex.com/t/423679

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

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

© 2021 V2EX