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

2019-04-09  本文已影响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 
***error: only position independent executables (PIE) are supported.***
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 命令了。

上一篇 下一篇

猜你喜欢

热点阅读