前面一切都正常,到最后一步class-dump --arch armv7 Target.decrypted之后,出现下面的错误:
2015-03-20 00:35:10.401 class-dump[846:62895] Error: Cannot find offset for address 0x140045f4 in stringAtAddress:
我google了半天,也在咱论坛里搜索了,没找到遇到类似问题的人,请教一下出这个错是怎么回事啊?谢谢了
前面一切都正常,到最后一步class-dump --arch armv7 Target.decrypted之后,出现下面的错误:
2015-03-20 00:35:10.401 class-dump[846:62895] Error: Cannot find offset for address 0x140045f4 in stringAtAddress:
我google了半天,也在咱论坛里搜索了,没找到遇到类似问题的人,请教一下出这个错是怎么回事啊?谢谢了
更新,本人亲手,在不断地学习中,刚才我用同样的方法去给qq砸壳并且class-dump,成功了。我上面砸壳的软件是小米运动(MiBand.app),class-dump报错的原因有没有可能是小米运动添加了反class-dump的一些手段?
我刚才试了一下,确实用class-dump和class-dump-z都失败了,可能是加了保护。这个帖子提到的一种anti-class-dump的方法是修改MachO头部的,我还没有验证小米是不是用的这种方式。
不过是IDA可以正常解析这个App的,可以暂时采用这个方案
我看了一下,貌似没问题。但是我注意到这个App用到了一些swift代码,我不确定是不是用swift写的;而class-dump目前貌似没法作用于swift语言,不知道是不是这个原因
(NSString *)stringAtAddress:(NSUInteger)address;
{
const void *ptr;
if (address == 0)
return nil;
CDLCSegment *segment = [self segmentContainingAddress:address];
if (segment == nil) {
NSLog(@“Error: Cannot find offset for address 0x%08lx in stringAtAddress:”, address);
exit(5);
return nil;
}
if ([segment isProtected]) {
NSData *d2 = [segment decryptedData];
NSUInteger d2Offset = [segment segmentOffsetForAddress:address];
if (d2Offset == 0)
return nil;
ptr = (uint8_t *)[d2 bytes] + d2Offset;
return [NSString alloc] initWithBytes:ptr length:strlen(ptr) encoding:NSASCIIStringEncoding];
}
NSUInteger offset = [self dataOffsetForAddress:address];
if (offset == 0)
return nil;
ptr = (uint8_t *)[self.data bytes] + offset;
return [NSString alloc] initWithBytes:ptr length:strlen(ptr) encoding:NSASCIIStringEncoding];
}
我看class-dump的源码报这个错的地方是这儿,看起来和segment有关,是不是还是MachO File了?
不是很清楚,我没有研究过,但感觉是swift的问题
今天在class-dump一个app时,也是这样的错误,搜到这里来了,这个app也是用swift写的。。。10.0开始看来苹果要主推swift了,那囧了。
我觉得是swift的问题,目前有没有能dump swift file的工具呢。。。
Swift没法dump,具体跟机制有关。
我也遇到这个问题了,我神现在有没有好的解决办法呀
试试这个。
谢谢庆哥
我是classdump的时候遇到了Segmentation fault: 11
感谢提供的工具 解决了这个问题
感谢,解决了
谢谢 解决了 么么哒