【问题标题】:Load MobileSubstrate in setuid iPhone app在 setuid iPhone 应用程序中加载 MobileSubstrate
【发布时间】:2011-11-20 15:48:23
【问题描述】:

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

这是我的 Scythe.c(基于 Icy 的三氯三氟乙烷.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),无论如何,如果我有它,我不会问这个问题。

希望有人能解决问题。

【问题讨论】:

    标签: iphone root setuid execve


    【解决方案1】:

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

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

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

    【讨论】:

    • 为了一些安全问题,我想知道如何防止MobileSubstrate在普通APP Store应用中加载dylibs。有什么想法吗?
    • Apple 想要阻止 MobileSubstrate 在他们的东西中加载 dylib,因为它们不想被修改。
    • 我的意思是如何防止应用在越狱设备上加载 ms 扩展。
    • Apple 的产品也是如此......你不能简单地阻止它 -_-
    猜你喜欢
    • 2010-09-08
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多