最近好多人在网上讨论联通宽带访问任意网站时会变成携程,这是个什么鬼?似乎反馈遍布全国各地,频率大概为一天两到三次。
如图所示,访问任意网站可能会打开携程,但网址并不会发生改变
来看看源码,看起来好像很厉害的样子,似乎完全没希望看懂?
其实,没那么难,只要能运行,就一定能解密
虽然上面的代码部分进行了加密,但是仍然可以看到 document.write 、 charCodeAt 类字样,其实看到这段文本我的第一反应也是进行了 Unicode 编码偏移,仔细一看,果然如此
那么,我们来写一段解密 JS 吧:
function decode(fakeCode) {
var realCode = "";
for (var i = 0 ; i < fakeCode.length ; i++) {
realCode += (String.fromCharCode(
fakeCode.charCodeAt(i) - offset
));
}
return realCode;
}
格式化劫持代码后可以看到变量 d 和 c ,这两个变量其实是同一段字符串,只是进行了拆分,合并即可,然后用我们刚刚写的代码进行解密
好了,真容出来啦,这是一段普通的 html ,通过一段 js 插入带推广链接的 iframe 造成网址不改变,刷新后依然是正常网站的情况
嗯,对了,这是推广链接 : http://u.ctrip.com/union/CtripRedirect.aspx?TypeID=2&Allianceid=12033&sid=328415&OUID=&jumpUrl=http://www.ctrip.com
感兴趣的可要赶紧去围观哦,没准联通要把这段代码删除了
下面是这种加密方法的加密、解密代码,以及示例,如果感兴趣,可以运行试试看
var offset = 1;
var realCode = "alert('Hello.')";
console.log("fakeCode: '" + encode(realCode) + "'");
// output : bmfsu)(Ifmmp/(*
if(confirm("Run code?")) {
document.write("<script>" + decode('bmfsu\)\(Ifmmp/(*') + "</script>");
} else {
alert("Check console output.")
}
function encode(theCode) {
var fakeChar = "";
for (var i = 0; i < theCode.length ; i++) {
fakeChar += (String.fromCharCode(
theCode.charCodeAt(i) + offset
));
}
return fakeChar;
}
function decode(fakeCode) {
var realCode = "";
for (var i = 0 ; i < fakeCode.length ; i++) {
realCode += (String.fromCharCode(
fakeCode.charCodeAt(i) - offset
));
}
return realCode;
}
联通的工作人员你不要问我是谁,我是好人,我叫 雷“轰”。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.