Publicidad1

11 jul 2015

Copiar llaves RFID o NFC con Arduino UNO. Mifare Classic 1K

Esta vez el post no trata de realizar una reparación sino de copiar estas famosas llames que encontramos por todos lados.

Estas Smarth Tag de reducido tamaño no necesitan de una alimentación externa y eso las a llevado a
ser utilizada en muchos sectores. Control de accesos, configuración de teléfonos, pagos en establecimiento...
Además según el fabricante son "imposible de copiar", pero en la práctica veremos que no es así.

Hace unos días se me presento una situación con estas llaves. Las piscinas y pistas de mi comunidad funcionan con un sistema que utiliza este dispositivo. El caso fue que perdí una y fui a la comunidad de vecinos a pedir una de repuesto, pero quisieron cobrarme 20€ por la llave, que no vale más de 30 céntimos por Internet. Así que me puse a indagar por Internet como funcionaban, como almacenaban la memoria. Todo el mundo preguntaba lo mismo, como clonar una llave pero ninguno lo conseguía con éxito, siempre acababan estropeando la llave.
Existen aplicaciones para Android que dicen que son capaces de clonarlas como:

- TAGINFO
- MFCLASSIC
- NFC CLONER

Estas son algunas de ellas, pero hay muchas más. La verdad es que todas leen la UID de la llave y los bloques de memoria, pero no son capaces de clonarlas. Después de todo el proceso de investigación mi amigo Arduino me dio la solución, por tan solo los 30 céntimos que cuesta la llave. Ya que el resto de herramientas las tenia ya por casa.

Me fue de gran ayuda este Tutorial del Señor Giltesa que podéis repasar aqui antes de seguir con este post, el cual además me dios los pasos para investigar.

Para empezar con el proceso vamos a conocer un poco el funcionamiento de las Smart Tag.Tambien conocidas como Mifare:

    MIFARE es una tecnología de tarjetas inteligentes sin contacto (TISC), de las más ampliamente instaladas en el mundo, con aproximadamente 250 millones de TISC y 1,5 millones de módulos lectores vendidos. Es equivalente a las 3 primeras partes de la norma ISO 14443 Tipo A de 13.56 MHz con protocolo de alto nivel, con una distancia típica de lectura de 10 cm (unas 4 pulgadas). La distancia de lectura depende de la potencia del módulo lector, existiendo lectores de mayor y menor alcance. Es propiedad de NXP Semiconductores (antes parte de Philips Semiconductores).
 Podéis seguir leyendo más en la Wikipedia pinchando aquí. Esto os ayudará a entender como funciona.

Las llaves que nosotros vamos a clonar son:

MIFARE Classic. Son fundamentalmente de los dispositivos de almacenamiento de memoria más extendidos en el mundo. Existen tarjetas de 1KB y de 4KB. La MIFARE Standard de 1KB ofrece unos 768 bytes de almacenamiento de datos, dividida en 16 sectores. La MIFARE Standard de 4k ofrece 3 KB dividido en 64 sectores.


Una vez visto todo esto vamos a detallar todo lo que necesitamos para el copiado de las Tags:


* Pasos a seguir desde cero para todos aquellos que no tengan ni idea aun de lo que es Arduino.

1º Paso:


     Descarga la IDE de Arduino para el sistema operativo que tengas, desde aquí. La IDE viene siendo
como el programa que te ayudará a controlar y cargar los datos en tu Arduino.

2º Paso:

     Instala el archivo descargado en tu ordenador. Si es Windows, sigue estos pasos.
Para Linux estos y para OS estos.  (para los que uséis Mac, ya sabréis que están simple como arrastrar y listo

3º Paso:

    Descarga la libreria para la Shield con chip PN532 e instala la en tu ordenador. Os dejo el enlace de descarga de la modificada por el Señor Giltesa la cual esta muy completa.

4º Paso:


    Lo siguiente que vamos a hacer es conectar la placa Arduino Uno y la Shield con sistema RFID.
Como en la foto.
Conectarla al ordenador mediante el cable USB.







5º Paso:

Abre el ejemplo "ReadAllMemoryBlocks". Ahora vamos a cargar en nuestra placa Arduino. Para ello primero seleccionamos el tipo de placa que tenemos en el menú de arriba en la pestaña de Herramientas/placa/ Arduino Uno.

Automáticamente nos reconocerá que esta conectada mediante USB. Así que ahora apretamos el botón de Carga y esperamos a que finalice.

Una vez hecho esto en la parte superior derecha encontraremos el símbolo de una lupa, que es el monitor Serial. Aquí es donde veremos los bloques de memoria de los que consta nuestra llave a copiar.

La acercamos al lector y esperamos a que nos muestre los 63 bloques de la llave. Después de esto ya podemos retirarla.

Os tiene que quedar algo parecido a la foto. con la diferencia que los número variaran en vuestras llaves con las mías.

Vamos a analizar la imagen. El primer bloque en la posición 00, es el Bloque de fábrica. Aquí el fabricante graba la UID de la llave (identificación única) en los 4 primeros byte, y el resto datos del fabricante y demás. La UID es algo único para cada llave y se graba al fabricarla, por este modo muchos sistemas de acceso utilizan solo estos códigos y no aprovechan el resto de memoria para nada.






Vamos a copiar este sector en un papel, y comprobar que el resto de posiciones no almacenan nada sino ceros. Solo los Sectores Trailer guardan datos, que son las claves de acceso a cada 3 bloques de memoria. Podemos comprobar que a partir de la 10ª posición todo lo que pone es FF FF FF FF FF FF, esta es la clave de acceso a los
bloques. Si modificamos los Sectores Trailer, perderemos la memoria de la llave y solo servirá para leer la UID.








6º Paso:

 Ahora abrimos el ejemplo para escribir en las llaves. Que es el mismo que vemos en la imagen.

Vamos a modificar la parte donde escribe en las 16 posiciones de memoria números del 0 al 15 en Hexadecimal. 

Y también modificaremos el bloque en el que queremos escribir, ya que nosotros queremos copiar el bloque que viene grabado de fábrica.

 Debemos modificar el ejemplo exactamente como este que podeis ver en la imagen. La única diferencia con vuestra llave serán nos números en hexadecimal que vosotros habeis copiado en el paso anterior.

Cambiarlos por los que habeis copiado en el papel. Se debe cambiar a partir de "0x" ya que esto le dice al arduino que es un código en Hexacedimal. Por lo demás debe quedar tal cual a la foto.

Por último teneis que cambiar la posición del bloque donde debe copiar el código, eso lo encontrais en la linea que pone "if(nfc.readMemoryBlock(1,0x00,block))" vosotros tendreis otra posición pero debeis cambiar la por esta que aparece en la foto.

Por último compilamos el programa y lo cargamos en arduino, no nos tiene que dar nigún fallo. Si se diera el caso, debemos revisar todas las lineas y ver que son iguales a las de la foto. Ahora cogemos una NFC regrabable de las que hemos comprado por internet, abrimos el Monitor Serial y  pasamos la llave por encima del lector/grabador. 

 En la pantalla del Serial veremos que ha grabado con exito el bloque de memoria y os lo leerá correctamente con el código que nosotros hemos grabado.

Por último nos queda probar la llave en la puerta de garaje o piscina. Yo no tube mayor problema, lo que más me costo fue encontrar un proveedor que me vendiera este tipo de llaves en las que puedes modificar el bloque de fábrica.

Saludos y espero que o sirva de ayuda.

26 comentarios:

  1. Hola no puedo ver las fotos....

    ResponderEliminar
  2. Ha habido un problema con mi Google+ y he perdido todas las fotos de mi blog, este fin de semana intentare restaurarlas.

    ResponderEliminar
  3. a mi no me funciona, no escribe en el bloque 0, podrías colgar el código?

    ResponderEliminar
  4. En la última foto tienes el código completo, pero tu tendrias que cambiar cada linea que ves en el recuadro en rojo por el código de la llave que quieres copiar. Recuerda que no lo puedes hacer con cualquier llave NFC, sino con una que hayas comprado con el código de Manufacturer abierto. Cuesta encontrar las pero si buscas al final encuentrar algún vendedor.

    ResponderEliminar
  5. Use ese mismo código y escribe bien otros bloques pero no el 0. No se porque. Las tarjetas me las compré con uid changeable en ebay y aliexpress y nada, con ninguna. Alguna sugerencia?

    ResponderEliminar
  6. Cuando lees la llave NFC, si esta abierta en el bloque 0, tienen que salir todos los bloques a 00 00 00... Salvo los "Sector Trailer" que son los bloques de acceso. Te diria el proveedor de ebay al que yo se las compré pero ya las últimas que me envío no valian. Muchos te dicen que vienen abiertas en el bloque de Manufacture pero es mentira. Es probar y tener suerte que las que te llegan son las correctas. Yo copie 10 con exito. Suerte en tu busqueda. Siento no poder ayudarte mucho más.

    ResponderEliminar
  7. Como puedo ponerme el contacto contigo para una asesoría sobre este tema estoy en Argentina. Mi correo es pablogallay84@gmail.com

    ResponderEliminar
  8. Se podría copiar a un movil con sistema NFC?GRACIAS

    ResponderEliminar
    Respuestas
    1. No entiendo muy bien la pregunta. ¿Quieres clonar la Tag en tu móvil? Si ese es el caso, siento decirte que yo nunca lo he conseguido, la unica utilidad que le dan al lector de los móviles es para cambiar la apariencia del dispositivo segun le el ID de una TAG.

      Eliminar
  9. hola!
    La placa NFC que usas en el tutorial ¿Tiene que ser la misma que usas tú o puede ser la V2.0 o la V3?

    ResponderEliminar
  10. Como clono una llave que requiere autentificacion en Hex, en algunos sectores???? Gracias

    ResponderEliminar
    Respuestas
    1. Hola compañero, lo tienes todo explicado en el post, te invito a que vuelvas a leer lo tranquilamente. Y si sigues teniendo dudas vuelve a preguntar. Saludos

      Eliminar
  11. Se puede realizar el procedimiento con otro modulo RFID (Específicamente el RC522)

    ResponderEliminar
    Respuestas
    1. Hola Crisitian, lograste hacer andar el modulo RC522? si tenes el código me podrías hacer el favor de pasarlo? Muchísimas gracias. luchi_martini_94@hotmail.com

      Eliminar
  12. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  13. De donde me descargo la programación, el código para arduino ??

    ResponderEliminar
  14. hola, puedo clonar una trajeta mifare classic 4k en mi smart phone?

    ResponderEliminar
  15. Hola esta muy bueno to aporte, quisiera saber si es posible que me envíes el código, desde ya muchas gracias!
    luchi_martini_94@hotmail.com

    ResponderEliminar
  16. Hola!, se puede hacer desde el módulo RC522?

    ResponderEliminar
  17. Hola, en el codigo readMifareUId, sale en el monitor serial la UID y despues sale read card # xxxxxxx, este número en teoria es la ID, pork no son iguales?

    ResponderEliminar
  18. Hola!, compre hace poco unos llaveros con UID sobreescribible y siguiendo tus pasos no me escribe el UID que necesito

    ResponderEliminar
  19. En dónde está el código fuente? Sólo veo hasta la linea 75 del código.

    ResponderEliminar
  20. Hola, encotre tu pagina buscando como copiar la llave que tengo de Mifare, la verdad que he leido todo lo que pones y creo entenderlo casi todo, pero tengo una placa que es la RFID-RC522, como puedo hacer lo mismo? al ser diferente he mirado software y demas y no consigo hacer nada, gracias

    ResponderEliminar
  21. Deberias buscar una libreria en acorde a tu placa. Habrá palabras clave que cambien pero si es para arduino suelen tener la misma estructura. Me imagino que deberas modificar un poco el código para adaptarlo a esa librería. Si entiendes el código no tendrás gran problema en eso. Saludos

    ResponderEliminar
  22. Y si uso un escritor para emitir la señal en vez de un tag? le puedo poner la informacion que yo quiera tecnicamente o no? hacer tu propio smart tag

    ResponderEliminar
  23. Muy buenas. Estoy ya avanzado con el tema y he logrado leer la llave, modificar el código, compilar sin errores pero, supongo que lo que me falta es cambiar de posición el coman de "if(nfc.readMemoryBlock(1,0x00,block))" , porque me entra en un bucle que se la pasa leyendo. Y en las fotos no la vi. Me puedes pasar el código por mail por favor y así corrijo la posición que supongo debe estar antes de la escritura. Gracias gerores@hotmail.com.

    ResponderEliminar