阿茲貓 的 Java類比登陸QQ郵箱擷取好友名單的實現
謹以此文,紀念我好幾天敖到1點睡覺,我是個好孩子,一般10點就鑽被窩了,夜裡好起來偷菜,hoho
其實很無聊,其實很BT,SNS網站好象一夜之間都提供邀請好友功能
但是像開心等都沒有提供對qq的讀取,因為QQ很變態,就用他開刀好了
前陣子在研究驗證碼識別,做了一些簡單的註冊機,灌水機,直到發現TMD這東西更變態,水太深,不費心了,能識別簡單的就好了
類似QQ這樣的不大可能識別出來了。只有啟用人肉識別,讓肉眼自己看好了,娃哈哈
準備工作:
1.JDK1。6 為什麼要1。6呢,這個後面再說
2.一個支援jsp的WEB環境,例如resin,tomcat等
3.要有簡單的類比登陸思路,比如我,最開始是做開心網外掛的類比登陸
當然我是個非常無聊的人,一般無聊的都是先做163啊,126郵箱的類比登陸,也是為了拿點使用者列表,沒新鮮的
類比登陸我用的是org.apache.http,實現一個可以類比登陸的client
public WebClient() {
currentURL = null;
client = new DefaultHttpClient();
client.setCookieStore(new UpdateableCookieStore());
client.setRedirectHandler(new MemorizingRedirectHandler());
client.getParams().setParameter("http.protocol.cookie-policy",
"compatibility");
List headers = new ArrayList();
headers
.add(new BasicHeader(
"User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13"));
client.getParams().setParameter("http.default-headers", headers);
}
4.要有一些Regex常識
因為畢竟要從html裡摘錄出需要的內容,如sid什麼的,不用正則太麻煩鳥~
好了,開練
先去http://mail.qq.com/裡看看代碼,大概就是一些無聊的表單和驗證碼
把這些內容弄成一個簡單的html登陸看看,操,居然登陸不了,告訴我驗證碼不對,向人肉保證,我的眼神沒有問題
用httpwatch單獨把驗證碼弄出來分析分析,居然產生的圖片還帶了cookie,@#$%^& 咒罵半小時
沒辦法了,只能把這個圖片轉寄一下了
大概思路就是,先用伺服器請求圖片,然後response.setContentType("image/jpeg");
這就是為什麼需要一個支援jsp的web環境了。
轉寄圖片前把Cookie對象放到session裡,一會提交QQ號啊,密碼什麼的那些垃圾的時候把這個再SET給虛擬WEBCLIENT就OK了
驗證碼解決後就是表單處理了,我再操。。。頁面裡這些亂七八糟的js是幹啥的啊,居然QQ密碼在js端還做了一次RSA加密,這幫孫子怎麼想的啊,太變態了
我先想到的是把這些js改寫成java的代碼,寫了兩行就放棄了,這不是人乾的活啊
還好jdk1.6 有個擴充包,支援java讀取js, 重來沒試過,正好開開洋葷。 沒想到啊,太好用了,這麼複雜的js 都能轉換,這個版本真值得信服,哈哈
頁面裡的js代碼要稍微調整一下,有一些函數需要改寫,去掉識別瀏覽器版本和表單對象的參數
javax.script.*
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
engine.eval(new FileReader("/home/html/qq.js"));
engine.eval("var t=checkInput('"+pp+"','"+ts+"');");
String p=engine.get("t").toString();
一定要用1.6啊,我以前一直用的1.5,就是為了這個把機器裡的JDK換成1.6了,哈哈
所有的前端問題都解決了,後面就是享受時間了
得到uin,password,verifycode提交
解析出加密的passwd後,post到http://mail.qq.com/cgi-bin/loginpage , 記得先把驗證碼的cookie對象set過去
String regex = "sid=(.*?)\";";
得到最需要的sid,後面的就是隨便請求裡面的串連了,想幹啥就幹啥,想吃啥就吃啥
我當時可能太激動了,得到了sid居然還是進不去,告訴我session time out,鬱悶了1個晚上,不應該啊
最後才發現,我只是把sid print出來了,忘了set了,日。。。。
好爽,輕鬆拿到好友名單,下面一個問題就是如何騙使用者輸入QQ號和密碼了,順便友情提示一下大家,千萬別相信類似開心啊,校內啊這些SNS網站, 不記錄你密碼都見了鬼了!!哈哈