个人博客: 斯科特安的时间
前段时间发布的手游PokemonGo相信大家都有耳闻,而因为这个游戏在国内的坐标遭到了封锁,很多科学游戏方法也陆续涌现。好不热闹。
那其实,PokemonGo最初的版本,在大陆是可以通过简单的vpn+gps欺骗进行游戏的。
不过很快地,在新的版本更新中就封锁了这一方式。
而对Android系统使用GPS欺骗,应用场景也绝不只是这一个游戏而已。所以我今天来简单介绍一下可使用的几种方式。
控制噪声的方式有三种:防止噪声产生,阻断噪声传播和防止噪声进入耳朵
相对应的,
修改GPS定位结果的三种途径: 编译时修改NLP结果,运行时修改LocationManager结果,从应用获取到的结果修改。
1. 编译时修改NLP结果
难度系数:五颗星
建议:想都别想
大概思路:修改nlp部分源码,重编系统
2. 运行时修改LocationManager结果
这个分两类:
一类: 使用android自带的调试api,模拟gps provider的结果。
LocationManager.setTestProviderLocation(Provider, Location);
优点:简单,无需root
缺点:不稳定,特征明显,容易按特征嗅探到(有反作弊机制的游戏基本都能查出来),需要打开开发者的允许模拟位置选项
第二类: 使用xposed,传说中的android神器,用它对app_process进行注入。
有什么用呢,就是你可以放个钩子,英文名叫hook。这个钩子能知道你系统里的每个应用什么时候调用了哪个函数,还能修改对应的这个函数。
说到这就懂了吧。比如你猜测对应app会使用LocationManager.getLastKnownLocation的结果。然后你用xposed把内存里的这个函数返回值改成 纬度N 39.832670° 东经 E116.460370°
,然后调用这个函数的程序看到的记过就是你修改之后的结果。
具体代码看这里吧(非本人repo,只是找了个简单易懂的demo)
FakeGPS demo
优点:稳定,难以被反查
缺点:需要root
3. 对想欺骗的app反编译,修改结果
该怎么做看标题就明白了。
步骤就是
- 反编译
- 找到所有使用了定位结果的位置
- 修改结果
- 重新打包
这个方式的优缺点也很明显。
优点: 无需root,稳定性强(前提是找准入口)
缺点: 技术水平要求高。根据应用复杂程度、混淆、安全策略等不同,难度差异较大。难易程度包括很多内容,包括混淆部分、入口寻找、签名验证等。 我也不熟啊,感兴趣的同学请自行深入学习吧。
————————
3类4种欺骗方式,各位看官收好。
以上。