学习《用dumpdecrypted给App砸壳》所遇到的问题

前面一切都正常,到最后一步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了半天,也在咱论坛里搜索了,没找到遇到类似问题的人,请教一下出这个错是怎么回事啊?谢谢了

2 个赞

更新,本人亲手,在不断地学习中,刚才我用同样的方法去给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,具体跟机制有关。

我也遇到这个问题了,我神现在有没有好的解决办法呀

试试这个。

2 个赞

谢谢庆哥

我是classdump的时候遇到了Segmentation fault: 11
感谢提供的工具 解决了这个问题

感谢,解决了

谢谢 解决了 么么哒