我的 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),无论如何,如果我有它,我不会问这个问题。
我希望有人能解决这个问题。