我的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),无论如何,如果我拥有它,我就不会问这个问题。
我希望有人能解决问题。
答案 0 :(得分:2)
我完全反对做任何有关安装程序或任何其他Cydia替代方案的事情。我只是发布这个,让人们知道在类似的事情上该怎么做。
仍然,MobileSubstrate不会将扩展加载到根应用程序中;你必须从你的根应用程序内部dlopen
MobileSubstrate扩展(比如Cydia从里面加载Activator)。
但请注意,这样做风险很大,可能会破坏很多东西(就像有安装程序一样),所以你通常不应该试图绕过它。