1

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

这是我的 Scythe.c(基于来自 Icy 的 Trichlorotrifluoroethane.c):

#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),无论如何,如果我有它,我不会问这个问题。

我希望有人能解决这个问题。

4

1 回答 1

2

我完全反对对 Installer 或任何其他 Cydia 替代品做任何事情。我只是为了让人们知道在遇到类似事情时该怎么做。

不过,MobileSubstrate 不会将扩展加载到根应用程序中。您必须dlopen从根应用程序内部访问 MobileSubstrate 扩展(例如 Cydia 从其中加载 Activator)。

但请注意,这样做有很高的风险,并且可能会破坏很多东西(就像安装程序一样,bleh),因此您通常不应该尝试绕过它。

于 2012-08-05T22:20:28.170 回答