首页
社区
课程
招聘
[原创]iOS 签名杂谈(一)
发表于: 2020-6-4 14:17 24409

[原创]iOS 签名杂谈(一)

obaby 活跃值
20
2020-6-4 14:17
24409

为什么要说iOS的签名呢?现在移动平台的逆向的教程和书籍已经相当多了。针对签名的文章也很多,我这里想说的一些是可能别的地方看不到的比较细微的内容(虽然都是老黄历~~)。

iOS的签名目的其实也比较纯粹,就是为了能够在不越狱的情况下安装破解版的ipa。当然,如果是各种助手的话还有另外的一个目的,那就是应用分发(更重要的是在分发之前加入自己的广告sdk)。

说到iOS的应用分发其实主要方式有如下几种:


在ipa安装的过程中并不会校验设备上有没有授权信息,只有到运行的时候才会校验授权信息。此时如果没有授权 那么会弹出要求输入用户名和密码的弹框。

如果要验证上面的内容。有个简单的做法,那就是删除设备上的授权文件。除了要删除上面的iTunes目录下的文件还要删除以下的文件。

/private/var/mobile/Library/FairPlay/iTunes_Control/iTunes/IC-Info.sidr
/private/var/mobile/Library/FairPlay/iTunes_Control/iTunes/IC-Info.sids
/private/var/mobile/Library/FairPlay/iTunes_Control/iTunes/IC-Info.sidt
/private/var/mobile/Library/FairPlay/iTunes_Control/iTunes/IC-Info.sisb
/private/var/mobile/Library/FairPlay/iTunes_Control/iTunes/IC-Info.sisv
/private/var/mobile/Library/FairPlay/iTunes_Control/iTunes/IC-Info.sidb

/iTunes_Control/iTunes/iTunesControl 目录下的文件及时删除也不会影响应用的正常云信,并且在启动app之后下面的文件会进行重建。

通过appstore下载ipa,早期的itunes通过两步进行的。

通过接口创建授权文件以及相关目录SC_Info,该目录位于ipa的Payload\EmojiUltimate.app 目录下。并且同时创建iTunesMetadata.plist文件
。该文件包含了ipa购买的apple id的相关信息。
SC_info 目录结构:

关于ipa结构的文章可以看这个链接: https://blog.razb.me/pulling-apart-an-ios-app/
旧版的ipa在Frameworks目录下的支持库下并没有独立的SC_info
新版的ipa在所有的库目录下都创建了SC_info, 具体是哪个版本变更的,由于长时间没有接触这个,我也不知道~~
虽然存在多个文件,但是文件的内容是一样的,通过md5就可以比对出来了,当然现在md5碰撞比较容易实现了,但是参考一下还是可以的。

将授权文件,购买信息打包到ipa内。这个就是通过itunes最终下载到的ipa。现在最新的itunes已经没有应用商店了~~

通过该文件可以看到,购买的appleid 为cntwaymm@126.com。各种助手也是通过该文件来判断应用的版本信息,是否是苹果的官方应用(如果要准确判断还需要依赖SC_info)。不过在安装的过程中该文件并不参与校验。即使删除该文件也可以正常安装,并且该文件不参与签名。

众所周知,苹果一向以安全著称,那么既然最后的ipa是通过拼接合成的,那么会不会在下载的过程中被篡改?或者加入一些其他的功能?其实苹果早就想到了这一点了。即使是应用商店下载的ipa也是带数字签名的。

ipa的签名信息分为两部分:

ipa文件信息签名包括资源签名都位于Payload\EmojiUltimate.app_CodeSignature 下的 CodeResources文件内:
文件部分内容:

对应文件的额哈希值为sha1 + base64, 较新的ipa同时还会有sha256 + base64的签名方式。

新版签名数据

计算方法:

通过计算可以发现,数值与plist文件中的数值是一样的:

看到这里,既然已经知道了计算方法,那么是不是可以修改文件,更新哈希值之后进行安装呢? 如果尝试以下你就会发现这条路行不通!为什么?哈希明明是对的?

那是因为虽然当前文件的哈希是对的,但是由于文件内容变化,导致整个CodeResources文件的哈希值变了。而这个文件的哈希值则是记录在可执行文件的签名信息中的。

通过jtool可以便捷查看对应的签名信息:

标记的地方就是CodeResources的哈希值,通过文中的python代码也可以快速的计算该文件的sha1,两者是一致的。

如果是新版本的ipa则还会有sha256的值。如下:

这也就解释了,为什么下载的ipa是不能随便修改的,当然修改二进制文件最后的效果也是一样的,无法通过签名校验。

虽然如此,还是有一部分文件是可以修改的,那就是SC-info以及目录下的相关文件。这些文件对应的是记录的ipa的购买信息,以及授权信息。那么如果用两个不同的账号购买下载同一款应用,替换内部的sc-info文件是可以正常安装运行的。

至于为什么能通过签名校验,这个放在下一篇吧。

苹果开源代码中,关于签名的代码: https://opensource.apple.com/source/Security/Security-55471/sec/Security/Tool/codesign.c.auto.html

 
 
 
 
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
打赏 + 2.00雪花
打赏次数 1 雪花 + 2.00
 
赞赏  orz1ruo   +2.00 2020/06/05 感谢分享~
最新回复 (6)
雪    币: 436
活跃值: (486)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
详细 
2020-6-4 23:09
0
雪    币: 436
活跃值: (486)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
有一个问题想请教一下,我下载过xx助手的包,xx助手下载的包确实是app store的ipa包,有sc_info和iTunesMetadata.plist文件,且能通过数据线安装到手机上,xx助手是如何做的呢?
2020-6-4 23:25
0
雪    币: 14983
活跃值: (5285)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
4
LeoW丨 有一个问题想请教一下,我下载过xx助手的包,xx助手下载的包确实是app store的ipa包,有sc_info和iTunesMetadata.plist文件,且能通过数据线安装到手机上,xx助手是如 ...
appstore 的包安装流程不会进行授权校验。所以不管是appstore的包,还是企业签名的包都是可以正常安装的。直接调用itunes的接口即可。运行的时候才会校验授权
2020-6-5 08:42
0
雪    币: 436
活跃值: (486)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
obaby appstore 的包安装流程不会进行授权校验。所以不管是appstore的包,还是企业签名的包都是可以正常安装的。直接调用itunes的接口即可。运行的时候才会校验授权
谢谢答疑
2020-6-5 11:06
0
雪    币: 2166
活跃值: (3226)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
6
2020-6-6 09:53
0
雪    币: 14983
活跃值: (5285)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
7
xiaohang [em_63]
2020-6-6 20:23
0
游客
登录 | 注册 方可回帖
返回
//