軟件下載:
鏈接: https://pan.baidu.com/s/1IuLs-C7XQVlI42gdS4p7yQ 提取碼: 5vgt
(因QQ空間升級,目前只能批量點贊。需IE11)
技術分析:先看一個範例
這是我手工評論別人BBBBBB的抓包。
我想模擬POST發送,就要得到上面的所有參數。其它的直接可以得到,主要以下兩個參數
1.g_tk
點發表,跟蹤js在https://qzonestyle.gtimg.cn/ac/qzone/qzfl/qzfl_v8_2.1.65.js 的84行
使用js在線格式化工具https://tool.oschina.net/codeformat/js/,搜上面的位置xhr.send(transdata(data))定位到4776行。
找到xhr.open(opt.method, url + (url.indexOf("?") > -1 ? "&": "?") + "g_tk=" + QZFL.pluginsDefine.getACSRFToken(url), true);
是通過url得到的。再看看url
url我複製出來 (數據部分我改了一點,規避隱私)
直接訪問是返回這個。這樣操作沒什麼用,好奇看一下。
url是參數傳進來的,這裏沒有處理。
url中的各參數怎麼來的呢?
繼續向前
https://qzonestyle.gtimg.cn/qzone/v8/core/interface_mini.js
QZONE.FrontPage.getACSRFToken = function(e) {
e = QZFL.util.URI(e);
var t;
if (e) {
if (e.host && e.host.indexOf("qzone.qq.com") > 0) {
t = QZFL.cookie.get("p_skey")
} else if (e.host && e.host.indexOf("qq.com") > 0) {
t = QZFL.cookie.get("skey")
}
}
if (!t) {
try {
t = parent.QZFL.cookie.get("p_skey") || ""
} catch(e) {
t = QZFL.cookie.get("p_skey") || ""
}
}
if (!t) {
t = QZFL.cookie.get("skey") || QZFL.cookie.get("rv2")
}
var n = 5381;
for (var i = 0,
o = t.length; i < o; ++i) {
n += (n << 5) + t.charAt(i).charCodeAt()
}
return n & 2147483647
};
裏的TCISD.pv.send(e, t, n)
然後進到圖片上傳
https://qzonestyle.gtimg.cn/qzone/app/v8/controls/photo_uploader/1.0_h5.31104.js?max_age=72000
define('app/v8/controls/photo_uploader/1.0',null,等
https://qzonestyle.gtimg.cn/ac/lib/seajs/sea-2.1.1.js
Y.test(f.readyState)&&(f.οnlοad=f.οnerrοr=f.onreadystatechange=等
一步步,不再細寫了。
https://qzonestyle.gtimg.cn/qzone/app/v8/utils/base64_uploader/1.0.30906.js?max_age=72000
又回到https://qzonestyle.gtimg.cn/ac/qzone/qzfl/qzfl_v8_2.1.65.js
QZFL.ajaxPost=function(e,t,n){if(typeof t=="function"){n=t;t=null}n=extend({},def,typeof n=="function"?{onload:n}:n||{});
QZFL.ajaxGet=function(e,t,n){if(typeof t=="function"){n=t;t=null}n=extend({},def,typeof n=="function"?{onload:n}:n||{});
https://qzonestyle.gtimg.cn/qzone/v8/ic/comment.js
window.g_feeds_comment_time=new Date;if(t&&typeof t.sendAct=="function"){t.sendAct("qz_reply_"+P+"_v8")}}
https://qzonestyle.gtimg.cn/qzone/v8/ic/ic_feeds_monitor.js
if(e){FeedsPV._sendPV(e,FeedsPV.PV_ACT_DOMAIN)}}};t.sendAct=FeedsPV.sendAct
;t.updateSession=g;function F(e,t,i){var a={uin:QZONE.FP._t.g_iLoginUin,action:i,platform:1,appid_via:e+"_"+t};QZFL.pingSender("http://analy.qzone.qq.com/cgi-bin/apptrace?"+QZFL.util.genHttpParamString(a))}function L(e,t,i,a){var n="//h5.qzone.qq.com/report/md?"+"fromId=20
https://qzonestyle.gtimg.cn/qzone/v8/core/interface_mini.js
TCISD.pv=function(e,t,n){setTimeout(function(){
https://qzonestyle.gtimg.cn/qzone/v8/ic/comment.js
https://qzonestyle.gtimg.cn/qzone/app/v8/controls/commentBox/facade.50303.js?max_age=72000
超時退出登錄了。
2.qzonetoken
源碼中js已經給了,直接在控制檯打印看看。
對比完全一致。