|
文/ 游戏安全实验室
一 漏洞简介
1) 漏洞所属游戏名及基本介绍:Pokemon Go(Niantic.Inc),AR游戏,卡牌收集类。
2) 漏洞对应游戏版本及平台:IOS 0.37.0
3) 漏洞功能:模拟位置(可过锁区限制、自动行走等)
4) 漏洞危害评级:红
二 漏洞实现介绍
1、漏洞实现使用工具
使用Xcode进行IOS越狱开发,既是常见的dylib插件开发(具体见GSLab之前的IOS越狱开发环境搭建等文章)。如下图所示是本次验证插件DEMO。
图1. 漏洞验证DEMO:pokegps插件
2、漏洞实现过程及实现原理
1) 伪造位置:Pokemon Go获取该功能的实现简单,如下所示,直接HOOK CLLocation类的coordinate。由于本身存在coordinate该属性,可以直接利用method_exchangeImplementations实现函数method Swizzle。
图2. HOOK的是CLLocation类
图3. 增加load函数,在里面实现hook
图4. 在自己的coordinate中,修改坐标
该插件DEMO对坐标进行了简单篡改:以联合广场(国内锁区无法使用,需要定位到国外)为起点,不断的降低经度(在联合广场是向西行走)。
其原理较为简单,既是CLLocation类保管着位置信息(经纬度、海拔等信息),所以直接拦截其获取经纬度(coordinate)的点,即可随意篡改位置。外网流传的各种懒人版本破解版,实质也是通过这类方式实现。如下图所示,在CLLocation做手脚。
图5. 核心也是通过拦截CLLocation的coordinate
该漏洞出现的原因是开发商Niantic没有静态校验位置的可信度。通过简单测试发现Niantic只对速度进行了校验,既是如果移动速度过快(从一个地区瞬间跨越到另一个地区),会被检测处罚(无法领取补给,遇不到精灵)。但是自己伪造一个坐标,并且按照正常速度移动,则不会被Niantic检测中。
该功能可以被恶意利用,收益巨大。比如自动移动到最近补给站领取精灵球、自动移动到最近精灵去捕获等,导致正常玩家无法赶上作弊玩家收集进度,影响游戏平衡。
三 漏洞效果截图
1) 插件DEMO的LOG:
图6. 插件LOG,可见原先坐标在深圳
2) 外网流传版本:
图7. 外网的各种破解版
|
|