在Linux上启动洛克王国(页游)
背景
众所周知,洛克王国是由腾讯开发的一款页游,依赖Flash运行。而又因为众所周知的原因,Flash官方版已经似了有几年了(除了国内代理商重庆重橙维护的Flash中心,但是flash中心的Linux版只有商业授权)。so we只能另辟蹊径。
Ruffle
6202年了,玩Flash游戏谁还用Flash Player啊,快来试试Rust重写的Flash Player(
好了,这是最简单的方案,适用于绝大部分Flash游戏,但是却不适用于洛克。原因如下:

腾讯的Nginx没配置好跨域规则。主域名是17roco.qq.com,而游戏的.swf资源文件放在res.17roco.qq.com域名下,导致Ruffle没法获取游戏文件。而当你点击这个按钮后,Ruffle会新开一个标签页运行游戏swf文件,看起来正常了,实际上还是寄:

狂点”开始”。真是奇怪Le,怎么没反应?实际上是因为开始按钮在正常的网页中会跳转到QQ登录页面,而Ruffle的这个页面实质上只有swf解释器功能,不支持跳转。
那有没有什么方法能把CORS限制关掉?有的兄弟有的,Chromium可关。只需提供两个参数--disable-web-security和--user-data-dir=[你的自定义数据目录]。把CORS限制关闭之后,我们就可以在https://17roco.qq.com/继续登录游戏。但是登录完之后又有个问题,就是游戏没法获取服务器列表了。

经过抓包,似乎是游戏会直接调用socket从服务器获取数据,但是浏览器环境下的Ruffle无法创建socket。这就不好办了,单独的Ruffle程序又无法调用登录页面,所以ruffle这条路是走不通了。
Adobe Flash Player
众所周知,Flash有三个版本,分别是Flash Player ActiveX(适用于IE),Flash Player NPAPI(Netscape Plugin API,适用于Firefox)和Flash Player PPAPI(也叫PepperFlash,曾由Google维护)。其中NPAPI和PPAPI版本支持Linux。我们这里选择Chromium支持较好的PPAPI版本。
下载
那么我们要去哪里找呢?Adobe已经把所有Flash相关的链接全部重定向到了flash.cn。Wayback Machine启动!
如果你没法访问时光机,可以点击文末的链接使用网盘下载。我们这里选择Flash 32.0.0.371版本。
有了Flash还不够,还需要一个支持Flash的浏览器。我们这里选择Ungoogled Chromium(主要是因为它有CI Build存档,同时还提供了AppImage。我们选择Chromium最后一个带有PPAPI支持的版本Chromium87。
同样的,如果你没法访问Github,文末网盘链接里有所需的所有文件。
准备启动
下载后我们得到两个文件:
fp_32.0.0.371_archive.zip这是Flash Playerungoogled-chromium_87.0.4280.141-1.1_linux.AppImage这是Chromium87
然后我们新建一个文件夹,把它们放进去。
❯ llPermissions Size User Date Modified Name.rw-r--r-- 406M kirisauce 6 3月 13:27 fp_32.0.0.371_archive.zip.rwxr-xr-x 123M kirisauce 5 3月 19:35 ungoogled-chromium_87.0.4280.141-1.1_linux.AppImage然后解压出fp_32.0.0.371_archive.zip中的32_0_r0_371/flashplayer32_0r0_371_linuxpep.x86_64.tar.gz(如果你是32位就选带i386字样的,但一定要选带linuxpep字样的)。
然后新建一个文件夹(我这里是pepperflash),把.tar.gz包里的东西全解压进去。完成后be like:
❯ ll --treePermissions Size User Date Modified Namedrwxr-xr-x - kirisauce 6 3月 17:29 ..rw-r--r-- 406M kirisauce 6 3月 13:27 ├── fp_32.0.0.371_archive.zipdrwxr-xr-x - kirisauce 6 3月 13:29 ├── pepperflashdrwxr-xr-x - kirisauce 6 3月 13:29 │ ├── LGPL.rw-r--r-- 7.4k kirisauce 25 4月 2020 │ │ ├── LGPL.txt.rw-r--r-- 76 kirisauce 25 4月 2020 │ │ └── notice.txt.rw-r--r-- 20M kirisauce 25 4月 2020 │ ├── libpepflashplayer.so.rw-r--r-- 2.8M kirisauce 25 4月 2020 │ ├── license.pdf.rw-r--r-- 2.2k kirisauce 25 4月 2020 │ ├── manifest.json.rw-r--r-- 2.7k kirisauce 25 4月 2020 │ └── readme.txt.rwxr-xr-x 123M kirisauce 5 3月 19:35 └── ungoogled-chromium_87.0.4280.141-1.1_linux.AppImage启动
然后就可以启动浏览器了,这里需要用到三个参数:
--no-sandbox旧版Chromium的sandbox实现似乎在我的系统上无法正常运行,因此需要禁用sandbox。这个参数视情况使用,禁用沙盒还是有点dangerous蛋 哥 热 死 的。--ppapi-flash-path使用这个参数指定Flash插件路径,需要提供动态库文件的路径。--ppapi-flash-version使用这个参数告诉浏览器Flash的版本,似乎不是强制的。
最终启动命令大概长这样:
./ungoogled-chromium_87.0.4280.141-1.1_linux.AppImage --no-sandbox --ppapi-flash-path='./pepperflash/libpepflashplayer.so' --ppapi-flash-version='32.0.0.371'这个版本的Chromium在每次启动时Flash都是默认禁用的。当你打开包含Flash内容的网站时会提示:

打开这个开关即可

打开开关后再回到游戏页面,左键一下Flash内容,就会跳出来一个提示,点击允许Flash启动。同时每次页面更新SWF文件时都会提示一次Flash已过期,点击允许一次即可。然后就启动!!!!!

个人截图
最后附上我的几张截图:




End.
网盘链接 密码:drvuhn