Как обнаружить, что приложение работает на джейлбрейк-устройстве?
Я только что выпустил приложение для iOS, но я не уверен, как сделать приложение безопасным для использования jailbrakers.
Могу ли я что-то сделать, чтобы мое приложение не работало над джейлбрейковыми устройствами?
Ответы
Ответ 1
С помощью кода вы можете определить, работает ли приложение на сломанном устройстве или нет. Таким образом, вы можете открыть предупреждение и закрыть приложение. Вы можете делать все, что хотите. Вот учебник для него:
http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html
и вот сообщение о переполнении стека:
Как определить, что приложение iOS работает на взломанном телефоне?
Кроме того, если вы хотите полное решение, вы можете увидеть в tapjoy код SDK. Они обнаруживают взломанный iPhone. Вот тапфой, URL https://www.tapjoy.com/
Ответ 2
Проверьте эти пути
+ (BOOL)isJailBroken {
#ifdef TARGET_IPHONE_SIMULATOR
return NO;
#endif
NSArray *paths = @[@"/bin/bash",
@"/usr/sbin/sshd",
@"/etc/apt",
@"/private/var/lib/apt/",
@"/Applications/Cydia.app",
];
for (NSString *path in paths) {
if ([self fileExistsAtPath:path]) {
return YES;
}
}
return NO;
}
+ (BOOL)fileExistsAtPath:(NSString *)path {
FILE *pFile;
pFile = fopen([path cStringUsingEncoding:[NSString defaultCStringEncoding]], "r");
if (pFile == NULL) {
return NO;
}
else
fclose(pFile);
return YES;
}
Кроме того, вы можете посмотреть https://github.com/OneSignal/OneSignal-iOS-SDK/blob/master/iOS_SDK/OneSignalSDK/Source/OneSignalJailbreakDetection.m
Ответ 3
Попробуйте найти файл, созданный cydia или jailbroken. Или попробуйте написать файл вне приложения blackbox. Если вам это удастся, устройство скомпрометировано /jailbroken:)
- (BOOL)jailbroken
{
NSFileManager * fileManager = [NSFileManager defaultManager];
return [fileManager fileExistsAtPath:@"/private/var/lib/apt/"];
}
Ответ 4
Вы можете определить, является ли устройство jailBroken или нет, проверив следующее
- Установлена Cydia
- Проверьте некоторые системные пути
- Может выполнять проверку целостности песочницы
- Выполнение проверки символической ссылки
- Убедитесь, что вы создаете и записываете файлы вне своей песочницы
Существует библиотека с открытым исходным кодом, которую я создал из разных статей и книг, попробуйте.
Ответ 5
-(BOOL) isJailbroken
{
#if TARGET_IPHONE_SIMULATOR
return NO;
#else
FILE *f = fopen("/bin/bash", "r");
if (errno == ENOENT)
{
// device is NOT jailbroken
fclose(f);
NSLog(@"no");
return NO;
}
else {
// device IS jailbroken
fclose(f);
NSLog(@"yes");
return YES;
}
#endif
}
Ответ 6
Основанный на @karim отвечает на слегка измененную версию:
func hasJailbreak() -> Bool {
#if arch(i386) || arch(x86_64)
println("Simulator")
return false
#else
var fileManager = NSFileManager.defaultManager()
if(fileManager.fileExistsAtPath("/private/var/lib/apt")) {
println("Jailbroken Device")
return true
} else {
println("Clean Device")
return false
}
#endif
}
Ответ 7
Даже если ваше устройство заблокировано, приложения ipa могут получить доступ только к собственным песочницам, поэтому
Если устройство либо взломан, либо нет, ваш метод вернет NO:)
Ищите другой путь
Также, если вы пытаетесь получить доступ к нему, но ваше приложение для публикации песочницы в appstore может столкнуться с проблемами
Ответ 8
/**
Detect that the app is running on a jailbroken device or not
- returns: bool value for jailbroken device or not
*/
public class func isDeviceJailbroken() -> Bool {
#if arch(i386) || arch(x86_64)
return false
#else
let fileManager = FileManager.default
if (fileManager.fileExists(atPath: "/bin/bash") ||
fileManager.fileExists(atPath: "/usr/sbin/sshd") ||
fileManager.fileExists(atPath: "/etc/apt")) ||
fileManager.fileExists(atPath: "/private/var/lib/apt/") ||
fileManager.fileExists(atPath: "/Applications/Cydia.app") ||
fileManager.fileExists(atPath: "/Library/MobileSubstrate/MobileSubstrate.dylib") {
return true
} else {
return false
}
#endif
}
Ответ 9
Существует множество способов поиска джейлбрейковых устройств. проверка cydia technic не будет работать, если квалифицированный хакер изменит путь приложения.
Хорошим способом проверить это было бы увидеть, можем ли мы изменить файл в другом месте за пределами пакета приложений.
NSError *error;
NSString *stringToBeWritten = @"This is a test.";
[stringToBeWritten writeToFile:@"/private/jailbreak.txt" atomically:YES
encoding:NSUTF8StringEncoding error:&error];
if(error==nil){
//Device is jailbroken
return YES;
} else {
//Device is not jailbroken
[[NSFileManager defaultManager] removeItemAtPath:@"/private/jailbreak.txt" error:nil];
}
Найдите больше методов в приведенном ниже URL
http://highaltitudehacks.com/2013/12/17/ios-application-security-part-24-jailbreak-detection-and-evasion/
Ответ 10
SWIFT 3:
func hasJailbreak() -> Bool {
#if arch(i386) || arch(x86_64)
print("Simulator")
return false
#else
return FileManager.default.fileExistsAtPath("/private/var/lib/apt")
#endif
}
Ответ 11
Нет никакого способа обнаружить, если устройство взломано.
Учтите, что даже если бы оно существовало, устройство уже было взломано, что означает выполнение произвольного кода, и джейлбрейкер просто изменил бы любой метод обнаружения, который вы использовали бы, чтобы сообщить, что устройство не было взломано.
ссылка: https://forums.developer.apple.com/thread/43073
кредиты идут сотрудникам Apple, которые ответили на этот же вопрос