求教安卓高手

2016-12-28 22:22:57 +08:00
 makendk
我想制作一个 root 的 ROM 包
是不是直接把 SU 二进制文件和 SU.APK 放入相应目录就行了, boot 中是不是还有别的的限制? Android 6.0 的系统,没有解锁 BootLoader
9992 次点击
所在节点    Android
24 条回复
29EtwXn6t5wgM3fD
2016-12-28 23:32:57 +08:00
root 不是都要刷 bootloader 吗
zhihaofans
2016-12-29 02:15:03 +08:00
没解锁怎么刷
jyf007
2016-12-29 08:08:53 +08:00
没解锁不要动 boot 分区就行了。
RobertYang
2016-12-29 08:14:12 +08:00
su 的二进制文件不放到 bin 里面真的没问题?
RobertYang
2016-12-29 08:15:28 +08:00
我理解错了,你没解锁的话是刷不进去的,除非你能用官方签名给你的 ROM 签一下
ybjaychou
2016-12-29 08:50:58 +08:00
一般还得在 init.rc 里面把启动 su 服务加上
rumengzhenxing
2016-12-29 09:17:55 +08:00
解锁。🙈
tempdban
2016-12-29 09:21:24 +08:00
不,你还需要绕过 selinux,和启动 su 守护进程
makendk
2016-12-29 10:06:47 +08:00
@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
2016-12-29 10:22:14 +08:00
参见 SuperSU 中 update-binary 刷机脚本中 system-mod 模式对 system 分区的处理,就明白了,改改就直接用了
makendk
2016-12-29 10:23:24 +08:00
@tempdban 我想请教一下 记得之前看过说是需要把 SELinux=0 修改一下(大概是这样,记不清了)如果可能的话,这个是需要反编译 bootaloder 修改吗,还是在 system 分区下就能直接修改?
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
2016-12-29 10:46:08 +08:00
@besto V 站卧虎藏龙,大神威武! 我真是可以修改 system.img 并重新打包成官方包,还没有刷机测试

我的机器官方解锁流程是, fastboot 模式下获得设备 ID (一串 32 个字符的 16 进制数据),然后在官网提交设备 ID 和 IMEI ,官方验证后会把生成的解锁 KEY (一个 1KB 的.BIN 文件)发过来,然后 fastboot 模式下刷入 bin 就成功解锁 bootloader 了
如果我能修改官方固件中的话,反编译 bootlaoder 修改一下,再刷机,是不是也就解锁 bootaloder 了
skylancer
2016-12-29 10:57:50 +08:00
我看了半天 13 楼我怎么觉得这是 HTC 的机器
besto
2016-12-29 10:59:14 +08:00
@makendk 不知道你在说啥, bootloader 不是很懂,但是反编译 bootloader 是什么鬼?
我的理解是:
默认状态下是 OEM lock 的状态+原始镜像。进入 fastboot 状态( adb shell+reboot bootloader),做 oem unlock ,然后可以烧录兼容镜像(用 Key 签名的镜像),后面就好办了。
makendk
2016-12-29 11:00:15 +08:00
@skylancer LG G5
很多安卓都是这样解锁吧 也有些是一条命令搞定的
ChangeTheWorld
2016-12-29 11:05:32 +08:00
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
2016-12-29 11:10:24 +08:00
@besto 这个机器是进入 fastboot 模式刷入官方解锁文件 然后就解锁 bootlaoder 了 这样才可以刷入第三方 recovery 再在 recovery 下刷 su 解锁包或者自制的.zip 卡刷包
我意思是 直接把官方底包里面的 OEM lock 改成 OEM unlock 状态
再刷入手机,这样手机是不是就是解锁状态了,可以无限制的刷第三方 recovery
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

不同厂商实现不一样,很少有完全符合标准的。

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

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

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

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

© 2021 V2EX