(有更新)
¶微软Edge内置有一个小游戏,在浏览器输入edge://surf就能访问
但是玩起来很费力,怪兽跑的太快了,障碍物有时候也很难躲,我把游戏的game.js 源码做了修改,可以实现无敌
But!!! 还是不够完美,一个人玩实在是太孤独了,我把刷新路人的间隔调到了很低,而且把路人刷新的位置从屏幕之外改到了屏幕中间,哈哈
¶修改成在线游戏
如果你打开浏览器的devtool查看一下源码,你会发现我修改的地方做的中文注释,你也可以试着修改
我准备进一步把这个游戏优化成在线游戏,所以我引入了peerjs,socket.io这两个库,我想如果有一个websocket的服务器,那么每个玩家都可以发送ws message到服务器,服务器再转发给每一个在线的玩家,这样就可以实现多人。如果你看到报错的peerjs,那是其实我给每个访问网站的用户分配一个peer id,但是由于服务器端口有限,3001端口的peerjs服务器我无法部署。
有更新>>
旧的github仓库被我删了,新的仓库已经实现了websocket联机。部署游戏服务器需要开放两个端口,主要端口3000提供http服务和websocket服务,另一个3001端口为每个连接的websocket用户提供一个peerjs id,方便将来使用peerjs 实现无服务器的 P2P 用户间直连
¶修改时遇到的问题
我仔细研究了代码,从debug断点开始,慢慢的熟悉了代码。 经过我google搜索作者的名字加上EdgeSurf,我发现了原作者的一篇采访,作者说是代码是使用原生的js写的,然后使用webpack打包成game.js,于是我是用webpack-unpack把game.js反编译成 开包game.js后的文件 ,可以看到这是一个json文件,于是我又写了一个脚本重新组合.js来把这个json文件转写成一个个js文件, 你看到的目录拆开里的0.js到28.js每一个都是一个COMMONJS模块,其中最重要的起始模块是21.js,这我们可以从game.js开头的源码中看出来
为了验证我的猜想,我把这个0到28的模块使用browserfy重新组合,然后用组合后的js代替了game.js,游戏果然能够运行
很遗憾的是原作者使用webpack压缩后使源码变得很难阅读,有些变量名都被压缩成了一个字母,这给逆向开发带来很大难度
¶有兴趣的小伙伴可以fork这个项目,我们一起魔改这个html5游戏。
这是github仓库的main分支https://github.com/George-Guo-tech/How-to-change-the-Edge-Surf-game/tree/main/
你们可以克隆到本地或者云服务器上自己试试
有更新>>
main分支包含了一些拆包分析的文件以及game.js我写的带中文注释的源码,master分支不含源码和分析文件