模拟定位原理
背景描述
越来越多的 Spam 用户通过位置模拟的方式,将自己的位置伪造成任意地点。通过发布有暗示性内容的动态进行用户引流或者杀猪盘操作。今天不讨论这些 spam 用户,单纯从技术的角度分析一下位置模拟是怎么实现的。
目前常见位置信息模拟方式
基于开发者模式的位置修改
实现方式:使用 Android 系统自带的调试 API,模拟 GPS Provider 的结果,从而实现模拟位置的功能。即利用手机自带的位置模拟功能,修改用户获取的位置信息。
Android 系统,在开发者模式中开启允许模拟位置。Android 6.0 以上的系统中开发者模式中去除了”允许模拟器位置“选项,但是增加了”选择模拟位置信息应用“选项。可以通过该选项,选择要开启模拟位置的应用,便可以通过 addTestProvider 进行位置信息模拟;
基于 Hook 方式的位置修改
实现方式:对手机 Root 以后,利用 Hook 框架拦截系统或者地图类 SDK 获取位置信息的 API,并用伪造的位置数据替换原有的位置数据,从而实现模拟位置的功能。
以高德地图为例,通过 Xposed 框架对高德地图中获取位置信息的函数进行 Hook,从而达到修改位置信息的目的:
基于虚拟容器的位置修改
实现方式:将 APP 安装在虚拟容器内,虚拟容器通过将应用注册到虚拟空间中。以 Xposedvirtual 为例,它是一套插件框架,允许应用以插件的方式运行在其构造的虚拟空间中,并自带 Root 权限和 Xposed Hook 框架,且宿主机无需 Root。这样便可以在任意的设备上利用 Hook 框架拦截系统或者地图类 SDK 获取位置信息的 API,并用伪造的数据替换原有的位置数据,从而实现模拟位置的功能。
基于模拟器的位置修改
实现方式:将 APP 安装在模拟器内,利用模拟器提供的位置修改功能修改模拟器的位置信息,从而实现模拟位置的功能。
以夜神模拟器为例,修改模拟器的位置信息:
基于修改系统源码的位置修改
实现方式:修改 Android 系统源码并编译打包,将系统中获取位置信息的 API 暴露出来,暴露的接口可以接收外部自定义的位置信息。当 APP 调用获取位置相关的 API 时,可以通过暴露的接口传入指定的位置信息,从而实现模拟位置的功能。
版权声明: 本文为 InfoQ 作者【BUG侦探】的原创文章。
原文链接:【http://xie.infoq.cn/article/9e6ba3ae799fc418ea9d9aeb7】。文章转载请联系作者。
评论