米空气净化器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
实际上这里只要把BLOCK 8清空掉就可以重置滤芯。执行
hf mfu wrbl -b 8 -d 00000000 -k bc77b6ed
清除BLOCK 8的数据。