保护iOS应用程序免于运行时钩子

保护iOS应用程序免于运行时钩子

问题描述:

在设备中运行时,iOS应用程序会连接到许多运行时库。我们如何保护我们的iOS应用程序免受任何其他调试器攻击到应用程序进程中。 就像使用GDB一样,我们可以进入应用程序进程并操作运行时。我们可以停止使用任何设置或代码吗? 或者有没有办法检查是否有其他运行时库正在连接到进程? 我们可以在这种情况下完成应用程序吗?保护iOS应用程序免于运行时钩子

+1

答案是一个深刻的没有。即使你能以某种方式设法做到这一点,只需要有人剥离/替换磁盘上的二进制文件的相关部分,以消除可能存在的任何对策。 你必须对iOS操作系统有一定程度的信任,这就是'围墙花园'生态系统的整个基础。 如果有人恶意拥有对设备的根访问权限,则所有投注都关闭 - 您不再控制它。 –

+0

感谢您的回复@ RichardJ.RossIII。有没有一种方法可以至少保护二进制文件不被另一方辞职? –

+0

@DebasishChowdhury你的程序是一个字节数组。您无法保护修改的字节数组。 – Siguza

我们可以检查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