Compile Android 5.1.1 ROM with ROOT by SuperSU
2017-03-05 17:17
489 查看
0x00 前置信息
Android 5.1.1SuperSU v2.65
目标:基于
SuperSU编译一个可以在应用层使用
root shell的
Android 5.1.1 ROM。
0x01 添加su模块
编译Android时,userdebug或者
eng方式编译默认自带的
su,不使用这个自带的
su,即不编译这个自带
system\extras\su模块,最简单的方法是把该目录下的
Android.mk重命名或者删掉。
在
packages目录下新建
su目录,并拷贝SuperSU中的
su文件(与系统自带的su不一样)至该目录下,并在该目录下新建
Android.mk文件,文件内容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_MODULE := su LOCAL_SRC_FILES := $(LOCAL_MODULE) LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) LOCAL_UNSTRIPPED_PATH := $(LOCAL_MODULE_PATH) include $(BUILD_PREBUILT)
在配置文件中加入该模块 \
修改
device/$(brand_name)/device.mk文件,添加
PRODUCT_PACKAGES += su。
修改
su文件权限 \
文件权限定义在
system/core/include/private/android_filesystem_config.h文件中,
找到如下内容,根据需求修改。
{ 06755, AID_ROOT, AID_ROOT, 0, "system/xbin/su" },
至此,就可以把su模块添加到ROM中。
0x02 设置su为启动服务
修改init.rc文件,设置su为自启动服务on boot start su_daemon service su_daemon /system/xbin/su --auto-daemon class main disabled user root
0x03 添加selinux权限规则
device/$(brand_name)/sepolicy/init.te
添加如下内容
allow init su_exec:file { execute_no_trans setattr relabelfrom relabelto }; allow init system_file:file { relabelto }; allow init rootfs:file { create write relabelfrom relabelto setattr }; allow untrusted_app init:unit_stream_socket { connectto };
如果有编译错误,根据错误提示去相关文件中修改权限限制。
external/sepolicy/untrusted_app.te
line 96
# neverallow untrusted_app ...;
external/sepolicy/domain.te\
Delete some allow limit from init in line 294 and line 297.
至此,成功。
0x04 SuperSU原理
在Android 4.3及其以后的版本中,所有应用进程都从zygote进程中分支出来,并被踢出了所有的权能,以防止应用程序执行一些高权限的操作。在Android 4.4及其后面的版本中,SELinux处于enforcing模式,所有应用启动的任何进程都包含其本来的安全标签(一般是untrusted_app),因此应用进程还必须遵循强制访问控制(MAC)的限制,所以必须使用守护进程,才有可能让应用执行root权限操作。APP使用su执行root权限命令,这些命令实际是通过UNIX的域套接字传送给su_daemon守护进程来执行的。su_daemon service由init进程启动,所以会以
u:r:init:s0的SELinux标签来执行收到的命令。[1]
[1] Android安全架构深究 P368
相关文章推荐
- HTC Desire Root and Flash ROM with Unrevoked/ClockworkMod Recovery on Ubuntu
- ffmpeg compile with neon support for android
- Error:(3, 22) compileSdkVersion android-22 requires compiling with JDK 7
- ubuntu下搭建android开发环境(二)设置ubuntu的root管理员密码(by 星空武哥)
- [Android] 在Ubuntu 12.04 (64bit)上使用搭建Android的调试环境:ADB USB Connection By root
- A Mainframe IDE Powered By Unix Technology [12] - Integrate submit JCL and compile with Vim
- android studio出现Error:compileSdkVersion android-x requires compiling with JDK 7问题
- How to root Nexus 5 and 4 on Android 5.1.1 Lollipop and install CWM recovery
- 关于Android系统ROM的debug-root模式说明
- [Android/Root]nubia z9 max 双4G9.05 android5.1.1系统root方法
- Milestone/A853/XT702/umts_sholes Compile your own Android ROM and Customize your own linux kernel
- Android 经典系统 HTC One 802d国行电信专版/最新Viper2.6.0/永久root/强大的功能、高级设置/纯净省电ROM
- Dowload and compile android source code implemented by qualcomm
- mac上安装android studio出现Error:compileSdkVersion android-x requires compiling with JDK 7问题
- Files to be needed by importing the android application with eclipse
- ant compile android project step by step 1
- oracle 递归查询 CONNECT BY、START WITH、CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、SYS_CONNECT_BY_PATH
- Android minSdkVersion、targetSdkVersion、Compile with/即project.propertities中target值 分析
- mac上安装android studio出现Error:compileSdkVersion android-x requires compiling with JDK 7问题