搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > FreeBuf > 射手网复活攻略:用百度快照和phantomjs让射手网起死回生

射手网复活攻略:用百度快照和phantomjs让射手网起死回生

FreeBuf 2017-11-30

牢骚


射手网关门了,声讨的话网上已经铺天盖地,我不想多啰嗦,我只说一句:


某些部门的老爷有折腾字幕组的闲工夫,不如去整治一下铺天盖地的电视购物骗子广告,我会给你们烧香感谢的。


正题


射手网关站之后,网上流传一个射手下载器,简单研究了一下,发现这东西调用的是射手播放器的api,一部电影只能获取一个字幕,无法选择,而且很多字幕都不匹配。


那么问题来了,既然射手播放器仍然可以获取字幕,那么证明字幕文件仍然存在于射手的服务器上。因为它们是同一个来源,我们能不能用其他方法也从服务器上得到字幕呢?也就是说,射手网只是关闭了前台页面,我们只要获取字幕的文件名索引,仍然可以下载到字幕文件,于是我想到了百度快照。


只需在百度里输入site:shooter.cn 电影名称,就会出现很多结果,这些结果现在直接打开,会跳转到射手首页,可是我们可以点击快照:



有的快照是结果页的,有的快照打开会出现字幕列表,如果出现列表,打开其中的任意一项仍然会跳转到首页,怎么办呢?好办,我们先去看列表里任意一项的链接,链接的最后是一个xml文件,我们用这个xml文件名做关键字继续搜索,就能得到它的结果页快照:


射手网复活攻略:用百度快照和phantomjs让射手网起死回生

射手网复活攻略:用百度快照和phantomjs让射手网起死回生


好了,第一步已经完成了,百度快照几乎保存了所有射手字幕的索引,只要用一定的技巧,都可以搜出来,那么接下来,我们就要获取字幕。


通过分析快照结果页中的射手源码,我发现了一个猫腻,即,射手的每一个字幕文件都有一个唯一的id,而这个id以下载次数的形式显示在每个字幕的页面中,也就是说,页面中显示的下载次数,并不是真正的次数,而是字幕的id号:


射手网复活攻略:用百度快照和phantomjs让射手网起死回生


有了这个id,一切好办,射手现在还能访问的页面,除了那个告别首页,还有一个字幕上传页面 http://shooter.cn/sub/upload.html,网站都关了还留着上传页面干嘛?一定有问题,那么打开这个页面,查看一下里面所有的js代码:


射手网复活攻略:用百度快照和phantomjs让射手网起死回生


终于,在loadmain.js里面我发现了这样的代码:


function shtgdownfile(g, j, f, d) {

var a = makeXmlReq();

try {

g.target = ""

} catch (c) {

alert(c)

}

a.open("GET", "/files/file3.php?hash=" + shtg_filehash + "&fileid=" + j, false);

a.send("");

if (a.status == 200 || a.status == 304) {

var b = a.responseText;

if (b && b.indexOf("ERR:") < 0) {

showcounter("downcounter", j, "file", "total", 1);

b = (shtg_calcfilehash(b));

var h = "http://file1.shooter.cn" + b;

if (!d) {

g.href = h;

g.target = "_blank"

}

if (f) {

location.href = h

}

return true

}

}

alert("文件获取失败:" + a.status + " _ " + b)

}


一切一目了然,我们只需照做即可


首先,在浏览器里面输入:


http://www.shooter.cn/files/file3.php?hash=duei7chy7gj59fjew73hdwh213f&fileid=所要下载的字幕文件的id


(其中,duei7chy7gj59fjew73hdwh213f就是上面代码中的shtg_filehash,它是个常量,值同样来自于loadmain.js),会返回如下的结果。注意这里的编码要用utf8,否则显示乱码:


射手网复活攻略:用百度快照和phantomjs让射手网起死回生


这是一段经过变换的post参数,要变换回去,我们按照上面代码中所写,利用射手自身的一个函数shtg_calcfilehash,先用浏览器访问http://shooter.cn/sub/upload.html,然后让浏览器执行:javascript:var address=shtg_calcfilehash('刚才得到的字符串');alert(address);


射手网复活攻略:用百度快照和phantomjs让射手网起死回生


非常好,直接弹出了正确的post参数,在这段参数的前面加上http://file1.shooter.cn,直接访问,bingo!!!,字幕终于成功下载了!


神器:自动化下载脚本


上面的下载过程实在太繁琐,如果有很多字幕要下载,每个都这样来一遍,不得累死啊,所以,一个下载脚本是必须的。


在这里我要介绍一个强大的爬虫引擎:phantomjs,它可以用javascript做开发,只有一个可执行文件却非常强大,实际上它是一个没有界面的webkit引擎浏览器,而且是跨平台的,它的好处一个是脚本语言直接使用js,这样页面中很多js函数它可以直接使用和修改,另一个是它可以方便的抓取到用ajax异步生成的页面。


好了,介绍结束,脚本代码如下(点击文末阅读原文查看)


phantomjs没有下载功能,这里的下载直接调用了wget,另外注意上面的page.injectJs('filehash.js'),这个包含进来的filehash.js文件的内容实际上就是射手的变换函数shtg_calcfilehash,我把它放在了本地执行,phantomjs的好处在这里完全体现。


在命令行执行: phantomjs shooter.js 字幕文件的id :



脚本成功的下载了字幕。

一切大功告成,射手网复活了。


phantomjs以及脚本源码和wget打包下载

http://pan.baidu.com/s/1o6JVdW2


[本文由作者b41k3r撰写并投稿FreeBuf,版权属于b41k3r,转载须注明来自FreeBuf.COM]

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《射手网复活攻略:用百度快照和phantomjs让射手网起死回生》的版权归原作者「FreeBuf」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注FreeBuf微信公众号

FreeBuf微信公众号:freebuf

FreeBuf

手机扫描上方二维码即可关注FreeBuf微信公众号

FreeBuf最新文章

精品公众号随机推荐