1

我一直在做 SEED Android Device Rooting Lab 以了解更多关于 Android Root 的知识,到目前为止进展顺利。

但是我在尝试通过将 app_process 程序切换为由我编写的程序以 root 身份执行代码时遇到了一个问题,该程序只是将一个虚拟文件写入 /system 目录并执行真正的 app_process64。

我遇到的问题是使用此代码,没有创建虚拟文件。我用 NDK 编译了这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

extern char** environ;

int main(int argc, char** argv) {
    //Write the dummy file
    FILE* f = fopen("/system/dummy2", "w");
    if (f == NULL) {
        printf("Permission Denied.\n");
        exit(EXIT_FAILURE);
    }
    fclose(f);
    //Launch the original binary
    char* cmd = "/system/bin/app_process_original";
    execve(cmd, argv, environ);
    //execve() returns only if it fails
    return EXIT_FAILURE;
}

我不太明白为什么它不起作用。我的文件结构如下: 名称为 app_process 的符号链接指向该程序,一个名为 app_process_original 的符号链接指向必须运行的 app_process64。

系统照常启动,但文件未显示。我认为 app_process 没有以 root 身份运行。实验室使用 Android 7.1。如果我在Android启动后在root下执行程序,就会出现文件,所以看起来是权限问题,但实验室是通过这个程序获取root权限,所以我真的很困惑。

有谁看到这里有什么问题?app_process 不是以 root 身份运行的吗?

先感谢您。

4

1 回答 1

0

/system通常以只读方式安装。即使它是可写的,SELinux 也可能不允许您的进程写入该文件。

您应该尝试找出实际上阻止您的进程创建该文件的原因:

  • 检查是否/system可写adb shell mount
  • errno通过评估来检查错误消息strerror(errno)
  • 使用 . 检查 SELinux 消息adb logcat | grep avc
于 2020-01-11T14:22:13.677 回答