标签 教程 下的文章

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

按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 根据提供重新连接设备。

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

前言
因为每个人的VPS不一样,可能会有不一样的问题出现,欢迎各位在评论区斧正!

SSH连接

如果本地不支持,那么可以借助工具。

  • 打开本地WARP再用SSH连接工具连接。
  • 用手机流量连接

    获取IPV4出站

  • Debian/Ubuntu安装下载工具
apt update -y && apt install -y curl wget
  • CentOS安装下载工具
yum update -y && yum install -y curl wget
  1. WARP获取IPV4出站一键脚本

    wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh [option] [lisence/url/token]
  2. 修改DNS解析

    能直接用WARP脚本获取到就可以跳过这一步骤了
    可能有些机器要修改一下DNS解析

    echo -e "nameserver 2001:67c:2b0::4\nnameserver 2001:67c:2b0::6" > /etc/resolv.conf
    • 记得先要备份resolved.conf原始文件

安装宝塔

官方安装命令
https://www.bt.cn/new/btcode.html

笔者就不用官方的安装命令了,因为笔者安装宝塔7.7.0版本

国外机可以用Github:

curl -sSO https://raw.githubusercontent.com/8838/btpanel-v7.7.0/main/install/install_panel.sh && bash install_panel.sh

国内机器或者连不上Github的:

curl -sSO http://d.moe.ms/AAAAA/btpanel-v7.7.0/install/install_panel.sh && bash install_panel.sh

屏蔽手机号

不是7.7.0版本和7.7.0版本不需要的可以跳过

屏蔽手机号

sed -i "s|bind_user  'True'|bind_user  'XXXX'|" /www/server/panel/BTPanel/static/js/index.js

删除强制绑定手机js文件

rm -f /www/server/panel/data/bind.pl

还嫌麻烦,直接一键优化脚本吧

wget -O optimize.sh http://f.cccyun.cc/bt/optimize.sh && bash optimize.sh

开启监听IPv6

echo '::' > /www/server/panel/data/ipv6.pl && /etc/init.d/bt restart

修改信息

安装宝塔完成后,运行bt命令

  • 执行bt 8修改面板端口为自己喜欢的
  • bt 5bt 6修改面板用户名和密码。

登录宝塔

地址栏填写[IPv6地址]:端口号即可。