打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
安卓虚拟定位实现与反作弊思路

目录

前言

写这篇博客主要是分享一下虚拟定位的反作弊思路
也是因为个人之前曾做过虚拟定位相关的小软件,也玩了一下VA的虚拟定位,挺有意思的,然后觉得应该在解决反作弊的思路下写一篇分享。

1.安卓开发者模式模拟定位

1.实现方式

1)安卓6.0以上 打开开发者模式→模拟位置信息应用

2)安卓6.0以前 打开开发者模式→允许模拟位置

3)调用Android原生SDK提供方法

伪代码如下:

try {    locationManager.addTestProvider(providerName, false, false, false,            false, true, true, true, 0, Criteria.ACCURACY_FINE);    locationManager.setTestProviderEnabled(providerName, true);} catch (SecurityException e) {    Toast.makeText(mainActivity, "请打开模拟位置应用", Toast.LENGTH_LONG).show();    MyUtils.startDevelopmentActivity(mainActivity);//跳转到开发者选项界面    Log.d("异常", e.getMessage());}......try {    locationManager.setTestProviderStatus(providerName, 100, null, System.currentTimeMillis());    locationManager.setTestProviderLocation(providerName, MyUtils.generateLocation(latLng));    mLocationClient.requestLocation();} catch (Exception e) {    Log.d("异常", e.getMessage());}

2.优缺点

1)使用方便,调用原生SDK即可

2)不易被检测(针对百度地图、高德地图及使用其APK的软件均可使用)

1)对使用腾讯地图API(如微信、摩拜APP)的软件不起效果,但是美团里的骑车没用腾讯的就能生效。

P:原生代码中定位模拟有两种

1.GPS模拟

GPS模拟在打开GPS的情况下有一定概率会飘移

2.NETWORK模拟

NETWORK模拟在打开GPS或通网的情况下有一定概率会飘移

3.处理思路

1)加入腾讯地图API进行位置二次判断

2)打开时软件时强制要求GPS打开

(很多这类APP定位采用的NETWORK模拟会因为GPS打开产生导致来回飘移,可以记异常次数与阈值判断,或者定义飘移算法)

3)检测开发者模式/模拟定位是否打开(安卓6.0以前才能检测)

// 检测虚拟位置是否打开 有安卓版本问题 检测的是6.0以上的允许模拟位置 现在的版本手机检测基本都无效// 开发者模式检测暂时也没找到方法 所以说感觉检测有点困难if (Settings.Secure.getInt(getContentResolver(),        Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0) {    Toast.makeText(this, "1", Toast.LENGTH_SHORT).show();} else {    Toast.makeText(this, "0", Toast.LENGTH_SHORT).show();}

4)海拔高度比较,模拟的时候是需要注入海拔高度

具体实现见博客
皮卡丘虚拟定位

2.root

1.实现方式

1)手机需要root

2)基于Xposed等hook框架开发

2.优缺点

1)root后基本无法判断是否有有针对软件的修改

2)hook框架能用来做很多东西如JustTrustMe(关闭证书强校验)、修改步数、抢红包之类的

1)很多手机禁止root或者root困难(如华为、vivo等手机都已经禁止)

2)道高一尺魔高一丈,有Magisk这类的框架免root获取root权限

3)另外root权限过高,容易被第三方利用中毒或系统崩溃等

3.处理思路

1)检测root,禁止root机使用

2)检测Xposed等Hook框架模块

3)检测Magisk这类免root获取root权限的框架

3. 运行在虚拟容器内

3.1.VirtualApp

1.实现方式

区分于root注入,root是直接修改了系统文件来添加代码注入窗口,VirtualApp通过将应用注册到虚拟空间中,在空间中创造的对象调用bindApplication()后添加代码注入窗口

类似Docker,VirtualApp是一套插件框架,允许应用以插件的方式运行在其构造的虚拟空间中,而无需实际安装应用

https://github.com/asLody/VirtualApp

很多软件类似或基于VirtualApp开发…

https://github.com/android-hacker/VirtualXposed/releaseshttps://github.com/PAGalaxyLab/VirtualHook

(使用YAHFA替代Xposed)

2.优缺点

1)免root下实现root的功能

2)使用上较root方便,有大量开源产品可以借鉴

1)相对root的做法可检测(虚拟空间真实存在)

3.处理思路

VX作者的解答:

3.2.太极Xposed

基于Xposed等Hook框架二次开发,也是虚拟运行,与上面的VirtualApp不一样的是

它需要卸载原APP,重新安装在太极容器内部(运行明显卡顿)

感觉上就像一个是虚拟机(太极)一个是Docker(VirtualApp)

针对太极这类软件的检测要从检测应用列表(有防检测功能)/检测包目录是否存在下手

4.直接修改APP源码二次打包

1.优缺点

1)可自由修改源码添加功能

1)目前大部分软件都有反修改的功能,进一步破解很难

2)代码混淆工具,软件的源码难以理解

5.运行在安卓模拟器内

模拟器不能模拟手机拨打之类的,或者常见模拟器内部都会生成对应文件可以检测到。

6.黑盒子

实体的盒子,放在内部可以定位。

7.模拟接口请求

*解决思路扩展

1)针对常见虚拟定位软件,直接检测软件列表中是否存在或者软件目录是否存在,必须卸载才可使用。

(显著针对性封禁,但是治标不治本,改个包名又能用)

如:FakeLoction、太极Xposed、Xposed等等…

如果是用在摩拜/美团这类对外开放的APP直接检测会导致用户体验感不好卸载

这种检测方式适用于内部APP

2)检测Wifi列表,长时间没变化就是压根没动过位置…或者通过某个算法判断

3)根据移动轨迹/历史移动轨迹编写一个判断的算法,例如:

1.某个点在历史定位中重复次数非常多,有可能就是作为了定位点。

2.某个范围内,定位经纬度连续相同没有丝毫偏差,理论上手机晃动甚至不动也会有经纬度偏差。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
爽爽爽!手机不Root,也能用Xposed框架
手机不需要Root,就能安装Xposed框架,安卓玩机必备
安卓手机中最强的虚拟机,自带root环境和xposed框架!
安卓神器:无需ROOT使用Xposed框架,微信无限多开分身
Virtualxposed:无需root的xp框架!
安卓手机的一个神器,从此让你爱上搞机!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服