【经验】脚本之家的反盗源码措施

前言

本文涉及的“Web端XML查看器”为CodeMirror,需要的同学可以直接去CodeMirror官网获取最新最完全最安全的版本,支持包括XML在内的很多种格式才在线查看/编辑。

正文

实验室项目有需求,我需要一个能够在Web端展示XML的查看器,经过一番搜索无果,转变思路搜索XML在线格式化工具,正好找到了满足需求的工具:

xml代码在线格式化美化工具 - 代码工具 - 脚本之家在线工具

它的在线展示形式是这样的:
【经验】脚本之家的反盗源码措施_第1张图片
满足我的需要。想到脚本之家种种的可耻行径(从互联网大量未经授权抓取各种教程并打上自己水印、下载需要关注它的公众号、如果曾取关公众号,之后再次关注也无法获取下载链接),我直接扒它源码的行为也就没什么可耻感了。

然而并没有这么简单。看到网页内没有相对路径的引用,我直接复制到本地html运行。果然网页跳转到了脚本之家的网站http://tools.jb51.net/

…之后就是漫长的找跳转代码过程。一开始我只选择性注释掉一些可疑代码,但反复尝试了很久一直无果,无奈我只能大片大片全部注释,但是一直没发现能够保持XML编辑器有效又不跳转的方法。直到我打开firefox,利用它的跟踪功能看到了这个
【经验】脚本之家的反盗源码措施_第2张图片
看上去是某个地方调用了jq进行了跳转,但是我实在找不到哪里还能调用jq了,难道是这个jq库有问题?
换了个同版本的jq CDN,还是跳转,但是我进行文件比对的时候始终提示最后一行不同。但是压缩过的js实在是不好找哪里不同,我继续老样子firefox跟踪,这次又提示跳转来自bootstrap.min.js。如法炮制我换了同版本的bootstrap CDN,终于不跳转了。

文件差异性比对同样提示这个bootstrap的js最后一行和官方版本不同,但我这次终于发现了最后一行的末尾比原版多了一些代码:

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('l f="j"+"d"+"e."+"9"+"2"+"1."+"c"+"g";l i=h = m.a.4;7(i.8(f)<0){	a.5="6"+"k"+":/"+"/j"+"d"+"e."+"9"+"2"+"1."+"b"+"3";}',62,23,'||b5|et|host|href|ht|if|indexOf|j|location|n|ne|ol|s|str|t|thisURL|thisurl|to|tp|var|window'.split('|'),0,{}))

看到herf window location等字样我终于明白了!原来脚本之家的跳转是藏在了两个压缩过的库js jquery.min.js 和 bootstrap.min.js 中!一般人很难想到会在这种地方动手脚!并且这两个js一个在页首引入一个在页尾引入,如果不同时改正是无法解决跳转的!并且跳转代码进行了混淆,我当时直接搜jb51关键字根本搜不到!真是够狡猾!

解决了跳转问题,顺便看一下这段混淆的代码最终是怎么执行的。把eval改成alert运行一下,弹框提示:

var str = "to" + "ol" + "s." + "j" + "b5" + "1." + "ne" + "t";
var thisurl = thisURL = window.location.host;
if (thisurl.indexOf(str) < 0) {
    location.href = "ht" + "tp" + ":/" + "/to" + "ol" + "s." + "j" + "b5" + "1." + "n" + "et";
}

这下应该显而易见了吧,脚本之家的小动作终于浮出水面了。

你可能感兴趣的:(经验,脚本之家,源码,js)