保护iOS应用程序免于运行时钩子
问题描述:
在设备中运行时,iOS应用程序会连接到许多运行时库。我们如何保护我们的iOS应用程序免受任何其他调试器攻击到应用程序进程中。 就像使用GDB一样,我们可以进入应用程序进程并操作运行时。我们可以停止使用任何设置或代码吗? 或者有没有办法检查是否有其他运行时库正在连接到进程? 我们可以在这种情况下完成应用程序吗?保护iOS应用程序免于运行时钩子
答
我们可以检查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;
}
+0
如果应用程序二进制文件已被修改,则该代码可能不再存在。 – Siguza
答案是一个深刻的没有。即使你能以某种方式设法做到这一点,只需要有人剥离/替换磁盘上的二进制文件的相关部分,以消除可能存在的任何对策。 你必须对iOS操作系统有一定程度的信任,这就是'围墙花园'生态系统的整个基础。 如果有人恶意拥有对设备的根访问权限,则所有投注都关闭 - 您不再控制它。 –
感谢您的回复@ RichardJ.RossIII。有没有一种方法可以至少保护二进制文件不被另一方辞职? –
@DebasishChowdhury你的程序是一个字节数组。您无法保护修改的字节数组。 – Siguza