Q群自動簽到php+java實現


2020年9月10日更新:騰訊在9月9日,再次對簽到系統進行了大幅度的更新,整個實現思路失效!

本篇文章僅記錄實現思路,原文,並不放置源代碼,不喜繞道~

騰訊在8月12日,對QQ群進行了大幅度的更新,24小時全程自動登錄簽到腳本失效,腳本棄用。

新的腳本是通過php手動更新加密值到數據庫,java多線程執行簽到,並隨時監測會話是否失效,失效則通知管理員進行數據更新。

其實實現過程很簡單,我把整個思路記錄下來。

本篇文章開放評論,有問題可以隨時交流。

一、前因后果

之前的QQ是所有的cookie通用的,比如QQ空間跟QQ群跟手機app,都是同一套加密值。我之前就是通過登錄QQ空間,獲取到cookie,來實現自動的群簽到。當時是純java實現的,自動滑塊驗證登錄QQ

在8月12之前,簽到只需要skey即可,也可以攜帶p_skey。

經過8月12日更新之后,必須攜帶p_skey,QQ空間跟群的加密數據完全分離開了,也就是兩者的數據並不通用了,qq空間的p_skey跟qq群的p_skey並不通用。

舉個例子來說,之前登錄QQ空間,就可以查看你的群信息,進行一系列群操作,反之登錄Q群,同樣可以進行Q空間的一系列操作,現在就不能了。

8月12日到8月13日這兩天,看了下舊的腳本,猶豫要不要寫個新的。

寫個新的可能就要手動更新了,一想就很麻煩,果斷放棄了。

如果說加密值不一樣,那肯定就是服務器對session處理邏輯不一樣了,服務器的自然沒法看。但是,手機apk上面可以反編譯來查看它的加密算法啊,這是我的下意識。

說干就干,反編譯QQ。

先找pskey,找到了方法getPskey

在這里插入圖片描述

然后根據里面邏輯,繼續找getLocalTicket

在這里插入圖片描述

再找getLocalSig

在這里插入圖片描述

此時看到這里,已經接近崩潰了,我整了一上午毫無進度,嘗試用別的方法(MT管理)進行編譯,但是還是失敗了。

我有種直覺,pskey的生成邏輯,apk的源碼里就有,只不過太麻煩

二、實現原理

具體流程

  1. php:手動更新cookie(加密值)到數據庫
  2. java:多線程監測會話是否失效,失效則下發郵件通知
  3. java:多線程定時簽到->隨機地點、隨機圖片、自增天數

通過手機或者電腦,將數據更新到服務器數據庫(數據庫采用觸發器,更新之前,將數據庫的time更改為當前時間)

在這里插入圖片描述

java取出數據,然后開啟線程,進行每隔10分鍾的訪問,如果出錯,就會下發郵件通知(通過一個類的成員變量errorTime,判斷errorTime與數據庫中的時間是否相同,如果相同就是沒有更新數據,不會再次下發通知)

訪問時,需要攜帶bkn。通過chrome開發者工具全局ctrl+shift+f搜索bkn,可以找到加密算法。

Account account = QQSkey.getAccount();
String skey=account.getSkey();
int t=5381;
for(int n=0,o=skey.length();n<o;n++) {
	t+=(t<<5)+(int)skey.charAt(n);
}
int bkn=2147483647&t;//即所求

接下來,只要cookie有效,就可以簽到咯

{% asset_img 5.png %}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM