问题定义
最近实验室买了一台打卡签到机,旨在督促同学们好好学习天天向上!
咯!就是下面这家伙。
它有三种签到方式:人脸识别、指纹识别、WIFI打卡。
为了满足自己对其实现技术的好奇心(实则是,天下苦其久矣!),遂对其进行研究,看能不能实现远程签到?(寝室签到)。
方案设计
前面说了,这台机子支持三种打卡方式,下面分别探讨这三种方式及其它方案的可行性。
人脸识别
不能远程
其次,能不能代签到?试过拿着照片看它是啥反应,啥反应也没有。
指纹识别
不能远程
其次,能不能代签到?听说指模好像可行,不可这玩意儿弄起来比较麻烦,遂放弃!
WIFI打卡
查了下原理,它首先需要设置一个打卡wifi,这个wifi的ESSID(也就是wifi名称)与BSSID(也就是wifi的mac地址)会被上传到服务器中。然后用户需要安装一个打卡app,再连接上打卡wifi,当app获取到手机所连接wifi的ESSID与BSSID与服务器存储的ESSID与BSSID一致时,用户就具有打卡权限。
搞懂了这个原理,只要能模拟出一个目标wifi(打卡wifi),这个wifi在哪,就能在哪打卡。可行!
其它方案
在手机内部欺骗app
上面说到,通过模拟一个目标路由器来欺骗app,实现打卡。那么,能不能不要这个路由器(更省成本,更高端大气上档次)。
这就需要在手机内部做些手脚,直接给app提供假的ESSID和BSSID数据。
通过检索,发现了一个强大的工具:Xposed,它是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在与原程序功能不冲突的情况下同时运作。因此,可以基于这个框架去修改app获取到的wifi信息,具体怎么做还待研究,不过网上好像已经有一款叫wifi模拟器的app,就是基于这个框架达到效果,我也装上使用过,但是出现bug,获取不到正确的wifi信息,不清楚是app支持的安卓版本问题还是咋的。
在手机外部欺骗打卡服务器
除了主动给打卡app提供伪造的wifi信息,还有一种思路是直接给打卡服务器提供伪造的信息。其原理是通过流量抓包(例如Fiddler)获取app提交数据到服务器的接口和协议,这样直接就能将wifi数据及打卡数据提交给接口,实现远程打卡。但这个方法也是最难的,主要看打卡app的安全性做的如何,协议容不容易破解?
方案实施
还是说回可行且能最快实现的方法(等不及了!)模拟一个同样的wifi
身边可以创建wifi的工具有:一台win笔记本、一台win台式机、一个Raspbian树莓派3B+(好几年前的古董了,现在4B已经出来了,性能杠杠的)
首先试了一下win笔记本创建wifi,第一步肯定是修改mac地址,第二步开启热点。但这第一步就出现问题了,windows(这里是win10)是可以修改mac地址(网上教程很多,这里就不赘述了),但是地址的第二位必须是2、6、A、E才生效,这就有些麻烦了,我需要模拟的wifi第二位并不在其中。应该是win系统的限制。
看着眼前的树莓派,也只剩下它了,争气点吧,不要再出现啥幺蛾子了。
第一步:修改mac地址
sudo macchanger -m xx:xx:xx:xx:xx:xx wlan0
第二步:开启热点
# 直接开启
sudo create_ap wlan0 eth0 dawnlab dawnlab703.
# 后台开启
sudo nohup create_ap wlan0 eth0 dawnlab dawnlab703. &
上面的macchanger、create_ap都是需要安装的包。
争气,搞定!!!
评论区