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

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

  •  
  •   canrom7 · 11 天前 · 1068 次点击
    目前小弟厂里有需求,给我们自己的应用需要静默安装权限,通过了解有两种方式,第一是 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
    37 回复  |  直到 2018-12-08 11:44:04 +08:00
        1
    Cheons   11 天前 via Android
    我所知能静默安装的只有厂商自家商店.apk ,别的自带更新都需要从商店,包括谷歌。你们家的应用何德何能?
    打算自己做 ROM 嘛?还是开发个新系统?
    另外能透露下那个公司嘛,我好尽量避开你们家产品 。
    谢谢!
        2
    leido   11 天前 via Android
    这特么叫什么需求,扯蛋呢
        3
    winterbells   11 天前 via Android
    换领导、找厂商要签名、静默 root 改系统文件哪个简单点==

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

    而你提出的方案:

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

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

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

    另外,可以尝试一下自己打包一个只能 pm install 的 su 进去,并且执行前校验来源,不想从头做的话,拿着 su 的代码去改。
        24
    CodingPuppy   10 天前 via Android
    问 rom 平台要签名吧,要不就 root。
        25
    rumengzhenxing   10 天前
    root
        26
    canrom7   10 天前
    @iAcn 两个目录都放了,带上 android.uid.system 重启后还是无法安装,不带 android.uid.system 重启后安装上了,但是没有静默 ins 的权限
        27
    liuyanjun0826   10 天前 via Android
    傻逼啊,还是穷疯了,手机又不是土豆,你们在那胡说什么呢😊
        28
    gam2046   10 天前
    @canrom7 正统方法,寻找 OEM 方,请求将你的应用签署 platforms 或 system 签名即可。相比较这是最不折腾的方案。具有签名后,不要求预装,即使后期用户自行安装一样具有该权限。
        29
    LeungV2   10 天前
    前几天客户网上下的一个 APK 也是签名相同的问题不能安装到我们的 ROM,然后拿签名文件签一下就 OK
        30
    canrom7   10 天前
    @LeungV2 方便透露一下那个厂的吗 哥们
        31
    canrom7   10 天前
    @gam2046 在联系,但是迟迟没有得到回复
        32
    LeungV2   10 天前
    @canrom7 想问啥,我们也只是低端芯片厂的小客户
        33
    skylancer   10 天前
    @liuyanjun0826 精神 Google 产品经理开始精神分裂了嘛
        34
    shily   10 天前
    首先肯定拿不到 OEM 的签名的,否则签名机制就是玩笑了。
    参考 #16 楼,应用可以申请 android.permission.INSTALL_PACKAGES 权限,但这个权限仅授予 System 应用(如果能把应用放到 /system/app 下,系统就会认为是系统应用了,android 2.x 是放到 /system/app 下,之后的版本因为不做 OEM 了,不知道放到哪个目录了),这样就可以拥有 INSTALL_PACKAGES 权限了。
    设置 android.uid.system 的目的是共享 Settings 这个应用的 UID,Settings 当然有这个权限,所以无论是否申请都具有这个权限,但是限制是,只有系统签名的应用才可以使用同一个 uid,如果不是系统签名就无法安装。
        35
    Trumeet   9 天前
    OEM 签名别想了,第三方想安装只能 ROOT,PM#installPackage 走起,或者 pm install 命令
        36
    Trumeet   9 天前
    而且都有 Root 了,改 service 干啥...
        37
    Trumeet   9 天前
    自己的设备,找领导要签名
    友军的设备,让他们去签 /找领导要签名
    没有签名 -> 洗洗睡
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   918 人在线   最高记录 4019   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 19ms · UTC 19:10 · PVG 03:10 · LAX 11:10 · JFK 14:10
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1