HarmonyOS Next 模拟器 root
HarmonyOS Next(Based on OpenHarmony)公测了,微信、QQ也都适配了,我们尝试修改HarmonyOS Next模拟器,获取root权限.
Android adb root权限回顾
玩过Android adb root的同学,可能对如何获取adb root并不陌生,一般而言,构建userdebug、eng版本,便能直接通过adb root,获取root权限.
至于user版本,想要变成adb root版本,则需要修改:
- 修改default.prop/prop.default/build.prop等prop文件,将ro.debuggable由0改为1,可能也需要将ro.secure和ro.adb.secure由1改为0;
- 编译userdebug版本的sepolicy,替换(增加编译su.te).
- 可能需要编译userdebug版本的adbd,替换掉adbd;
之前尝试基于Magisk来作相关修改,测试能成功获取adb root权限,adb root Magisk 模块.
(待补充更多技术细节介绍……)
获取HarmonyOS Next模拟器的hdc root权限
获取模拟器镜像
从官网下载IDE:DevEco Studio,安装后,在IDE的界面下载模拟器镜像,按照QA解决相关问题,即可启动模拟器镜像.
模拟器镜像位于%LOCALAPPDATA%\Huawei\Sdk\system-image
开始修改
参考Android的adb root的修改方案,我们来修改HarmonyOS Next的模拟器的system.img.
1 | //创建临时目录,用于挂载 |
针对5.0.0.71(Beta1)版本的system.img,我修改了如下内容:
/system/etc/param/ohos.para
1 | //修改前 |
/system/etc/param/hdc.para
我们参考OpenHarmony的代码,直接替换:修改前developtools/hdc/src/daemon/etc/hdc.para、修改后developtools/hdc/src/daemon/etc/hdc.root.para.
/system/etc/init/hdc.cfg
我们参考OpenHarmony的代码,直接替换:修改前developtools/hdc/src/daemon/etc/hdcd.cfg、修改后developtools/hdc/src/daemon/etc/hdcd.root.cfg
大家如果对比在两个cfg,会发现root版本修改了hdcd进程启动的uid和selinux domain:
修改前:
1 | "uid" : "shell" |
修改后:
1 | "uid" : "root" |
如果就这样启动,会提示找不到u:r:su:s0,很显然,user版本为了安全,也为了精简,不会编译su.te,从源代码base/security/selinux_adapter/sepolicy/ohos_policy/developtools/hdc/system/su.te我们也很明显看到su.te中使用了debug_only宏.
但是通过修改system.img,增加su domain的定义以及相关权限,可能需要编译源码对比编译产物,才好相对完整的添加到模拟器,有点麻烦,后面再尝试.
我使用如下临时方案:
- 将hdcd.cfg的”u:r:su:s0”还原为”u:r:hdcd:s0”
- 修改u:r:sh:s0的权限,改为permissive.
简单修改sepolicy
我们修改system/etc/selinux/sepolicy_common.cil,将sh改为permissive type.
1 | 修改前 |
测试
修改前:
- hdc shell id,普通的shell权限(uid 2000)
- setenforce 0,设置SELinux为Permissive失败
- ls /data/,没有权限访问/data用户数据目录
修改后:
- hdc shell id,root权限(uid 0)
- setenforce 0,成功设置SELinux为Permissive
- ls /data/,成功访问/data用户数据目录
镜像下载
modified HarmonyOS Next Emulator
更新
有朋友分享了修改qcow2文件的方案,免修改原system.img.
Windows X86版本IDE,运行过的模拟器,qcow2文件位于%LOCALAPPDATA%\Huawei\Emulator\deployed
吐槽一下,DevEco Studio没有Linux版本,但是DevEco Device Tool却有Linux版本.