需滑块验证的登录
1.在火狐浏览器中,进入登录界面,清空账号框
输入一个瞎编的qq号之后点击密码框,点开出现的check包,发现与不需要验证码的check返回有区别
暂时不知道这些参数都是干嘛用的,我们继续。
以下是我熬夜做出来的o(╥﹏╥)o,做教程的时候才发现腾讯原先的验证码登录换成了滑块,于是现抓现写,好在与原先验证码登录的几个包没差多少。
2.随意输入密码点击登录
抓到了上图的包,我们打开cap_union_prehandle的数据包
不知道里面的参数是干嘛的,我们先留着。里面的参数经过前面讲的火狐浏览器的逐渐删参数法(之后用到逐渐删参数法的地方均省略过程),最后确定剩余五个参数。
aid在上面被盖住了,不必说他是什么了。clientype和apptype为固定值2。uid是qq号。cap_cd经过对比,与check包中的第二个参数对应。
3.第三个包是css,不分析。
第四个包cap_union_new_show返回结果
是个html,腾讯为什么要在一个接口返回html呢?可能每次里面的加密方式都不一样?(有点后怕)
参数有这些
其中长长的ua我们在前面的返回内容上好像没看到过,我们暂时忽略,去掉之后好像没影响网页内容。经过逐渐去参数法,剩余这几个参数。
经过对比,aid不用说,clientype和apptype为定值2,sess为cap_union_prehandle数据包返回的sess
uid为qq号,cap_cd在前面提到了,是check包返回的。
4.中间很多数据包都没用,不是html静态页面就是js,还有样式表(css),还有图片。
之后就是两个cap_union_new_getcapbysig,经过对比,仅最后一个参数img_index不同,前者为1,后者为2。返回的分别是滑块界面底图和滑块碎片图。
看了参数之后就是逐步去参数了,但是这个网页就算是原链接重新访问,也会出现500错误,可能腾讯不允许这个接口中的某个参数重复使用吧。
突然发现验证码界面有刷新按钮,于是清除目前的抓包,点击刷新。
发现一个刚才没看到过的包(可能之前不小心一并清除了吧),cap_union_new_getsig包,看看他返回了什么。
发现一个取验证码图片需要用的参数vsig。
需要的参数
其实抓了这么久我们发现腾讯很多登录过程包的包体结构大体类似,于是我们大胆猜测:对于取验证码图片包,可能有如下参数。
当然。不管你怎么重发这个包,腾讯都会给你返回错误。既然不让第二次访问,那我在浏览器第一次发包之前把包的参数删减一些,然后再发上去,看看腾讯是否给你图片,不就得了。这个功能谷歌浏览器中有,火狐有没有我不知道,因为我的工作重心放在谷歌上。事实证明这样发送是正确的,以下为谷歌浏览器验证过程(这里可能略微长并且难懂,后面教程中有一个没法二次访问的接口也用了这个方法验证,你可以选择跳过以下粗体字部分):
验证开始
用谷歌浏览器走一遍流程,一直到验证码出来之后,删去原先的包,然后点击刷新,在cap_union_new_getcapbysig包的initiator下悬浮,然后点击cap_union_new_show进入js分析
别忘了点美化代码按钮,然后ctrl+f直接寻找getcapbysig关键词
正好找到两个,分别对应两个图片,然后分别在这两个地方(1313和1336下断点)
然后点击安全验证中的刷新图片按钮,js在第一断点处停止,右侧查看器可以看到n的值。
n的值有点长,我们双击选定然后ctrl+c复制到记事本或者任意的文本编辑工具里,方便修改之后复制进去。
根据上文的猜测删除没用的参数,一定要快删,不然时间长了可能有的参数会失效,更改之后的结果
复制回去
点击跳到下一断点
下一段是滑块碎片图片,与背景图接口大同小异,所以我们这里不费心来修改了,直接继续跳断点直到程序执行完(也就是加载出图片)。
发现背景图在删除我们预料之外的参数之后仍然能显示,切换到network选项卡,背景图接口包的链接和我们预计的一样,于是我们的猜想是正确的。
验证完成
5.我们把滑块滑到正确的地方,出现新的数据包
1包为验证的最后一步的包,因为之后分别是两个报告,一个2包开始登陆,还有一个因为密码错误而为下次登录准备的check包3包。
点开验证包1包,查看其返回的数据
返回了randstr,ticket
还有一个代表验证成功的ok
看看他的headers请求头(往下翻可以看到参数)
对,参数就是这么多,看看有哪些我们熟悉的参数
aid,clientype,apptype,sess,uid,cap_cd,vsig就这些没了,按理来说还需要传入验证的结果
思考:滑块位置可以用什么表示呢?那只能是坐标啦,二维坐标表示方法就是x和y嘛。
然后我们就真的发现了这个东西
那验证的时候把这货带上就好啦。经过对比,他的y值(上图中的140)来源于cap_union_new_getsig包返回的inity的值,此值为滑块所在的纵坐标,因为滑块是水平移动,所以其纵坐标不变。他的横坐标就是需要人类来滑出答案啦!
经过上文粗体字那个方法的验证(提示:在cap_unuin_new_show源码中的1515行下断点,修改C中各项的值),发现并不好使。
可能是我们少了参数,于是我们先把那些长的一匹的、没有已知来源的参数ua、websig、fpinfo去掉,经过上文粗体字方法的验证,这些参数确实不需要有就可以完成验证,那我们可以松一口气,其他参数全部当做定值处理。成功之后返回
下面粗体字可以不看。
如果你非要较真的话,我可以告诉你真正需要的参数有这些
Apptype和clientype可以没有,cdata是你完成拼图的秒数(精确到小数点后一位)乘十。Subcapclass在cap_union_new_show的源码的第1496行,为定值10。没什么用的参数websig在1501行,为定值,每次访问cap_union_new_show返回的websig都不同,没什么用的参数fpinfo和cookie中fp3_id1参数相同。为什么我要和你说这些,因为我废了很久的功夫分析了他们最后发现没用,但我也不能白分析,对吧,所以我就告诉你了。
6.验证ok之后就是login包了,和我们第二节分析的login登录基本相同,但是有一些不同的地方。
经过对比,其中的参数verifycode是验证成功包返回的@开头的那四个字符,pt_vcode_v1不需要验证为0,需要验证为1,pt_verifysession_v1为验证成功包返回的ticket,其余均遵照第二节登录包的规律就可以了。
需要QQ安全中心令牌的登录
1.使用一个需要QQ安全中心6为密码验证才能登录网页的QQ,一直弄到这个界面。
可以看到login包的返回数据发生了变化
由此可以再你的程序里判定用户是否需要验证密保
输入错误的动态密码
2.发现新的数据包,点开看返回数据
好像有乱码,那我们先看参数
就这些参数,没了
验证成功之后会返回一个链接,访问那个链接就能获得cookie。
bkn的计算方式及腾讯为什么要弄bkn
1.登录之后到成员管理,打开开发者工具,然后刷新页面。看到这个包点开
他的参数
只有一个bkn
2.打开sources选项卡,按ctrl+alt+f全局搜索,在下面出现搜索栏,输入bkn然后回车搜索
之后双击搜索结果,美化代码之后看到了如下图所示界面。
可以看到这个404行数据包data中一个叫bkn的参数来自于t函数,上面刚好有t函数源码,其内容为:e为cookie中的skey,t为5381,n为0,o是那个skey的长度。每次循环:t自加t的位左移5位再加e中第n个字母或符号对应的ascii码,之后n自加1。循环直到o比n大结束。最后返回2147483647和t位与的结果。
其e4a源码如下,其余语言请自理
我认为为什么腾讯要有bkn:为了你的安全着想。在所有具有操作性质的接口和能够获取用户隐私的接口都有bkn存在。而bkn只能由cookie中的参数skey计算得出,能够给出bkn就代表操作者拥有用户的cookie。举例:手机qq中点击腾讯的网站,如果这个网站需要登录(需要腾讯网页cookie),那么你会自动登录成功,因为手q自带浏览器能在qq域名中自动给出有效cookie,无需登录。而如果没有bkn这个参数,你访问别人的网站,别人的网站可以让你跳转到腾讯的某个接口,跳转之后因为浏览器已经有了cookie,腾讯就以为是你进行了操作。没有了bkn,给你的直观感受就是,如果别人在网站中封装了腾讯自助冻结接口,你访问他的网站,然后你qq就被冻结了。这就是bkn对你的保护作用。
撰写评论