美文网首页
iOS 检测运行环境

iOS 检测运行环境

作者: FlowYourHeart | 来源:发表于2020-02-20 16:10 被阅读0次

检查是运行环境是模拟器或越狱环境

+ (BOOL)checkRuntimeEnvironment {
    NSString *message = nil;
    if (TARGET_OS_SIMULATOR && !TFDEBUG) {
        // 模拟器环境
      message = TFLocalizedString(@"environment.simulator");
       
    } else if ([self isJailBreak]) {
        message = TFLocalizedString(@"environment.jailBreak");
    }
    if (message.length > 0) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:TFLocalizedString(@"tf.hint.title") message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:TFLocalizedString(@"tf.sure"), nil];
        [alert show];
        return NO;
    }
    return YES;
}

+ (BOOL)isJailBreak {
    if ([[NSFileManager defaultManager] fileExistsAtPath:@"User/Applications/"]) {
        NSLog(@"The device is jail broken!");
        NSArray *appList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"User/Applications/" error:nil];
        NSLog(@"appList = %@", appList);
        return YES;
    }
    NSLog(@"The device is NOT jail broken!");
    return NO;
}

+ (BOOL)checkBundleTeamIdentifier {
    NSString *teamIdentifier = [self bundleTeamIdentifier];
    if (teamIdentifier.length > 0) {
        teamIdentifier = [teamIdentifier md5String];
    }
    if (teamIdentifier != nil && ![teamIdentifier isEqualToString:@"d92554cdc5fc16c74e880cd81"]) {
        return NO;
    }
    return YES;
}

+ (NSString *)bundleTeamIdentifier {
    NSString *mobileProvisionPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"embedded.mobileprovision"];
    FILE *fp=fopen([mobileProvisionPath UTF8String],"r");
    char ch;
    if(fp==NULL) {
        printf("file cannot be opened/n");
        return NULL;
    }
    NSMutableString *str = [NSMutableString string];
    while((ch=fgetc(fp))!=EOF) {
        [str appendFormat:@"%c",ch];
    }
    fclose(fp);
    
    NSString *teamIdentifier = nil;
    NSRange teamIdentifierRange = [str rangeOfString:@"<key>com.apple.developer.team-identifier</key>"];
    if (teamIdentifierRange.location != NSNotFound) {
        NSInteger location = teamIdentifierRange.location + teamIdentifier.length;
        NSInteger length = [str length] - location;
        if (length > 0 && location >= 0) {
            NSString *newStr = [str substringWithRange:NSMakeRange(location, length)];;
            NSArray *val = [newStr componentsSeparatedByString:@"</string>"];
            NSString *v = [val firstObject];
            NSRange startRange = [v rangeOfString:@"<string>"];
            
            NSInteger newLocation = startRange.location + startRange.length;
            NSInteger newLength = [v length] - newLocation;
            if (newLength > 0 && location >= 0) {
                teamIdentifier = [v substringWithRange:NSMakeRange(newLocation, newLength)];
            }
        }
    }
    return teamIdentifier;
}

在main.m 修改 仿调试

#import <dlfcn.h>

typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
#if !defined(PT_DENY_ATTACH)
#define PT_DENY_ATTACH 31
#endif  // !defined(PT_DENY_ATTACH)

void disable_gdb() {
    void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
    ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace");
    ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);
    dlclose(handle);
}
int main(int argc, char * argv[]) {
#ifndef DEBUG
    disable_gdb();
#endif
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

相关文章

网友评论

      本文标题:iOS 检测运行环境

      本文链接:https://www.haomeiwen.com/subject/npejuctx.html