小议安卓定位伪造-实战足不出户畅玩Pokemon Go

本文旨在技术探讨故本文不提供工具,正常玩家请勿模仿,游戏中虚拟位置有封号风险

0x00 安卓定位方式归类

要伪造定位首先要摸清定位到底是如何实现的,首先从广义上来区分安卓的定位方式实际上就gps和network两种。但是network网络定位过于抽象,到底是移动网络基站定位,还是宽带ip定位还是wifi定位了,于是我又做了如下细分。

细分定位方式如下:

  1. GPS定位:通过卫星定位,精度高耗电也高定位速度慢。但是需要搜索到三颗星以上才可以定位,室内的大多无法使用。
  2. 网络定位:多指wifi/宽带ip定位,其实也包括移动网络也就是第三点。
  3. 基站定位:通过运营商的基站三角定位,定位精度低功耗低。
  4. 混合定位:结合上面多种方式,AGPS定位。
  5. 第三方SDK: 百度地图/高德地图/谷歌地图,本质上还是使用上面4种方式。

通常位置信息权重排序 :gps > wifi > 基站 ,实际上还和信号强度,以及软件算法等多种因素有关。

功耗排序 : gps > 基站 > wifi

0x01位置欺骗可行方案

针对上述定位方式可以假想如下方案进行欺骗。

1.硬件放射gps信号欺骗。 成本较高,需要诸如hackrf这样的硬件设备。我工位在窗户边真实gps信号十分强,所以我伪造的信号就像对弱了导致整个方案成功率变低。具体操作可以参考下文。

http://drops.wooyun.org/tips/10580

2.android位置模拟。这种方式需要打开gps定位并且进入开发者模式开启位置模拟,这个方案较易操作。但是很多app对这种行为作了检测,例如pokemon go在检测到位置模拟后便会提示Failed to detect location

3.hook系统调用,篡改location返回值,需要root权限。这个是我最终采用到方案。这个方案的优点是比较稳定,被检测到异常的概率比较小。既可以正常人肉跑动玩游戏,也可以偷懒利用pc上的插件点击鼠标满地图抓小精灵。

07-14 12:30:40.573    2657-3291/? D/pokemongoH﹕ location = -35.19044856,149.0560237
07-14 12:30:40.573    2657-3291/? D/pokemongoH﹕ getLatitude Result : -35.19044856
07-14 12:30:40.583    2657-3291/? D/pokemongoH﹕ getLongitude Result : 149.0560237

4.模拟器提供位置模拟功能,ARM模拟器运行缓慢,x86模拟机虽然快但是兼容性差。命令行指定坐标 :

telnet localhost 5554
geo fix <longitude value> <latitude value>```

这类操作因为需要在模拟器中进行,所以体验和兼容性要差很多。

5.篡改软件上传的ip/wifi信息,实际操作难度较大。

0x02分析pokemon go APP

  1. 在android平台要玩此游戏需要 google play 框架,如果你手机是国行的肯定不会带此框架,必须root后才能安装。我所使用的nexus 5是自带的。
  2. 既然要使用google play的服务那在gfw的保护就必须得自备梯子了,我选择的是showsocks,vps在香港。
  3. 安装app,https://apkpure.com/pok%C3%A9mon-go/com.nianticlabs.pokemongo.
  4. 任天堂是一直不太care国服的,这次迫于服务器宕机的压力Pokemon go更是对大陆地区进行锁区操作。当你千辛万苦完成上述两个步骤后进行进入游戏会发现地图上没有任何小精灵和补给站以及道馆。所以这个时候就需要使用到本文讲解的技术定位伪造了。

先观察下网上公开的Pokemon go锁区图,从下图可以看出东三省和新疆部分地区是不在锁区范围可以正常游戏的。为什么这样,我个人猜测有这样两个原因

  1. 这个长方形的锁区范围从开发角度易于实现
  2. 游戏运营初期策略较为宽松宁放过不误杀。

为了测试Pokemon Go的定位方式,我做了如下操作。

1.设置系统使用wlan和移动网络定位会提示 GPS signal not found,当设置仅gps定位和gps/wlan/移动网络确定位置的时候可以正常游戏

2.监控 location provider

07-14 12:30:22.573    2657-2657/? D/pokemongoH﹕ HOOK IT
07-14 12:30:40.553    2657-3291/? D/pokemongoH﹕ location provider is : gps
07-14 12:30:40.563    2657-3291/? D/pokemongoH﹕ location provider is : network

3.逆向app,在逆向过程中未发现调用getCellLocation/getBSSID方法,但是发现其有调用getLastKnownLocation。下文会描述这些方法的用处。

结论:pokemon go采用混合定位其中gps定位为主,network定位为辅且gps定位可以独立工作network定位无法独立工作。

0x03伪造gps插件开发

上文已经简单分析了安卓定位的方式以及pokemon go采用的定位方案,在hook系统api前腰先对这些api简单了解下。

需要关注的api:类以及方法如下

Class:
android.location.Location
Method:
public double getLatitude ()   //获取纬度,北纬为正数,南纬为负数。
public double getLongitude ()  //获取经度

Class:
android.location.LocationManager
Method:
public Location getLastLocation ()
public Location getLastKnownLocation (String provider)  //通过provider获取location

Class:
android.telephony.TelephonyManager
Method:
public CellLocation getCellLocation ()  //通过GSM获取location

android.net.wifi.WifiInfo
public String getBSSID ()  //获取wifi的bssid

通过分析定位代码和android api可以发现不管采用何种定位方式,归根到底还是要从loaction中取出经纬度,也就是你的位置信息。所以这个类中的getLatitude/getLongitude方法就是hook的关键点。

现在已知开服区域:美国/澳大利亚/英国/日本。我选择将自己的坐标偏移到澳大利亚的堪培拉。

其实网上很多伪造位置的软件,但是网上的软件有三处不足:

1.可能有后门或者广告

2.可能出现开飞机的现象(游戏中短时间大范围变化坐标)后被封号。

3.可diy性差。

如果坐标写死,那么游戏依然是不能正常玩的,所以我是做了个偏移,就相当于另一个地方有个影子同步在动一样。偏移量通过一个文件来计算,文件写入的是需要偏移到的地址,这样也方便与pc上的adb交互。如果炎炎夏日不想离开空调又想抓小精灵就只能再做个pc端控制偏移的插件来。

电脑控制端控制插件四个按钮.

addlon: longitude + 0.0005

sublon: longitude - 0.0005

addlat: latitude + 0.0005

sunlat: latitude - 0.0005

最后效果如下。PS:平时抓精灵多建议关掉AR,这样更流畅抓的成功率高一些。

待开发功能:

  1. 多角度移动,如果有多点触控其实没必要。
  2. 自动跑步,检测到小精灵的时候停下 (自动加减坐标,监控到震动即停止跑步)
  3. pc端地图同步,人物坐标同步。
  4. ...

0x04 问我ios怎么办

如果是ios用户看到这里已是十分不易,所以附送一个ios pokemon go类似玩法:

https://github.com/kahopoon/Pokemon-Go-Controller

原帖地址:http://drops.wooyun.org/tips/17840

时间: 2024-09-15 21:34:13

小议安卓定位伪造-实战足不出户畅玩Pokemon Go的相关文章

畅玩《一代宗师》安卓版完美着陆首发数据泄露

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 6月14日中午12点畅玩手游平台<一代宗师>安卓版正式对外首发,参加对外首发的平台还有当乐网.机锋网.豌豆荚.安智四家国内著名安卓平台. 与目前手游市场上众多的卡牌类游戏不同,<一代宗师>安卓版,首创经营+武侠的双模式玩法,在<一代宗师>中,玩家扮演一派掌门和江湖侠客两种角色,亲临血雨腥风的武林之中.玩家在

华为荣耀畅玩4X电池续航怎么样?华为荣耀4X电池能用多久?

关于华为荣耀畅玩4X电池问题 1.不可拆卸式电池. 2.电池容量达到3000mAh. 荣耀畅玩4X采用了智电2.0省电技术,像很多安卓机一样其也内置了省电软件.在省电管理功能当中,有超级省电.智能省电与普通省电这三种技术,官方宣称荣耀畅玩4X在超级省电模式下续航时间高达7天以上. 手机后盖是不可拆卸的,电池采用内置式设计,但电池容量达到3000mAh,大于市场上88%的手机电池容量.在智能省电模式下,荣耀畅玩4X在正常使用强度下能坚持1天半左右的续航时间. 华为荣耀畅玩4X正面采用一块5.5英寸

华为荣耀畅玩4X评测视频,真正意义上的全网通

class="post_content" itemprop="articleBody"> 在国产手机中有这么一个普遍的现象,3000元以上的手机主要以各品牌旗舰机产品为主.2000元价位是主打竞争类的产品.1000元则是以实用为主的产品定位-- 今天评测的主角是荣耀刚刚推出的全网通畅玩4X,是一款真正意义上的全网兼容的手机,也就是说无论是移动.联通或是电信,无论2G.3G还是4G都全面兼容,下面我们对它进行一个简单的视频体验. 荣耀畅玩4X体验评测

荣耀畅玩5X手机截屏快捷键

荣耀畅玩5X截图方法一:组合快捷键截图 荣耀畅玩5X是安卓手机我们只要按下[电源键]+[音量-键](组合快捷键截图)实现截屏,然后我们会听到拍照的声音了,之后就可以在相册中找到,如下图所示. 荣耀畅玩5X截图方法二:通知栏开关快捷截屏 除了上面的组合快捷键截图外,荣耀畅玩5X运行的EMUI 3.1系统屏幕下拉菜单中,还为我们内置了截屏快捷操作开关按钮,具体方法如下. 打开荣耀畅玩5X需要截屏的界面,然后用手指屏幕最上面向下划过,之后就可以打开下拉通知栏菜单,然后切换到[开关]选项,点击下方的[截

畅玩《一代宗师》6.14公测 “超级礼包”疯抢中!

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 由畅玩手游平台独家发布的,"经营+武侠RPG"双模式水墨武侠神作<一代宗师>安卓版,即将于6月14日11:00启动唯美公测!现在参与畅玩<一代宗师>公测活动,可以赢取公测超级大礼包,让你在游戏里一路绝尘,傲视群雄! NO1.上论坛抢<一代宗师>"超级礼包"激活码 齐心

索泰GTX650-1GD5雷霆版显卡畅玩主流游戏攒机佳配

如果玩家们想畅玩主流游戏的话,其实并不需要太高端的配置即可一台4000元左右的爱机就能够完成所有的主流应用,而799元的这款索泰GTX650-1GD5雷霆版就是4000元左右攒机的佳配. 索泰GTX650-1GD5雷霆版拥有着全新的开普勒架构设计显卡拥有着非常不错的执行能力和出色的功耗控制,让喜欢使用小机箱的朋友们也有选择的空间. 编辑点评: 1.索泰650-1GD5拥有八爪鱼低热MOS管.固态电容等优异用料,为显卡的品质提供保障. 2.索泰650-1GD5雷霆版采用了封闭式的散热器设计,散热器

八核64位华为荣耀4X畅玩版详细评测:红米Note杀手

华为近日正式发布了旗下首款64位八核芯片麒麟620,其定位中端,以优秀的功耗为主打.华为荣耀畅玩4X作为第一款搭载麒麟620的手机,拥有拥有5.5英寸高清全贴合IPS屏幕,1300万像素背照式摄像头,分为联通和移动版本,在千元价位上竞争力很强.华为荣耀畅玩4X荣耀畅玩4X拥有2GB RAM+8GB ROM,支持内存卡扩展,前置500万像素摄像头,后置1300万像素背照式相机,采用基于android4.4深度优化的 EMUI3.0.由于其整体配置较为中端,麒麟620处理器让畅玩4X率先内置,将大大

水墨武侠神作 畅玩《一代宗师》体验服6.11开启

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 <一代宗师>是畅玩平台最新推出的,国内首款经营+武侠RPG安卓游戏. 6月11日,体验服开启 千呼万唤始出来!2013年6月11日11:00,畅玩<一代宗师>即将开启体验服!本次体验服将通过活动的方式,抽取一小部分幸运玩家参与体验! 图1黄药师 体验服福利: 1. 获得激活码的玩家将可以在6月11日-6月13日登陆&l

华为荣耀3x畅玩版怎么把SIM卡联系人导入手机

1)我们在"华为荣耀3X畅玩版"手机中点击"联系人"进入之后点击右上角的[...]然后在打开菜单中点击[导入/导出]进入,具体步骤如下图所示.    2)现在我们会显示从那个SIM卡导入,我们选择好之后点击[全选]之后我们再点击[导入]具体如图.    3)接着在打开界面我们选择导入方式在此我们选择[手机]点击之后SIM卡联系人导入到手机中去了.