小米空气净化器RFID芯片滤芯破解重置
小米带芯片的空气净化器滤芯寿命是按照通电使用时间计算的,可能没怎么使用但时间到了就频繁提示购买新滤芯,一是浪费,二是穷,所以就折腾一下,后续内容仅为技术学习与讨论,不涉及侵犯知识产权等,如有问题,私信联系我删除内容。
思路来自CSDN文章小米空气净化器滤芯RFID解密_robur的博客-CSDN博客_rfid解密
我采用的方案是手头的arduino mega 2560 + RC522小板子
然后小撸一段代码就ok了:
1:读取到滤芯底部RFID的UID
3:擦掉BLOCK 8的数据【PM3】重置小米空气净化器滤芯 | Ray of Hope (raycn.pub)
如果你不会或者麻烦,淘宝上有写好的标签,你也可以只换个标签也行。
其实淘宝上有替换的滤芯rfid贴纸,几块钱一张,链接无法添加你们可以搜一下
后边是我贴的代码,看不懂就别看了哈哈
/*
【Arduino】MEGA 2560
MFRC-522 RC522 RFID射频 读写NTAG213射频标签
米空气净化器2S的正版滤芯,底下贴了一张NXP NTAG213射频标签。
空气净化器靠这个射频标签中的数据,判断滤芯的剩余寿命,以及是不是正版滤芯。
射频标签的密码采用了“一卡一密”。
密码采用射频卡UID计算得来
得到密码后只要把BLOCK 8清空掉就可以重置滤芯
仅用于技术学习与交流
RFID与Arduino的连线
SDA------------------------Digital 53
SCK------------------------Digital 52
MOSI----------------------Digital 51
MISO----------------------Digital 50
IRQ------------------------不用连接
GND-----------------------GND
RST------------------------Digital 2
3.3V------------------------3.3V (千万不要连接到5V接口!!!)
*/
#include <stdio.h>
#include <string.h>
#include <utils_sha1.h>
#include <SPI.h>
#include <MFRC522.h>
#include <MFRC522Extended.h>
#include <deprecated.h>
#include <require_cpp11.h>
#define SS_PIN 53
#define RST_PIN 2
MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
int serial_putc( char c, struct __file * )
{
Serial.write( c );
return c;
}
void printf_begin(void)
{
fdevopen( &serial_putc, 0 );
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
printf_begin();
SPI.begin();
mfrc522.PCD_Init();
printf("初始化结束rn");
}
void loop() {
// put your main code here, to run repeatedly:
// 寻卡
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
printf("寻卡成功rn");
// 选择一张卡
if ( ! mfrc522.PICC_ReadCardSerial())
return;
printf("选择卡片成功,卡片UID:rn");
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println();
//获取卡片类型
MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
Serial.println(mfrc522.PICC_GetTypeName(piccType));
if (piccType != MFRC522::PICC_TYPE_MIFARE_UL) {
printf("卡片类型错误rn");
return;
}
printf("卡片类型正确rn");
//计算1卡1密
byte PSWBuff[] = {0x00, 0x00, 0x00, 0x00};
byte pACK[] = {0, 0};//NFCtag 返回的 16 位密码 ACK。
xiaomi_air_purifier_password(mfrc522.uid.uidByte,PSWBuff);
printf("卡片密码:");
dump_byte_array(PSWBuff, 4);
printf("rn");
MFRC522::StatusCode status;
status = (MFRC522::StatusCode) mfrc522.PCD_NTAG216_AUTH(&PSWBuff[0], pACK);
if (status != MFRC522::STATUS_OK) {
printf("认证失败rn");
}
printf("认证成功rn");
byte blockAddr = 8;
byte buffer[18];
byte size = sizeof(buffer);
status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
if (status != MFRC522::STATUS_OK) {
printf("读取失败rn");
}
printf("读取 block 8 成功,block 8数据:");
dump_byte_array(buffer, 16);
printf("rn");
byte dataBlock[] = {
0x00, 0x00, 0x00, 0x00, // 1, 2, 3, 4,
0x00, 0x00, 0x00, 0x00, // 5, 6, 7, 8,
0x00, 0x00, 0x00, 0x00, // 9, 10, 255, 11,
0x00, 0x00, 0x00, 0x00 // 12, 13, 14, 15
};
//清除数据
status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(blockAddr, dataBlock, sizeof(dataBlock));
if (status != MFRC522::STATUS_OK) {
printf("写入失败rn");
}
printf("写入成功rn");
delay(5000);
}
void xiaomi_air_purifier_password(byte *uid, byte *PSWBuff) {
unsigned char output[40];
unsigned char i;
utils_sha1_hex(uid,7,output);
PSWBuff[0] = output[output[0] % 20];
PSWBuff[1] = output[(output[0]+5) % 20];
PSWBuff[2] = output[(output[0]+13) % 20];
PSWBuff[3] = output[(output[0]+17) % 20];
}
void dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
就叫我大哥达
校验提示文案
值友5106618433
校验提示文案
Lsy丶
校验提示文案
kxbs
校验提示文案
air04
校验提示文案
LostAlone
校验提示文案
mlololo0
校验提示文案
香香的好好吃
校验提示文案
吃白菜的土豪
校验提示文案
shyselang
校验提示文案
幽灵归来
校验提示文案
FelixL
校验提示文案
火龍島的冬天
校验提示文案
省的多亏得多
校验提示文案
饿鱼包包
校验提示文案
新手上车
校验提示文案
懒懒的蜗牛啊
校验提示文案
维修小能手
校验提示文案
是张小雷
校验提示文案
沂蒙山上好风光
校验提示文案
我是树叶
校验提示文案
Pite007
校验提示文案
大号忘了
校验提示文案
shyselang
校验提示文案
吃白菜的土豪
校验提示文案
香香的好好吃
校验提示文案
罗村长
校验提示文案
沂蒙山上好风光
校验提示文案
是张小雷
校验提示文案
幽灵归来
校验提示文案
维修小能手
校验提示文案
mlololo0
校验提示文案
懒懒的蜗牛啊
校验提示文案
FelixL
校验提示文案
LostAlone
校验提示文案
值友5106618433
校验提示文案
就叫我大哥达
校验提示文案
新手上车
校验提示文案
air04
校验提示文案
饿鱼包包
校验提示文案