《链游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【农民世界】挂机脚本原理解析相关推荐

  1. 链游Farmers World【农民世界】爆火,发布一个免费开源的辅助挂机脚本

    初衷 <GameFi爆火,[农民世界]崛起,浅谈链游辅助脚本开发思路> https://blog.csdn.net/CharlesSimonyi/article/details/12141 ...

  2. 我的世界服务器搭建原理,我的世界TNT大炮原理解析

    我的世界TNT大炮原理解析,TNT大炮显然是很多玩家熊孩子的最爱,但是大家自己搭建的时候多多少少会遇到困难,接下来就简单讲一下TNT大炮的原理和注意事项熊孩子福利. 根据牛顿运动定律,物体具有惯性.所 ...

  3. 分享个弹射世界挂机脚本 worldflipper 弹射世界挂机脚本 自动共斗踢罐子

    弹射世界这款游戏需要不断的重复刷一些关卡,很容易腻,也没那么多时间,那么怎么办呢? 给大家分享个弹射世界脚本工具,养肝神器. 如图: 下载链接:https://www.lanzous.com/b00z ...

  4. GameFi爆火,【农民世界】崛起,浅谈链游辅助脚本开发思路

    链游 最近元宇宙.NFT.GameFi爆火,一堆链游爆发,资本疯狂涌入炒作,小白争先恐后入局,正是逐利的好时机. 以[农民世界]https://farmersworld.io 为例,游戏仅仅上线3个月 ...

  5. 【WAX链游】发布一个免费开源的Alien Worlds【外星世界】合约脚本TLM

    前言 <链游Farmers World[农民世界]爆火,发布一个免费开源的脚本> 在之前的文章中,我们分享了一个开源的农民世界(Farmers World)脚本 [OpenFarmer]: ...

  6. 【WAX链游】EOS网络第三方代付CPU资源【原理】

    CPU资源 在之前的文章中,我们尝试用python写了一个链游Farmers World[农民世界]的挂机脚本: <链游Farmers World[农民世界]爆火,发布一个免费开源的辅助挂机脚本 ...

  7. 【WAX链游】发布一个免费开源的MiningNetwork合约脚本BTK

    前言 挖矿网络(Mining Network)官网: https://miningnetwork.io 挖矿网络(Mining Network)合约脚本:https://github.com/enco ...

  8. 【区块链】Python开发EOS机器人与WAX链游脚本常用工具

    前言 众所周知,开发EOS机器人与WAX链游脚本,我们都需要调用eosio chain api: https://developers.eos.io/manuals/eos/latest/nodeos ...

  9. 我的世界版链游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. ...

最新文章

  1. php 二维数组排序,多维数组排序
  2. Python地图可视化三大秘密武器
  3. 封装、继承、多态的理解
  4. 牛客多校5 - Graph(字典树+分治求最小生成树)
  5. linux之sort命令
  6. 朴素贝叶斯实现分类_关于朴素贝叶斯分类及其实现的简短教程
  7. Python selenium 去掉“隐藏正受到自动测试软件的控制”
  8. php根据键值去除数组中的某个元素_php数组删除元素 删除指定键值元素
  9. 毕业了5年的同学突然告诉我,他已经是架构师了!
  10. @所有人 Flink Forward Asia 2020 议题征集倒计时!
  11. 比较x^y和y^x的大小
  12. 七牛直播云播放鉴权-时间戳防盗链
  13. 数据分析中的统计学知识
  14. .chm文件是什么怎么打开?
  15. MonthCalendar上使ToolTip随鼠标位置实时变化
  16. 微信公众号无服务器 外部链接,微信公众号文章怎么添加外部链接-给微信公众号文章添加外部链接的方法 - 河东软件园...
  17. NVIDIA NCCL 源码学习(二)- bootstrap网络连接的建立
  18. Keil uVision5 创建STM32F4
  19. [原创]黑产在IP攻防上的挣扎与进化
  20. 输出两个数之间的水仙花数C++

热门文章

  1. 高校人员信息管理系统(C++版)
  2. 学业水平考试b能上985吗_哪些大学对会考等级有要求
  3. 香港汇丰取消个人账户最低存款要求及月费
  4. push推送相关注意事项
  5. 干货丨加密数据迁移二三事
  6. python找完数 pta_PTA——完全数
  7. 【数据分析】数据分析方法论
  8. 《Visual C++ 2010入门教程》 旗舰级详尽教程
  9. jmeter实战案例
  10. 增量表、全量表和拉链表