首页
社区
课程
招聘
[原创]苹果 gsa 服务器login 算法
发表于: 2017-9-8 02:22 41546

[原创]苹果 gsa 服务器login 算法

2017-9-8 02:22
41546

闲得蛋疼,对iTunes 登陆过程进行了初步的分析。 解密得到了spd字段内容。 将分析过程写出来,混个熟脸。


在分析这个东西之前, 需要做一些准备工作。  比如收集论坛前辈们的工作经验, github上某些开源代码。

通过对iTunes windows 和iOS10.x 系统进行抓包。 发现数据包基本是大同小异,iOS 调试非常不方便,特别构造win7 x86环境对 iTunes 12.6.20 进行了逆向分析。
加上 标准版OD + 海风StrongOD, 开始了这次逆向分析。

在分析之前,大概介绍下apple的这套东西,和平日玩windows逆向的区别。  iTunes 或者mac iTunes 或者 iOS 的绝大部分代码是完全一样的。 
对登陆过程进行抓包


服务器地址 https://gsa.apple.com/grandslam/GSService2 数据是通过post传输。数据分为2部分
1. header 苹果的header和浏览器的header不同的是,他喜欢携带"设备", "签名"类信息
2. body body中的核心数据是用AES256_CBC加密的
整个登陆协议是非常标准的srp 密钥交换协议。 对SRP协议不熟悉的朋友可以参考下rfc文档,苹果并没做比较大的变更。
通讯过程如下
1. reqeust1  : 客户端计算随机数A  =  g^a mod N   其中 g = 2 , a 随机。 N是一个2048bit的大素数。 A这个数字用base64编码后被放在request body的A2K字段

   其余字段比如CPD 主要是描述硬件设备信息, 电脑端和i设备会有一些出入。 这都不参与密码验证的计算

2. response1: 服务器根据SRP协议计算出B 回包如下

回包内容中 s 是一个16字节的salt值,该值是固定的,srp协议要用到。
B 也是一个大数。 客户端根据B 计算M1
3. request2: 客户端提交M1 服务器校验密码的正确性。 SRP协议厉害的地方是对称加密的密钥是通过协商计算出来的。 非传输得到。
 
根据SRP协议, 服务器拿到M1后,就可以校验客户端的密码是否正确。 并返回结果给用户。 如果正确,会返回M2给用户,这样密码协商就完成。

4.Response2


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 4
支持
分享
最新回复 (41)
雪    币: 3907
活跃值: (5817)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
2
条理清晰,鞭辟入里!
2017-9-8 10:03
1
雪    币: 3176
活跃值: (1786)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
关于Keybag,你可以吧参数填进去,然后让它自己计算好,你在复合调用  就好了,
2017-9-8 10:13
0
雪    币: 154
活跃值: (560)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
MsScotch 关于Keybag,你可以吧参数填进去,然后让它自己计算好,你在复合调用 就好了,
我自己构造的参数,  他计算返回失败。  我自己够了几个他需要的this指针。  被苹果爸爸打晕了。
2017-9-8 10:16
0
雪    币: 154
活跃值: (560)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
ppbb 我自己构造的参数, 他计算返回失败。 我自己够了几个他需要的this指针。 被苹果爸爸打晕了。
用他ui  login  时候顺便生成的指针就可以计算。我自己构造的,  还有某些我不知道的细节没处理好
2017-9-8 10:18
0
雪    币: 23
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
然并卵
2017-9-8 10:32
0
雪    币: 3176
活跃值: (1786)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
ppbb 用他ui login 时候顺便生成的指针就可以计算。我自己构造的, 还有某些我不知道的细节没处理好
在复用的时候  注意参数格式,一些函数使用  IDA  F5出来的是不完全正确的。
2017-9-9 20:51
0
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
MsScotch 在复用的时候 注意参数格式,一些函数使用 IDA F5出来的是不完全正确的。
F5  为嘛不好用呢,没反应
2017-9-11 15:23
0
雪    币: 3266
活跃值: (3311)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
9
我有算法src
2017-9-11 15:41
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
小调调 我有算法src
完全脱离dll的吗?
2017-9-12 12:13
0
雪    币: 3266
活跃值: (3311)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
11
yzzzzzzz 完全脱离dll的吗?
yeap
2017-9-12 14:24
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
不错!!!!!!
2017-9-12 18:18
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
不错!!!!!!
2017-9-12 18:18
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
小调调 yeap
卖吗?还是无私分享?怎么联系?
2017-9-13 15:23
1
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
那个所谓"魔数",  其实是加密过的keybag  session  id,  相当于HANDLE,  你当然构造不出来,  你需要调接口创建
2017-9-14 14:05
0
雪    币: 3266
活跃值: (3311)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
16
Diabloking 那个所谓"魔数", 其实是加密过的keybag session id, 相当于HANDLE, 你当然构造不出来, 你需要调接口创建
我看好你~
2017-9-14 18:41
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
小调调 我看好你~
qq  3510592195
聊一聊吧
2017-9-14 20:38
0
雪    币: 1
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
膜拜一波~~~~
2017-9-29 21:15
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
如何才能在mac和windows上抓包itunes的登录https明文数据?  客户端应该有ssl  pinning  ,只用charles抓不了
2017-11-13 10:56
0
雪    币: 29
活跃值: (61)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
我们把协议都弄出来了,  10.3的协议,但是ASO还是没效果,不知道什么细节出了问题。有兴趣的朋友加我  92920  4200。  生活困难,我都想出售ASO源代码了。
2017-11-22 15:59
0
雪    币: 181
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
不明真相群众 如何才能在mac和windows上抓包itunes的登录https明文数据? 客户端应该有ssl pinning ,只用charles抓不了
我也想知道
2017-11-24 20:09
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
跪求联系方式
2017-12-8 10:39
0
雪    币: 144
活跃值: (209)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
在这里感谢一下楼主的这篇文章,前段时间有项目要实现gsa  login,楼主这篇文章给了我很大的启发。使我分析ios的登陆过程中少走了很多弯路,ios里面的这个srp过程是在一个名称为akd的service中实现的,我后来是通过将运行中的akd进程整体进行dump得到一个core文件,把core文件拷贝到pc上,找到计算关键数据的入口地址,然后再pc上模拟执行arm64来得到http  request  body,以及对http  response  body进行解析。因为大部分是纯的cpu运算,所以模拟执行过程中只需要hook  很少的sys  call就可以了。后来这个srp过程算是被完美的从ios上迁移到pc上了,但遗憾的是,X-Apple-I-MD-*系列的参数以及actionsignature的计算并没能通过上面这个办法解决,通过不断的深入分析,发现计算这些参数的一些关键流程被放在了系统内核里面,以我的能力实在是不知道如何去分析调试内核了,就停在这里。虽然搞清楚他的算法很难,但是找到计算他们的接口还是比较简单的,后来买了一些iphone设备专门做X-Apple-I-MD-*和actionsignature的计算,srp过程放在了服务器上,极大的提升了效率。最后,感谢楼主。
2017-12-23 20:29
0
雪    币: 576
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
嗯嗯
最后于 2019-6-17 15:20 被江北布衣编辑 ,原因:
2017-12-30 11:40
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
膜拜一波~~~~
2018-3-1 23:25
0
游客
登录 | 注册 方可回帖
返回
//