百度文库手机版通信协议分析

下面表格中的操作的HTTP请求头中的HOST都必须是appwk.baidu.com。都是以POST的形式请求。POST的数据的格式都是:

    request={"Bdi_bear":"UMTS","BDUSS":""}

其中BDUSS是登录时服务器发回的Token。但多数操作并不要求登录,这个BDUSS可以为空。

操作 URL 返回数据
下载排行 http://wenku.n.shifen.com/?rt=dl&type=1&pn=0&rn=10 type=0: 特别推荐
type=1: 下载排行
type=2: 上升最快

{"result":{"tn":60,"count":10},"content"

:[{"doc_id":"5314d779168884868762d60b"

,"title":"\u600e\u6837\u624d\u80fd\u6000\u5b55"

,"size":"44032","download_count":"3012",

"value_count":"1262","value_average":"8","ext_name":".doc"},
分类浏览 http://wenku.n.shifen.com/?rt=cl&pn=0&rn=0  

{"result":{"tn":15,"count":10},"content"

:[{"cname":"\u5c0f\u8bf4","cid":"79","ishot":"1"},

{"cname":"\u60c5\u611f","cid":"133","ishot":"0"},

{"cname":"\u52b1\u5fd7\/\u54f2\u7406","cid":"134","ishot":"1"},

{"cname":"\u5065\u5eb7","cid":"128","ishot":"0"},

{"cname":"\u6563\u6587\u968f\u7b14","cid":"93","ishot":"0"},

{"cname":"\u6c42\u804c\/\u804c\u573a","cid":"127","ishot":"1"},

{"cname":"\u5e7d\u9ed8","cid":"140","ishot":"0"},

{"cname":"\u79d1\u666e","cid":"135","ishot":"0"},

{"cname":"\u7f8e\u5bb9\/\u5851\u8eab","cid":"130","ishot":"1"},

{"cname":"\u8bd7\u8bcd","cid":"141","ishot":"0"}]}

分类书籍 http://wenku.n.shifen.com/?rt=cv&cid=79&od=0&pn=0&rn=10  

{"result":{"tn":59966,"count":15},"content":

[{"doc_id":"9b6ff4fc04a1b0717fd5dd83"

,"title":"\u7ecf\u5178\u7b11\u8bdd\u80fd\u5fcd\u52305\u4e2a\",

"value_count":"1404","value_average":"8",

"download_count":"768","size":"34816","ext_name":".doc"},
书籍详情

http://wenku.n.shifen.com/

?rt=dp&doc_id=abc6e50016fc700abb68fcfa

 

{"content":{"tag_str":"",

"summary":"\u6c5f\u5927\u5927\u7684\u597d\u4e66",

"price":"0","cid":"538","ext_name":".txt"}}

在线阅读

http://wenku.n.shifen.com/?rt=dc&doc_id=abc6e50016fc700abb68fcfa&pn=0

&rn=5&pw=1000&dt=1

返回纯文本,如果是DOC和PPS也都转成TXT返回,图片、格式全丢失。

{"txt_size":3778,"content":["\u6c5f\u5357\u8bf4\u4ed6\u7684\u300a\u7f25\u7f08\u5f55\u300b \r\n\u5f92\u5f1f\u6c99\u6f20 \r\n0\u4f4d\u7c89\u4e1d \r\n 1\u697c\r\n\r\n\u6211\……

书籍下载

http://wenku.n.shifen.com/?rt=dc&doc_id=abc6e50016fc700abb68fcfa

&pn=0&rn=0&pw=1000&dt=1

要求BDUSS不为空,dt参数表示文件的类型,0为原始类型,1为TXT类型 书籍的二进制流

 

下载书籍是要登录的,因为书籍是要有积分才能下载的。

登录的认证过程是在另一台服务器上完成的。

认证API的地址是:http://220.181.112.194/passport/?login HTTP请求头中的HOST是wappass.baidu.com。这个请求也要POST。POST的数据是:

tpl=wkc&cip=127.0.0.1&login_username=xxx&login_loginpass=ooo&phoneid=000000000000000&login_verifycode=&login_bdverify=&login_bdstoken=

这个过程中用户名、密码都是明文。(网页版的登录网页是TLS加密的)

成功登录的返回结果是:

<?xml version="1.0" encoding="utf-8" ?>
<login_succ>
    <param key="ssid" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" />
    <bduss>xxxxmJzfjRnSWRuVERQUFRYRmR0VUNWxxxxxxxxRTJveHR2bjFMODktLUJVUnBPQUFBQUFBJCQAAAAAAAAAAAokNx~iYicAbmFua2V6aGlzaGkAAAAAAAAAAAAAAAAAAAAAAAAAAADgiuV4AAAAAOCK5XgAAAAAcF1CAAAAAAAxMC4zNi4yM4HE8k2BxPJNb</bduss>
</login_succ>
这里的bduss就是可以用来下载图书了,ssid不知道是哈,按位数看可能是个GUID,可能与用户绑定,所以我xx了。但是如果百度的文库平台能这么简单就被搞定的话,也太小看百度了。先往下看。
登录失败的返回结果是:
<login_fail>
  <reason id="4">
  <![CDATA[ 
   登录密码错误,请重新登录 
  ]]> 
  </reason>
  <bdNeedVerify /> 
  <bdVcodeString /> 
  <bdBdstoken /> 
  <bdTime /> 
</login_fail>
id=2表示用户不存在。id=6表示验证码错误 
有时(具体逻辑由服务器控制,可能密码正确的时候也会)会要求用户输入验证码: 
<?xml version="1.0" encoding="utf-8" ?> 
 <login_fail>
 <reason id="204">
 <![CDATA[ 
 请输入验证码 
  ]]> 
 </reason>
 <bdNeedVerify>1</bdNeedVerify> 
 <bdVcodeString>3030313031393631303835353435303870617373706F72743133303737353632313630343031303130338559258195D169FA820791E1CC77719D</bdVcodeString> 
 <bdBdstoken>2c5aa8bdf8b3016474d2be6a97969645</bdBdstoken> 
 <bdTime>1307756216</bdTime> 
</login_fail>

其中的bdVcodeString是16进制编码的数据。解出来是这样的。0010196108554508passport130775621604010103+GUID

其中红色的应该是时间戳。后面的04010103一直都没有变过。每次请求都是这个值。后面就是一个GUID了。这个GUID会用来校验,所以自己YY一个是不行的。把别的bdVcodeString里的GUID重用过来也不行。最前面的0010196108554508可以被其它的bdVcodeString中的替换,但是生成的图片就是全新的了。

这个Response里是没有图片的。图片还要自己去另一个地方去取。POST请求的地址是:

http://passport.n.shifen.com/cgi-bin/genimage?3030313031393631303835353435303870617373706F72743133303737353632313630343031303130338559258195D169FA820791E1CC77719D

HOST是passport.baidu.com

服务器就会返回一张100*40大小的图片。图片中有1个4位数字。比如是1234。这里的图片是不唯一的。意思就是数字1234的图片可能有很多,如果图片是动态生成的。那一个数字就有100*40*2^32种可能的图片。所以你不要指望把图片抓下来做个Mapping就破解了。

这时,你再向登录服务器发一个登录请求就可以完成了。

tpl=wkc&cip=127.0.0.1&login_username=xxx&login_loginpass=ooo&phoneid=000000000000000&login_verifycode=&login_bdverify=&login_bdstoken=

其中的login_verifycode就是验证码,login_bdverify就是那一长串数字,login_bdstoken就是bdBdstoken里的值了。

此时的URL也要加一个参数。变成。

http://220.181.112.194/passport/?login=vc

这个验证图片在这里的作用就是防止一切自动化的非人为的访问。目前应用很广泛。

而目前,手机平台的在线阅读和网页版的根本不能同日而语。目前只能看TXT和EPUB。

posted on 2011-06-11 13:12  南柯之石  阅读(1785)  评论(0编辑  收藏  举报

导航