前言
kongregate是一个Flash游戏网站,提供大量的游戏(没有中文,*),而我刚好维护着一个Flash收藏站,这不得抓取里面的游戏下了汉化?于是我就这么“刚”上了kongregate,抓取,开始!
抓取过程
1.挑选受害者
迷你塔防,就这款塔防小游戏吧,第一步完成
2.查看网络请求
按F12打开浏览器的开发者工具,找到上方的“网络”
现在什么都没有对吧,按F5刷新一下页面你会发现加载了一大堆的网络请求,而我们要的SWF就在里面
3.过滤数据
kongregate是通过GET请求获取地址的,返回的SWF地址格式如下所示:
http://chat.kongregate.com/gamez/<数字>/<数字>/live/<游戏名>.swf?kongregate_game_version=<数字>
其中chat.kongregate.com域名可能是其他的域名,数字是随机的。
我们可以在刚刚加载的一堆请求中按Ctrl+F搜索 chat.kongregate.com
,.swf
如果你看到如下内容就说明你找到它了:
点击它,然后你就可以在右侧的
把这段地址复制出来:
//chat.kongregate.com/gamez/0007/1458/live/miniTowerDefence.swf?kongregate_game_version=1385373388
在浏览器中输入这段地址,如果浏览器开始了下载(如果你装了Ruffle插件那么你会看到游戏界面),恭喜你,你成功拿到了你要的SWF游戏。
4.绕开、去除URL锁
kongregate的游戏都有URL锁,顾名思义就是锁定该Flash游戏只能在kongregate.com
这个域名中打开,无法放到其它网站上使用,这时候就需要用JPEXS Free Flash Decompiler这款开源免费的Flash反编译软件进行反编译了,使用JPEXS打开刚刚下载的miniTowerDefence.swf,打开游戏的主文件,搜索 URLLock
:
哎~这个URL锁的开关就这么明晃晃的摆在这儿,把true设置成false,再用Flash播放器打开,完事。(我想过一万种加密方式,但我就是没想到它很贴心的给我配了个开关🤣🤣🤣)
当然,一些简单的锁我们可以直接去除,但复杂的锁怎么办呢?
解决办法:
- 找大佬帮解
V我50- 欺骗SWF,通过在本地模拟网站让SWF以为它在kongregate.com上
模拟网站
安装nodejs,然后找个文件夹创建server.js文件并复制文末代码,并在server.js的目录下创建一个名为kongregate.com的文件夹,把刚刚下载的SWF文件移到kongregate.com里。
运行node server.js
,浏览器打开http://localhost:3000/kongregate.com/,你应该能够看见游戏界面了(如果你安装了**Ruffle**插件的话)
const http = require('http');
const fs = require('fs');
const path = require('path');
const server = http.createServer((req, res) => {
const filePath = path.join(__dirname, req.url);
const ext = path.extname(filePath);
fs.access(filePath, fs.constants.F_OK, (err) => {
if (err) {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('404 Not Found');
return;
}
const mimeTypes = {
'.swf': 'application/x-shockwave-flash',
'.html': 'text/html',
'.txt': 'text/plain'
};
const contentType = mimeTypes[ext] || 'application/octet-stream';
res.writeHead(200, { 'Content-Type': contentType });
fs.createReadStream(filePath).pipe(res);
});
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
好了,可以愉快的玩耍了。
我的Flash收藏站:https://flash.100713.xyz
你还在等什么?去玩啊!