某APP更新后,其二进制文件使用class-dump已无法dump出头文件【确切的说是,可以dump出头文件,但头文件里没有任何方法、属性、变量】
而且用hopper或是ida解析出来也看不到任何oc类和方法,所有的方法都被替换成sub_xxx的形式。
之前论坛里有说使用restore-symbol可以恢复,尝试了好几个版本,均以失败告终,参考的帖子有:
之后有说是class-dump版本的问题,然后也尝试了这个方案:仍然不行。。。。
后面尝试了大佬@ 4ch12dy 的frida方式:
通过注入frida脚本能拿到二进制模块中所有的类以及类的所有方法 并能根据模块的偏移计算出方法在二进制文件中的地址,进而对应到hopper里进行分析:
但现在的问题是,所有这些方法里无法再看到任何调用其他selector的明文方法名,上面截图红框部分,没有strip符号之前 是能看到具体调用了哪些其他方法名的,所以还是得回归到restore_symbol的解决方式,直接恢复oc符号重新生成新的二进制文件。
求助 二进制文件OC符号恢复的最新姿势啊!!
1 个赞
啥 app ?使用 restore_symbol 报啥错?
没有报错 新生成的二进制文件反汇编还是看不到oc类信息
1 个赞
建议给dump出的头文件每个load方法下一个断点,然后打印一下 _shortMethodDescription
1 个赞
***** 可执行文件才 70+KB,里面的确没有OC方法的信息。
*****Core.framework 动态库 200+MB,明显逻辑放这里面了吧,里面有 OC 方法信息。
对 ***** 做符号恢复当然没用,可以对 *****Core 进行操作。
一个个谜语人 ,整的我也好怕,这也没干啥呀
dming
( dming)
17
原理跟windows的隐藏输入表原理一样,这个app是在dylib的类load方法里面把加密的字符串,符号,类方法属性等数据恢复回指定位置,在app运行后dump出数据自己处理重新组合到mach-o文件即可让ida正常解析,需要简单了解下mach-o文件结构
1 个赞
Joooo
18
动态导出然后写入到文件, 但比不上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;
}
5 个赞