闲得蛋疼,对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

登陆成功后, 服务器返回了M2, np, spd.  其中np用于校验spd解密。  spd 字段是用aes加密的。 aes的解密key ,我暂时算不出来,通过扣代码的方式,能正确的解出

spd内容。

SPD 字段中你会得到几个ID 和token ,这些token 是用于后续登陆authenticate服务器用。  由于整个登陆过程是比较标准的SRP协议。分析起来有参照。 完全无脑的往后干。

SRP协议中, hash算法, 苹果使用的hash 比较奇怪,我没能完全的模拟出来, 该hash代码看起来和sha256是一模一样的,很多地方能够重复验证。 但是在计算M1时, 就不行。 后来是通过扣代码的方式将M1计算出来,并得到gsa.apple.com服务器的认证。

在这个会话过程中,暂不涉及到header的复杂计算。 http头的内容,你随便怎么填,苹果服务器也有点累吧,懒得搭理你。你爱咋咋。

为了得到高质量的并发client, 做了很多种失败的尝试。

1. 想去重现苹果的hash算法, 在分析中,发现他的算法虽然像sha256, 但在补位 (sha_ltc_comress)迭代过程中,数据总是对不上。

2. 想完美的将代码柔和到自己的模块中, 直接LoadLibrary加载iTunes 是不行的  x86 和x64 不行, x86拿到x64上也不行。 32->64之后,很多IAT是乱填的不知道为什么

即使x86平台上, LoadLibrary虽然能成功, 但内部依然有很多IAT函数没得到修正, 各种崩。

勉强能用的

1. 多开iTunes, 并注入dll, 架设一个client的服务器, 对M1提供计算服务。 该方法勉强能用, 比较麻烦的是, iTunes中很多代码是用oc编写, 构造出的oc 指针,你需要在合适的时候释放掉。 由此导致的崩溃就不计其数了。

2.   在同一个进程中保存多个会话的instance。 涉及全局变量并不多, 可以在出入口加锁。 这样instance之间不会相互干扰。 如此一来,并发的登录账号服务器就搭建完毕。 在网络畅通的情况下, 2秒左右能得到一个账号的会话token。并支持并发操作。

后续:

后续的会话中,包头需要用到设备信息和signature, 这些算法是苹果的掌中宝, 想窥探其中奥秘是需要花费非常大的时间代价。 尤其keybag的逆向。 keybag 模块提供了signature kbsync sbsync 计算的服务, 涉及加密的东西,最终都会落到keybag。 而整个keybag模块, x86 x64, arm* ,苹果都做了类似的处理,号称几百万行汇编代码。 这些代码中充斥着大量的垃圾运算。 本人才疏学浅,实在没法参透其中奥秘。

以signature为例, github上有代码是直接getproxy的形式得到了 keybag计算所需要的魔数, 现版本中,该魔数是与会话相关联的, 人为的call函数构造C++类,得到的魔数,在计算的时候,会被认出来, 导致hash失败。 更低级的方式构造魔数,得到的就是crash。

actionSignature计算:

itunes的base = 0

keybag 模块中硬件断点经常会失效, int3断点,偶尔会导致崩溃。

模拟苹果验证服务器,[原创]苹果 gsa 服务器login 算法相关推荐

  1. python实现模拟身份验证服务器综合系统设计

    完成一个 Python 程序,实现密码存储和验证,用于模拟身份验证服务器,以便破解数据库的对手无法获得用户的明文密码.实现基本的注册和登录功能. 测试样例如下: input R timerring i ...

  2. 苹果自带邮箱发件服务器设置,iphone自带邮箱在哪里设置 iphone6s自带邮箱收发邮件设置图文教程...

    虽然当前的社交类通讯聊天软件非常发达,很多时候还是会使用邮件来沟通一些事情,最为常见场景便是在工作中.有了苹果 iPhone6s 手机以后,可以添加设置邮箱,直接在手机上收发邮件,非常的方便. iph ...

  3. 苹果id登录_苹果服务器挂了...ID 登录不了!

    点击 哎咆科技 关注我们我发现,大家在更新了 iOS14 以后,已经很少能听到有人说这里有 Bug.那里有 Bug 的问题了.虽然小毛病不断,但相比去年的 iOS13,真的好多了...但就在最近,苹果 ...

  4. 苹果7如何设置手机邮箱服务器,iphone7 126邮箱如何设定发件服务器

    满意答案 yuan842119 2016.10.31 采纳率:59%    等级:7 已帮助:4514人 1.首先打开手机,进入"设置"中的"邮件.通讯录.日历" ...

  5. linux 验证邮箱账号,linux邮件服务器的身份验证(sasl)

    sasl SASL全称SimpleAuthenticationandSecurityLayer,是一种用来扩充C/S模式验证能力的机制.在Postfix可以利用SASL来判断用户是否有权使用转发服务, ...

  6. OUTLOOK2019 解决 无法验证您连接到的服务器使用的安全证书

    在配置好Outlook后,每次打开Outlook,都会弹框提醒"无法验证您连接到的服务器使用的安全证书",网上搜的很多办法都无法解决,最后在微软的官方解答中找到了解决方案,分享给大 ...

  7. 第四章 微信公众号开发之验证消息的确来自微信服务器

    之前直接写了怎么开发,忘了写怎么知道验证消息来自微信服务器,否则无法进行开发,先来看一下官方的开发文档怎么描述的 接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器 ...

  8. java实现验证消息的确来自微信服务器

    java实现验证消息的确来自微信服务器 验证消息的确来自微信服务器Get方法 SHA1加密 异常处理 开发者提交信息后,微信服务器将发送 GET 请求到填写的服务器地址 URL 上 GET请求携带参数 ...

  9. java开发微信服务号(四) 验证消息的确来自微信服务器

    为了在公众号里配置下图时使用的代码: Controller层代码: import com.weixin.wxDemo.service.CheckTokenService; import lombok. ...

最新文章

  1. TensorRT重磅更新!10亿参数大模型实时运行,GPT推理加速21倍
  2. Tomcat7源码分析学习系列之二-----tomcat的真正的启动脚本catalina.bat解析
  3. python3网络编程传输图片_python网络编程(图片传输)
  4. Flink的异步I/O及Future和CompletableFuture
  5. 欢迎来到德莱联盟(一)
  6. 前段时间的学习小结——体脂率的计算
  7. m4s格式转换mp3_把MP3格式的音频转换成WAV格式
  8. 计算机屏幕方向变化,知识:如何切换笔记本电脑屏幕的方向_计算机的基本知识_IT /计算机_信息...
  9. ps添加的阴影怎么去除_ps怎么可以把阴影去除
  10. 一衣带水 守望相助:中日夫妻七七再行慈善之旅
  11. 用python将视频转化为图片
  12. Java-学校项目3---类与对象
  13. MATLAB实现红眼消除(数字图像处理)
  14. 微信另外一种分享(图片 + 文字) 到朋友圈
  15. 前端中push数组元素到新数组方法
  16. Machine Learning With Spark--读书笔记
  17. 你所不知的Redis三个特殊类型
  18. 如何初步部署服务器(运维及服务器部署个人笔记)
  19. 服务器系统进不了路由器,Win7输入192.168.0.1打不开路由器管理界面的解决方法
  20. Java Web 程序设计期末复习重要知识点总结

热门文章

  1. HTML+CSS大作业——旅游—我的家乡新密(15页)含论文 新密旅游网页设计制作 简单静态HTML网页作品 我的家乡网页作业成品 学生旅游网站模板
  2. 如何实现云时代的高效运维?
  3. [渝粤教育] 中国地质大学 钢结构 复习题 (2)
  4. 隐私计算及密码学学习记录
  5. 面试!四川我要去哪儿网!
  6. 如何提高自己的语言表达能力?
  7. 其中恐龙纪录片,你应该让你的孩子观看
  8. html代码圣诞贺卡图片,自制圣诞贺卡图片大全
  9. 《新100个基本》摘录,停下来刷新一下思维!
  10. 你手机里的“微信”,可能是假的!