保护iOS应用免受运行时挂钩攻击。

4

iOS应用在设备上运行时会连接到许多运行时库。我们如何保护iOS应用程序免受任何其他调试器攻击应用程序进程的影响呢? 例如使用GDB,我们可以黑入应用程序进程并操作运行时。有没有一种方法可以通过设置或代码防止这种情况发生? 或者,有没有一种方法可以检查是否有任何其他运行时库连接到该进程中? 我们能否在这种情况下退出应用程序?


1
答案是坚决的否定。即使你能以某种方式设法做到这一点,只要有人剥离/替换磁盘上的相关部分,就可以消除你可能拥有的任何对策。在iOS操作系统上,你必须对其有一定程度的信任,这是“封闭花园”生态系统的整个基础。如果有恶意用户获得了设备的root访问权限,那么所有的赌注都将无效 - 你将无法再控制它。 - Richard J. Ross III
感谢您的回复,@RichardJ.RossIII。是否有办法至少保护二进制文件不被其他方重新签名? - Debasish Chowdhury
@DebasishChowdhury,你的程序是一个字节数组。你无法保护一个字节数组免受修改。 - Siguza
2个回答

0
有点晚了,希望能对某些人有所帮助。如果您喜欢纯Swift解决方案,可以看看iOSSecuritySuite。它提供了一些保护措施,防止您提到的修改,例如调试检测:
let amIDebugged: Bool = IOSSecuritySuite.amIDebugged()

如果你想自己编写代码,这可能会为你节省一些行数。


0
我们可以检查Info.plist文件和Appname的修改日期,并将其与包的修改日期进行比较。如果发现不匹配,我们可以得出结论:应用程序二进制文件已被修改。
//Check date of modifications in files (if different - app cracked)
NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath];
NSString* path2 = [NSString stringWithFormat:@"%@/AppName", bundlePath];
NSDate* infoModifiedDate = [[manager attributesOfFileSystemForPath:path error:nil] fileModificationDate];
NSDate* infoModifiedDate2 = [[manager attributesOfFileSystemForPath:path2 error:nil]  fileModificationDate];
NSDate* pkgInfoModifiedDate = [[manager attributesOfFileSystemForPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"PkgInfo"] error:nil] fileModificationDate];
if([infoModifiedDate timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) {
    return YES;
}
if([infoModifiedDate2 timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) {
    return YES;
}

如果应用程序二进制文件被修改,则该代码可能不再存在。 - Siguza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接