腾讯微博采集器 模拟登陆 2012-11-26版

由于工作需要,花了近2天时间成功实现了腾讯微博的模拟登陆,现总结如下供学习和应用者相互交流。

(1)腾讯微博和新浪微博的登陆加密思路很相似,都是要经过两道手续,一是要先获取加密参数,二是要加密计算。

         新浪weibo是要获取serverTime和nonce,而腾讯weibo则是先获取verifyCode和pt.uin(是由先传的qq或是微博帐号帐号获取)才可以。

(2)获取verifyCode和pt.uin,通过firebug或是httpWatch等抓取包工具可以分析出方式,如下:

(3)分析加密过程,其加密过程完全依靠js来实现,如下图所示,标红的下方即为加密的js源码,格式化之后,即可看一清而楚,

其它核心在于对密码的加密过程,分析之后,可获取核心加密部分,如下图:

 

A: 即为取得输入密码的值。

B:用js写的md5算法先对password原始值加密,之后用js的hexchar2bin函数将其加上“\x"16进制化。

C:将上一步的值+刚刚在第2步获取到的pt.uin再做一次md5加密。

D:上一步的值+刚刚在第2步获取到的verifyCode.upperCase之后再一步md5密码,

经A、B、C、D之后最终形成ecoding之后的密码,追加到js中的A变化,即get请求的字符串中。

 

(4)对于模拟登陆主要是密码加密算法的破解,其它的都很容易拼起来,如腾讯weibo中最后请求串

只有p和verifyCode是变的,而这两个都已通过上边可以获得,故此时用HttpClient等做get请求,会得到如下的内容:

此时代表登陆成功。

以上描述均为正常顺利情况下,当然中间会有很多意想不到的问题,比如分析和加密过程,某些重要参数,如Host和Referer参数的设置等。因为时间原因我就不细说了,但有一个让我费了很大劲的地方我着重提一下,即

(5)加密时候,算法一致总是得不到与抓包时候一致密加密结果。我是用java做的开发,在此重点讲下关于java在这块遇到的问题。

    提供2两种思路,

      1、将远程的login_div.js下载到本地搭建一个web project,用同样的verifyCode和pt.uin做一个本地的加密测试,看结果是否和浏览器抓包时候一致。

      2、将1中的测试成之后,封装成一个js,用java的ScriptEngine去调用,就省去了用java实现一下腾讯用js写的md5加密算法了,我最后也得到了理想的结果。中间有个插曲困扰了我一天之久,java的scriptEngine调用js方法encoding时,传入一个"......"这样的值时,js加密总是不一致,暂未想到真正原因,最后用了这样的方法,即将pt.uin用java方法还原成了112233.....,再通过ScriptEngine调用js的hexchar2bin去封装该串成16进制的方法,再加密时候就完全一致了。

 

基本是这个情况,若有问题,欢迎交流~

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值