我想模拟itunes登录,第一步验证怎么过


用户id和密码都是明文传输,但一直搞不定X-Apple-ActionSignature的值,好像是通过什么算法加密得来的,求大神指导~~

编程 typecho 安全 程序员 api

消音君是个G 11 years, 5 months ago

如果是动态加密的,除非找到加密算法(真牛逼的话,可以反编译),否则基本不可能,你可以去国外找找,可能有人会搞。
如果是静态的,直接伪造就好了(估计不会是静态的)

hellsa answered 11 years, 5 months ago

iTunes的研究网上还是很多的,你可以参考下这篇文章 http://bbs.pediy.com/showthread.php?t...

基础

iTunes下载过程的关键协议(其他协议可以不理):

登入-->切换App列表显示 --> 下载.

注意:

  1. iTunes的协议是XML格式的。
  2. 通讯采用CFNetWork。
  3. 数据是加密了的,但对于逆向来说,无需管他用了多么高深的加密算法,只需要知道入口在哪里,输出在哪里,调用就好了。

模拟登录

目的是用c#代码模拟iTunes账号的登陆(只考虑成功的情况),并获取账号里的信息,关于解析plist的库现已有多个库可用,采用的是iphone-plist-net,地址在:http://code.google.com/p/iphone-plist-net/ 上。模

拟登陆最重要的是post 什么数据到 哪个url上,通过跟踪,这里是主要的数据。

url地址:

p3-buy.itunes.apple.com

post的数据为:

(Request-Line):GET /WebObjects/MZFinance.woa/wa/authenticate?appleId=xxx&password=xxx&attempt=1&machineName=&why=purchase&guid=4AEF365B.CF847F94.08E11EF5.FDD88C5B.09DA8172.65FAFEFB.6A193139&Pod=3&PRH=3 HTTP/1.1
Cache-Control:no-cache
Referer:http://itunes.apple.com/cn/
Accept-Language:zh-cn, zh;q=0.75, en-us;q=0.50, en;q=0.25
X-Apple-Tz:28800
X-Apple-Store-Front:143465-19,12
Host:p3-buy.itunes.apple.com
Connection:Close

post后返回的是plist格式的字符,里面包含了用户的信息。

C#简单的代码如下:

string strInfo = GetiTunesData("https://p3-buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/authenticate?appleId=asdfasdf@asdf.co&password=qweqweqwe&attempt=1&machineName=&why=purchase&guid=4AEF365B.CF847F94.08E11EF5.FDD88C5B.09DA8172.65FAFEFB.6A193139&Pod=3&PRH=3");

Stream s = new MemoryStream(Encoding.UTF8.GetBytes(strInfo));
PListRoot root = PListRoot.Load(s);

PListDict dic = (PListDict)root.Root;
PListDict accountInfo = (PListDict)dic["accountInfo"];
PListDict address = (PListDict)accountInfo["address"];
string firstName = ((PListString)address["firstName"]).Value;
string lastName = ((PListString)address["lastName"]).Value;

这里可以知道,plist的很多字段,这里字段以后用来购买软件。

星空下的传说 answered 10 years, 9 months ago

Your Answer