iOS 应用的根权限

15
我正在开发一个面向越狱iOS设备的应用程序,它旨在帮助自动化一些任务。我需要在 /private/var/mobile/Library 中创建一个简单的文本文件(实际上是 .lua 文件)。显然,调试器会抛出访问被拒绝的异常。目前为了测试,该应用程序的名称为“CreateFile”。
我已经尝试了以下步骤来获得 root 访问权限:
  1. 正常构建应用程序。
  2. 在应用程序包中创建可执行文件的副本。
  3. 打开原始可执行文件并将其内容替换为此脚本:

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

    在iOS上直接启动根应用程序会失败。因此,我们将该应用程序的主可执行文件替换为启动根可执行文件的脚本。

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

    chmod 0775 原始可执行文件并chmod 6775 复制的可执行文件。

    将应用程序包复制到设备上的 /Applications。重新启动 SpringBoard,然后您就可以使用它了。如果应用程序无法启动,则在设备上重复第 5 和第 6 步。

    使用这种方法,我可以成功将应用程序安装到 /Applications 文件夹并启动它,但是我仍然认为我没有 root 权限,因为一旦应用程序尝试写操作,它就会崩溃。

    如果有人能为这种情况提供一些帮助,我将不胜感激!

    编辑:

    按照 @creker 的建议进行了一些额外的测试。当我尝试在允许的目录(如应用程序文档)中创建文件时,它可以完全创建而没有问题。因此,我确定文件创建不会导致崩溃,而是仅与无法访问的文件夹路径有关。

    也根据 @creker 的建议尝试在不使用启动脚本的情况下将应用程序安装到 /Applications。这种方式打开应用程序会崩溃。如果我在安装后将应用程序可执行文件的权限设置为 775,则该应用程序将打开,但在尝试创建文件时仍然会崩溃。

    我查看了来自崩溃报告器的 syslog,以下是崩溃行:

    System.UnauthorizedAccessException: Access to the path "/private/var/mobile/Library/test.txt" is denied
    

    仍然希望解决这个问题,欢迎提出任何想法!


当我尝试写入该目录时,由于沙盒规则的限制,我会收到访问被拒绝的错误。那么绕过这个问题的步骤有什么不同吗? - Kikootwo
1
不,你只需要在/Applications目录中。你甚至不需要启动脚本。也许你的应用程序崩溃是因为其他原因。 - creker
进行了一些额外的测试 @creker 有新的想法吗? - Kikootwo
你正在测试哪个iOS版本? - creker
越狱设备运行的是iOS 9.0.2,但应用程序构建的目标版本为8.0+。 - Kikootwo
显示剩余4条评论
1个回答

1
在iOS上获得root访问权限越来越困难,即使进行越狱也是如此。每次发布都会减少root账户的特权,但仍然可以使用此账户。您可以通过确保您的应用程序二进制文件归属于root:wheel,并设置SETUID位来实现此操作。
chown root:wheel app_binary
chmod +s app_binary

然后在您的应用程序中添加以下内容以利用它

@autoreleasepool
{
    // Set uid and gid
    if (!(setuid(0) == 0 && setgid(0) == 0))
    {
        NSLog(@"Failed to gain root privileges, aborting...");
        exit(EXIT_FAILURE);
    }

    // Launch app
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
    /* you'll need to modify this return line to match your app */
}

您还需要一个启动脚本才能在iOS 6以上版本中使用此功能。

#!/bin/bash
myAppPath=$(dirname "$0")
exec "$myAppPath"/myApp_ "$@"

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