硕鼠即将上线解析前置广告系统
更新:
2015.11.29: 跟进新版广告代码,低调使用,且用且珍惜。
2016.01.02: 继续修正,应该能存活久一点。
原文:
粗略看了下代码,并不是很复杂。
页面有类似下面的脚本:
// 此处应有混淆过的代码
// .....
var avdGgggg='0123456789abcdef0123456789abcdef';
var avdGggggtt=1443322110000;
这两个值就是用于取得序号的关键变量。
然后把加密后的脚本拆开:
var avdOk = false;
var config = null;
function avdPlay(a, b) {
$("#adpopup").css({width: 960,height: 540});
TSPopup.showDiv('adpopup');
config = {ads: [{url: a,clickthrough: b}],playOverCallback: "avdCallback"};
doPlay()
}
function doPlay() {
if (!avdOk) {
window.setTimeout(doPlay, 100);
return
}
var a = thisMovie("avd");
try {
a.setup(config);
a.doPlay()
} catch (e) {
gogogo();
return
}
}
function avdCallback() {
TSPopup.closeDiv();
$("#adpopup").css({display: "block",width: 0,height: 0});
gogogo()
}
function thisMovie(a) {
return swfobject.getObjectById(a)
}
var errorStart = 0;
function errorPlay() {
$("#avd").remove();
$("#adshow").css({display: "block"});
$("#adpopup").css({width: 700,height: 540,overflowY: "auto"});
TSPopup.showDiv('adpopup');
errorStart = new Date().getTime() / 1000;
window.setTimeout(doErrorPlay, 1000)
}
function doErrorPlay() {
var e = new Date().getTime() / 1000;
var t = Math.floor(e - errorStart);
if (t > 20) {
gogogo();
return
}
$("#adtime").html((20 - t) + "秒后开始解析");
window.setTimeout(doErrorPlay, 1000)
}
function gogogo() {
var g = createSc(avdGgggg, avdGggggtt);
var a = new Date();
a.setTime(a.getTime() + 300 * 1000);
document.cookie = "go=" + g + ";expires=" + a.toGMTString();
window.location.reload()
}
avdPlay
这个是广告链接的入口,单击后触发。阅读这个函数后,猜测 avdCallback
为广告播放时或完毕后的回调。
然后顺藤摸瓜,发现实质上是调用 gogogo
函数加入「广告已浏览」的小饼干并刷新 (真是好懂 /w\)。
服务器无二次强制验证,点赞。
土豆视频貌似强制需要使用客户端进行解析 (分明和优酷一家了),无解。
且用且珍惜。