游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5132|回复: 0

《Pokémon GO》模拟位置漏洞分析报告

[复制链接]

8360

主题

9283

帖子

2万

积分

论坛元老

Rank: 8Rank: 8

积分
29945
发表于 2016-10-10 10:10:24 | 显示全部楼层 |阅读模式
文/ 游戏安全实验室

  一 漏洞简介

  1) 漏洞所属游戏名及基本介绍:Pokemon Go(Niantic.Inc),AR游戏,卡牌收集类。

  2) 漏洞对应游戏版本及平台:IOS 0.37.0

  3) 漏洞功能:模拟位置(可过锁区限制、自动行走等)

  4) 漏洞危害评级:红


  二 漏洞实现介绍

  1、漏洞实现使用工具

  使用Xcode进行IOS越狱开发,既是常见的dylib插件开发(具体见GSLab之前的IOS越狱开发环境搭建等文章)。如下图所示是本次验证插件DEMO。

image001.jpg

  图1. 漏洞验证DEMO:pokegps插件

  2、漏洞实现过程及实现原理

  1) 伪造位置:Pokemon Go获取该功能的实现简单,如下所示,直接HOOK CLLocation类的coordinate。由于本身存在coordinate该属性,可以直接利用method_exchangeImplementations实现函数method Swizzle。

image003.jpg

  图2. HOOK的是CLLocation类

image004.png

  图3. 增加load函数,在里面实现hook

image006.png

  图4. 在自己的coordinate中,修改坐标

  该插件DEMO对坐标进行了简单篡改:以联合广场(国内锁区无法使用,需要定位到国外)为起点,不断的降低经度(在联合广场是向西行走)。

  其原理较为简单,既是CLLocation类保管着位置信息(经纬度、海拔等信息),所以直接拦截其获取经纬度(coordinate)的点,即可随意篡改位置。外网流传的各种懒人版本破解版,实质也是通过这类方式实现。如下图所示,在CLLocation做手脚。

image008.png

  图5. 核心也是通过拦截CLLocation的coordinate

  该漏洞出现的原因是开发商Niantic没有静态校验位置的可信度。通过简单测试发现Niantic只对速度进行了校验,既是如果移动速度过快(从一个地区瞬间跨越到另一个地区),会被检测处罚(无法领取补给,遇不到精灵)。但是自己伪造一个坐标,并且按照正常速度移动,则不会被Niantic检测中。

  该功能可以被恶意利用,收益巨大。比如自动移动到最近补给站领取精灵球、自动移动到最近精灵去捕获等,导致正常玩家无法赶上作弊玩家收集进度,影响游戏平衡。

  三 漏洞效果截图

  1)    插件DEMO的LOG:

image010.png

  图6. 插件LOG,可见原先坐标在深圳

  2)    外网流传版本:

image012.png
  图7. 外网的各种破解版

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-15 20:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表