米空气净化器2S的正版滤芯,底下贴了一张NXP NTAG213射频标签。
空气净化器靠这个射频标签中的数据,判断滤芯的剩余寿命,以及是不是正版滤芯。
射频标签的密码采用了“一卡一密”。
一卡一密算法的Python实现如下:
import sys
import hashlib
# Usage: pwd.py 04A03CAA1E7080
def getpwd(uid):
uid = bytearray.fromhex(uid)
h = bytearray.fromhex(hashlib.sha1(uid).hexdigest())
pwd = ""
pwd += "%02X" % h[h[0] % 20]
pwd += "%02X" % h[(h[0]+5) % 20]
pwd += "%02X" % h[(h[0]+13) % 20]
pwd += "%02X" % h[(h[0]+17) % 20]
return pwd
assert getpwd("04A03CAA1E7080") == "CD91AFCC"
assert getpwd("04112233445566") == "EC9805C8"
print("PWD:", getpwd(sys.argv[1]))
使用时,需要将射频标签的7字节的UID作为输入。输出的4字节即为密码。
以上代码转载自如下链接:
知道了密码,就无需再使用PM3等工具进行无线嗅探。
可以直接修改NTAG中的数据,请参考以下链接:
【PM3】重置小米空气净化器滤芯 | Ray of Hope新生代农民工https://raycn.pub/2021/08/21/reset-xiaomi-air-purifier-filters/
实际上这里只要把BLOCK 8清空掉就可以重置滤芯。执行
hf mfu wrbl -b 8 -d 00000000 -k bc77b6ed
清除BLOCK 8的数据。