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

求教安卓高手

  •  
  •   makendk · 2016-12-28 22:22:57 +08:00 · 5593 次点击
    这是一个创建于 2682 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想制作一个 root 的 ROM 包
    是不是直接把 SU 二进制文件和 SU.APK 放入相应目录就行了, boot 中是不是还有别的的限制? Android 6.0 的系统,没有解锁 BootLoader
    24 条回复    2016-12-30 11:53:32 +08:00
    shengyu
        1
    shengyu  
       2016-12-28 23:32:57 +08:00 via iPhone
    root 不是都要刷 bootloader 吗
    zhihaofans
        2
    zhihaofans  
       2016-12-29 02:15:03 +08:00 via Android
    没解锁怎么刷
    jyf007
        3
    jyf007  
       2016-12-29 08:08:53 +08:00 via Android
    没解锁不要动 boot 分区就行了。
    RobertYang
        4
    RobertYang  
       2016-12-29 08:14:12 +08:00 via Android
    su 的二进制文件不放到 bin 里面真的没问题?
    RobertYang
        5
    RobertYang  
       2016-12-29 08:15:28 +08:00 via Android
    我理解错了,你没解锁的话是刷不进去的,除非你能用官方签名给你的 ROM 签一下
    ybjaychou
        6
    ybjaychou  
       2016-12-29 08:50:58 +08:00 via Android
    一般还得在 init.rc 里面把启动 su 服务加上
    rumengzhenxing
        7
    rumengzhenxing  
       2016-12-29 09:17:55 +08:00 via Android
    解锁。🙈
    tempdban
        8
    tempdban  
       2016-12-29 09:21:24 +08:00 via Android
    不,你还需要绕过 selinux,和启动 su 守护进程
    makendk
        9
    makendk  
    OP
       2016-12-29 10:06:47 +08:00 via Android
    @shengyu @zhihaofans @jyf007 @RobertYang @ybjaychou @rumengzhenxing @tempdban 我是把官方的底包解压之后重新打包的,官方底包有校验,现在只能编辑 system.img ,其它的 boot.img recovery.img 之类的暂时还不能修改
    解压出来的 system.img 是 ext4 格式的,我直接挂载分区修改的
    请问各位大神,自己把 system.img 挂载以后修改一下文件夹权限 777 这样刷进手机还是不是 777 权限
    还有 su 守护进程是添加一个自启动脚本和文件吗 能否说的具体些
    SELinux 是在 bootloader 中对权限进行了限制吗,直接修改 system 分区下的文件或者文件夹权限可否完全控制文件夹 /文件?
    HackerOO7
        10
    HackerOO7  
       2016-12-29 10:22:14 +08:00
    参见 SuperSU 中 update-binary 刷机脚本中 system-mod 模式对 system 分区的处理,就明白了,改改就直接用了
    makendk
        11
    makendk  
    OP
       2016-12-29 10:23:24 +08:00 via Android
    @tempdban 我想请教一下 记得之前看过说是需要把 SELinux=0 修改一下(大概是这样,记不清了)如果可能的话,这个是需要反编译 bootaloder 修改吗,还是在 system 分区下就能直接修改?
    besto
        12
    besto  
       2016-12-29 10:25:28 +08:00
    @makendk
    你确定能改 system.img ? 如果有 dm-verity , system.img 是要靠 boot.img 里的东西去验证的,改了就对不上了。
    其实这是一个信任链的关系, bootloader 保证 boot.img 的正确性, boot.img 保证 system.img 的正确性。

    system.img 改 777 是能保存的。

    有 SU 不代表 ROOT 了这个系统,用 AOSP 的 code 非 user 模式下编译出来的镜像都是带有 su 工具的,只是能通过 adb shell 或是串口敲个 su 进 root 罢了,系统本身并不是 root 状态。

    SELinux 解释起来比较复杂,简单说关闭 SELinux 必须需要改到 bootloader (有 cmdline 给 android 的),或是 boot.img(SELinux 的 enable 在 init 里)。 SELinux 本身就是为了限制 root 而生的,这是一种 MAC 的机制,改成 777 只能过 DAC 检查。另外 SELinux 可不是拒绝读写文件这么简单了。
    makendk
        13
    makendk  
    OP
       2016-12-29 10:46:08 +08:00 via Android
    @besto V 站卧虎藏龙,大神威武! 我真是可以修改 system.img 并重新打包成官方包,还没有刷机测试

    我的机器官方解锁流程是, fastboot 模式下获得设备 ID (一串 32 个字符的 16 进制数据),然后在官网提交设备 ID 和 IMEI ,官方验证后会把生成的解锁 KEY (一个 1KB 的.BIN 文件)发过来,然后 fastboot 模式下刷入 bin 就成功解锁 bootloader 了
    如果我能修改官方固件中的话,反编译 bootlaoder 修改一下,再刷机,是不是也就解锁 bootaloder 了
    skylancer
        14
    skylancer  
       2016-12-29 10:57:50 +08:00
    我看了半天 13 楼我怎么觉得这是 HTC 的机器
    besto
        15
    besto  
       2016-12-29 10:59:14 +08:00
    @makendk 不知道你在说啥, bootloader 不是很懂,但是反编译 bootloader 是什么鬼?
    我的理解是:
    默认状态下是 OEM lock 的状态+原始镜像。进入 fastboot 状态( adb shell+reboot bootloader),做 oem unlock ,然后可以烧录兼容镜像(用 Key 签名的镜像),后面就好办了。
    makendk
        16
    makendk  
    OP
       2016-12-29 11:00:15 +08:00 via Android
    @skylancer LG G5
    很多安卓都是这样解锁吧 也有些是一条命令搞定的
    ChangeTheWorld
        17
    ChangeTheWorld  
       2016-12-29 11:05:32 +08:00
    skylancer
        18
    skylancer  
       2016-12-29 11:06:01 +08:00
    @makendk 因为你这个解锁方式几乎只有在 HTC 上出现.. LG 我也没印象有这样的解锁方式(看来 G5 才开始),所以我才觉得奇怪。另外我一般不建议动 system ,几个原因。一能 OTA ,二在有锁的情况下如果别的分区可写那还有别的方式可以 root 。比如可以直接改 boot(kernel),直接映射 /su(预先制作好 img)同时把 selinux policy 给肛了。这也是所谓 systemless root 的工作方式
    makendk
        19
    makendk  
    OP
       2016-12-29 11:10:24 +08:00 via Android
    @besto 这个机器是进入 fastboot 模式刷入官方解锁文件 然后就解锁 bootlaoder 了 这样才可以刷入第三方 recovery 再在 recovery 下刷 su 解锁包或者自制的.zip 卡刷包
    我意思是 直接把官方底包里面的 OEM lock 改成 OEM unlock 状态
    再刷入手机,这样手机是不是就是解锁状态了,可以无限制的刷第三方 recovery
    besto
        20
    besto  
       2016-12-29 11:25:10 +08:00
    @makendk
    做完 fastboot oem unlock 之后可以直接烧录所有分区(当然还会有一些检查),为何要进入 recovery 。
    oem lock/unlock 的状态是在手机里,并不是原始镜像上( dm-verity 的检查倒是在 boot.img 里)。
    参考这个 boot flow :
    https://source.android.com/security/verifiedboot/verified-boot.html

    不同厂商实现不一样,很少有完全符合标准的。
    makendk
        21
    makendk  
    OP
       2016-12-29 13:42:19 +08:00 via Android
    @besto 那您看我现在的条件下有什么方法 root 或者说可以获得对 system 分区的写入权限
    makendk
        22
    makendk  
    OP
       2016-12-29 13:47:03 +08:00 via Android
    @skylancer G5 的 fastboot 模式下只有重启,刷入解锁文件,读取设备 ID 三个选项,而且应该不能刷入 boot.img 吧

    但是你提到的这个方法能具体点吗,我还是想研究一下
    makendk
        23
    makendk  
    OP
       2016-12-29 13:49:05 +08:00 via Android
    @ChangeTheWorld 那都是在官方解锁 bootloader 的,只有 830 850 等版本可以解锁,大多数版本到目前为止官方不给解锁
    tempdban
        24
    tempdban  
       2016-12-30 11:53:32 +08:00 via Android
    besto 已经和你解释过其中的原理了但是我并不是要你关闭 selinux
    我的做法是启动时在 init.rc 里把 su 的守护进程启动,并给 selinux 规则打补丁。
    具体可以研下 supersu
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2256 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:15 · PVG 18:15 · LAX 03:15 · JFK 06:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.