分类 笔记 下的文章

Ding-BLE

Ding蓝牙动态模拟(使用ESP32核心开发板实现模拟蓝牙,请勿用于Ding打卡等非法用途!)

前言

Ding考勤机蓝牙实现方案是通过TOTP算法计算一次性密码并通过蓝牙广播,该密码大约30s刷新一次,较近范围内(无遮挡10米内)的手机设备通过搜索蓝牙广播获取其广播的Manufacturer Data数据,从里面解析出一次性密码并上传服务器进行对比,对比通过即认为手机在考勤机附近。

本文的实现方法为:使用ESP32(1)放置在考勤机附近,持续搜索考勤机发送的广播,当检测到Manufacturer Data数据变化时,则将数据发送到服务器;需要远程模拟时,使用ESP32(2)从服务器获取Manufacturer Data数据并模拟,手机接收其发送的Manufacturer Data数据。

环境准备

硬件环境

  • 服务器环境:能够外网访问的php网站部署环境,负责Manufacturer Data数据的存储和转发
  • ESP32核心开发板*2:作者使用ESP32-S3-N16R8进行测试,选择的开发板ROM建议选择4MB及以上
  • WiFi环境:打卡机附近有稳定且可连接的WiFi

软件环境

  • Arduino IDE:安装有esp32开发环境(建议使用2.0.17和2.0.6版本)

部署方案

  1. send.php文件部署在服务器上,使用https://example.com/send.php?password=xxx&data=xxxx 即可上传Manufacturer Data数据数据,使用https://example.com/send.php?password=xxx 即可获取Manufacturer Data数据
  2. Arduino IDE安装ESP32 2.0.17环境,若使用ESP32-S3-N16R8核心开发板,请选择ESP32S3 Dev Module,修改为个人信息,编译SendClient.ino 文件并烧录,记为模块1
  3. Arduino IDE安装ESP32 2.0.6环境,若使用ESP32-S3-N16R8核心开发板,请选择ESP32S3 Dev Module,修改为个人信息,编译ReadClient.ino 文件并烧录,记为模块2
  4. 模块1放置在打卡机附近(无遮挡10米内)
  5. 模块2随身携带,需要使用时供电供网,即可模拟成功

局限性

  • 考勤机蓝牙打卡设置页面有“位置异常检测”功能开关,若管理员开启后,会采集本机位置与设定考勤机位置进行对比,出现较大偏差会判断为异常。 解决方案为结合LSP框架和位置模拟组件共同使用,有兴趣的可以参考:Xposed-Modules-Repo/com.fuck.android.rimet: 锤锤 (github.com)

已知问题

  • 蓝牙模拟代码仅在2.0.6库测试通过,不适用于较新库版本
  • 蓝牙采集代码存在约40%概率获取不到Manufacturer Data数据

鸣谢&参考

蓝牙模拟实现参考:zanjie1999/dingBle: esp32修改蓝牙mac地址 模拟蓝牙打卡机 (github.com)

蓝牙采集实现参考:蓝牙打卡破解 - 丁少华 - 博客园 (cnblogs.com)

https://github.com/yeqiu233/Ding-BLE/tree/main

先说结论,试试这个伪静态!

if (-f $request_filename/index.php){
    rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
    rewrite (.*) /index.php;
}

测试环境:Windows Server 2012 R2 宝塔7.5.0 Nginx1.21.1 PHP7.3/7.4

按Windows键,输入cmd,选择管理员身份运行命令提示符,粘贴以下内容按回车也可以实现免登录 REG ADD

"HKEY_CURRENT_USER\Software\kingsoft\Office\6.0\plugins\officespace\flogin" /v "enableForceLoginForFirstInstallDevice" /t REG_SZ /d "false" /f 

如果需要恢复登录可以把上面命令中后面的false改为true

1、软件升级前需要具备 内存卡+读卡器+电脑 ,并通过读卡器内存卡与电脑连接;

2、我们图中是以32g的内存卡为例,请选择正规渠道购买的品牌内存卡,将内存卡格式化一下FAT32格式,选择开始按钮 按照系统提示将内存卡格式好。

3、查询设备底部核实产品的具体名称及型号,对应在固件下载栏找到对应的固件点击下载,解压对应的固件包,这里以小方1s为例:

4、将卡刷的文件(以小方1s的卡刷包为例),放进格式化的内存卡里备用。将固件文件重命名为demo.bin

5、将内存卡从电脑里取出,插入断电的小方1s的卡槽内。

6、先按住SETUP键,再通电等待黄灯变为蓝黄灯一起亮后方可松开SETUP键(提示:小方设备除外,小方是看到指示黄灯亮起15秒后,放开setup键)如图片所示

7、等待大概30s之后升级成功后,会出现黄灯闪烁或者黄蓝灯交换闪烁稍后可以重新按SETUP键重启设备,伴有黄色的闪烁,会听到“等待连接”的声音,至此软件的升级就完成了,可以在米家app 根据提供重新连接设备。

软件下载 请您首先确认,在设备底部或者背面产品标签上的 产品名称 并找到相应的升级的软件再进行下载。

● 随身WiFi助手(来自@酷铵水遍):https://pan.quark.cn/s/3b64d7a927cd
● 随身WIFI Debian固件:https://pan.quark.cn/s/576e5fccccfa

● 随身WIFI OpenWRT固件:https://pan.quark.cn/s/631323a0be44

● MobaXterm(官网):https://mobaxterm.mobatek.net

○ 以下为需要敲的代码,一键解决Debian固件问题

echo -e 'nnnnnnnnnn####################################n'
sudo rm /etc/apt/sources.list
sudo touch /etc/apt/sources.list
sudo echo -e "# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释nndeb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-freen# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-freenndeb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-freen# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-freenndeb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-freen# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-freenndeb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-freen# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list
echo -e '1、默认软件源修改完成!nn'
sudo sed -i '1c deb http://mirrors.tuna.tsinghua.edu.cn/Adoptium/deb buster main' /etc/apt/sources.list.d/AdoptOpenJDK.list
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 843C48A565F8F04B
sudo gpg --armor --export 843C48A565F8F04B | sudo apt-key add -
echo -e 'nn2、AdoptOpenJDK报错修复完成!nn'
sudo sed -i '1c #deb http://repo.mobian-project.org/ bullseye main non-free' /etc/apt/sources.list.d/mobian.list
echo -e '3、Mobian源报已屏蔽!'
echo -e 'nn####################################nn即将开始更新软件源list......n'
sleep 5
sudo apt-get update
echo -e 'nn4、更新软件源list更新完成!'
echo -e 'nn####################################nn即将开始升级系统程序至最新版......'
sleep 5
sudo apt-mark hold openssh-server
sudo apt-get -y upgrade
sudo apt-mark unhold openssh-server
echo -e 'nn5、系统程序更新完成!nn####################################nnnn'