美文网首页安全攻防
11. Tweak工作原理

11. Tweak工作原理

作者: 泰克2008 | 来源:发表于2017-08-21 08:05 被阅读18次

    1. Cydia Substrate 和 Mobile Substrate

    • Cydia Substrate 原名为 Mobile Substrate 已经正式更名为 Cydia Substrate。
    • 它是越狱后cydia插件/软件(主要指theos开发的tweak)运行的一个基础依赖包。提供软件运行的公共库,可以用来动态替换内存中的代码、数据等,所以iOS系统越狱环境下安装绝大部分插件,必须首先安装Cydia Substrate。
    • Cydia Substrate主要由3部分组成:MobileHooker,MobileLoader 和 safe mode。

    2.MobileHooker

    MobileHooker用于替换覆盖系统的方法,这个过程被称为Hooking(挂钩)
    它主要包含两个函数:

    void MSHookMessageEx(Class class, SEL selector, IMP replacement, IMP *result);
    
    void MSHookFunction(void*function,void* replacement,void** p_original);
    
    MSHookMessageEx 主要作用于Objective-C函数
    
    MSHookFunction 主要作用于C和C++函数
    
    Logos语法%hook就是对此函数做了一层封装,让编写hook代码变的更直观,上面的例子用的就是logos语法。
    
    • MSHookMessageEx

    http://www.cydiasubstrate.com/api/c/MSHookMessageEx/

    void MSHookMessageEx(Class _class, SEL message, IMP hook, IMP *old);
    
    NSString *(*oldDescription)(id self, SEL _cmd);
    
    // implicit self and _cmd are explicit with IMP ABI
    NSString *newDescription(id self, SEL _cmd) {
        NSString *description = (*oldDescription)(self, _cmd);
        description = [description stringByAppendingString:@"!"];
        return description;
    }
    
    MSHookMessageEx(
          [NSObject class], @selector(description),&newDescription, &oldDescription
    );
    
    • MSHookFunction

    http://www.cydiasubstrate.com/api/c/MSHookFunction/

    void MSHookFunction(void *symbol, void *hook, void **old);
    
    void *(*oldConnect)(int, const sockaddr *, socklen_t);
    
    void *newConnect(int socket, const sockaddr *address, socklen_t length) {
        if (address->sa_family == AF_INET) {
            sockaddr_in *address_in = address;
            if (address_in->sin_port == htons(6667)) {
                sockaddr_in copy = *address_in;
                address_in->sin_port = htons(7001);
                return oldConnect(socket, &copy, length);
            }
        }
        
        return oldConnect(socket, address, length);
    }
    
    MSHookFunction(&connect, &newConnect, &oldConnect);
    

    3. MobileLoader

    • MobileLoader 将tweak插件注入到第三方应用程序中(动态注入:ptrace)
    • 启动时MobileLoader会根据/Library/MobileSubstrate/DynamicLibraries/目录中plist文件指定的作用范围,有选择的在第三方进程空间里通过dlopen函数加载同名的dylib。
    • 每一个.dylib文件都会有一个同名的.plist文件。.plist文件的作用就是用来指定tweak插件的作用对象。
    luz-iphone:/Library/MobileSubstrate/DynamicLibraries root# pwd
    /Library/MobileSubstrate/DynamicLibraries
    
    luz-iphone:/Library/MobileSubstrate/DynamicLibraries root# ls
    AppList.dylib@         MFService.dylib*         MyFirstReProject.plist   afc2dService.dylib*
    AppList.plist          MFService.plist*         PreferenceLoader.dylib*  afc2dService.plist
    MFAccelerator.dylib*   MFServiceEx.dylib*       PreferenceLoader.plist   patcyh.dylib@
    MFAccelerator.plist*   MFServiceEx.plist*       RHRevealLoader.dylib*    patcyh.plist
    MFHongbaoRobot.dylib*  MobileSafety.dylib*      RHRevealLoader.plist
    MFHongbaoRobot.plist*  MobileSafety.plist       RocketBootstrap.dylib@
    MFService.bundle/      MyFirstReProject.dylib*  RocketBootstrap.plist
    

    4. safe mode

    • 因为APP程序质量参差不齐崩溃再所难免,tweak本质是dylib,寄生在别人进程里,如注入Springboard等,系统进程一旦出错,可能导致整个进程崩溃,崩溃后就会造成iOS瘫痪。
    • 所以CydiaSubstrate引入了安全模式,在安全模式下所有基于CydiaSubstratede 的三方dylib都会被禁用,便于查错与修复。

    删除Tweak插件包

    ssh到iPhone
    dpkg -r com.iosre.myfirstreprojec 可以删除对应的Tweak插件包
    

    相关文章

      网友评论

        本文标题:11. Tweak工作原理

        本文链接:https://www.haomeiwen.com/subject/lbzqdxtx.html