老铁们,大家好,相信还有很多朋友对于移动应用安全防护:iOS应用完整性检测攻略和的相关问题不太懂,没关系,今天就由我来为大家分享分享移动应用安全防护:iOS应用完整性检测攻略以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
模拟现场再现
作案工具
1.越狱手机(如果没有越狱,只需使用xcode模拟器:进入安装目录即可)
2.XXX.ipa(用xcode运行demo最简单)
作案流程
1.打印代码中的资源文件路径
NSLog(@"%@",[[NSBundle mainBundle]resourcePath]);
2. 运行程序并进入程序安装目录,显示包内容。
ipa包内的文件结构
3. 接下来,您可以替换文件并插入脚本。这里只需替换演示用的启动图片,将启动图片设为红色即可。
4. 重新启动应用程序(Xcode 无法重新运行,请单击Xcode 上的“停止”,然后单击模拟器中的应用程序)。可以看到应用正常启动,并且图片已经修改。
替换启动镜像
如何防止文件被篡改
方法一
通过CodeResources读取资源文件的原始hash,与当前hash进行比较,判断是否被篡改。被篡改的文件应重新向服务器请求资源文件进行替换,或者引导用户通过正规渠道重新下载应用。 CodeResources 文件是一个属性列表,其中包含捆绑包中所有其他文件的列表。这个属性列表可能有多个文件,它是一个字典,其中键是文件名,值通常是Base64 格式的哈希值。如果键代表的文件是可选的,那么值本身也是一个字典。该字典有一个哈希键和一个可选键。如果文件被修改,其对应的哈希值也会改变。因此,CodeResources 文件中的哈希值可用于确定应用程序是否完好无损。
打开下面的CodeResources 文件,看看里面有什么
代码资源文件
CodeResources 文件名和对应的哈希值
Xcode项目
在上图中,您可以在CodeResources中看到该文件对应的哈希值。
从CodeResources 获取当前文件的哈希值
读取CodeResources的内容并从CodeResources中获取原始文件的hash
思路是从ipa中复制文件并保存到后端服务器,然后在app中从服务器下载文件并读取内容进行比较。
方法二
可以通过检测cryptid的值来检测是否被篡改。被篡改的cryptid值为0。 原理:看IPA破解原理及iOS平台游戏安全防御(第三弹)
方法三 终极
如果以上都不满足,可以对重要文件做MD5hash验证需要保护的。使用FileMD5Hash这个框架来生成哈希。通过比较原文件的hash和当前的hash来进行判断。只要文件的内容改变了,哈希值就一定会改变。目前的破解技术会修改系统文件,例如CodeResources和Info.plist。
例如,为捆绑包中的所有文件生成哈希值。
1.读取bundle的所有文件名
//获取所有资源文件名
-(NSArray *)allFilesAtPath:(NSString *)dir{
NSMutableArray * arr=[NSMutableArray 数组];
NSFileManager * manager=[NSFileManager defaultManager];
NSArray *temp=[管理器contentsOfDirectoryAtPath:dir error:nil];
for (NSString * temp 中的文件名) {
BOOL 标志=YES;
NSString * fullpath=[dir stringByAppendingPathComponent:fileName];
if ([manager fileExistsAtPath:fullpath isDirectory:flag]) {
如果(!标志){
[arr addObject:文件名];
//NSLog(@"%@",文件名);
}
}
}
返回arr;
}2.生成资源文件名和对应哈希值的字典,eg:@{@"appicon":@"wegdfser45t6432323111111",@"appicon1":@"wegdfser45t64323232222121"};
//生成资源文件名和对应哈希值的字典,eg:@{@"appicon":@"wegdfser45t643232324234"};
-(NSDictionary *)getBundleFileHash{
NSMutableDictionary * dicHash=[NSMutableDictionary 字典];
NSArray * fileArr=[self allFilesAtPath:[[NSBundle mainBundle]resourcePath]];
for (NSString * fileArr 中的文件名) {
//对应文件生成hash
NSString * HashString=[FileMD5HashcomputeMD5HashOfFileInPath:[[[NSBundle mainBundle]资源路径] stringByAppendingPathComponent:fileName]];
if (HashString !=nil) {
[dicHash setObject:HashString forKey:fileName];
}
}
//所有资源文件的哈希值都存储在这个数组中
返回dicHash;
【移动应用安全防护:iOS应用完整性检测攻略】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
我最近在学习iOS开发,安全性真的很重要!
有18位网友表示赞同!
完整性检测听起来很复杂,是每个开发者都要理解的吗?
有18位网友表示赞同!
不知道完整的iOS应用安全机制都包括些什么内容。
有18位网友表示赞同!
这篇文章应该会详细介绍如何做到iOS应用的全面安全吧?
有11位网友表示赞同!
想了解一下哪些常见的漏洞和攻击手法是需要关注的呢?
有10位网友表示赞同!
希望可以学到一些具体的代码示例,看看完整性检测是怎么实现的。
有6位网友表示赞同!
这个话题真的很关键,毕竟用户的数据安全放在第一位啊!
有10位网友表示赞同!
看来使用官方提供的框架更加安全可靠啦。
有15位网友表示赞同!
有没有什么第三方工具可以帮助我们进行完整的应用程序安全检测?
有15位网友表示赞同!
苹果对应用安全的要求越来越严格了。
有5位网友表示赞同!
这篇文章的分享很有帮助,最近在开发一个项目要注意这些细节。
有20位网友表示赞同!
完整性检测是 iOS 应用开发中必不可少的一部分啊!
有5位网友表示赞同!
想要构建一个安全稳定的应用真的需要花很多心思。
有20位网友表示赞同!
这篇文章能否详细介绍一下不同类型的应用程序的安全性要求?
有8位网友表示赞同!
在测试过程中如何有效地验证应用程序的完整性呢?
有5位网友表示赞同!
希望能够了解到一些常见的漏洞修复方案。
有18位网友表示赞同!
如果应用开发者自己无法进行安全检测怎么办?
有8位网友表示赞同!
这篇文章对所有iOS开发人员都是有用的参考材料吧!
有17位网友表示赞同!
学习这些知识可以帮助我们写出更安全的代码。
有8位网友表示赞同!