1.首先是app试用,在真机上下载打卡app,并体验一下
image.png (18.14 KB, 下载次数: 0)
下载附件
2022-5-11 10:40 上传
image.png (16.19 KB, 下载次数: 0)
下载附件
2022-5-11 10:40 上传
图1 是真机正常 下载安装app ,并连接可打卡wifi页面,图2是点击打卡,打卡成功页面(为防止侵权,对页面进行了删减)
手机app打卡的原理其实很简单,就是判断人有没有到现场,然后再进行打卡签到操作,比如定位打卡,wifi打卡,以后可能会有人工智能打卡,量子打卡,原理也是一样。
要实现定时打卡就有两个问题要解决,一个是点时,一个是打卡。解决打卡问题,首先是伪造现场(假装自己在现场),然后是固定的打卡操作。解决定时问题,可以通过设置时间触发器的方式。再将两者结合一下就能实现定时自动打卡了。(晕)
2.伪造现场,执行打卡操作
伪造现场,肯定不能把真机留在现场(毕竟我要用它在被窝里看葫芦娃)。很自然的想到用台式机上的模拟器,假装自己在岗位兢兢业业。我这里用的是某夜某神模拟器,安装打卡app试用一下,结果不出意外的出意外了。
image.png (15.67 KB, 下载次数: 0)
下载附件
2022-5-11 11:28 上传
3386d5e6a7ea5c8ac79039e79fd68ed.png (20.92 KB, 下载次数: 0)
下载附件
2022-5-11 11:50 上传
图3 是模拟器安装app,进入页面显示,图4是真机连接其他wifi显示页面
(以下内容需要具相关知识,可以直接跳过看结论)
模拟器模拟的android型号是XiaoMi I6,版本是android 5.0,网络连接类型是wifi ,wifi名称是wiredssid,按理来说模拟器应该显示图4页面,也就是没连对wifi,但是实际情况是一直在获取wifi。这里怀疑是app获取模拟器当前wifi 失败了,所以一直在循环,于是写了个android demo 程序测试了一下发现可以正常获取。百思不得其解的情况下,用android killer(以下简称ak)看看源码,发现部分类名和属性名都被混淆过了,阅读起来很不友好。这时发现论坛另一位老哥发的贴子:https://www.52pojie.cn/thread-1406878-1-1.html可以方便的定位代码位置,于是下载源码整了一下(这个确实是神器,用起来很方便,非常建议爱好android 逆向的小伙伴收藏,但是整的时候遇到个小问题,就是我的客户端是chrome,一直提示连接服务端失败,最后发现是服务端进行websocket协议判断时忘记大小写统一了,改了之后成功连接上了),结合ak,成功定位到具体的包和类 。但是看源码还是看不出啥问题。最后是通过 adb logcat 在打卡app的日志里发现了蛛丝马迹,原来是app调用gps服务通过Amap(高德地图)api 获取位置信息的时候返回了错误代码,原因是模拟器不像真机一样配备gps设备,获取的信息无法进行精确定位。这里用xposed hook(AMapLocation相关方法)返回的错误代码,改成成功的标志,并且把获取经纬度的方法也hook了一下。完成对位置信息hook之后,模拟器页面显示从图3变成了图4,离成功更近一步了。接下来是对wifi的hook,容易想到判断连接的wifi是否是可打卡wifi,应该是通过wifi名称和路由的mac地址(mac 地址是全球唯一的,可以用于设备标识)。用xposed hook(WifiInfo相关方法) 相关方法后,模拟器页面显示从图4 变成了图1。至此完成了现场伪装,欺骗app,假装在现场。
结论是这款打卡app会获取用户的地理位置信息,以及连接wifi的名称和mac地址等相关信息判断用户是否可以打卡,伪装相关信息后就可以随时随地打卡了。
3.定时打卡
实现模拟器可以打卡后,接下来就是用程序模拟用户点击打卡按钮实现自动打卡(其实一开始想的是对app进行抓包,每天定时向服务器发一个打卡数据包就行了,但是抓包分析有点难度)。
这里因为是模拟器,模拟用户点击可以使用adb shell命令(用起来相对简单),命令如下
adb connect ip:port //连接模拟器
timeout 5 //等待5秒
adb shell am start "x.x.x/x.x.x.Activity" 启动打卡app
timeout 10
adb shell input tap 600 1100 //模拟点击,这里需要固定模拟器屏幕大小,不然定位不到打卡按钮
把以上命令保存成批处理文件就可以一键自动打卡了,再创建一个windows 定时任务,每天早上和晚上定时运行批处理脚本,就可以实现定时自动打卡签到签退了(要保证电脑和模拟器一直开着)
图 5 自动打卡结果
如图5所示是自动打卡结果,8点多的时候我还在睡觉
4.总结
手机wifi打卡,相关app一般是通过获取手机的位置信息和连接wifi信息来判断用户是否在打卡区,通过伪装这些信息可以欺骗app假装自己在现场,然后进行打卡。
定时自动打卡这里取了个巧用了adb shell tap命令来模拟点击,做成批处理的形式,创建windows 定时任务来执行。
自动定时打卡这里其实非常“硬编码”,而且还必须要求电脑和模拟器开着,且模拟器屏幕大小固定。额,大概这也算是一种思路吧(其实一开始想的是写个app demo模拟点击,想想还是太麻烦了)。
以上就是手机wifi打卡实现定时自动打卡的过程了,重在讨论思路,忽略了很多细节,欢迎大家在评论区和谐友善讨论(大佬勿喷)。