应用程序流程可以';t在/system-SEED Android设备根实验室中创建文件

应用程序流程可以';t在/system-SEED Android设备根实验室中创建文件,android,android-ndk,root,Android,Android Ndk,Root,我一直在做种子安卓设备根实验室,以了解更多关于安卓根的知识,到目前为止进展顺利 但我在尝试以root用户身份执行代码时遇到了一个问题,将app_进程程序切换为我编写的程序,该程序只将一个虚拟文件写入/system目录并执行真正的app_进程64 我遇到的问题是,使用这段代码时,没有创建虚拟文件。我用NDK编译了这段代码: #include <stdio.h> #include <stdlib.h> #include <unistd.h> extern cha

我一直在做种子安卓设备根实验室,以了解更多关于安卓根的知识,到目前为止进展顺利

但我在尝试以root用户身份执行代码时遇到了一个问题,将app_进程程序切换为我编写的程序,该程序只将一个虚拟文件写入/system目录并执行真正的app_进程64

我遇到的问题是,使用这段代码时,没有创建虚拟文件。我用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;
}
#包括
#包括
#包括
外部字符**环境;
int main(int argc,字符**argv){
//写入虚拟文件
文件*f=fopen(“/system/dummy2”,“w”);
如果(f==NULL){
printf(“权限被拒绝。\n”);
退出(退出失败);
}
fclose(f);
//启动原始二进制文件
char*cmd=“/system/bin/app\u process\u original”;
execve(命令、argv、环境);
//execve()仅在失败时返回
返回退出失败;
}
我不太明白为什么它不起作用。我的文件结构如下:名为app_process的符号链接指向此程序,名为app_process_original的符号链接指向必须运行的app_process64

系统按常规启动,但文件不显示。我认为app_进程没有以root用户身份运行。实验室使用安卓7.1。如果我在Android启动后在root下执行程序,文件就会出现,因此这似乎是一个权限问题,但实验室要通过这个程序获得root权限,所以我真的很困惑

有人知道这里有什么问题吗?app_进程是否未以root用户身份运行


提前感谢。

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

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

  • 检查
    /system
    是否可使用
    adb外壳安装
    写入
  • 通过使用
    strerror(errno)
    评估
    errno
    来检查错误消息
  • 使用adb logcat | grep avc检查SELinux消息

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

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

  • 检查
    /system
    是否可使用
    adb外壳安装
    写入
  • 通过使用
    strerror(errno)
    评估
    errno
    来检查错误消息
  • 使用adb logcat | grep avc检查SELinux消息

实验室说我应该能写一个文件。另外,前面的步骤是通过执行init.sh中的脚本将文件写入系统,这一部分很好。我建议你找出为什么你不能创建那个文件,然后试着理解实验室是如何解决这个问题的。我用一些建议更新了我的答案。谢谢你的回答,我会尝试你的建议和更新。实验室说我应该可以写一个文件。另外,前面的步骤是通过执行init.sh中的脚本将文件写入系统,这一部分很好。我建议你找出为什么你不能创建那个文件,然后试着理解实验室是如何解决这个问题的。我用一些建议更新了我的答案。谢谢你的回答,我会尝试你的建议并更新