Zenly-Ghost-mode-attack
前言
本仓库列举了一种通过穷举实现对Zenly APP幽灵模式的精确位置获取方法。
什么是Ghost(幽灵)模式👻
Zenly被开发为使用一种有趣的方式来联系和分享你的位置。但是,我们知道有时出于各种原因,你可能不想分享你的精确实时位置,这就是为什么我们开发了Ghost(幽灵)模式,允许你自己决定谁看可以看到什么!Ghost模式可以分别对一个,一些或是所有你的朋友来设置。
有三个选项可供选择:
- 精确:显示你的确切实时位置。
- 模糊:显示你所在区域的随机位置。距离你的实际位置10米到1.2公里之间。
- 冻结:在启用冻结模式之后,你的位置将保持固定在你开启冻结模式之前的最后位置。
开启方法:在Zenly个人资料页面,通过点击位于页面右上角的Ghost(幽灵)图标,可以开启Ghost模式设置界面。
原理
Zenly模糊定位算法每次都会将处于某坐标点的用户做定向偏移,事实上,虽然这看起来十分随机,可是如果你有两个好友处于同一地点,并均开启模糊定位,Zenly服务器会将他们两个的坐标进行定向偏移,然后通过观察,发现他们显示为同一坐标位置,并且头像重合。由此可知, 尽管Zenly的模糊定位属于随机移动,但是该随机坐标并非按用户区分移动,而是固定的随机移动。
于是,可利用该特性,使用安卓模拟器并安装Zenly,然后利用模拟器的虚拟GPS功能,在该好友模糊定位范围内中的坐标进行遍历,如果观察到APP内头像重叠,即可大致判断出其精确位置。
手动攻击
初始化
首先我们需要三个账号来进行攻击验证,分别为 :
- A - 攻击者
- B - A的好友
- C- 攻击者的傀儡机器人
他们三个的关系为:
A作为攻击者,需要获取B的精确位置。
B为A的好友,同时B对A开启了模糊定位。
C是A的傀儡,用于穷举B的精确位置。同时A与C为好友关系,并且C对A也开启了模糊定位,C与B不是好友。
验证
A作为攻击者,账号将用于观察B,C位置。由于B与C对A开启了模糊位置,那么我们需要先确认B的大致范围。
假设B的位置不变,只需要移动C的坐标,若观察到B与C位置重叠,即C的当前坐标为B的坐标。
Zenly的模糊范围实际上是一个正方形,由于APP内显示为圆形范围,所以要取B当前坐标经纬值,加圆形外层一个点的经纬值,并以该距离为边长绘制出一个正方形范围。(根据Zenly官方解释,边长应该是1200M。)
将改正方形平均划分为9个区域,以每个区域中心点为目标修改9次C的坐标,找出9个点显示与C距离最近的区域。
重复执行上述步直至B与C位置重合即判断出C的坐标为B的坐标。
可以使用更多账号来穷举出B的位置,理论上账号越多,速度越快,时间越短。
自动化攻击(思路)
思路
利用安卓模拟器运行两个实例,一个登录攻击者账号(A),另外一个登录机器人账号(C)。
利用openCV与PyAutoGUI来观察并控制实例A与C,获取A的好友B的位置,通过安卓模拟器修改实例C的坐标,直到A观察到B与C的位置重叠,最后打印出C的最后一次位置。
备注
修复
Zenly如果想解决模糊定位的问题,应该对随机算法进行修改,如果检测到大致处于同一坐标的用户,应该对每个用户进行不同的坐标偏移,而不是每次随机偏移的位置一致。
该项目仅作为思路分享,没有任何公开代码,所有实验账号均为本人账号。