1550天 帝君

重要的人越来越少,剩下的人也越来越重要 ​​

浏览器抓包(以QQ网页登录为例)

发布于 1年前 / 1.5k 次围观 / 7 条评论 / 杂记 / 帝君

首先是扫码登录

1.首先,打开谷歌浏览器,并访问qun.qq.com(腾讯的网页登录大同小异),然后打开开发者工具。

2.进入网络监控选项卡,然后点击登录。弹出登录窗口。

3.可以看到抓到了很多数据包。

4.经过对比,我们发现 以ptqrshow开头的包返回的图片 与 显示在登录窗口 的二维码相同(图中第二个ptqrshow)。这个接口能显示二维码,于是直接把网址放到自己的工程里使用。

5.以e4a源码为例获取图片,具体语言具体用法请自理:

6.扫码登录的原理是显示二维码之后不断地访问一个接口,接口返回扫码成功则登陆成功。在上图中,满足 不断的访问 条件的只有ptqrlogin开头的几个数据包。点击该包,点击response选项卡查看返回数据。有时候会出现载入失败的情况。

7.这样的话我们可以用火狐浏览器来抓包,这个ptqrlogin包返回如下三种情况:

二维码还能扫

二维码不能扫了或超时,要刷新

访问接口的参数不足或错误

登陆成功包将在第13条解析

8.我们在火狐浏览器不断地用 编辑与重发 的方法来逐渐删除原先链接的参数,直到出现参数错误,说明被删掉的参数中有重要参数,把刚删掉的参数予以保留 。不断地删增删之后剩下四个参数,一个都不能再删了。

u1不用说,from_ui根据多次实验确定其为定值1,aid经过对照,与前面获取二维码图片接口的appid参数相同,那么ptqrtoken从哪来的呢?

9.回到谷歌浏览器,关闭包详情窗口,回到抓包列表,鼠标悬停在他所对应的initiator上,弹出与该数据包的发送和返回数据处理有关的函数及其在js中所在的位置。

10.根据英文含义和直觉,我们点击begin_qrlogin进入js查看器,脚本可能很乱,堆积在一起,左下角可以选择美化脚本。

11.但是这里好像没什么收获。按下ctrl+f进行查找,输入ptqrtoken,找到了我们想要的东西。

其基本含义就是:在cookie中把一个叫qrsig的参数取出来,经过腾讯自己做的叫做hash33的函数加密得到ptqrtoken。通过数学中的自变量因变量理论,既然因变量是qrsig,能代表用户身份,那这个qrsig一定是在获取自变量 二维码图片 的过程中取得的。返回观察刚才取二维码的包,果不其然。

图片15.png

12.之后回来,顺藤摸瓜再找hash33

图片16.png

其大致含义为:创建整数e和i和n,n为传来的qrsig的长度,循环条件为i<n,每次循环:e自加e的位左移5位,再加当前循环次数在qrsig中对应的字母或符号的ascii码,之后i+1。所有循环结束后,返回十进制2147483647和e位与的十进制结果。对应的e4a源码如下,其他语言自理:

图片17.png

其实你的编程语言中如果有js引擎,你完全可以不用把这个js翻译成你的语言,直接套用还省事。

别忘了给你的浏览器开启持续网络日志,不然页面跳转或者刷新之后你抓得包就没了

火狐浏览器

图片18.png

谷歌浏览器

图片19.png

都打√

13.然后就是用timer(定时器)不断访问该接口。直到得到如下结果图片20.png图片21.png

中间截去了,大概你知道是登陆成功了,此时由此接口返回可以控制此号基本所有qq网页的权限——也就是cookie。

图片22.png

14.拿到之后你自己发挥咯。去有用的网页甚至QQ客户端看看能不能抓到什么http接口,就能实现不同的QQ辅助功能。

账号密码普通登录

1.为了方便抓包体验和重放,我们采取火狐浏览器抓包,谷歌浏览器分析js的方式。

图片23.png

2.到达登录界面,打开火狐的开发者模式,到网络选项卡,清除之前的数据包。

图片24.png

3.更改账号框的内容,然后点击密码框,此时抓到了一个数据包。

图片25.png

4.点击响应选项卡,看看他返回了啥,并。。。。看不出来是个啥图片26.png

用逐步去参数法,最后剩下四个参数。

图片27.png

pt_tea固定为2,其余的学过上面的都知道。由于暂时不知道是干嘛的接口,我们先留着。

5.输入密码之后点击登录,登陆成功,抓到了如下数据。(为了不跳页面,你可以选择故意输入错的密码)图片28.png

code开头的那个不要管了,返回的好像没什么用。report明显是报告的意思,应该是腾讯的日志收集,忽略。下一个就是login了,登陆的意思。点击login 包,查看响应内容。

图片29.png

6.最后显示登陆成功,那这个就是最后确定登陆的包没错了。然后我们看看他的参数。

图片30.png

参数还不少,那么就用逐个去参数法看看哪些参数有用。

由于做的时间长,腾讯登录包要求严格,所以返回这个可以继续去除参数。

图片31.png

提示这个就是你把重要参数给删了,保留重要参数之后继续。

图片32.png

最后的结果

图片33.png

u是你自己qq,u1为登录链接,from_ui固定为1,aid就是你的appid,和前面的check包里的appid一样。

pt_vcode_v1,verifycode,pt_verifysession_v1,ptrandsalt经过对比,都是前面那个check包返回的。图片34.png

ptrandsalt在后面,值为2。

7.就剩一个p参数就登陆成功了,那么p从哪来的呢。既然之前的包没有返回p,那么就是从js加密得到的,我们打开谷歌浏览器,为防止页面跳转,我们故意输入错误的密码,让他停留在登录界面,点击登录之后得到登录包。

8.我们将鼠标悬停在这里。看到三个和他有关的函数。

图片35.png

submit是发送的意思,那么大概就是这个函数了。点击submit那行,进入调试器,点击美化代码(扫码登录第10条说明),得到大概如图界面。

图片36.png

9.4128黄色行大概意思就是提交表单,表单在e中。在4122行声明了e,我们可以看到在pt对象中的plogin对象的getSubmitUrl函数决定了e的值。我们ctrl+f搜索getSubmitUrl(注意大小写),在4054行找到了getSubmitUrl原函数。

图片37.png

我们看到i.u,i.verifycode,i.pt_verifysession_v1,i.p,i.pt_randsalt, i.u1之类的,是不是和登录包的那些参数一样!然后我们顺理成章的找到i.p在4066行,这就是p参数,它是由$.Encryption.getEncryption(n, pt.plogin.salt, i.verifycode, pt.plogin.armSafeEdit.isSafe)的返回值决定的。此时我们需要知道这些参数都代表什么。谷歌浏览器支持查看已运行代码中各个变量的值,我们要知道这些值,于是要在4066行后面下断点,让浏览器到这里暂停执行。我们在4067那个数字上点一下,发现断点下在了4068,可能4067不让停吧。

图片38.png

重新输入错误的密码(这里我们输入123456),点击登录,屏幕变成半透明,表示程序暂停。

图片39.png

依次悬停在n,salt,verifycode,isSafe上,他们的值依次为

我们输入的密码123456。

未知,一会再说。

经过对比,是那个check包返回的。

这个变量没有声明,说明没用,实际做出登录协议可以不写这个参数。

10.我们ctrl+f搜索关键词salt,找到两个有可能的结果

第一个的意思是,去除账号框你输入的可能有的@qq.com,然后剩下的就是qq号了,把qq号经过uin2hex函数处理,返回的就是salt。

第二个的意思是,check包返回的结果实际上调用了ptui_checkVC函数,i参数就是返回包里\x00\x00开头的那个16进制字符串。

所以这两个都有可能。而经过我的对比。。。这两种方式得到的结果一样,所以说用哪个你随便啦(*^▽^*)

下图是uin2hex函数

11.回到p参数的研究,我们找到getEncryption函数的来源

调用了上面的h参数,既然$.Encryption.getEncryption函数所需要的参数我们都拿到手了,直接调用就好了,省的继续分析了。我们把整个js放到对应编程语言的js引擎里,到时候直接调用这个函数就行。

在e4a中使用js引擎可调用该函数,以下图片以e4a为例子,后面把c_login_2.js全部复制进去就好了,方法参考e4a自带例程“浏览框与js交互”。

12.把组装好的接口进行访问,返回如图数据

登陆成功,并由该接口返回了具有操作权限的cookie。

至此,账号密码普通登录的教程就结束了。之后还有bkn或g_tk的获取,需要验证码的登录,需要qq安全中心6位动态密码的登录的附加教程

以上就是以网页qq抓包为例讲解浏览器抓包教程了,感谢大家这么长时间的阅读。谢谢大家对一个叫lzz的无名小白的关注。如果有什么缺点欢迎大佬们指正。

 

 

未显示?请点击刷新
  1. 2个月前 (08-17)
    @

    写个盗号木马出来

  2. 9个月前 (01-23)
    @

    专业!

  3. 1年前 (2019-09-06)
    @

    路过哒

    • 1年前 (2019-09-06)
      @ NO

      @少昊:欢迎吖~

  4. 1年前 (2019-09-05)
    @

    简单易懂,支持一下。ps:希望评论可以删除过多的必填项

    • 1年前 (2019-09-05)
      @ NO

      @没吃早饭:好哒,一会有空看看咋弄

    • 1年前 (2019-09-06)
      @ NO

      @没吃早饭:只有昵称和邮箱是必填的哦~