iTunes协议的发送是以http 协议进行的 所以我们只需要使用HttpAnalyzer来抓包即可获取如下数据。
向苹果请求发出https://init.itunes.apple.com/WebObjects/MZInit.woa/wa/signSapSetupCert
可获得
<plist>
<dict>
<key>sign-sap-setup-cert</key>
<data>AQIAAAQWMIIEEjCCAvqgAwIBAgIBHDANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQGEwJVUzETMBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwHhcNMTEwMTI2MTkwMTM0WhcNMTkwMTI2MTkwMTM0WjCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTkwNwYDVQQDDDBBcHBsZSBTeXN0ZW0gSW50ZWdyYXRpb24gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa4A+Yl8tYKYYqC7ieGVoxwy0OaixSAe4dA/uCQWnNUCY2ercMbw45A7jUGFajCLI8w/s2QeTXyGdgMgtOMn2H9/3NU7AauvwfbMlFB62COPOofMROwrFW2T6ybW0EQRrBmkfArBV8LXiRqweiZbF6g92YS3dA2
... ...
... ...
UAMA0GCSqGSIb3DQEBBQUAA4IBAQCzR9MjeoFy1yK32EyHlabYoUy1XY+OfcDN/qZkDJj3XJVKKrYVjfGtsyCQdMFaRhi9ItDUfk+GNjRC8rp6F3vaWqghiSyxQ9YlPKq+jVQGRBQbgIcSqLmso3b21KrJU3mdGcjgCwt7AIV8/sZAKuSgExUOb+RVF0clhTiWRdolLcdsYTM6Bq8LkZ8Ts/7CnwN0VC6Txp9gR+vuK1YPpVni9mxqGsiA1C2U42QZAYAytXYSHC7G25kCf4coEXOZRSCaDwWs9Aft0NMeLzLstJyKKRdGI1P9ynH6FM+BNhpWdL8ej9BpdNHYsVQTb8KrHSyxiHp11wYrOFZlGB58wcWr</data>
</dict>
</plist>
接下来会发送请求到https://play.itunes.apple.com/WebObjects/MZPlay.woa/wa/signSapSetup
<plist version="1.0">
<dict>
<key>sign-sap-setup-buffer</key>
<data>
AQhKdD/RkztjkIy/KxYj2bmTNbGaQufDbXI5OHzLqVJg2Nl3f6WY0LaZEOSxvTFsCOp1NnJvD4FmWFeTk3DiBz+VRRnA9DuVzQsp8kIe2DIwYslgYDL1ZL5l+qZa77NOMpbDLWMoIHQxdORdi
... ...
... ...
guyv3XSQoBwUXGMsbRzvglm2uz0vhbGK76QLLs8PVUu1XuoS0rK1Y4u/mgysMXZQs0EWL5sFnTot8shC+O2AAAAMB6vO9QOehN/ZiN2L/YkotC56tZ977IoeLAODvHAznQ7bC5y5v1GOSU/xmFuNXRb9JXstnKk82gFdSLTjxF6zCdqai+lAQQCBycA
</data>
</dict>
</plist>
而sign-sap-setup-buffer 的数据则是通过第一次请求回来的数据sign-sap-setup-cert的数据计算出来的。
我们以12.2.2.25的iTunes.dll为例 大致讲解一下sign-sap-setup-buffer的生成,有兴趣将其算法彻底解剖出来的同学可以深入研究一下。
由于只对新版本相关的偏移地址进行查找 所以很多地方没有加入注释和标记,要获取sign-sap-setup-buffer内容的第一步就是进行对sign-sap-setup-cert进行base64解码然后找到第一个iTunes.dll的内部函数
从代码中我们可以看出 func_key2是一个_fastcall 有一个参数(_out) 命名为key2传入的是一个地址 占0x20字节的大小,会在下面fun_session函数中用到。
func_session是一个 _cdecl有两个参数 第一个参数(_out)(由编码的方式 从左至右)为一个DWORD变量的地址在地址10e9369e可以明显看到我们命名为sessionID 用于接收计算出来的数据,而第二个参数则是key2。
接下来是则是要计算出要发送sign-sap-setup-buffer 的内容了。
Func_signsetup
参数一:固定为200
参数二:key2
参数三:sessionID
参数四:sign-sap-setup-cert 经过base64解密后的buffer地址
参数五:sign-sap-setup-cert 经过base64解密后的buffer大小
参数六:(_out)输出buffer地址
参数七:(_out)输出buffer大小
参数八:(_out)固定为int 地址内容为1
完成之后再经过base64加密即可发送,完成与服务器通信的第一步。
此时服务器返回
<plist>
<dict>
<key>sign-sap-setup-buffer</key>
<data>AijVT+kj45L2A9HN0ar2wjMAAATgnTUm3CR8kkN701jj2dlrEiCtkbLrCErVkWW6iOp7jNndIGlDSvLlDPmI2OAMHk7EZE5a/zj7Vl2o7XZJT589qT0lpUxDsgWqGVrr2+PWw2/oHXPpndAw1mbYNpKnRWYtoLTr6gCAwEeg2im/XWIgJKykKXJqymRxkgwm6LfpFuGLzwbMpBZxSCYFCm
... ...
... ...
GCoDEF/tKbaR0AAAAhgUEdVwr1zlOVhRGovKXzVa3m1Xdd0JIpZ/kGY6fJrKso9zb7JoyQVk7Qm0cw4npR6ZJoisqcQ34crmsi/Pi4jpW7gV5bhbMh1Hq6LqP1UJ96vxOtIR6ftLWwCC0gH9zTvzrQEg8+l4FDnAsS8bN1wg9QcSyDXyxIOrXAnFSP9sEbGeL66Q1</data>
</dict>
</plist>
服务器又给我们返回了一个sign-sap-setup-buffer
抓包继续,我们开始向服务器发送登陆请求https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/authenticate
需要注意的是 http头中包含了X-Apple-ActionSignature: 内容则是由服务器返回给我们的sign-sap-setup-buffer计算出来的。
http body:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>appleId</key>
<string>test@126.com</string>
<key>attempt</key>
<integer>1</integer>
<key>createSession</key>
<string>true</string>
<key>guid</key>
<string>9795C6D1.31BB651E.425C9266.759EA155.14DB9387.79B51D9D.4B367805</string>
<key>machineName</key>
<string>TEST-911</string>
<key>password</key>
<string>test123</string>
<key>why</key>
<string>signIn</string>
</dict>
</plist>
这段登录的plist 只有一个guid需要获取
Func_createguid 只有一个参数ecx为0 返回中包含了计算好的guid.
其中guid分为7个段,每一个段是由相关pc信息计算后的前四个字节转为字符串。
第一段:网卡地址
第二段:C盘序列号
第三段:ProductId
第四段:CPU信息
第五段:主板信息
第六段:计算机名
第七段:Profile尾部字段
在来看一下X-Apple-ActionSignature的由来。
Base64解码后直接使用Func_signsetup来进行 第二和第三个参数直接使用 不重新创建。
最后一个参数 在返回后 会被置0.
Func_actionsignature
参数一:之前用到的sessionID
参数二:登陆的xml body 也就是上面那个包含了 guid appleid machineName password 等。
参数三:xml body的大小
参数四:返回的buffer地址
参数五:返回的buffer大小
将buffer进行base64后即可加入到http头信息X-Apple-ActionSignature:中
至此便可向服务器发送登陆请求,会进行重新定向登陆https://p32-buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/authenticate
这个东西花了不少心血本是给一个网友做的,完成了从登陆->pc授权->ios授权->购买安装 但无奈完成之后却被放了鸽子。放在硬盘里积灰也就失去了自身的价值,不如拿出来给有需要的朋友做个参考。
由于工作较忙时间仓促,也极少写文档 所以写的可能比较混乱, 另外获取PC端授权文件 对IOS设备进行授权 从iTunes购买ipa 在进行安装 会在有时间的情况下进行更新。还请见谅。
最近对广告过滤 如 ADsafe ADbyby ADMfilter 比较感兴趣,在研究中遇到了一些问题。
如有这方面经验并愿意指点一二的可以Q我530646164,当然 如对itunes研究遇到了什么问题也可以Q我。
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界