x64dbg入门系列(五)- 消息断点
2020-06-21 13:59:56 Author: bbs.pediy.com(查看原文) 阅读量:932 收藏

       论坛上对登陆过程讨论和分析已经比较多,一直以来,总想在任意平台登陆苹果账号,但现在不得不遗憾的说,几乎很难做到任意平台登陆苹果账号。 苹果的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 或许可行,工作量可想而知。 

[公告]看雪论坛2020激励机制上线了:“活跃值”、“能力值”、“雪币”!发帖、回帖不减雪币了!赶紧回帖看看你的活跃值?

最后于 8小时前 被ppbb编辑 ,原因:


文章来源: https://bbs.pediy.com/thread-260209.htm
如有侵权请联系:admin#unsafe.sh