在iOS系统中获取NSFileManager的root权限(越狱)

13

我正在尝试将文件写入设备的根分区。这是一个越狱应用程序,因此安装在 /Applications 目录下。使用 NSFileManager 写入根文件系统时,写入操作失败并显示"Permission Denied"错误。

看起来我的应用程序没有以 root 身份运行。虽然它安装在 /Applications 目录下,但是如何使我的应用程序成为 root 呢?

1个回答

22

确实如此,该应用程序必须以root身份运行才能访问非移动目录。在与Optimo和Saurik讨论后,我终于找到了获取root权限的正确方法。

  1. 在main()函数中添加setuid(0);setgid(0);
  2. 正常构建应用程序。
  3. 创建一个可执行文件的副本并将其放入应用程序包中。
  4. 打开原始可执行文件并用以下脚本替换其内容:

    #!/bin/bash
    dir=$(dirname "$0")
    exec "${dir}"/COPIED_EXECUTABLE_NAME "$@"
    

    iOS上直接启动根应用程序会失败。因此,我们使用一个启动根可执行文件的脚本替换应用程序的主要可执行文件。

  5. 在终端中导航到应用程序包中。

  6. chmod 0775原始可执行文件并chmod 6775复制的可执行文件。
  7. 将应用程序包复制到设备的 /Applications 中。重新启动 SpringBoard,你就可以开始使用了。如果应用程序无法启动,则在设备上重复步骤 5 和 6。

请问您能否通过编程指导步骤三及其后续操作的进行吗? - Deepika Lalra
你好,我在哪里可以找到这个路径 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDirectory = [paths objectAtIndex:0]; 因为我无法进行调试。 - Dhekra Zaied
我正在使用iOS 6,如果我将应用程序包移动到/Applications目录下,它不会出现在SpringBoard上 :( - dvkch
已解决:我没有删除通过Xcode安装的旧应用程序,因此Springboard没有将具有相同rfcid的新应用程序注册。 - dvkch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接