首页
社区
课程
招聘
[原创]gsa 登陆算法 SRP6a 改良版
2020-6-21 04:14 41694

[原创]gsa 登陆算法 SRP6a 改良版

2020-6-21 04:14
41694

 

GSA登陆协议  

       论坛上对登陆过程讨论和分析已经比较多,一直以来,总想在任意平台登陆苹果账号,但现在不得不遗憾的说,几乎很难做到任意平台登陆苹果账号。 苹果的gsa登陆是标准SRP6a的改良2017年的时候答应版主将细节写出来,CVOID-19给了写文章的时间。 通过逆向iTunes 拼出SRP的每个参数,非常困难。 iOS/macOS下有明文的函数, 通过记录关键点位数据,得出苹果SRP登陆过程。 参数如下



N 一大素数  2048位。 来自 RFC5054-2048. 文档是big-endian 显示
g  本例为2
k 乘数, k = H(N,g)  
s salt  服务器下发
I username 用户名
p password 密码,参与SRP算术运算的密码不是明文内容
H()  SHA256 函数
^  乘幂运算
u 中间结果
a,b 客户端和服务器的私钥32字节
x 本地通过私钥计算的中间结果
v 验证
K 共享key
M1,M2: 验证密码
spd 登陆结果, AES_CBC加密


N,g

       来自于RFC5054-2048,  内存中有多份拷贝, 苹果不是每个地方都按照big-endian 存放。

 The hexadecimal value for the prime is:

          AC6BDB41 324A9A9B F166DE5E 1389582F AF72B665 1987EE07 FC319294
          3DB56050 A37329CB B4A099ED 8193E075 7767A13D D52312AB 4B03310D
          CD7F48A9 DA04FD50 E8083969 EDB767B0 CF609517 9A163AB3 661A05FB
          D5FAAAE8 2918A996 2F0B93B8 55F97993 EC975EEA A80D740A DBF4FF74
          7359D041 D5C33EA7 1D281E44 6B14773B CA97B43A 23FB8016 76BD207A
          436C6481 F1D2B907 8717461A 5B9D32E6 88F87748 544523B5 24B0D57D
          5EA77A27 75D2ECFA 032CFBDB F52FB378 61602790 04E57AE6 AF874E73
          03CE5329 9CCC041C 7BC308D8 2A5698F3 A8D0C382 71AE35F8 E9DBFBB6
          94B5C803 D89F7AE4 35DE236D 525F5475 9B65E372 FCD68EF2 0FA7111F
          9E4AFF73

 The generator is: 2.



 

k=H(N,g)

     通过打印日志 k = H(N,g) 传入的参数为

ac6bdb41324a9a9bf166de5e1389582faf72b6651987ee07fc3192943db56050a37329cbb4a099ed8193e0757767a13dd52312ab4b03310dcd7f48a9da04fd50e8083969edb767b0cf6095179a163ab3661a05fbd5faaae82918a9962f0b93b855f97993ec975eeaa80d740adbf4ff747359d041d5c33ea71d281e446b14773bca97b43a23fb801676bd207a436c6481f1d2b9078717461a5b9d32e688f87748544523b524b0d57d5ea77a2775d2ecfa032cfbdbf52fb3786160279004e57ae6af874e7303ce53299ccc041c7bc308d82a5698f3a8d0c38271ae35f8e9dbfbb694b5c803d89f7ae435de236d525f54759b65e372fcd68ef20fa7111f9e4aff7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002

    N,g big-endian 格式化,高位补0凑足2048bit,串连再HASH

 

u=H(A,B)

      AB 2个大整数大端序直接串起来  sha256(catact(A,B))

x=H(s| H(I|":"|p))

     苹果丢掉username

    def calculateX(salt,I,P):
        h1 = hashlib.sha256()
        h1.update(':')
        h1.update(P)
        digest1 = h1.digest()
        
        h2 = hashlib.sha256()
        h2.update(salt)
        h2.update(digest1)
        x = h2.digest()
        return x

P

    P是明文sha256pbkdf2 sha256的结果,其中迭代次数为第一步回包的i字段

<key>i</key> 
<integer>20430</integer> 
<key>s</key> 
<data>RcFwuW4AUEWv3Lv0k6Gemg==</data> 
<key>sp</key> 
<string>s2k</string> 
<key>c</key> 
<string>i-35f-c53ff631-25ba-4395-a89a-2b66fbdcf083:NC</string>

      i迭代次数,苹果服务器定期刷新迭代次数。 防止拖库后查表拿明文。原始SRP 定义的P是明文。

 

M1,M2          

def calculateM1(N,g,username,salt,A,B,K):
    i1 = hashlib.sha256(N).digest()
    i2 = hashlib.sha256(g).digest()
    i = i1 ^ i2
    h = hashlib.sha256()
    h.update(i)
    h.update(hashlib.sha256(username).digest())
    h.update(salt)
    h.update(A)
    h.update(B)
    h.update(K)
    m1 = h.digest()
    return m1
    
def calculateM2(A,M1,K):
    h = hashlib.sha256()
    h.update(A)
    h.update(M1)
    h.update(K)
    m2 = h.digest()
    return m2

       

其余字段

       其余字段和标准算法一致,不再描述

 

SPD 解密

       spd 使用aes_cbc_mode 加密,pkcsv7对齐数据块。 需要key,iv方可解密。 SRP 过程中,客户端和服务器共同分享K AES key,iv 通过HMAC算法得到, 其中SRP K 作为HMAC key mac信息

 "extra data key:"
 "extra data iv:"

     解密出plaintext 后,pkcsv7 去掉尾部填充数据,得到各种密码token 至此,普通账号登陆完成。通过iDevice 设备通知或者短信作二次认证本文不讨论。 二次认证通过后,得到新的SPD字典。

 

 

彻底脱机登陆有多难

       苹果在iOS9 加入双重认证。开通双重认证的账号,就得使用SRP 协议在设备上登陆, 登陆时发送的设备信息如下

UDID            设备唯一ID 苹果记录了他卖出的每一台设备ID。Windows的UDID可随意伪造。
X-Apple-I-MD    OTP, 一次性密码,一分钟跳一次
X-Apple-I-MD-M  设备指纹, 本地adi.pb 授权设备信息。


       IMD,IMDM 是成对出现的,关于他的计算过程,目前没有任何参考资料。 仅以个人了解来说, windows平台上, 通过fpcore.dll 中高强度混淆代码保护起来,还没人宣称还原了该算法。 iDevice 上, 计算过程复杂代码也高强度混淆。要想在linux/android上登陆苹果账号, 一种是用iDevice来计算OTP参数, 但需要远程调用。 编写模拟器来运行iTunes 或许可行,工作量可想而知。 

 

源码

     golang gsalogin

 



[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2020-6-21 15:09 被ppbb编辑 ,原因:
收藏
点赞5
打赏
分享
最新回复 (6)
雪    币: 5
活跃值: (68)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
小灰狼 2020-7-8 13:25
2
0
大佬ic 登录nas算法pc有么,指点下哈
雪    币: 154
活跃值: (530)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
ppbb 2020-7-10 15:33
3
0
小灰狼 大佬ic 登录nas算法pc有么,指点下哈
没有, nas 需要AES芯片参与, 电脑算不出来。
雪    币: 0
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_wurxabof 2020-7-12 23:37
4
0
厉害
雪    币: 3
活跃值: (90)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
走码观花 2020-11-1 18:09
5
0
nas算法我是还原出来了。
md mdm我目前只能调用接口去使用,一个加密的uuid,一个加密的时间。
雪    币: 227
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
DaYangStudio 2022-5-11 01:22
6
0
给个联系方式呀。
雪    币: 166
活跃值: (181)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
新手村1号 2022-5-25 15:33
7
0
有联系方式没有
游客
登录 | 注册 方可回帖
返回