某音防dump手法

用frida-ios-dump对某音进行dump,然后反汇编分析AwemeCore,发现这个框架里的objc_selrefs区域全是错误地址,导致一个OC类的方法都没解析成功,全是空的。因为AwemeCore是某音的一个framework,而frida-ios-dump只对text段做dump处理,而objc_selrefs的内容是在data段,这部分没dump下来,猜测是不是这个原因导致解析OC类方法名失败呢?这是某音的anti-dump手段?有人踩过坑吗

2 个赞


都是这种异常地址,导致解析出来都是问号

1 个赞

这个有解决吗?我也同求此解

你说的解决指解决到什么程度,完全恢复是吃力不讨好

静态没办法dump,但可以采取动态的方式。

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        [self classList:NSClassFromString(@"TTNetworkManager") recursion:YES keyWord:@""];
    });
}

+ (void)classList:(Class)defaultClass recursion:(BOOL)recursion keyWord:(NSString *)keyword {
    [self getClassMethods:defaultClass];
    int count = objc_getClassList(NULL, 0);
    Class *classes = (Class *)malloc(sizeof(Class) * count);
    objc_getClassList(classes, count);
    for (int i = 0; i < count; i++) {
        if (defaultClass == class_getSuperclass(classes[i])) {
            NSString * className = NSStringFromClass(classes[i]);
            if (recursion) {
                if ([keyword length] > 0 && ![className containsString:keyword]) {
                    return;
                } else {
                    [self classList:classes[i] recursion: recursion keyWord: keyword];
                }
            }
        }
    }
    free(classes);
}

+ (void)getClassMethods:(Class)defaultClass {
    unsigned int count = 0;
    Ivar *members = class_copyIvarList(defaultClass, &count);
    for(int i = 0; i < count; i++) {
        Ivar ivar = members[i];
        const char *memberName = ivar_getName(ivar);
        const char *memberType = ivar_getTypeEncoding(ivar);
        printf("@property %s %s\n", memberType, memberName);
    }
    free(members);
    
    NSString * className = NSStringFromClass(defaultClass);
    Method *methodList = class_copyMethodList(defaultClass, &count);
    for (int i = 0; i<count; i++) {
        SEL name = method_getName(methodList[i]);
        printf("-[%s %s] %p\n", className.UTF8String, NSStringFromSelector(name).UTF8String, method_getImplementation(methodList[i]));
    }
    free(methodList);
    
    Class metaClass = object_getClass(defaultClass);
    Method *classMethods = class_copyMethodList(metaClass, &count);
    for (int i = 0; i < count; i++) {
        SEL name = method_getName(classMethods[i]);
        printf("+[%s %s] %p\n", className.UTF8String, NSStringFromSelector(name).UTF8String, method_getImplementation(classMethods[i]));
    }
    free(classMethods);
}

通过lldb的image lookup命令,查到IDA中具体对应哪个函数

如果你不嫌慢的话,可以直接传个NSObject进去。

1 个赞

他应该是想IDA分析

好代码 马上集成到frida 里去

已经有了啊。只不过在Aweme上不好使,应用启动会闪退

我这些日子研究终于搞明白 为什么 Aweme 系列不行。这代码我看过

为啥

删除就没意思了。

删了啥,你不是搞明白了吗

我是附和了一个 为啥.回复错人就删了.所以是为啥 :laughing:

这个怎么用啊

写个插件注入进去使用

求解,有人知道怎么实现的么。 现在等保很多使用class-dump扫描的