链游Farmers World【农民世界】挂机脚本原理解析
《链游Farmers World【农民世界】爆火,发布一个免费开源的辅助挂机脚本》
https://blog.csdn.net/CharlesSimonyi/article/details/121512342
在上一篇文章中,我们开源了一个【农民世界】挂机脚本,本系列最后一遍文章,我们来简单解析一下具体实现原理
思路
一般来说,网页游戏辅助软件最终极的形态就是直接和服务器发HTTP请求,不用打开浏览器,没有模拟点击操作,不用判断屏幕上显示的内容,悄无声息的在后台默默的工作。这种基于协议直接和服务器通信实现的辅助软件,我们一般称为【脱机外挂】。这种形式的辅助软件可以做到最高效率,一台机器可以多开上百上千个账号,但实现起来同时也是最难的。当然,和端游、手游不同,网页游戏所有的客户端JavaScript代码,都在浏览器中可见,可能会做一些打包和混淆,但总体来讲,分析这些代码难度比端游的本机代码要容易很多。那么我们只需要打开浏览器调试工具,抓包分析内容,在它的JavaScript代码中下断点调试,就可以写出模拟操作的脚本。
抓包
以【农民世界】为例,我们打开火狐浏览器,登录游戏,查看它发送的这些HTTP请求,很容易就能找到一些关键数据。
可以看到这个HTTP请求,获取到了我们账户上的能量、金币、食物、木头的信息。
接下来,我们只需要用python的requests包,学着浏览器的样子去发送这个HTTP请求,就能拿到这些数据。
import requests
from pprint import pprinturl = "https://api.wax.alohaeos.com/v1/chain/get_table_rows"
post_data = {"json": True,"code": "farmersworld","scope": "farmersworld","table": "accounts","lower_bound": "m45yy.wam","upper_bound": "m45yy.wam","index_position": 1,"key_type": "i64","limit": 100,"reverse": False,"show_payer": False
}
resp = requests.post(url, json=post_data).json()
pprint(resp)
同理,我们也可以找到我们的所有正在栽的农作物和小鸡等相关的HTTP请求,上图中我们可以看到,这个HTTP请求返回的数据表明我正在种的玉米的信息。
不过,当我们分析浇水、收割等操作的HTTP请求时,就会发现有点复杂,里面有很多数据我们不知道如何去模拟,先不用急,我们大致可以猜到,他实际上是和WAX钱包进行了交互,当你点确认签署交易的时候,WAX钱包对该笔交易进行签名,发送数据到智能合约。
顺藤摸瓜
我们看到这些HTTP请求,都有一个共同的结尾,就是 get_table_rows,于是我们去网上搜索这个关键词,发现,原来这就是 EOS RPC API,而WAX就是EOS克隆过来的兼容网络,自然也是用这一套API,我们查看关于get_table_rows的文档:
https://developers.eos.io/manuals/eos/latest/nodeos/plugins/chain_api_plugin/api-reference/index#operation/get_table_rows
就知道,原来这个API,本质上是去查询智能合约的数据,而农民世界的智能合约名为【farmersworld】,于是我们直接去WAX Explorer上查询该智能合约的相关信息:
https://wax.bloks.io/account/farmersworld
我们可以直接看到这个智能合约有哪些表【tables】,有哪些【Actions】,我们甚至可以直接在这里输入账号,就可以查询到我们账号上的资源、农作物、工具,等信息。
同理,再看【Actions】,我们就找到了农民世界中当你点击收割,喂鸡,浇水,背后对应的函数。比如【cropclaim】就是对农作物进行浇水,我们甚至可以在这里填写【owner】(账号)和【asset_id】(农作物id),然后点发送事务,在弹出的WAX钱包中授权,就可以完成农作物的浇水操作。
至此,我们终于理解,整个【农民世界】的游戏其实都是对该智能合约的操作,从【Tables】中读取数据,执行【Actions】操作处理农作物。【Tables】中的所有条目,我们都可以直接发送HTTP请求进行查询,接下来就是直接调用该智能合约【Actions】中的函数,即可完成自动化操作。
调用智能合约
调用WAX上的智能合约,最简单的方法当然是直接使用官方提供的SDK,由于WAX本质上就是EOS网络,当然也是使用【eosjs】 https://github.com/EOSIO/eosjs 这个SDK来和智能合约交互。
我们简单看一下【eosjs】的文档:https://developers.eos.io/manuals/eosjs/latest/how-to-guides/how-to-submit-a-transaction
便知道如何去【发送事务】,大致是调用eosjs中的这个函数【api.transact】,那么对于农民世界来说,调用这个函数的时候,参数该怎么写呢,这时我们可以回到火狐或Chrome浏览器中,调试它的JavaScript代码,看他怎么填这些参数,我们自己的辅助脚本也照着去填,就可以实现同样的操作。
在网页的JavaScript代码中搜索【api.transact】并下断点,然后去游戏中点一下浇水,看看他是怎么【浇水】的,那么我们的代码也是原模原样的用这些参数去调用【api.transact】即可。
不过需要注意的是,【农民世界】本身使用的并不是【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
用它直接和链上的智能合约交互会方便些
链游Farmers World【农民世界】挂机脚本原理解析相关推荐
- 链游Farmers World【农民世界】爆火,发布一个免费开源的辅助挂机脚本
初衷 <GameFi爆火,[农民世界]崛起,浅谈链游辅助脚本开发思路> https://blog.csdn.net/CharlesSimonyi/article/details/12141 ...
- 我的世界服务器搭建原理,我的世界TNT大炮原理解析
我的世界TNT大炮原理解析,TNT大炮显然是很多玩家熊孩子的最爱,但是大家自己搭建的时候多多少少会遇到困难,接下来就简单讲一下TNT大炮的原理和注意事项熊孩子福利. 根据牛顿运动定律,物体具有惯性.所 ...
- 分享个弹射世界挂机脚本 worldflipper 弹射世界挂机脚本 自动共斗踢罐子
弹射世界这款游戏需要不断的重复刷一些关卡,很容易腻,也没那么多时间,那么怎么办呢? 给大家分享个弹射世界脚本工具,养肝神器. 如图: 下载链接:https://www.lanzous.com/b00z ...
- GameFi爆火,【农民世界】崛起,浅谈链游辅助脚本开发思路
链游 最近元宇宙.NFT.GameFi爆火,一堆链游爆发,资本疯狂涌入炒作,小白争先恐后入局,正是逐利的好时机. 以[农民世界]https://farmersworld.io 为例,游戏仅仅上线3个月 ...
- 【WAX链游】发布一个免费开源的Alien Worlds【外星世界】合约脚本TLM
前言 <链游Farmers World[农民世界]爆火,发布一个免费开源的脚本> 在之前的文章中,我们分享了一个开源的农民世界(Farmers World)脚本 [OpenFarmer]: ...
- 【WAX链游】EOS网络第三方代付CPU资源【原理】
CPU资源 在之前的文章中,我们尝试用python写了一个链游Farmers World[农民世界]的挂机脚本: <链游Farmers World[农民世界]爆火,发布一个免费开源的辅助挂机脚本 ...
- 【WAX链游】发布一个免费开源的MiningNetwork合约脚本BTK
前言 挖矿网络(Mining Network)官网: https://miningnetwork.io 挖矿网络(Mining Network)合约脚本:https://github.com/enco ...
- 【区块链】Python开发EOS机器人与WAX链游脚本常用工具
前言 众所周知,开发EOS机器人与WAX链游脚本,我们都需要调用eosio chain api: https://developers.eos.io/manuals/eos/latest/nodeos ...
- 我的世界版链游Titan Hunters,泰坦猎人研报实测
概述 1.基本情况 1.1项目简介 1.2基本信息 2.项目详情 2.1团队 2.2资金 2.3产品 3.发展 3.1 Roadmap 3.2现状 4.经济模型 4.1供给 4.2 持币地址分析 4. ...
最新文章
- php 二维数组排序,多维数组排序
- Python地图可视化三大秘密武器
- 封装、继承、多态的理解
- 牛客多校5 - Graph(字典树+分治求最小生成树)
- linux之sort命令
- 朴素贝叶斯实现分类_关于朴素贝叶斯分类及其实现的简短教程
- Python selenium 去掉“隐藏正受到自动测试软件的控制”
- php根据键值去除数组中的某个元素_php数组删除元素 删除指定键值元素
- 毕业了5年的同学突然告诉我,他已经是架构师了!
- @所有人 Flink Forward Asia 2020 议题征集倒计时!
- 比较x^y和y^x的大小
- 七牛直播云播放鉴权-时间戳防盗链
- 数据分析中的统计学知识
- .chm文件是什么怎么打开?
- MonthCalendar上使ToolTip随鼠标位置实时变化
- 微信公众号无服务器 外部链接,微信公众号文章怎么添加外部链接-给微信公众号文章添加外部链接的方法 - 河东软件园...
- NVIDIA NCCL 源码学习(二)- bootstrap网络连接的建立
- Keil uVision5 创建STM32F4
- [原创]黑产在IP攻防上的挣扎与进化
- 输出两个数之间的水仙花数C++