V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
canrom7
V2EX  ›  Android

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

  •  
  •   canrom7 · 2018-12-06 22:20:26 +08:00 · 15879 次点击
    这是一个创建于 2189 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前小弟厂里有需求,给我们自己的应用需要静默安装权限,通过了解有两种方式,第一是 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
    41 条回复    2018-12-27 11:26:21 +08:00
    Cheons
        1
    Cheons  
       2018-12-06 23:32:59 +08:00 via Android
    我所知能静默安装的只有厂商自家商店.apk ,别的自带更新都需要从商店,包括谷歌。你们家的应用何德何能?
    打算自己做 ROM 嘛?还是开发个新系统?
    另外能透露下那个公司嘛,我好尽量避开你们家产品 。
    谢谢!
    leido
        2
    leido  
       2018-12-06 23:38:16 +08:00 via Android
    这特么叫什么需求,扯蛋呢
    winterbells
        3
    winterbells  
       2018-12-06 23:59:30 +08:00 via Android
    换领导、找厂商要签名、静默 root 改系统文件哪个简单点==

    是公开的应用还是那种定制的设备上跑的?后者的话我是直接找厂商要密钥的,虽然自带 root==
    要是公开的应用,你这不相当于病毒吗==
    ysc3839
        4
    ysc3839  
       2018-12-07 00:00:06 +08:00 via Android
    没记错的话系统应用就可以静默安装,既然都可以修改 system 分区的内容了那装一个无界面的系统应用不就好了吗?
    canrom7
        5
    canrom7  
    OP
       2018-12-07 00:02:14 +08:00
    谢谢回复,不要歪了;
    然后回:厂商自家的应用商店就是用的 android:sharedUserId="android.uid.system" 方式共享 system 进程实现的静默安装。
    canrom7
        6
    canrom7  
    OP
       2018-12-07 00:03:26 +08:00
    @ysc3839 系统应用也不行,尝试过的。
    Orciorc
        7
    Orciorc  
       2018-12-07 00:03:59 +08:00 via Android
    某个版本以前,可以安装和系统程序包名相同的程序,以获取 root 权限。不过早就封掉了。现在做自动安装的,无障碍模式模拟点击居多。
    zzzmode
        8
    zzzmode  
       2018-12-07 00:05:42 +08:00 via Android
    找合作厂商签名
    iAcn
        9
    iAcn  
       2018-12-07 00:10:31 +08:00 via Android
    1. 是公开的应用还是为某个设备单独定制的?
    2. 既然已经要去 Root 了为何还要去加 uid 呢?
    3. Patch services.jar 的方式非常麻烦。需要处理 odex/vdex/cdex 的合并、国内各种 UI 的兼容性、Android 各个版本的兼容等。弄不好还会开不了机,而且就算备份了,也只能去引导用户手动恢复
    ooh
        10
    ooh  
       2018-12-07 00:12:33 +08:00
    你们老板连签名都要不来还好意思给你布置这个任务,不会是你当时把话说太满吧...😂
    iAcn
        11
    iAcn  
       2018-12-07 00:13:37 +08:00 via Android
    接上一条。patch jar 的方式实在不推荐。可以参考国内各大市场的做法,Root 的话就 pm install,没有的话就辅助功能(无障碍)模拟去点击那个安装的按钮。
    canrom7
        12
    canrom7  
    OP
       2018-12-07 00:13:42 +08:00
    @iAcn 是一批单独定制的设备
    canrom7
        13
    canrom7  
    OP
       2018-12-07 00:18:06 +08:00
    @iAcn 嗯嗯,无障碍的不稳定,后台容易被杀,还是属于半手动
    iAcn
        14
    iAcn  
       2018-12-07 00:19:38 +08:00 via Android
    @canrom7 那还是去要签名吧...需要扔 system 里面
    iAcn
        15
    iAcn  
       2018-12-07 00:22:31 +08:00 via Android
    @canrom7 加 android.uid.system 需要厂商签名;放在 /system/app 或 priv-app 下。手动装肯定是装不上的。
    ysc3839
        16
    ysc3839  
       2018-12-07 08:17:56 +08:00 via Android
    @canrom7 系统应用不行的话,Google Play 又是如何实现的呢?
    gam2046
        17
    gam2046  
       2018-12-07 08:38:03 +08:00   ❤️ 1
    android.uid.system 需要应用具有 platforms 或 system 签名。而与安装位置无关,不要求安装为系统应用。

    而你提出的方案:

    1、ROOT 设备
    2、去除签名验证
    3、反 ROOT

    而当你满足步骤 1 时,已经可以静默安装应用,为何舍近求远呢?
    CFM880
        18
    CFM880  
       2018-12-07 08:55:07 +08:00
    有 root 权限后,pm 命令安装也是可以的
    lionseun
        19
    lionseun  
       2018-12-07 09:18:43 +08:00 via Android
    可以找後門,讓系統幫你靜默安裝
    canrom7
        20
    canrom7  
    OP
       2018-12-07 09:24:16 +08:00
    @CFM880
    @gam2046
    谢谢回复,知道 root 可行,但是后期设备是给了甲方,为了安全 root 方案就排除了。
    liuyanjun0826
        21
    liuyanjun0826  
       2018-12-07 09:26:45 +08:00 via Android
    @canrom7 hash 懂吗?
    liuyanjun0826
        22
    liuyanjun0826  
       2018-12-07 09:27:52 +08:00 via Android
    你这直接百度就可以,发 V2EX 什么鬼
    xylophone21
        23
    xylophone21  
       2018-12-07 09:36:04 +08:00
    看起来你是希望先 root,然后出厂的时候移除 root,但仍保留自己的应用能静默安装。

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

    另外,可以尝试一下自己打包一个只能 pm install 的 su 进去,并且执行前校验来源,不想从头做的话,拿着 su 的代码去改。
    CodingPuppy
        24
    CodingPuppy  
       2018-12-07 09:47:59 +08:00 via Android
    问 rom 平台要签名吧,要不就 root。
    rumengzhenxing
        25
    rumengzhenxing  
       2018-12-07 09:49:26 +08:00
    root
    canrom7
        26
    canrom7  
    OP
       2018-12-07 09:58:46 +08:00
    @iAcn 两个目录都放了,带上 android.uid.system 重启后还是无法安装,不带 android.uid.system 重启后安装上了,但是没有静默 ins 的权限
    liuyanjun0826
        27
    liuyanjun0826  
       2018-12-07 10:00:49 +08:00 via Android
    傻逼啊,还是穷疯了,手机又不是土豆,你们在那胡说什么呢😊
    gam2046
        28
    gam2046  
       2018-12-07 10:04:38 +08:00
    @canrom7 正统方法,寻找 OEM 方,请求将你的应用签署 platforms 或 system 签名即可。相比较这是最不折腾的方案。具有签名后,不要求预装,即使后期用户自行安装一样具有该权限。
    LeungV2
        29
    LeungV2  
       2018-12-07 10:10:20 +08:00
    前几天客户网上下的一个 APK 也是签名相同的问题不能安装到我们的 ROM,然后拿签名文件签一下就 OK
    canrom7
        30
    canrom7  
    OP
       2018-12-07 10:14:28 +08:00
    @LeungV2 方便透露一下那个厂的吗 哥们
    canrom7
        31
    canrom7  
    OP
       2018-12-07 10:14:57 +08:00
    @gam2046 在联系,但是迟迟没有得到回复
    LeungV2
        32
    LeungV2  
       2018-12-07 10:29:57 +08:00
    @canrom7 想问啥,我们也只是低端芯片厂的小客户
    skylancer
        33
    skylancer  
       2018-12-07 15:04:23 +08:00
    @liuyanjun0826 精神 Google 产品经理开始精神分裂了嘛
    shily
        34
    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
        35
    Trumeet  
       2018-12-08 11:42:37 +08:00
    OEM 签名别想了,第三方想安装只能 ROOT,PM#installPackage 走起,或者 pm install 命令
    Trumeet
        36
    Trumeet  
       2018-12-08 11:42:58 +08:00
    而且都有 Root 了,改 service 干啥...
    Trumeet
        37
    Trumeet  
       2018-12-08 11:44:04 +08:00
    自己的设备,找领导要签名
    友军的设备,让他们去签 /找领导要签名
    没有签名 -> 洗洗睡
    wanjunlengfeng
        38
    wanjunlengfeng  
       2018-12-26 20:16:36 +08:00
    我已经实现了把不需要系统签名验证,直接安装带有 android:sharedUserId 的 app,不过我没有发现 app 好像不具有天然的 root 的权限.而仅仅是相同 UID 权限共享而已.
    不知道是不是这种情况?
    wanjunlengfeng
        39
    wanjunlengfeng  
       2018-12-26 20:21:07 +08:00
    实现方式 是通过 XPOSED ,busybox 实现的,你们可以自己尝试下
    canrom7
        40
    canrom7  
    OP
       2018-12-27 11:25:59 +08:00
    @wanjunlengfeng 是的 uid 用户组属于 system 的权限级别是低于 root 的,但是也可以做很多事情了,相当于 adb 的 shell 的权限了,可以直接启动黑域这类软件,不需要借助 PC 了
    canrom7
        41
    canrom7  
    OP
       2018-12-27 11:26:21 +08:00
    @wanjunlengfeng 具体的细节方便多透露一些吗? 谢谢你了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1230 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:11 · PVG 02:11 · LAX 10:11 · JFK 13:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.