美文网首页
安卓获取root权限的另一个方法之自己实现sudo

安卓获取root权限的另一个方法之自己实现sudo

作者: 萌面菠萝 | 来源:发表于2019-04-09 21:14 被阅读0次

    今天为了解决在未root的安卓上实现静默安装,查了一些资料。最后找了一个可行办法,自己编译sudo让后放到系统里,有效的避免了 应用级app不能su的问题。

    下载安卓ndk

    最新的r19是不行的 里面已经不提供arm-gcc交叉编译工具了
    我下载的是r14

    sudo源码 sudo.c

    #include <stdio.h>
    #include <string.h>
    #include <errno.h>
    
    int main(int argc, char *argv[], char *envp[]) {
        int i;
        int n = 1;
        for (i = 1; i < argc; i++) {
            n += strlen(argv[i]) + 1;
        }
        char buf[n + 2];
        char* p = buf;
        for (i = 1; i < argc; i++) {
            strcpy(p, argv[i]);
            p += strlen(argv[i]);
            *p++ = i == argc - 1 ? 0 : ' ';
        }
        *p++ = 0;
        char* a[] = {"/system/bin/sh", "-c", buf, NULL};
        execve("/system/bin/sh", a, envp);
        fprintf(stderr, "sudo: /system/bin/sh  error:%s\n", strerror(errno));
        return 1;
    }
    

    用r14的ndk编译sudo.c

    • 编译命令
    arm-linux-androideabi-gcc --sysroot 目标安卓版本依赖 sudo.c -o sudo
    
    • 编译脚本
    export NDK_ROOT=~/<path to android-ndk>
    export GCC=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc
    export SYS_ROOT=$NDK_ROOT/platforms/android-17/arch-arm
    #//安卓4.0以上要加-pie -fPIE
    $GCC --sysroot $SYS_ROOT ./sudo.c -o ./sudo 
    
    • 注意项 如果是安卓4.0以上版本的话,按照以上方法编译会报错
    ***error: only position independent executables (PIE) are supported.***
    
    • 解决办法 在编译命令上 加上 -pie -fPIE
    arm-linux-androideabi-gcc --sysroot 目标安卓版本依赖 sudo.c -o sudo -pie -fPIE
    
    将编译后的sudo可执行文件push到安卓设备 /system/xbin/ 目录 并且给上权限
    adb push  sudo /system/xbin/
    adb shell "chmod 06755 /system/xbin/sudo"
    

    重启设备,就可以在安卓中 执行sudo 命令了。

    相关文章

      网友评论

          本文标题:安卓获取root权限的另一个方法之自己实现sudo

          本文链接:https://www.haomeiwen.com/subject/uhkwiqtx.html