app 做了 bundle id 校验应该如何绕过

使用 ipapatch 逆向了一个 app, 但是一登录就 crash. 猜测是做了 bundle id 校验. 但是要编译到真机上, 需要打包证书, 就必须改 bundle id. 我能想到的就是得在越狱机下处理或者 hook 获取 bundleid 的方法. 但是后者我担心会影响其他系统逻辑导致异常. 请问有更好的办法吗?

同求, 我好象也是这样 我修改了 [bundle infoDictionary] 还是不管用

1 个赞

如果硬编码了bundleid,可以静态分析后直接修改二进制文件,改成你自己的。
长度问题的话你就按二进制里的长度来,反正自己的bundleID随便改。

1 个赞

原本的二进制文件才几十k,需要一个一个分析它framework下所有的framework库?

参考我的代码:

%hook NSBundle

%new

  • (BOOL)isCallFromTaker{
    NSArray *address = [NSThread callStackReturnAddresses];
    Dl_info info = {0};
    if(dladdr((void *)[address[2] longLongValue], &info) == 0){
    return NO;
    }
    NSString *path = [NSString stringWithUTF8String:info.dli_fname];
    if ([path hasPrefix:NSBundle.mainBundle.bundlePath]) {
    // 二进制来自 ipa 包内
    if ([path.lastPathComponent isEqualToString:@“libTakerDylib.dylib”]) {
    // 二进制是插件本身
    return NO;
    } else {
    // 二进制是app
    return YES;
    }
    } else {
    // 二进制是系统或者越狱插件
    return NO;
    }
    }

  • (id)bundleIdentifier{

    if([self isCallFromTaker]){
    return @“your bundleIdentifier”;
    }
    return %orig;
    }

%end

1 个赞

要打包到真机, 不能改包的 bundleid 吧?

wildcard provisioning profile 即可