二进制文件OC符号恢复求助

某APP更新后,其二进制文件使用class-dump已无法dump出头文件【确切的说是,可以dump出头文件,但头文件里没有任何方法、属性、变量】

而且用hopper或是ida解析出来也看不到任何oc类和方法,所有的方法都被替换成sub_xxx的形式。
之前论坛里有说使用restore-symbol可以恢复,尝试了好几个版本,均以失败告终,参考的帖子有:

之后有说是class-dump版本的问题,然后也尝试了这个方案:仍然不行。。。。
https://github.com/HeiTanBc/restore-symbol

后面尝试了大佬@ 4ch12dy 的frida方式:

通过注入frida脚本能拿到二进制模块中所有的类以及类的所有方法 并能根据模块的偏移计算出方法在二进制文件中的地址,进而对应到hopper里进行分析:

但现在的问题是,所有这些方法里无法再看到任何调用其他selector的明文方法名,上面截图红框部分,没有strip符号之前 是能看到具体调用了哪些其他方法名的,所以还是得回归到restore_symbol的解决方式,直接恢复oc符号重新生成新的二进制文件。

求助 二进制文件OC符号恢复的最新姿势啊!!

1 个赞

啥 app ?使用 restore_symbol 报啥错?

没有报错 新生成的二进制文件反汇编还是看不到oc类信息

1 个赞

dy?做了AntiClassDump吧

可能是啊 还没找到解决办法

1 个赞

导出头文件 .h里面全是空的,这是什么操作

某音吗哈哈哈

你所面对的的方案,可能就是4ch12dy大佬搞的

1 个赞

等一个怎么搞得教程

1 个赞

我觉得可以lldb导出,有时间的同学可以试验一下

建议给dump出的头文件每个load方法下一个断点,然后打印一下 _shortMethodDescription

1 个赞

字节家好几个产品都如此了,某小说也是

1 个赞

***** 可执行文件才 70+KB,里面的确没有OC方法的信息。
*****Core.framework 动态库 200+MB,明显逻辑放这里面了吧,里面有 OC 方法信息。

对 ***** 做符号恢复当然没用,可以对 *****Core 进行操作。

一个个谜语人 :sweat_smile:,整的我也好怕,这也没干啥呀 :joy:

就是*wemeCore,自己试试看看吧

1 个赞

是啊,就是什么都没干啊,哈哈哈哈

1 个赞

原理跟windows的隐藏输入表原理一样,这个app是在dylib的类load方法里面把加密的字符串,符号,类方法属性等数据恢复回指定位置,在app运行后dump出数据自己处理重新组合到mach-o文件即可让ida正常解析,需要简单了解下mach-o文件结构

1 个赞

动态导出然后写入到文件, 但比不上class-dump, 至少能看了

+ (NSString *)dumpTargetClass:(NSString *)cls_name {
    Class cls = objc_getClass([cls_name UTF8String]);
    NSLog(@"≥ cls %@", cls);
    id ret = [cls performSelector:@selector(_methodDescription)];
    NSLog(@"≥ %@", ret);
    NSMutableString *str = [[NSMutableString alloc]init];
    [str appendString:ret];
    return str;
}
4 个赞

这个得提前获取到所有的类名才能导出来是么?

是的, 不过这是个笨办法, 你也可以基于这个改改

frida可以获取所有类名和方法