How do I detect that an iOS app is running on a jailbroken phone?

后端 未结 17 1550
情书的邮戳
情书的邮戳 2020-11-22 10:48

If I want my app to behave differently on a jailbroken iPhone, how would I go about determining this?

17条回答
  •  礼貌的吻别
    2020-11-22 11:33

    This is a code that combine some answers I found for this need, and will give you much higher success rate :

    BOOL isJailbroken()
    {
    #if !(TARGET_IPHONE_SIMULATOR)
    
       if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"] ||
           [[NSFileManager defaultManager] fileExistsAtPath:@"/Library/MobileSubstrate/MobileSubstrate.dylib"] ||
           [[NSFileManager defaultManager] fileExistsAtPath:@"/bin/bash"] ||
           [[NSFileManager defaultManager] fileExistsAtPath:@"/usr/sbin/sshd"] ||
           [[NSFileManager defaultManager] fileExistsAtPath:@"/etc/apt"] ||
           [[NSFileManager defaultManager] fileExistsAtPath:@"/private/var/lib/apt/"] ||
           [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]])  {
             return YES;
       }
    
       FILE *f = NULL ;
       if ((f = fopen("/bin/bash", "r")) ||
          (f = fopen("/Applications/Cydia.app", "r")) ||
          (f = fopen("/Library/MobileSubstrate/MobileSubstrate.dylib", "r")) ||
          (f = fopen("/usr/sbin/sshd", "r")) ||
          (f = fopen("/etc/apt", "r")))  {
             fclose(f);
             return YES;
       }
       fclose(f);
    
       NSError *error;
       NSString *stringToBeWritten = @"This is a test.";
       [stringToBeWritten writeToFile:@"/private/jailbreak.txt" atomically:YES encoding:NSUTF8StringEncoding error:&error];
       [[NSFileManager defaultManager] removeItemAtPath:@"/private/jailbreak.txt" error:nil];
       if(error == nil)
       {
          return YES;
       }
    
    #endif
    
       return NO;
    }
    

提交回复
热议问题