• Android修改源码实现root


     userdebug 和 user 版本

    1. 关闭 selinux

    system/core

    1. diff -- git a / init / selinux . cpp b / init / selinux . cpp
    2. index 5 a0255acd .. 787917274 100644
    3. --- a / init / selinux . cpp
    4. +++ b / init / selinux . cpp
    5. @@ - 104 , 6 + 104 , 8 @@ EnforcingStatus StatusFromCmdline () {
    6. }
    7. bool IsEnforcing () {
    8. + return false ;
    9. +
    10. if ( ALLOW_PERMISSIVE_SELINUX ) {
    11. return StatusFromCmdline () == SELINUX_ENFORCING ;
    12. }

    3. 修改 su.cpp ,注释用户组权限检测

    1. system/extras/su/su.cpp
    2. diff -- git a / su / su . cpp b / su / su . cpp
    3. index 1 a1ab6bf .. af3d2a68 100644
    4. --- a / su / su . cpp
    5. +++ b / su / su . cpp
    6. @@ - 80 , 8 + 80 , 8 @@ void extract_uidgids ( const char* uidgids , uid_t * uid , gid_t *
    7. gid , gid_t * gids , i
    8. }
    9. int main ( int argc , char** argv ) {
    10. - uid_t current_uid = getuid ();
    11. if ( current_uid != AID_ROOT && current_uid != AID_SHELL ) error ( 1 , 0 , "not
    12. allowed" );
    13. + //uid_t current_uid = getuid();
    14. + //if (current_uid != AID_ROOT && current_uid != AID_SHELL) error(1, 0, "not
    15. allowed");
    16. // Handle -h and --help.
    17. ++ argv ;

    4. 给 su 文件默认授予 root 权限

    1. system/core/libcutils/fs_config.cpp
    2. diff -- git a / libcutils / fs_config . cpp b / libcutils / fs_config . cpp
    3. index 5805 a4d19 .. 92e93 e76100644
    4. --- a / libcutils / fs_config . cpp
    5. +++ b / libcutils / fs_config . cpp
    6. @@ - 86 , 7 + 86 , 7 @@ static const struct fs_path_config android_dirs [] = {
    7. 00751 , AID_ROOT , AID_SHELL , 0 , "system/bin" },
    8. 00755 , AID_ROOT , AID_ROOT , 0 , "system/etc/ppp" },
    9. 00755 , AID_ROOT , AID_SHELL , 0 , "system/vendor" },
    10. - { 00750 , AID_ROOT , AID_SHELL , 0 , "system/xbin" }, + { 00755 , AID_ROOT , AID_SHELL , 0 , "system/xbin" },
    11. 00751 , AID_ROOT , AID_SHELL , 0 , "system/apex/*/bin" },
    12. 00751 , AID_ROOT , AID_SHELL , 0 , "system_ext/bin" },
    13. 00751 , AID_ROOT , AID_SHELL , 0 , "system_ext/apex/*/bin" },
    14. @@ - 190 , 7 + 190 , 7 @@ static const struct fs_path_config android_files [] = {
    15. // the following two files are INTENTIONALLY set-uid, but they
    16. // are NOT included on user builds.
    17. 06755 , AID_ROOT , AID_ROOT , 0 , "system/xbin/procmem" },
    18. - { 04750 , AID_ROOT , AID_SHELL , 0 , "system/xbin/su" },
    19. + { 06755 , AID_ROOT , AID_SHELL , 0 , "system/xbin/su" },
    1. frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
    2. diff -- git a / core / jni / com_android_internal_os_Zygote . cpp
    3. / core / jni / com_android_internal_os_Zygote . cpp
    4. index 9 eede83e21e5 .. 694 eec2a40ac 100644
    5. --- a / core / jni / com_android_internal_os_Zygote . cpp
    6. +++ b / core / jni / com_android_internal_os_Zygote . cpp
    7. @@ - 656 , 6 + 656 , 7 @@ static void EnableKeepCapabilities ( fail_fn_t fail_fn ) {
    8. }
    9. static void DropCapabilitiesBoundingSet ( fail_fn_t fail_fn ) {
    10. + /*
    11. for (int i = 0; prctl(PR_CAPBSET_READ, i, 0, 0, 0) >= 0; i++) {;
    12. if (prctl(PR_CAPBSET_DROP, i, 0, 0, 0) == -1) {
    13. if (errno == EINVAL) {
    14. @@ -666,6 +667,7 @@ static void DropCapabilitiesBoundingSet(fail_fn_t fail_fn) {
    15. }
    16. }
    17. }
    18. + */
    19. }
    1. kernel/security/commoncap.c
    2. diff -- git a / security / commoncap . c b / security / commoncap . c
    3. index f86557a8e43f6 .. 19124 dd6239a1 100644
    4. --- a / security / commoncap . c
    5. +++ b / security / commoncap . c
    6. @@ - 1147 , 12 + 1147 , 12 @@ int cap_task_setnice ( struct task_struct * p , int nice )
    7. static int cap_prctl_drop ( unsigned long cap )
    8. {
    9. struct cred * new ;
    10. -
    11. + /*
    12. if (!ns_capable(current_user_ns(), CAP_SETPCAP))
    13. return -EPERM;
    14. if (!cap_valid(cap))
    15. return -EINVAL;
    16. -
    17. +*/
    18. new = prepare_creds ();
    19. if ( ! new )
    20. return - ENOMEM ;

     5. user 版本需要把 su 编进系统

    1. 或者build/make/target/product/base_system.mk 
    2. build/core
    3. diff -- git a / target / product / base_system . mk b / target / product / base_system . mk
    4. index 4569 bceff9 .. 5 c8eaaa87100644
    5. --- a / target / product / base_system . mk
    6. +++ b / target / product / base_system . mk
    7. @@ - 273 , 6 + 273 , 7 @@ PRODUCT_PACKAGES += \
    8. wificond \
    9. wifi . rc \
    10. wm \
    11. + su \
    12. # VINTF data for system image
    13. PRODUCT_PACKAGES += \
    14. @@ - 378 , 7 + 379 , 6 @@ PRODUCT_PACKAGES_DEBUG : = \
    15. ss \
    16. start_with_lockagent \
    17. strace \
    18. - su \
    19. sanitizer - status \
    20. tracepath \
    21. tracepath6 \

  • 相关阅读:
    最新版小说泛站群系统源码 小说泛目录站群源码系统程序/PHP语言(源码+教程)
    蓝桥杯每日一题203.11.7
    相机专业模型详解,各个参数作用,专业模式英文全称和缩写
    nacos注册中心集群
    音乐制作软件 Ableton Live 11 Suite mac中文版功能介绍
    MySQL源码解析之执行计划
    javaEE高阶---Spring创建和使用
    单机部署
    强化学习问题(四)--- NameError: name ‘glPushMatrix‘ is not defined
    图书管理系统的实现
  • 原文地址:https://blog.csdn.net/xiaowang_lj/article/details/136561138