Axie Infinity

众所周知,阿蟹【Axie Infinity】是去年最火的一款GameFi游戏,由越南团队Sky Mavis开发,短短几个月内就红遍东南亚,最大市场在菲律宾,其次是越南、马来西亚、印尼与美国等。

去年6月,该游戏单日平均收入就和《王者荣耀》并列全球第一;去年7月近30日平均收入也有3.34亿美元,超过王者荣耀2.31亿美元,拿下宝座。

自疫情以来,东南亚经济深受打击,菲律宾有高达730万人失业,马来西亚失业率也创1993年以来高峰,失业族群更遍及各领域:大学应届毕业生、三轮车司机,以及到海外当移工赚钱的人士。当他们因封城或无法出国失去收入,能在线上赚钱的Axie自然成最好机会,让游戏迅速走红。

但随着潮水和泡沫的褪去,从去年12开始GameFi板块的全面暴跌,我们应该谨慎对待P2E链游,小小娱乐即可,切勿投入过多,毕竟风险巨大。

模拟器检测

阿蟹【Axie Infinity】官方提供的Android APK在PC端的Android模拟器上无法正常运行,相信我们大家已经发现了。以雷电模拟器为例,安装后运行,屏幕一片空白。
首先想到的是可能官方做了模拟器检测。

我们查看APK的lib目录,果然看到了【libemulator_check.so】这样明显用于模拟器检测的库。可见官方也是下了一定的工夫,在本机代码层做了检测,而不仅仅是在Java代码层来做检测,这样仅仅凭借Xposed之类的Java层Hook技术就很难搞定了。

但无论他的【libemulator_check.so】如何检测,哪怕他用了无数种检测手段,哪怕这个.so他再使用vmp加壳,但只要我想办法让他的Java代码不去调用【libemulator_check.so】不就行了吗?

一番研究和搜索,发现这个【libemulator_check.so】实际上来自一个开源项目:
https://github.com/happylishang/AntiFakerAndroidChecker

果然,使用【jadx】反编译后,我们看到它Java代码中调用了

 EmulatorDetectUtil.isEmulator(context);

进行模拟器检测,于是我们通过【apktool】对其反编译后,修改smali代码,去掉这些调用,然后重新打包。

可是,悲剧的事情发生了,我们重新打包后APK无法运行了,哪怕是在正常的小米手机真机上也无法运行了,看来它除了做模拟器检测,还做了签名校验。

果不其然,我们在反编译的代码中发现他在【libglvnftpb.so】中做了签名校验的事情

不过对于签名校验的破解,我们有万能的大杀器:

《Android逆向【4】:暴力破解APK签名校验,愉快的重新打包微信支付宝APK》
https://blog.csdn.net/CharlesSimonyi/article/details/122184098

当然我们也可以不重新打包他的APK,而是直接通过Xposed来Hook【 EmulatorDetectUtil.isEmulator()】

不过最后搞了一通,我们还是失败了,游戏在模拟上运行还是一片空白。

于是我们直接在反编译的代码中搜索【System.loadLibrary】看它究竟加载了哪些so

至此我们发现了【C0010.m9(485)】这个神奇的函数,这个函数来自于【libglvnftpb.so】的本机代码。

好家伙,我们发现他为数不多的Java代码居然调用了【C0010.m9】这个函数多达531次!原来他是把整个APK的Java代码部分所需要的字符串,全部压缩放到了【libglvnftpb.so】里,APP运行起来后,会通过System.loadLibrary(“glvnftpb”);
加载【libglvnftpb.so】,这个时候【libglvnftpb.so】会进行签名校验、模拟器检测等操作,自检通过以后,这些字符串才会释放到内存中,接下来调用【libglvnftpb.so】的【C0010.m9】方法,传递不同的数字以查表的方式获取正确的字符串。

那么如果仅仅是把【libglvnftpb.so】干掉,让它不加载【libglvnftpb.so】那是不行的,因为整个APP的Java代码到处都在依赖【libglvnftpb.so】的【C0010.m9】以获取必须的字符串。

解决思路

可以从两条路子下手:

  1. 先把原版【Axie Infinity】在Android真机上跑起来,然后借助frida,编写脚本,反复调用【C0010.m9】并枚举int参数,把其内部的所有字符串和int值的对应关系一一套出来,然后编写一个【libglvnftpb.so】替换它,当然我们自己编写的【libglvnftpb.so】不做任何检测动作,直接返回正确的字符串。当然,这还有很多细节需要处理。

  2. 收集老版本的APK,这点对于游戏APP逆向来说非常重要,如果你关注一个游戏APP,最好写个脚本从一开始就盯着官方的每一个新版本的发布,尽可能搜集多的老版本APK。因为官方和工作室做对抗,也是循序渐进的,在【Axie Infinity】较早的时候,不仅没有做模拟器检测和签名校验,甚至连其il2cpp代码都是未做混淆的,所有函数和变量一目了然,但是随着官方和工作室对抗了近一年之久,各种检测和混淆手段层出不穷。收集尽可能多的历史版本,我们可以对比两个连续的新旧版本之间的差异,比较容易的发现官方做了哪些改动。同理,解决模拟器检测的另一个思路就是,我们仍然使用老版本的Java代码,但整合新版本的unity文件,老版本用于启动unity环境的Java代码可是没有调用so做模拟器检测的,同时游戏类APP每个新版本的改动主要还是其中的unity文件,这样套用以后使得APP的Java代码不做模拟器检测,但是unity却是最新版本,可以正常游戏。当然这取决于APP的具体实现,好在【Axie Infinity】的检测逻辑基本都在so中,而游戏逻辑全在【libil2cpp.so】中,至于Java部分,新老版本变化不大,使得我们做新老套用成为可能。

修改版

由于时间精力有限以及其它一些原因,我们暂时不能详细给出修改阿蟹【Axie Infinity】模拟器检测的具体步骤和代码,所以目前先给出一个修改好的APK文件,并且会随着官方新版本的更新而更新,目前修改版的APK可以到这里下载(右侧的【Releases】处下载):
https://github.com/encoderlee/cracked_axie_infinity

运行效果

目前最新的1.1.3.3版本在雷电模拟器中运行的效果

一些好的开源项目

在实现了在雷电模拟器上运行以后,我们很容易在一台电脑上多开N个号,并且给每个客户端设置不同的代理,同时我们也可以借助以下开源项目,实现Android设备的自动化,从而实现一些自动化操作:
Android自动化测试工具:https://github.com/openatx/uiautomator2
网易开发的手游自动化测试工具:https://airtest.netease.com

【ETH链游】阿蟹Axie Infinity模拟器运行及多开相关推荐

  1. 很火的区块链头部游戏《Axie Infinity》单日盈收竟与王者荣耀争锋,它是什么?

    近日,一款并未出现在主流视野的区块链游戏迅速破圈. 我们相信,在未来工作和娱乐将融为一体:我们认为要放权给我们的玩家,让他们有机会获得经济方面的收入:最重要的是,我们梦想着通过这些可爱生物的战斗和收集 ...

  2. 报告| 7月区块链游戏行业全景:玩赚游戏持续火爆,链游用户指数级增长

    来源/DappRadar 作者/Pedro Herrer 翻译/大章鱼哥 区块链游戏行业现状 7月份市场对区块链游戏的需求有所增加.区块链游戏领域在行业中的足迹更加清晰,因为该领域的活跃钱包增长了12 ...

  3. 打造日活超260万链游,Axie Infinity 创始人 Trung Nguyen 是如何做到的?

    对于喜欢玩手机链游的玩家来将Axie Infinit这款游戏可以说是非常的熟悉的,今天小编和大家分享以下关于其创始人的一些相关的故事. Trung Nguyen 对 CryptoKitties 很感兴 ...

  4. “链游之王”Axie引入全新保险机制 Ronin桥重新上线 避免重蹈覆辙

    经过数月努力,Axie Infinity开发者Sky Mavis宣布Ronin桥重新上线,用户现可以继续通过 Ronin 网络进行"存取款". Axie Infinity作为最大的 ...

  5. 可能是角色最呆萌的区块链游戏 - Axie Infinity

    导读:毛脸雷公嘴,鱼头插鹿角,猫耳配蛇尾--Axie Infinity是一款收集.饲养各式各样稀奇古怪小生物的链游.上线两年来,凭借其精致的画风和活跃的玩家社区,Axie Infinity一直保持着不 ...

  6. DappRadar x BGA 7月链游报告:链游占行业用量近60%,融资额降至3亿美元

    编译/Ning 来源/DappRadar 核心观点: 区块链游戏占据行业用量的近60%,拥有日均110万个独特的活跃钱包以及8.57亿美元交易量: Minecraft宣布NFTs禁令,NFTs Wor ...

  7. 以几款火爆链游为例 读懂GameFi常见机制

    Axie Infinity Axie Infinity 是一款建立在以太坊区块链上的去中心化回合制策略游戏,起初为以太坊主链,而后由于 gas 费用过高和延迟问题迁移到了自建的 Ronin 侧链上.主 ...

  8. DGP链游公会首发合作项目——D.G.Pals

    D.G.Pals官方账号: 官网:DGP: New World Discord: https://discord.gg/dgpals Twitter: https://twitter.com/offi ...

  9. 透过现象看本质,HuntingNFT缘何具备成为爆款链游的潜力?

    撰文:黑色马里奥 "每一轮熊市来临时,各个赛道都会迎来新的叙事,GameFi赛道亦是如此" 迄今为止,加密行业的发展已经迎来了三次价值发现的转变,即从早期以比特币为首的去中心化商品 ...

最新文章

  1. 分类回归loss函数汇总分析
  2. rem布局在部分手机上显示不正常问题
  3. 容器生态系统 (续) - 每天5分钟玩转容器技术(3)
  4. css使按钮固定在界面上面
  5. Google File System 学习笔记
  6. Mysql数据库drop表不用跑路,表空间传输助你恢复数据
  7. 数据库用户管理(增删改查,即CRUD)
  8. Services in Kubernetes
  9. qt之qthread的使用
  10. 墨卡托与经纬度转换工具
  11. 服务器如何推送消息到app,App中如何实现消息推送?
  12. 用Python+matplotlib足球运动员的射门数据可视化(绘制散点图)
  13. 销售订单配置项目说明
  14. OLAP引擎 :CH Doris impala+kudu优缺点分析
  15. Java基于JSP的网络音乐KTV点歌电台网站
  16. Excel中最精确的计算年龄的公式
  17. 打开Vscode提示rg.exe占用cpu过高,电脑卡顿
  18. 计算机组成原理实验 单总线CPU设计(定长指令周期3级时序)(HUST)思路总结
  19. userscripts.org最新网址
  20. Java开发语言环境_java-springboot 2中的语言环境

热门文章

  1. VB.net 图片刷新闪烁 解决方案
  2. 目标规划之问题数学化(建模)
  3. 区块如何防篡改_区块链为什么能防篡改?
  4. Photoshop for Mac(图像处理软件)破解版安装
  5. 栈的应用-数制转换(C语言数据结构)
  6. Unity角色扮演游戏集合
  7. 用微信公众号做淘宝优惠券查券和返利机器人的详细配置教程
  8. go语言视频教程_ go语言入门视频教程_go语言实战视频教程
  9. 算法学习 - 拼接成最大的数字
  10. 让味蕾动起来的蛋糕甜点