关于添加 android:sharedUserId="android.uid.system"方案,有偿寻求协助

2018-12-06 22:20:26 +08:00
 canrom7
目前小弟厂里有需求,给我们自己的应用需要静默安装权限,通过了解有两种方式,第一是 root、 第二就是通过系统签名在 AndroidManifest 中添加 android:sharedUserId="android.uid.system" 标签,可以获取隐藏系统 API 安装权限。
第一中 root 方案直接被领导否掉了,只能用第二条。
就是通过系统签名安装带有 uid.system 的应用,一开始用源码中的签名文件签名在模拟器上安装成功,并且完美实现需求。
不料后面在手机真机上运行时却安装不上,报错提示:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
后来查了 android:sharedUserId 相关机制,根据这个博客 https://blog.csdn.net/jiangwei0910410003/article/details/51316688
结论:Android 中是不允许相同的 uid 的不同签名的应用。
鉴于我们无法拿到手机 ROM 厂商的签名,所以小弟只能另辟蹊径,新的思路就是先 ROOT 手机,然后提取手机中的 services.odex 文件反编译成 smali 之后修改校验签名的方法,然后重新打包,push 到手机里,破坏签名校验机制,然后移除 ROOT。

但是本人一直从事应用层开发,反编译打包等只知皮毛,不能掌握,所以希望在站内找一位对这个领域熟练的朋友帮助完成;看过检验签名部分的源码,推断可行。

文笔不行,流水账,抱歉了。
协助完成反编译打包 push 手机中,暂定感谢费 600
手机系统为 6.0

VX 同 ID
16232 次点击
所在节点    Android
41 条回复
liuyanjun0826
2018-12-07 09:26:45 +08:00
@canrom7 hash 懂吗?
liuyanjun0826
2018-12-07 09:27:52 +08:00
你这直接百度就可以,发 V2EX 什么鬼
xylophone21
2018-12-07 09:36:04 +08:00
看起来你是希望先 root,然后出厂的时候移除 root,但仍保留自己的应用能静默安装。

有没有想过这样每台的交付都会很麻烦。

另外,可以尝试一下自己打包一个只能 pm install 的 su 进去,并且执行前校验来源,不想从头做的话,拿着 su 的代码去改。
CodingPuppy
2018-12-07 09:47:59 +08:00
问 rom 平台要签名吧,要不就 root。
rumengzhenxing
2018-12-07 09:49:26 +08:00
root
canrom7
2018-12-07 09:58:46 +08:00
@iAcn 两个目录都放了,带上 android.uid.system 重启后还是无法安装,不带 android.uid.system 重启后安装上了,但是没有静默 ins 的权限
liuyanjun0826
2018-12-07 10:00:49 +08:00
傻逼啊,还是穷疯了,手机又不是土豆,你们在那胡说什么呢😊
gam2046
2018-12-07 10:04:38 +08:00
@canrom7 正统方法,寻找 OEM 方,请求将你的应用签署 platforms 或 system 签名即可。相比较这是最不折腾的方案。具有签名后,不要求预装,即使后期用户自行安装一样具有该权限。
LeungV2
2018-12-07 10:10:20 +08:00
前几天客户网上下的一个 APK 也是签名相同的问题不能安装到我们的 ROM,然后拿签名文件签一下就 OK
canrom7
2018-12-07 10:14:28 +08:00
@LeungV2 方便透露一下那个厂的吗 哥们
canrom7
2018-12-07 10:14:57 +08:00
@gam2046 在联系,但是迟迟没有得到回复
LeungV2
2018-12-07 10:29:57 +08:00
@canrom7 想问啥,我们也只是低端芯片厂的小客户
skylancer
2018-12-07 15:04:23 +08:00
@liuyanjun0826 精神 Google 产品经理开始精神分裂了嘛
shily
2018-12-07 17:55:05 +08:00
首先肯定拿不到 OEM 的签名的,否则签名机制就是玩笑了。
参考 #16 楼,应用可以申请 android.permission.INSTALL_PACKAGES 权限,但这个权限仅授予 System 应用(如果能把应用放到 /system/app 下,系统就会认为是系统应用了,android 2.x 是放到 /system/app 下,之后的版本因为不做 OEM 了,不知道放到哪个目录了),这样就可以拥有 INSTALL_PACKAGES 权限了。
设置 android.uid.system 的目的是共享 Settings 这个应用的 UID,Settings 当然有这个权限,所以无论是否申请都具有这个权限,但是限制是,只有系统签名的应用才可以使用同一个 uid,如果不是系统签名就无法安装。
Trumeet
2018-12-08 11:42:37 +08:00
OEM 签名别想了,第三方想安装只能 ROOT,PM#installPackage 走起,或者 pm install 命令
Trumeet
2018-12-08 11:42:58 +08:00
而且都有 Root 了,改 service 干啥...
Trumeet
2018-12-08 11:44:04 +08:00
自己的设备,找领导要签名
友军的设备,让他们去签 /找领导要签名
没有签名 -> 洗洗睡
wanjunlengfeng
2018-12-26 20:16:36 +08:00
我已经实现了把不需要系统签名验证,直接安装带有 android:sharedUserId 的 app,不过我没有发现 app 好像不具有天然的 root 的权限.而仅仅是相同 UID 权限共享而已.
不知道是不是这种情况?
wanjunlengfeng
2018-12-26 20:21:07 +08:00
实现方式 是通过 XPOSED ,busybox 实现的,你们可以自己尝试下
canrom7
2018-12-27 11:25:59 +08:00
@wanjunlengfeng 是的 uid 用户组属于 system 的权限级别是低于 root 的,但是也可以做很多事情了,相当于 adb 的 shell 的权限了,可以直接启动黑域这类软件,不需要借助 PC 了

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

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

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

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

© 2021 V2EX