在应用开发中,如果有签到打卡之类的功能,你是否会遇到检测用户是否使用了虚拟定位软件来进行打卡?如果有,那么请仔细阅读这篇文章。该文章会带你认识什么是虚拟定位、什么是应用分身,以及如何通过代码来检测用户是否使用了虚拟定位进行打卡...在写之前首先要感觉这位博主的分享https://blog.csdn.net/mawei7510/article/details/80250416;他主要写的是应用分身、应用双开之类的内容,受他的影响,研究了一下虚拟定位,其实这两者的原理是一样的,虚拟定位也是通过一些第三方应用,然后把你自己的应用克隆了一个。启动的时候需要在第三方的应用里面来启动,这样的话在私有文件里面生成的包名势必会和直接启动自己的应用有区别,知道了这些,我们将通过以下三个方法来一一检测;
首先介绍一些那些使用应用分身双开和虚拟定位的应用和自己的应用在私有目录下生成的包名有什么区别:
我们知道App的私有目录是/data/data/包名/
或/data/user/用户号/包名
,通过Context.getFilesDir()
方法可以拿到私有目录下的files
目录。在多开环境下,获取到目录会变为/data/data/多开App的包名/xxxxxxxx
或/data/user/用户号/多开App的包名/xxxxxxxx
。
举个例子,在我手机上,正常使用App上面的代码获取到的路径为/data/user/0/top.darkness463.virtualcheck/files
。在多开分身的多开环境下,路径为/data/user/0/dkmodel.zom.rxo/virtual/data/user/0/top.darkness463.virtualcheck/files
。
当然,多开软件是可以hook处理让你拿到正常的目录,但截至写这篇文章为止,市面上大部分多开App没有绕过这项检测,仅有360家的分身大师可以绕过。