我刚刚发布了适用于iOS的应用程序,但我不确定如何让我的应用程序安全不被jailbrakers使用。
我可以采取措施防止我的应用在越狱设备上运行吗?
答案 0 :(得分:46)
您可以通过代码检测应用程序是否在jail破坏的设备上运行。通过这种方式,您可以弹出警报并关闭应用程序。你可以做任何你想做的事。这是一个教程:
http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html
这是一个Stack Overflow帖子:
How do I detect that an iOS app is running on a jailbroken phone?
此外,如果您想要一个完整的解决方案,您可以在tapjoy sdk代码中看到。他们正在检测已越狱的iPhone。这是tapjoy网址https://www.tapjoy.com/
答案 1 :(得分:6)
检查这些路径
+ (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;
}
答案 2 :(得分:5)
尝试查找cydia或越狱设备创建的文件。或者尝试在应用程序的黑盒子外写一个文件。如果您成功执行此操作,设备将遭到入侵/越狱:)
- (BOOL)jailbroken
{
NSFileManager * fileManager = [NSFileManager defaultManager];
return [fileManager fileExistsAtPath:@"/private/var/lib/apt/"];
}
答案 3 :(得分:4)
您可以通过查看以下
来检测设备是否为jailBroken我从各种文章和书籍中创建an open source library,尝试一下。
答案 4 :(得分:4)
-(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
}
答案 5 :(得分:4)
根据@ karim的回答,这是一个略微修改过的快速版本:
errorChannel
答案 6 :(得分:2)
即使您的设备已越狱,ipa应用程序也只能访问自己的沙盒,因此 如果设备要么越狱,你的方法将返回NO :) 寻找另一种方式 此外,如果您尝试访问某个地方,但appstore上的沙盒发布应用程序可能会出现问题
答案 7 :(得分:1)
/**
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
}
答案 8 :(得分:0)
有许多方法可以找到越狱设备。如果熟练的黑客改变应用程序路径,检查cydia技术将不起作用。
检查它的好方法是看看我们是否可以在应用程序包之外的其他位置修改文件。
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];
}
在以下网址中找到更多技巧
答案 9 :(得分:0)
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
}
答案 10 :(得分:0)
无法检测设备是否已越狱。
回答同样问题的Apple员工考虑到即使有,该设备已经越狱,意味着可以执行任意代码,并且越狱者只会修改您用来发出设备未被越狱的任何检测方法。