安卓获取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
- 注意项 如果是安卓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 命令了。