Passa al contingut principal

Reparar una tarjeta RFID Mifare Classic 1K brickeada

Una de las acciones más frustrantes cuando se escribe una tarjeta RFID es bloquearla, por ejemplo al sobrescribir el bloque de cola o bloque trailer con valores incoherentes.

Una tarjeta Mifare Classic de 1KB tiene 16 sectores de 4 bloques con 16 bytes por bloque (64 bloques a 16 bytes).

El bloque «trailer» es el último bloque de cada sector, de forma que del 1KB de capacidad tenemos que restarle 16 bytes del primer bloque (donde está el identificador) y los 16 bloques de cola (bloques 3,7,11,15... 59, y 63).

En este bloque es donde están guardadas las claves A y B de acceso al resto de bloques del sector así como los bits de acceso.

Básicamente nos dice qué se puede leer y que se puede escribir y qué será la contraseña para hacerlo.

Así que la capacidad real queda en: (64 bloques – 16 trailer – 1 cabecera)*16bytes = 752 bytes útiles.


0 E9D517B49F0804006263646566676869
1 00000000000000000000000000000000
2 00000000000000000000000000000000
3 FFFFFFFFFFFFFF078069FFFFFFFFFFFF ← bloque trailer
4 00000000000000000000000000000000
5 00000000000000000000000000000000
6 00000000000000000000000000000000
7 FFFFFFFFFFFFFF078069FFFFFFFFFFFF ← bloque trailer
...
60 00000000000000000000000000000000
61 00000000000000000000000000000000
62 00000000000000000000000000000000
63 FFFFFFFFFFFFFF078069FFFFFFFFFFFF ← bloque trailer


Así que cuando escribimos el bloque “trailer” con un valor incoherente (especialmente en los bits de acceso) ya podemos dar por perdido todo el sector y por tanto acabamos de convertir nuestra magnífica tarjeta RFID en un trozo de plástico inservible.

No hay forma humana de recuperarlo... o sí... 

Existe un tipo de tarjetas RFID con el UID intercambiable o también llamadas «magic cards» o «chinese RFID cards» que a menudo son utilizadas para hacer una copia idéntica de otra tarjeta, incluyendo el identificador (bloque 0).

Exteriormente son idénticas pero tienen la peculiaridad de que con una serie de órdenes por parte del lector/grabador se habilita un modo privilegiado con acceso total.

Tendremos pues acceso a TODOS los bloques independientemente si se tiene o no las claves de acceso al sector en cuestión y por lo tanto los podremos sobrescribir, por ejemplo el bloque cero que es donde se encuentra el UID.

Dicho de otra forma, en este modo está permitida la escritura cualquier bloque, incluyendo el bloque cero que es donde se encuentra el identificador de la tarjeta UID.


Así que si nuestra tarjeta es de este tipo no está todo perdido, podremos escribir el bloque cero o los bloques “trailer” con los valores adecuados para su recuperación.

Que es lo que necesitamos:

  • La tarjeta a recuperar (de momento solo soporta la Mifare Classic de 1k). Si nuestra tarjeta no es «mágica» este procedimiento no funcionará.
  • Wemos D1 mini (basado con el ESP8266), arduino o equivalente.
  • Un lector/grabador mfrc522 y los cables de conexión.
  • El software mfrc522cli.

Este programa permite la reparación del bloque cero pero también restaurar los bloques “trailer” de los 16 sectores que tiene una tarjeta Mifare Classic 1k a un valor adecuado para su reutilización:

«FFFFFFFFFFFFFF078069FFFFFFFFFFFF»
Con este valor se quedarán las claves de acceso A y B para todos los bloques «FFFFFFFFFFFF»
El procedimiento es muy sencillo.

Una vez tenemos cargado lo sketch en nuestra variante de Arduino y conectado correctamente lo MFRC522 tal y como se muestra en la siguiente imagen:

Se tienen que ejecutar por el puerto serie del editor del Arduino:


fix start
fix trailer
Aproximamos la tarjeta y en 1 o 2 segundos nos aparecerá el mensaje de «OK»
Ahora ya podemos parar el proceso de reparación con un:
fix stop

en caso contrario realizará el mismo proceso cada vez que se aproxime una tarjeta al lector/grabador.

Con todo esto ya tendremos la tarjeta reparada.

Comentaris