链游Farmers World【农民世界】挂机脚本原理解析

《链游Farmers World【农民世界】爆火,发布一个免费开源的辅助挂机脚本》
https://blog.csdn.net/CharlesSimonyi/article/details/121512342
在上一篇文章中,我们开源了一个【农民世界】挂机脚本,本系列最后一遍文章,我们来简单解析一下具体实现原理

思路

一般来说, 页游戏辅助软件最终极的形态就是直接和服务器发HTTP请求,不用打开浏览器,没有模拟点击操作,不用判断屏幕上显示的内容,悄无声息的在后台默默的工作。这种基于协议直接和服务器通信实现的辅助软件,我们一般称为【脱机外挂】。这种形式的辅助软件可以做到最高效率,一台机器可以多开上百上千个账 ,但实现起来同时也是最难的。当然,和端游、手游不同, 页游戏所有的客户端JavaScript代码,都在浏览器中可见,可能会做一些打包和混淆,但总体来讲,分析这些代码难度比端游的本机代码要容易很多。那么我们只需要打开浏览器调试工具,抓包分析内容,在它的JavaScript代码中下断点调试,就可以写出模拟操作的脚本。

抓包

以【农民世界】为例,我们打开火狐浏览器,登录游戏,查看它发送的这些HTTP请求,很容易就能找到一些关键数据。

不过需要注意的是,【农民世界】本身使用的并不是【eos.js】,而是WAX云钱包【WAX Cloud Wallet】的SDK:
【waxjs】https://developer.wax.io/waa/use-waxjs
其实本质上,【waxjs】最终也是调用【eos.js】,只是涉及到私钥的问题,【waxjs】做了一层包装。

因为大多数【农民世界】世界的玩家默认都是通过WAX云钱包登录游戏的,而你的私钥是由WAX云钱包托管的,并且不可以导出私钥。而直接使用【eos.js】的话,是要提供私钥的,于是【waxjs】做了一层包装,增加了一个【login()】方法,弹出一个web小窗口让你输入账 密码进行登录,并且在调用【api.transact】的时候,也会弹出一个小窗口让你授权,但你确认授权以后,WAX云钱包使用托管在云端的私钥对交易数据进行签名,然后下发签名数据,最终在你的浏览器端通过【eos.js】发送交易,这样可以保证的私钥不会泄露,同时也能签署交易。

其实对于工作室来说,完全可以不通过WAX云钱包注册账 ,而是自行在WAX 络上创建钱包,这样私钥也可以直接掌握在手里,配合【eos.js】,完全不需要浏览器,就可以签署交易,发送交易,完成【农民世界】的所有操作。

Python实现

市面上的大多数【农民世界】的挂机脚本,都需要借助浏览器或者Webbrowser来运行,就是因为WAX云钱包的关系,大多数用户都是通过WAX云钱包注册的账 ,而WAX云钱包只有【waxjs】这个SDK,而这个SDK是JavaScript写的,而且还没法在node上运行,因为它需要在浏览器中弹出登录窗口和授权窗口,需要有浏览器的环境。理论上我们可以分析【waxjs】的代码,通过模拟发送HTTP请求的方法完成【登录窗口】和【授权窗口】做的事情,但是由于时间精力有限,其实并没有必要了,快速出一个能用的东西,先用起来再说,不然去晚了汤都喝不上。

而我们开源的【OpenFarmer】之所以需要selenium和chrome,就是这个原因,需要有一个chrome窗口,是为了在里面跑【waxjs】,然后由于我们使用python来开发,所以我们借助selenium,就可以用python去调用【waxjs】这个JavaScript写的SDK的【api.transact】方法,实现自动化操作。

其实这个项目最适合用JavaScript来写,因为WAX和WAX云钱包只提供了JavaScript的SDK,如果是【Ethereum】或【BSC】上的链游,由于我们有python版本的SDK【Web3.py】https://github.com/ethereum/web3.py
用它直接和链上的智能合约交互会方便些

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年11月2日
下一篇 2021年11月2日

相关推荐