我正在开发针对越狱iOS设备的应用。它有助于自动执行某些任务。我需要在/ private / var / mobile / Library中创建一个简单的文本文件(实际上是.lua文件)。显然,调试器会抛出访问被拒绝的异常。该应用程序现在被命名为“CreateFile”,用于测试。
我尝试了以下步骤来获取root权限:
打开原始可执行文件并使用以下脚本替换其内容:
#!/bin/bash
dir=$(dirname "$0")
exec "${dir}"/CreateFile "$@"
在iOS上直接启动根应用程序失败。因此,我们使用启动根可执行文件的脚本替换应用程序的主可执行文件。
在终端中,导航至应用包。
chmod 0775
原始可执行文件和chmod 6775
复制的可执行文件。使用此方法,我可以成功将应用程序安装到/ Applications文件夹并启动它,但是我希望我仍然没有root权限,因为只要应用程序尝试写入操作,它就会崩溃。
如果有人能对这种情况有所了解,我将非常感激!
编辑:
在@creker的建议下做了一些额外的测试。当我尝试在应用程序的文档中创建允许目录中的文件时,它创建就好了,没有任何问题。因此,我确信文件创建不会导致崩溃,并且它只是无法访问的文件夹路径。
同样在@creker的建议下,我尝试将应用程序安装到/ Applications而没有任何启动脚本。应用程序以这种方式打开时崩溃。如果我在安装后将应用程序可执行文件chmod到775,则应用程序将打开但在尝试创建文件时仍会崩溃。
我查看了崩溃记者的系统日志。这是崩溃线:
System.UnauthorizedAccessException: Access to the path "/private/var/mobile/Library/test.txt" is denied
仍然希望能够解决这个问题,欢迎任何想法!
答案 0 :(得分: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_ "$@"