在setuid iPhone应用程序中加载MobileSubstrate

时间:2011-11-20 15:48:23

标签: iphone root setuid execve

我的iPod touch(Installer4)上有一个root应用程序,我希望它加载MobileSubstrate,这样我就可以开始进行调整来修复它的bug。我知道root应用程序有一个中间可执行文件,可以在不使应用程序崩溃的情况下为其提供6755权限,在Installer的情况下,它被命名为Scythe。我尝试使用execve()加载MobileSubatrate但没有成功。该应用程序不会崩溃,它仍然是root用户,但MobileSubatrate将无法加载:/(我知道这是因为Activator不起作用)。

这是我的Scythe.c(基于来自Icy的三氯三氟乙烷):

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <dlfcn.h>

int main(int argc, char * argv[], char * envp[]) {
    char fullpath[1024];

    strncpy(fullpath, argv[0], strlen(argv[0]) - strlen("Scythe"));
    strcat(fullpath, "Installer");

    char* newArgv[] = { fullpath, NULL };

    char* newEnvp[] = { "LD_PRELOAD=/Library/MobileSubstrate/MobileSubstrate.dylib", NULL };

    return execve(fullpath, newArgv, newEnvp);
}

正如您所看到的,我已经研究过如何使用execve()加载dylib,我发现了LD_PRELOAD和LD_LIBRARY_PATH,但两者都无效。而且我没有安装程序的源代码来执行dlopen(“/ Library / MobileSubstrate / MobileSubstrate.dylib”,RTLD_LAZY),无论如何,如果我拥有它,我就不会问这个问题。

我希望有人能解决问题。

1 个答案:

答案 0 :(得分:2)

我完全反对做任何有关安装程序或任何其他Cydia替代方案的事情。我只是发布这个,让人们知道在类似的事情上该怎么做。

仍然,MobileSubstrate不会将扩展加载到根应用程序中;你必须从你的根应用程序内部dlopen MobileSubstrate扩展(比如Cydia从里面加载Activator)。

但请注意,这样做风险很大,可能会破坏很多东西(就像有安装程序一样),所以你通常不应该试图绕过它。