新浪微博移动网页端手势验证接口破解流程

原创 duan602728596 随笔 javascript 448阅读 2018-04-13 23:41:06 举报

最近做了一个APP,微博登录后超级话题自动签到。在抓取登录接口时,发现有的账号在登录时需要手势验证,于是研究了一下微博手势验证的算法。历时三天,终于成功了。

base64的解密和加密使用了包: js-base64,请先下载

1、判断是否需要验证

第一步,在账号登录前,需要判断账号是否需要手势验证。有些账号不需要验证,直接就允许登录,而有些账号则需要验证。
【GET】https://login.sina.com.cn/sso/prelogin.php?checkpin=1&entry=mweibo&su=aHR5d29ya18wQHNpbmEuY29t

  • 参数:
    • su:微博账号名的base64位加密
  • 返回:
    • showpin:为1时需要验证,为0时不需要验证

2、获取验证码

第二步,获取验证的id和验证码图片。图片大小为160x160,在一个5x5的div里,每个div的大小为32x32。
【GET】https://captcha.weibo.com/api/pattern/get?ver=1.0.0&source=ssologin&usrname=htywork_0@sina.com&line=160&side=100&radius=30&_rnd=0.053927914628985496

  • 参数:
    • usrname:用户名
  • 返回:
    • id:当前验证的id
    • path_enc:图片地址
      返回数据:

然而,path_enc并不是base64位图片,而是图片和坐标信息,使用|分割,这时需要函数来处理,
首先要有html来展示路径:

然后通过计算来显示路径:

通过hint函数,我们在html上展示了四宫格。

3、计算路径

【GET】https://captcha.weibo.com/api/pattern/verify?ver=1.0.0&id=29218517fb4894ae45ec0d1c80f93d54b8c80f93d54b&usrname=htywork_0@sina.com&source=ssologin&path_enc=&data_enc=

  • 参数:
    • id:验证码id
    • usrname:用户名
    • path_enc:四宫格的箭头顺序(比如'1234','1423')和id,使用p.encode加密后的字符串
    • data_enc:坐标使用q.encode加密后的字符串
  • 返回:
    • code:状态
    • msg:提示信息

参数示例:id=f8276e749e98c3cf0ac36ce9ee761ebc389ee761ebc3&path_enc=aa79797794c&data_enc=!)*(((((((((^)^)(((^)(((((((())(((()()()(*((((((())((((^*((^)^)^)^)(^*^6^3^6^7^3^/^-^*^*^0^2^2^5^,(^))()*)((((((*((())(()*((()(((|!)-^*^-^.^0^,^)^*^)^)^)^)(^*^*^,^*^,^/^*^*^*^*^)^*^-^)^)^,^)^)^,^)^*^*^)^.(^*^*^)^*^*^)^*(^*^)^)^*^*^)^)^))^)(()**((((((((((((()(((*/.22./0.,-,,),),-*,,*))(|(!(7B9@899::D3::9?99?8?:8?A9:6:?7::::8::9:?9:?999Cc6:9FM!(D1E199?8:9?99::9::99!*hj!)o?A?9:8:::9:9::?99:::9?99!*E(

坐标获取和计算的完整代码,其中pq函数都是直接从源代码内拷贝过来的,为防止计算错误,故没有格式化;canvas是为了显示轨迹:

4、登录

【POST】https://passport.weibo.cn/sso/login

最后来一张成果图,显示我不是在吹牛:
结果

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复