Instalando Touchatag en 2012

En septiembre de 2010, realizamos entre Roberto y yo una serie de entradas que profundizaban en la seguridad de las tarjetas RFID Mifare Classic. Han pasado los años, y los visitantes siguen intentando seguir el manual al pie de la letra. Como es normal, actualmente las cosas han cambiado y las versiones utilizadas ya no son compatibles en 2012.

Por ello, he decidido actualizar aquel artículo y mostrar cómo he conseguido instalar en mi máquina todo el software necesario para jugar con nuestro lector favorito: el touchatag. Para ello, he utilizado una Ubuntu 12.04 (no me ha dado tiempo a probar Ubuntu 12.10 todavía) aunque la instalación se puede hacer en otras distribuciones con cambios mínimos.

El primer paso es la instalación de las librerías y programas que vamos a necesitar:

dlladro@vm:~$ sudo apt-get install build-essential subversion automake autoconf libusb-dev 
libpcsclite-dev libusb-0.1-4 libpcsclite1 pcscd pcsc-tools libtool flex libccid doxygen libacsccid1

Una vez hecho esto, pasamos a descargar e instalar las librerias LibNFC:

dlladro@vm:~/rfid$ wget https://libnfc.googlecode.com/files/libnfc-1.5.1.tar.gz
dlladro@vm:~/rfid$ tar -xvzf libnfc-1.5.1.tar.gz
dlladro@vm:~/rfid$ rm libnfc-1.5.1.tar.gz
dlladro@vm:~/rfid/libnfc-1.5.1$ cd libnfc-1.5.1
dlladro@vm:~/rfid/libnfc-1.5.1$ autoreconf -vis
dlladro@vm:~/rfid/libnfc-1.5.1$ ./configure --enable-doc
dlladro@vm:~/rfid/libnfc-1.5.1$ make
dlladro@vm:~/rfid/libnfc-1.5.1$ sudo make install
dlladro@vm:~/rfid/libnfc-1.5.1$ cd ..

Ahora podemos conectar el lector, y utilizar los siguientes comandos para asegurarnos que lo hemos instalado bien:

dlladro@vm:~/rfid$ pcsc_scan 
dlladro@vm:~/rfid$ nfc-list

Vamos ahora a instalar las herramientas que necesitaremos. La primera de ellas se llama mfcuk e implementa el ataque llamado “darkside” descrito en http://eprint.iacr.org/2009/137.pdf. Este ataque aprovecha la poca entropía que se utiliza en el cifrado Crypto-1 para obtener mediante fuerza bruta la clave de un sector.

dlladro@vm:~/rfid$ svn checkout http://mfcuk.googlecode.com/svn/trunk/ mfcuk-read-only -r r62
dlladro@vm:~/rfid$ cd mfcuk-read-only
dlladro@vm:~/rfid/mfcuk-read-only$ autoreconf -is
dlladro@vm:~/rfid/mfcuk-read-only$ ./configure

Editar el fichero src/Makefile y dejar la linea 112 como la siguiente:

LIBS = $(LIBNFC_LIBS)

Compilamos e instalamos:

dlladro@vm:~/rfid/mfcuk-read-only$ make
dlladro@vm:~/rfid/mfcuk-read-only$ sudo make install
dlladro@vm:~/rfid/mfcuk-read-only$ cd src

Una vez instalado, lo ejecutamos con la orden:

dlladro@vm:~/rfid/mfcuk-read-only/src$ ./mfcuk -C -v 2 -R 3:A -M 8

-C     Para realizar la conexión
-v 2   Modo very verbose
-R 3:A Recuperar la clave A del sector 3
-M 8   Tipo de tag Mifare Classic 1K

Obtenemos el siguiente resultado:

Donde vemos que ha encontrado la clave A del sector 3. Este ataque, según los creadores dura unos 5 minutos, pero en mis pruebas no ha bajado de 20. Como veis, obtener las 30 claves (en el caso que sean todas diferentes) nos podría tomar demasiado tiempo.

Ahora vamos a utilizar el programa mfoc para obtener todas las demás claves. Mfoc utiliza el llamado “Nested-Authentication attack” que se basa en el conocimiento de una clave para atacar a los sectores restantes. Su instalación es la siguiente:

dlladro@vm:~/rfid/mfcuk-read-only/src$ cd ../../libnfc-1.5.1
dlladro@vm:~/rfid$ svn checkout http://nfc-tools.googlecode.com/svn/trunk/ nfc-tools-read-only 
   -r r1090
dlladro@vm:~/rfid$ cd nfc-tools-read-only/mfoc
dlladro@vm:~/rfid/nfc-tools-read-only/mfoc$ autoreconf -vis
dlladro@vm:~/rfid/nfc-tools-read-only/mfoc$ ./configure
dlladro@vm:~/rfid/nfc-tools-read-only/mfoc$ make 
dlladro@vm:~/rfid/nfc-tools-read-only/mfoc$ sudo make install
dlladro@vm:~/rfid/nfc-tools-read-only/mfoc$ cd 
dlladro@vm:~$ sudo bash -c "echo /usr/local/lib >> /etc/ld.so.conf.d/loc_lib.conf"

Para usar la clave que hemos obtenido anteriormente hay que volver a compilar el archivo mfoc.c que está en ./mfoc/src/mfoc.c y buscar el vector de claves por defecto:

Solo hay que añadir la clave siguiendo el mismo patrón. Luego hacemos un:

dlladro@vm:~/rfid/nfc-tools-read-only/mfoc/src$ make

y ya lo tenemos a punto.

La ejecución del programa la hago de la siguiente forma:

dlladro@vm:~/rfid/nfc-tools-read-only/mfoc/src$ ./mfoc -P 100 -O salida.mdf

-P 100   Reintentos
-O         Archivo de salida

Veremos algo como esto:

Esta parte todavía no es el ataque, aquí mfoc está comprobando si las claves que tiene por defecto funcionan con algún sector.

Primero hace una pasada probando las claves A. Como se deduce, la clave a884…. es la clave A del sector 0.

Después de esto, empezará el ataque donde irá obteniendo las claves una a una. En el caso de que las obtenga todas en las 100 repeticiones, hará el volcado del tag en el archivo salida.mdf , sino, yo recomiendo apuntar las claves e ir introduciéndolas en el archivo mfoc.c.

Por último, una vez tengamos todas las claves podemos crearnos con un editor hexadecimal un archivo llamado keys.mdf. Este archivo lo podemos crear a partir del salida.mdf poniendo todo a ceros excepto los sectores tráiler de cada bloque.

Y con el archivo keys.mdf ya podemos operar con el tag con las funciones de la librería libnfc:

dlladro@vm:~$ nfc-mfclassic w a contenido_nuevo.mdf keys.mdf

w                     Escritura
a                     Clave A
contenido_nuevo.mdf   Archivo de entrada
keys.mdf              Archivo con las claves

Con esta última orden hemos escrito un tag Mifare Classic con un contenido modificado.

Espero que esta entrada ayude a los lectores que han intentado “jugar” con su touchatag y han tenido problemas con la instalación.

Comments

  1. Muy bueno el post, a mí en su momento también me ha costado hacer funcionar el touchtag en una debian stable.

    Por curiosidad, ¿Sabes algún sitio donde obtener tarjetas mifare (sin comprarlas por cientos)? Por escribir una tarjeta “limpia” con los dump y no modificar las existentes.

    Un saludo.

  2. En http://www.aliexpress.com hay varias tiendas que venden tarjetas mifare en lotes reducidos.
    Por ejemplo http://www.aliexpress.com/item/20pcs-lot-Mifare-1k-S50-Blank-Thin-Card-RFID-13-56MHz-ISO14443A-IC-Smart-Card-High/558477644.html

    Incluso hay algunas que dejan escribir el primer sector (que normalmente los fabricantes obligan a que sear read-only)

    Un saludo.

  3. Muchas gracias! :)

  4. Buenas, primeramente felicitar por los posts, me han ayudado mucho :). Una preguntilla.

    Existen tarjetas en las que se pueda escribir el primer sector?. Podrías pasar una enlace de alguna compatible con el lector/escritor este?.

    Muchas gracias!!

  5. Hola hank,
    no te sabría decir un enlace exacto para comprarlas, pero existen porque
    conocidos míos las han comprado en tiendas chinas (alibaba,taobao o alguna de esas).
    Si encuentras donde las venden, no dudes en postear el resultado en los comentarios.
    Seguro que mucha gente, entre los que me incluyo, te lo agradecerá.

    Un saludo.

  6. Hola, muchísimas gracias por lo manuales, he leído los antiguos pero también he leído este y me a quedado claro, tengo unas dudas antes de comprar este lector de tarjetas, hay alguna forma de poder contactar contigo para comentarte el problema? ya que es bastante extenso

  7. Gracias David si la key obtenida con elataque mfcuk no es correcta ¿Significa que he instalado mal la aplicacion? ¿O que mfcuk no es 100% fiable y hay que hacer muchos intentos?

  8. Fantastico! No pensé que tardarías tan poco en sacar un nuevo manual! Consegui instalar libnfc y los drivers con el manual viejo y información de internet pero todavía no logre con mfoc. Probare el nuevo manual! Gracias!

  9. Hola de nuevo!
    Estoy trabajando con ubuntu 12.04 y me he quedado atascado al instalar el mfoc, hasta ese momento todo a funcionado a la perfección. Tengo la clave A del sector 3 pero el mfoc me da error al hacer el make, te copio el error:
    ~/libnfc-1.5.1/nfc-tools-read-only/mfoc$ make
    make: *** No se especificó ningún objetivo y no se encontró ningún makefile. Alto.

    He buscado por google y comentan en muchos foros que es problema de incompatibilidad de libnfc y mfoc pero creo que está todo instalado en la última versión.
    ¿Me podrías orientarme un poco sobre lo que puedo hacer?

    Gracias de antemano. Un trabajo fantastico!

    Un saludo

  10. Perdón, rectifico, he encontrado el error que viene de atrás. Al realizar el ./configure indica que hay que trabajar mínimo con la versión 1.6.0 de libnfc, el error es el siguiente:

    configure: error: libnfc >= 1.6.0 is mandatory

    Sin embargo, instalar la versión 1.6.0 de libnfc da error al compilar.

    Un saudo

  11. Hola a todos, voy por partes:
    @qwerty85, te he enviado un correo a la dirección de contacto.

    @ubuntu, no es la primera vez que me comentan lo de la clave incorrecta.
    Sabes que es incorrecta porque conoces la verdadera o porque luego no puedes leer el sector?
    Si estás en el segundo caso, asegurate de que la clave que has obtenido tiene permisos de lectura
    en ese sector.

    @Javi, creo que el problema está en que has descargado la última versión de mfoc.
    Fíjate que en el manual indico explícitamente la revisión que hay que descargar para evitar ese problema:
    svn checkout http://nfc-tools.googlecode.com/svn/trunk/ nfc-tools-read-only -r r1090
    La revisión 1090 tiene como dependencias libnfc 1.5.1 y compilará correctamente.
    Un saludo y ya me cuentas.

  12. Hola, gracias por tu tiempo!

    Creo que hago todo exactamente igual a como lo describes anteriormente, te copio resultados:

    ~$ nfc-list
    nfc-list uses libnfc 1.5.1 (rexported)
    Connected to NFC device: ACS ACR122U 00 00 / ACR122U103 – PN532 v1.6 (0x07)
    1 ISO14443A passive target(s) found:
    ATQA (SENS_RES): 00 04
    UID (NFCID1): xx xx xx xx
    SAK (SEL_RES): 08

    ~/libnfc-1.5.1/nfc-tools-read-only/mfoc$ svn checkout http://nfc-tools.googlecode.com/svn/trunk/ nfc-tools-read-only -r r1090
    nfc-tools-read-only/libnfc-llcp/m4
    A nfc-tools-read-only/libnfc-llcp/gdbrc
    A nfc-tools-read-only/libnfc-llcp/configure.ac
    (……)
    A nfc-tools-read-only/ucard/examples/marchant-application/marchant.xml
    U nfc-tools-read-only
    Revisión obtenida: 1090

    ~/libnfc-1.5.1/nfc-tools-read-only/mfoc$ ./configure
    (…..)
    checking whether make supports nested variables… yes
    checking for pkg-config… /usr/bin/pkg-config
    checking pkg-config is at least version 0.9.0… yes
    checking for libnfc… no
    configure: error: libnfc >= 1.6.0 is mandatory.

    Y a partir de aquí ya no funciona nada.

    Espero su respuesta. Gracias

    Un saludo.

  13. Lo que te ha ocurrido en este caso es que has hecho el checkout sobre el directorio mfoc.
    Haz lo siguiente:
    cd ~/libnfc-1.5.1/
    rm -rf ./nfc-tools-read-only/
    svn checkout http://nfc-tools.googlecode.com/svn/trunk/ nfc-tools-read-only -r r1090
    autoreconf -vis
    ./configure
    make
    sudo make install
    sudo bash -c “echo /usr/local/lib >> /etc/ld.so.conf.d/loc_lib.conf”

    Ya me cuentas

  14. Que alegría me has dado! Ya se ha compilado sin ningún fallo!

    Tengo un error menor y espero que sea ya el último! jeje Es este:

    ~/libnfc-1.5.1$ sudo bash -c “echo /usr/local/lib >> /etc/ld.so.conf.d/loc_lib.conf”
    bash: /etc/ld.so.conf.d/loc_lib.conf”: Permiso denegado

    De nuevo, gracias por tu ayuda!

    Un saludo.

  15. Lo solucioné yo solo el último fallo! Muchas gracias por todo!

  16. De nada Javi!

  17. Vale, no era el ultimo fallo! Espero no ser muy pesado! jeje

    Al escribir el comando: gcc mfoc.c -o mfoc y ./mfoc -P 100 -O salida.mdf no encuentra los archivos, he probado desde las rutas:
    libnfc-1.5.1
    libnfc-1.5.1/nfc-tools-read-only
    libnfc-1.5.1/nfc-tools-read-only/mfoc
    libnfc-1.5.1/nfc-tools-read-only/mfoc/src

    Y el archivo que he escrito la contraseña encontrada se encuentra en libnfc-1.5.1/nfc-tools-read-only/mfoc/src como en tu manual. Que ganas tengo de que funcione ya todo perfecto al 100%. jeje

    Un saludo.

  18. Desde esta ruta: libnfc-1.5.1/nfc-tools-read-only/mfoc/src
    ejecuta “make” sin las comillas.

  19. El make de las instrucciones anteriores o otro make mas?

    A este comando vuelve a devolverme error de permiso, he probado a loguearme con “su” que es lo que habia hecho antes y ahora no me funciona.

    Respecto al make, he probado antes de repetir todo el proceso y me indicaba que no había ningún archivo makefile

    Un saludo

  20. Hola David, ¿Como puedo abrir/imprimir/guardar el archivo .mfd creado por el mfoc? No lo encuentro.
    Y para escribir y/o modificar ¿Donde coloco ese archivo creado solo con las keys y como lo creo antes de escribir “nfc-mfclassic w a contenido_nuevo.mdf keys.mdf”?

    Creo que esa ultima parte del post es la que esta menos clara, aun asi muchas gracias de todas formas.

  21. Hola, vuelvo con novedades después de horas y horas buscando por internet.

    La instalación de mfoc la realizo ya correctamente como me indicaste anteriormente pero el make que dices que hay que hacer en libnfc-1.5.1/nfc-tools-read-only/mfoc/src, no me localiza el archivo como te he dicho en el otro comentario.
    Sin embargo, ejecuto un mfoc -P 10 -O salida.mdf, sin el “./” y me arranca el programa pero con estos errores que no creo que tengan nada que ver con la instalación:
    nfc_initiator_transceive_bytes: Device’s Internal Chip Error

    Gracias de antemano por la ayuda. Un saludo

  22. Guy Ritchie:
    Hola, el archivo .mdf creado por el mfoc se debe haber creado en el directorio donde has ejecutado el mfoc. Este archivo se abre con un editor hexadecimal como por ejemplo ghex y ahí es donde puedes modificarlo y quitarle la información.
    P.D: no es necesario editar el fichero obtenido para que funcione como archivo keys.mdf

    Javi:
    El error nfc_initiator_trasceive_bytes lo suele dar cuando no reconoce el lector.
    Comprueba con el comando pcsc_scan que detecta tu lector y con nfc-list que detecta el lector y la tarjeta.

  23. Hola!
    Si que detecta el lector con pcsc_scan y también con nfc-list el lector y la tarjeta. Además ejecutar el mfcuk me funciona perfectamente, de hecho, he obtenido todas las contraseñas de una en una con esa herramienta y mfoc sigue sin ir. No se que mas hacer para que funcione esto. ¿Alguna sugerencia más? Gracias por tu tiempo. Un saludo

  24. Hola, quería hacer una pregunta acerca del Touchatag. He estado mirando para poder comprarlo, pero en la web ponen lo siguiente:
    “From 1 October 2012 the touchatag service is no longer available.
    You cannot register with it anymore and drivers are no longer available.
    However, the hardware will still work and stays on sale till 31 December 2012.”
    ¿Se puede seguir el tutorial pese a que el servicio no esté disponible? ¿Lo que nos interesa es solamente el hardware?
    Muchas gracias. Un saludo.

  25. Te respondo yo:
    Lo que no esta disponible desde octubre es el servicio para programar los tags con el software de la web pero el hardware se puede comprar hasta diciembre porque se puede utilizar con otro software como libnfc.
    Este tutorial si que se puede seguir sin el software.
    Un saludo.

  26. Juan:
    No podría haberlo dicho mejor que Javi!

  27. Gracias!
    Respecto al fallo que me da, ¿sabes que más puedo hacer?
    Un saludo

  28. Hola, muchas gracias por el post, es buenísimo!!!

    Tengo un lector ARC122U, cunado hago el pcsc_scan si me lo detecta, pero al hacer nfc-list no, me da un error y me dice que es imposible conectar con el dispositivo. he comprobado que los drivers esten bien, pero me sigue dando error. Alguien sabe por qué y como se puede solucionar?

    Muchas gracias y un saludo

  29. Hola, ante todo felicitaros por el artículo.

    Tengo un pequeño problema, he podido seguir todos los pasos hasta llegar al mfoc, al igual que le pasó a Javi, no consigo compilar. He tratado de seguir las indicaciones que comentaste para solucionarlo pero no lo consigo. ¿Podríais orientarme con esto?

    Pongo el error que me sale al compilar:

    ———–Al hacer make :

    ~/RFID/libnfc-1.5.1/nfc-tools-read-only/mfoc$ make
    make all-recursive
    make[1]: se ingresa al directorio «/home/pc/RFID/libnfc-1.5.1/nfc-tools-read-only/mfoc»
    Making all in src
    make[2]: se ingresa al directorio «/home/pc/RFID/libnfc-1.5.1/nfc-tools-read-only/mfoc/src»
    CC crapto1.o
    In file included from crapto1.c:20:0:
    crapto1.h: En la función ‘parity’:
    crapto1.h:65:2: aviso: declaración implícita de la función ‘asm’ [-Wimplicit-function-declaration]
    crapto1.h:71:21: error: expected ‘)’ before ‘:’ token
    make[2]: *** [crapto1.o] Error 1
    make[2]: se sale del directorio «/home/pc/RFID/libnfc-1.5.1/nfc-tools-read-only/mfoc/src»
    make[1]: *** [all-recursive] Error 1
    make[1]: se sale del directorio «/home/pc/RFID/libnfc-1.5.1/nfc-tools-read-only/mfoc»
    make: *** [all] Error 2

    ———–Al hacer sudo make install:

    ~/RFID/libnfc-1.5.1/nfc-tools-read-only/mfoc$ sudo make install
    Making install in src
    make[1]: se ingresa al directorio «/home/pc/RFID/libnfc-1.5.1/nfc-tools-read-only/mfoc/src»
    CC crapto1.o
    In file included from crapto1.c:20:0:
    crapto1.h: En la función ‘parity’:
    crapto1.h:65:2: aviso: declaración implícita de la función ‘asm’ [-Wimplicit-function-declaration]
    crapto1.h:71:21: error: expected ‘)’ before ‘:’ token
    make[1]: *** [crapto1.o] Error 1
    make[1]: se sale del directorio «/home/pc/RFID/libnfc-1.5.1/nfc-tools-read-only/mfoc/src»
    make: *** [install-recursive] Error 1

    Un saludo y gracias.

  30. @BRD
    el error dice que hay un fallo en el archivo crapto1.h
    las lineas que dice tienen que estar asi:

    asm( “movl %1, %%eax\n”
    “mov %%ax, %%cx\n”
    “shrl $0x10, %%eax\n”
    “xor %%ax, %%cx\n”
    “xor %%ch, %%cl\n”
    “setpo %%al\n”
    “movzx %%al, %0\n”: “=r”(x) : “r”(x): “eax”,”ecx”);
    return x;

  31. Gracias por la pronta contestación dlladro, pero me sigue dando el mismo error al compilar.

    Según he leído en el artículo, lo que hace el mfoc es a partir de una clave atacar a las restantes, pero aunque sea un proceso mucho más largo, me puede bastar con el mfuck para hallar todas ellas ¿verdad?.

    Una última pregunta, una vez conocida todas las keys, necesitaría crear un archivo keys.mdf. ¿Podrías facilitar algún ejemplo de ese keys.mdf o salida.mdf? ¿Hay alguna aplicación algo más intuitiva que el de la librería de libnfc?

    Un saludo y gracías por su tiempo.

  32. Sólo un pequeño apunte: no es necesario modificar las claves por defecto o recompilar mfoc para probar una clave que no esté contenida en las claves por defecto. Si leemos el usage:

    mfoc [-h] [-k key]… [-P probnum] [-T tolerance] [-O output]

    Podemos simplemente hacer un

    mfoc -k aabbccddeeff -O dump.mdf

    Así nos aseguramos de seguir teniendo las claves por defecto en el binario.

  33. @fürdielulz
    Muchas gracias por el aporte. No había probado esa opción.

    @BRD
    el archivo keys.mdf puede ser un volcado de una tarjeta con las mismas claves.

  34. Hola, tengo el mismo error que indicaba Javi:

    checking whether make supports nested variables… yes
    checking for pkg-config… /usr/bin/pkg-config
    checking pkg-config is at least version 0.9.0… yes
    checking for libnfc… no
    configure: error: libnfc >= 1.6.0 is mandatory.

    Así que no puedo usar el mfoc. He obtenido todas las claves de todos los sectores con el mfcuck (las de A y B), en total del sector 0 al 15. Tengo que crear un fichero keys.mfd con estas claves con un editor hexadecimal. Estas claves tendría que ir por separado las de A y B? cómo sería?

    He cogido un fichero que me genera al hacer ” nfc-mfclassic r a prueba.mfd” y lo he modificado para meter las keys, añadiendo todo a cero, no se exactamente que formato debo seguir, me explico, debo poner por ejemplo :

    Tenemos keys:
    Sector 0 (A) = 1848a8d8e1c5
    Sector 0 (B) = 6e9209480ed3
    Sector ….

    Sería de este modo? me recomendáis otro editor que sea más útil?: http://img94.imageshack.us/img94/2194/capturadepantallade2012g.png

    ¿Podríais ayudarme?Por mucho que busco no encuentro nada sobre esto. Muchas gracias.

    PD: Cuando hablais de keys.mdf, contenido_nuevo.mdf, etc… no debería de ser con la terminación mfd?

  35. A mi me daba este error con la revision 1090:

    configure: error: libnfc >= 1.6.0 is mandatory.

    Probe con otras revisiones y busque por los foros hasta que di con una que compilaba bien. La revision es la 942 y los pasos:

    svn checkout http://nfc-tools.googlecode.com/svn/trunk/ nfc-tools-read-only -r r942
    autoreconf -vis
    ./configure
    make
    sudo make install

  36. LLadro segun tu experiencia que puede hacerse cuando da el timeout error al intentar escribir? Es curioso, solo me da ese error al intentar escribir en un sector (el A) , en el B no tengo problemas

    xnfc_initiator_transceive_bytes: Timeout
    failed to write

    Gracias, saludos

  37. Hola, ante todo enhorabuena a todos los que estáis escribiendo estas magníficas entradas, estáis realizando un trabajo excepcional y os agradezco que os toméis vuestro tiempo en enseñarnos parte de lo que sabéis.

    Acabo de encontrar (sí, a 1 de enero) estas entradas sobre las tarjetas RFID y lo cierto es que siento una gran curiosidad por investigar al respecto siguiendo vuestros manuales. Sin embargo, el lector touchatag dejó de venderse ayer ;(. ¿Sabéis dónde puedo obtenerlo o me podéis recomendar otro lector con el que pueda hacer lo mismo? No quiero arriesgarme a dejarme la pasta en algo que al final no me sirva y que acabe abandonado en una esquina de mi habitación. Muchas gracias!!!

  38. Todo bien hasta que ejecuto “nfc-list”, esto es lo que me sale:

    root@xxx:/home# nfc-list
    nfc-list: error while loading shared libraries: libnfc.so.2: cannot open shared object file: No such file or directory

    ¿como puedo solucionarlo?, gracias de antemano.

  39. Ya lo he solucionado ejecutándolo desde el directorio “utils” de “libnfc-1.5.1”, que es donde se encuentra el ejecutable “nfc-list”.

    root@xxx:/home/libnfc-1.5.1/utils# ./nfc-list

    Lo dejo por si a alguien le ha surgido este problemilla

  40. Bien, ahora al ejecutar “mfcuk”, me sale el mismo mensaje de error que cuando ejecutaba “nfc-list” fuera de su directorio:

    root@xxx:/home/mfcuk-read-only/src# ./mfcuk -C -v 2 -R 3:A -M 8
    ./mfcuk: error while loading shared libraries: libnfc.so.2: cannot open shared object file: No such file or directory

    Aquí ya no se lo que hacer, como solucionarlo, si alguien fuese capaz de ayudarme se lo agradecería.

  41. Ok, ya esta solucionado:

    Investigando un poco he leido que copiando las bibliotecas: libnfc.so, libnfc.so.2 y libnfc.so.2.0.0 en el directorio /usr/lib/, ya que estos archivos se encontraban en /usr/local/lib/ y estando ahi no los encontraba el “mfcuk”

  42. Estimados.
    Seguí paso a paso la instalación, y me trabé en el último renglón de la instalación de mfoc:
    root@bt:-# sudo bash -c “echo /usr/local/lib >> /etc/ld.so.conf.d/loc_lib.conf”
    Respuesta: comando “echo no existe.
    ¿A alguien le pasó esto?
    OS: Back Track 5 R3 con Ubuntu 10.04

  43. Hola Jorge_K69, puedes editar manualmente el archivo /etc/ld.so.conf.d/loc_lib.conf y añadir al final del mismo /usr/local/lib

    Un saludo.

  44. Estimados.
    Aún no instalé mfoc y me surge una duda: Edito mfoc.c y le pongo la clave hallada con mfcuk, pero en ningún lugar se pone el sector al que pertenece esta clase. ¿Será una opción de mfoc?
    Saludos y gracias por todo!

  45. Te copio el comentario de furdielulz:

    Sólo un pequeño apunte: no es necesario modificar las claves por defecto o recompilar mfoc para probar una clave que no esté contenida en las claves por defecto. Si leemos el usage:

    mfoc [-h] [-k key]… [-P probnum] [-T tolerance] [-O output]

    Podemos simplemente hacer un

    mfoc -k aabbccddeeff -O dump.mdf

    Así nos aseguramos de seguir teniendo las claves por defecto en el binario.

  46. Hola amigos, he estado buscando el dispositivo touchatag pero veo que es muy dificil conseguirlo, por no decir casi imposible, mi pregunta es si cualquier dispositivo basado en NFC RFID ACR122U es compatible con lo que aqui se expone, saludos y gracias.

  47. En esta web puedes ver todos los lectores soportados por libnfc:
    http://nfc-tools.org/index.php?title=Devices_compatibility_matrix

  48. Gracias por la respuesta David, entonces creo que me valdrá, en las especificaciones pone ACS ACR122 aunque despues aparace P/N ACR122U-A9 y es este ultimo A9 lo que me hace dudar.

    Aprovecho para comentar una duda que me ha surgido leyendo el post (soy algo novato en este tema). Cuando ejecutas esta orden:

    nfc-mfclassic w a contenido_nuevo.mdf keys.mdf

    ¿Como es el formato del archivo contenido_nuevo.mdf? ¿Como se averigua en que bloque están los datos que necesitamos modificar?

    Saludos y siento las molestias.

  49. Para ver o modificar los archivos mdf, necesitas un editor hexadecimal. Yo uso ghex en ubuntu. Para averiguar donde estan los datos buscados, deberás conocer como el programador ha colocado los datos o hacer ingeniería inversa.

    Un saludo.

  50. Gracias de nuevo David, he visto que también se puede redirigir la salida del comando mfoc con un tee a un archivo de texto y despues comparar una tarjeta sin utilizar con otra lectura tras ser utilizada con kdiff3.

    ¿Podrias confirmarme si el lector que he puesto valdria? me mosquea lo de A9, ya que en la pagina que me has indicado anteriormente los ACS son ACR122U101 y ACR122U203, pero no se si los ultimos numeros son relevantes.

    Saludos

  51. No te lo podría confirmar porque no los he probado.
    Mira en la lista de correo de libnfc a ver si alguien ha tenido el mismo problema y te lo puede confirmar.

  52. Hola David,

    Al intentar escribir en el sector A recibo timeout error, en el secotr en cambio B no tengo problemas, el mensaje al intentar escribir en el “a” es el siguiente:

    xnfc_initiator_transceive_bytes: Timeout
    failed to write

    ¿Que puedo hacer?

    Saludos!

  53. David. Disculpas, pero no me anduvo… Estoy aun trabado en la instalacionde MFOC.
    Mientras, con MFCUK voy obteniendo de a una, las claves de la tarjeta.

    Los pasos que hice son:
    root@bt:~ /mfcuk-read-only/src# cd ../../libnfc-1.5.1
    root@bt:~ /libnfc-1.5.1# svn checkout http://nfc-tools.googlecode.com/svn/trunk/ nfc-tools-read-only -r r1090
    root@bt:~ /libnfc-1.5.1# cd nfc-tools-read-only/mfoc
    root@bt:~ /libnfc-1.5.1/nfc-tools-read-only/mfoc# autoreconf -vis
    root@bt:~ /libnfc-1.5.1/nfc-tools-read-only/mfoc# ./configure
    root@bt:~ /libnfc-1.5.1/nfc-tools-read-only/mfoc# make
    A esta altura, y siguiendo los pasos, se presenta un error:
    configure: error: libnfc >= 1.6.0 is mandatory.
    Este error se corrige haciendo (segun lo indicado – que me funciono OK):
    root@bt:# cd ~/libnfc-1.5.1/
    root@bt:~/libnfc-1.5.1# rm -rf ./nfc-tools-read-only/
    root@bt:~/libnfc-1.5.1# svn checkout http://nfc-tools.googlecode.com/svn/trunk/ nfc-tools-read-only -r r1090
    root@bt:~/libnfc-1.5.1# autoreconf -vis
    root@bt:~/libnfc-1.5.1# ./configure
    root@bt:~/libnfc-1.5.1# make
    Salvado el error, se continúa con la instalación:
    root@bt:~ /libnfc-1.5.1/nfc-tools-read-only/mfoc# sudo make install
    root@bt:~ /libnfc-1.5.1/nfc-tools-read-only/mfoc# cd ..
    root@bt:~ /libnfc-1.5.1/nfc-tools-read-only#
    En la última línea aparece un error: root@bt:~/libnfc-1.5.1# sudo bash -c “echo /usr/local/lib >> /etc/ld.so.conf.d/loc_lib.conf”
    Respuesta: /usr/local/lib: “echo: command not found
    Tu sugerencia fue: “puedes editar manualmente el archivo /etc/ld.so.conf.d/loc_lib.conf y añadir al final del mismo /usr/local/lib” Pero en el dir me encontre con loc_lib.conf y loc_lib.conf” ambos vacios. Lo que me da a pensar que algun error previo se arrastra.

    Por otro lado, si a alguien le sirve, estoy obteniendo de a una, cada una de las claves con MFCUK y cuento la cantidad de autenticaciones (con opcion -v 3) y solo una clave hasta ahora me dio debajo de los 20 min. Incluso hubo una que me dio 16h:02′. El promedio esta en 1h:20min.

    Saludos y gracias.
    Jorge_k69

  54. Buenas Jorge_k69,

    El error que te da (Respuesta: /usr/local/lib: “echo: command not found) es debido a las comillas, prueba a cambiarlas por las que están junto a la tecla de }, al menos a mi me funciono así.

    Yo estoy esperando un lector SCL3711, no se si el procedimiento aquí descrito servirá o variara al tratarse de otro modelo.

    Saludos

  55. Buenas chicos, tengo una duda…¿Porque es necesario utilizar librerias tan antiguas en vez de la ultima version estable 1.7.0 RC4? ¿No seria mejor instalar la ultima dado que estaran todos los problemas mas depurados?, lo mismo sucede con los programas mfcuk y mfoc, ¿no seria mejor instalar las ultimas versiones.

    Saludos y gracias anticipadas.

  56. Tuve problemas en la instalacion de mfoc como se ve en comentarios previos. Se soluciono gracias a los comentarios: lynx [web], 18 de diciembre de 2012, 7:07 pm y nile [web], 7 de febrero de 2013, 5:31 am, los cuales agradezco. Mfoc arranca pero al intentar leer las claves de una tarjera, presenta un error: “input/output” cuando busca la segunda clave usando “nested…”. En el foro de libnfc estan recomendando libnfc 1.7.0 con mfoc 0.10.4, que soluciona explicitamente esto (un poco en linea con lo que plantea nile: nile [web], 7 de febrero de 2013, 6:35 pm). ¿Ideas? Luego les cuento. Saludos

  57. El motivo de usar libnfc 1.5 era porque mfcuk no me funcionó con libnfc 1.6.
    Es cierto que el manual tal cual está ahora no funciona, creo que es porque las revisiones de nfc-tools se han cambiado y ya no concuerdan.
    Buscaré una solución y actualizaré el post.

  58. Gracias dlladro, estaré atento a esa actualización, saludos

  59. Saludos a todos, como un compañero anterior, me he visto sorprendido por el abandono del negocio por parte de Touchatag, les he mandado mails preguntando si les quedan por allí algún pack perdido.

    He visto que algunos lectores compatibles varian es esto:
    ACR122U-A9
    ACR122U-A2
    Pero no quiero tirar casi 50€ si después no es compatible.

    No se si alguien me puede echar una mano con el tema.

    Gracias por adelantado!

  60. David.
    Realimentación acerca de la instalación propuesta hace unps dias: Con libnfc 1.7.0-rc4 me funcionó OK MFOC 0.10.5 pero MFCUK funciona con errores. Hoy mi sistema está en 2 PCs: una con libnfc 1.5.1 y MFCUK tal como se especifica en esta entrada, más arriba, y en otra, MFOC con libnfc 1.7.0-rc4. No me pudo funcionar todo junto…
    Saludos y gracias por todo.
    Cuando mi tesina esté publicada, te aviso.
    Saludos.
    JK

  61. Hola jorge_k69,

    ¿Has conseguido obtener alguna clave con mfcuk que no sea falsa?, me explico, yo tambien he instalado varias versiones y he conseguido obtener la clave del sector 0 con mfcuk, a continuacion he conseguido el resto de claves con mfoc, pero resulta que cuando he ido a comprobarlas con mfoc -k xxxxxxxxxxxx -O Test en todas me da el mensaje:

    nfc_initiator_transceive_bytes: Mifare Authentication Failed.

    Saludos

  62. Nile. instalando tal como se explicó acá (con libnfc 1.5.1), MFCUK me da claves. Como MFOC no me funciona, instalé libnfc 1.7.0 y ahí MFOC funciona. Al ponerle las claves obtenidas antes con MFCUK me da el resto de las claves y se puede ver el contenido de la tarjeta. Pero con libnfc 1.7.0 MFCUK me da claves falsas. Por eso, tengo 2 PC con una parte en cada una.

  63. Hoy, gracias a cambios en libnfc, 1.5.1 no funciona con ambos programas (y esto fue posterior a todo este gran trabajo de David). Y creo que el error que vos mencionás era el error que me daba MFOC. Hoy, según libnfc, ese problema se solucionó con libnfc 1.7.0-rc4 del 31-01-2013. Lo instalé. Pero solo me anda bien MFOC. MFCUK me dio una clave que la reconocí como distinta a las obtenidas con MFCUK de libnfc 1.5.1. Y en efecto, con esa clave MFOC me dio error.
    Para verificar si el error tuyo que mencionás es el que yo tenía antes: Inicia MFOC, verifica que no haya cada una de las claves por default y unos 5 segundos luego, sin siquiera ponerte “intento 1: …” ¿en ese momento te da ese error? Si sí, estás frente al error que yo tuve. Sino, puede ser que sea una clave falsa.

  64. Hola Jorge, gracias por tus comentarios, acabo de instalar en una maquina virtual Ubuntu 10.04 32bits. A continuacion he seguido el procedimiento descrito en este tutorial paso por paso, en este momento estoy intentando conseguir la clave A del sector 3

    Si logro conseguirla intentare sacar el resto en otra maquina virtual (Ubuntu 12.04 64bits) donde tengo instalado libnfc 1.7.0 Rc5 y Mfoc 0.10.5 y te comentare mis resultados.

    Que sistemas operativos estas utilizando y que versiones de programas?

    Saludos y gracias nuevamente.

  65. Uso Back Track 5 r3 que está hecho sobre ubuntu 10.04 LTS. No te olvides las dependencias!
    La última de ellas “libacsccid1”, no existe para ubuntu 10.04 por lo que instalé el lector por separado, y me anduvo. En ubuntu 12.04 no deberías tener problema alguno.

  66. Gracias Jorge, si no me funciona en ubuntu 10.04 lo probare en Ubuntu 12.04. Una pregunta…..cuando obtienes la clave con mfcuk bajo libnfc 1.5.1…si luego la compruebas con el comando ./mfcuk -C -V 3:A ¿te da algun tipo de error?

    Por otra parte…dices que ya no te funciona mfcuk bajo libnfc 1.5.1?

  67. MFCUK me funciona con libnfc 1.5.1. Con el comando que indicás (./mfcuk -C -v 2 -R 3:A -M 8 -te fltaba el 2 despues de -V aunque te sugiero que uses 3 que te va mostrando cada intento de autenticación) obtengo la clave A del sector 3, y funciona OK.
    MFOC (v 0.10.5) me funciona con libnfc 1.7.0-rc4, pero en otra PC. Las claves restantes las obtengo con la opción -k xxxxxxxxxxxx

  68. Gracias una vez mas Jorge, he conseguido obtener todas las claves A a pesar de que mfoc me da error de autenticacion, al final las acaba obteniendo (no se a que se debe ese error):

    root@linux:/home/linux/Descargas# mfoc -k 11584d063407 -O test.mdf
    The custom key 0x11584d063407 has been added to the default keys
    ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): 00 04
    * UID size: single
    * bit frame anticollision supported
    UID (NFCID1): XX XX XX XX
    SAK (SEL_RES): 08
    * Not compliant with ISO/IEC 14443-4
    * Not compliant with ISO/IEC 18092

    Fingerprinting based on MIFARE type Identification Procedure:
    * MIFARE Classic 1K
    * MIFARE Plus (4 Byte UID or 4 Byte RID) 2K, Security level 1
    * SmartMX with MIFARE 1K emulation
    Other possible matches based on ATQA & SAK values:
    nfc_initiator_transceive_bytes: Mifare Authentication Failed
    nfc_initiator_transceive_bytes: Mifare Authentication Failed
    [Key: 11584d063407] -> [.nfc_initiator_transceive_bytes: Mifare Authentication Failed
    nfc_initiator_transceive_bytes: Mifare Authentication Failed
    .nfc_initiator_transceive_bytes: Mifare Authentication Failed
    nfc_initiator_transceive_bytes: Mifare Authentication Failed

    Sector 00 – UNKNOWN_KEY [A] Sector 00 – UNKNOWN_KEY [B]
    Sector 01 – FOUND_KEY [A] Sector 01 – UNKNOWN_KEY [B]
    Sector 02 – UNKNOWN_KEY [A] Sector 02 – UNKNOWN_KEY [B]
    Sector 03 – UNKNOWN_KEY [A] Sector 03 – UNKNOWN_KEY [B]
    Sector 04 – UNKNOWN_KEY [A] Sector 04 – UNKNOWN_KEY [B]
    Sector 05 – UNKNOWN_KEY [A] Sector 05 – UNKNOWN_KEY [B]
    Sector 06 – UNKNOWN_KEY [A] Sector 06 – UNKNOWN_KEY [B]
    Sector 07 – UNKNOWN_KEY [A] Sector 07 – UNKNOWN_KEY [B]
    Sector 08 – UNKNOWN_KEY [A] Sector 08 – UNKNOWN_KEY [B]
    Sector 09 – UNKNOWN_KEY [A] Sector 09 – UNKNOWN_KEY [B]
    Sector 10 – UNKNOWN_KEY [A] Sector 10 – UNKNOWN_KEY [B]
    Sector 11 – UNKNOWN_KEY [A] Sector 11 – UNKNOWN_KEY [B]
    Sector 12 – UNKNOWN_KEY [A] Sector 12 – UNKNOWN_KEY [B]
    Sector 13 – UNKNOWN_KEY [A] Sector 13 – UNKNOWN_KEY [B]
    Sector 14 – UNKNOWN_KEY [A] Sector 14 – UNKNOWN_KEY [B]
    Sector 15 – UNKNOWN_KEY [A] Sector 15 – UNKNOWN_KEY [B]

    Lo que no consigo es escribir en el tag, ni si quiera me deja leerla con el comando:

    root@linux:/home/linux/libnfc-1.7.0-rc5/utils# nfc-mfclassic r a dump.mfd keys.mfd
    Could not read keys file: keys.mfd

    El archivo keys.mfd contiene todas las claves siguiendo el patron hexadecimal de otra tarjeta en blanco, aver si puedo poner un ejemplo

    Saludos

  69. Nile. Los mensajes que MFOC emite, no son errores, sino que es el resultado de intentos de autenticación que el programa va haciendo, hasta que acierta. Tranquilo, que estás muy bien.
    Contame: ¿Pudiste hacer todo en una PC? ¿en Ubuntu 12.04?
    Saludos.

  70. Hola Jorge, te cuento…en principio instale libnfc 1.7.0 Rc4 junto con mfcuk 0.3.7 y mfoc 0.10.5 sobre ubuntu 12.04, aquí logre conseguir la clave del sector 0:A con mfcuk.

    Como tenia dudas de que la clave obtenida era falsa, opte por instalar ubuntu 10.04 en una maquina virtual junto con libnfc 1.5.1, mfcuk r62 y mfoc 0.10.2, donde volvi a comprobar la clave del sectro 0:A con mfcuk y oibtube la misma que antes.

    A continuacion, recupere el resto de claves con mfoc (desde ubuntu 10.04).

    Saludos

  71. Nile.
    Si bien pareciera que vos me consultaras a mi, en realidad, si bien ya resolví mi urgencia, voy a seguir tus pasos para poder trabajar sin problemas de compatibilidad. Veo que Libnfc-1.7.0.rc4 con mfcuk-0.3.7 y mfoc-0.10.5 funcionó OK tal cual se enuncia en el foro de Libnfc, sobre ubuntu 12.04.
    La dinámica generada por Security Artworks para que entre usuarios eventuales (con la iniciativa de los moderadores) se logre solucionar problemas complejos, es para destacar y agradecer.
    David: hacete un “instalando touchtag 2013” con los últimos cambios. Te apoyamos!!!
    Saludos y gracias.
    Jorge

  72. Actualmente mfcuk junto con libnfc 1.7 aunque aparentemente funciona no saca una key correcta, solo los últimos 2 bytes.

    Quedan avisados.

  73. Hola, hace un tiempo logré instalarlo todo y lo tengo completamente funcional en mi portátil. Ahora me veo en la necesidad de hacerle una “limpieza” y tengo que reinstalar todo esto, pero estoy probando en una máquina virtual y no llega a completarse ni el primer make. Es decir, no llego a compilar libnfc1.5.1.

    El error que me lanza es el siguiente:

    make: *** No targets specified and no makefile found. Stop.

    He probado con LinuxMint 13 XFCE, 15 XFCE y 15 KDE. En mi portátil lo tengo instalado en LM 13 KDE y en su día como ya dije antes no me dio ningún problema. ¿Sabéis si el error viene de las propias librerías?

    Un saludo.

  74. Buenas, estoy mirando de comprar un lector touchatag, pero veo que ya no dan servicio, me recomendais alguna alternativa?
    Sabeis si puedo usar el lector de mi S3?

    Un Saludo.

  75. Hola H3ku, se que con el lector del S3 se puden leer y modificar este tipo de tarjetas, pero no sé si el software que comento está disponible para Android.

    En cuanto a alternativas, se que el Omnikey 5321 es compatible con lo comentado en este post.

    Un saludo.

  76. Finalmente he adquirido este.
    http://www.adafruit.com/products/364#Learn
    Mas un cable FTDI que tengo en casa solo tendre que hacer un par de soldaduras.

    Ya comentare que tal los resultados.

    Pd: Siento la demora de la respuesta, de casualidad que he entrado a revisar el post.

  77. Hola como estas? Es comun que tarde tanto en sacar la clave a veces? una me la saco en 20 minutos y otra esta corriendo hace casi 24hs sin resultado. Hay algun tip para esto?

  78. Hola, Sebas.
    A mi también me pasó eso. No es un error. Por suerte, en las tarjetas que me sucedió, sucedió en un solo sector. El resto, entre 15 y 40 minutos por clave.
    Saludos.

  79. Hola, David.
    Antes que nada quiero mencionar que es impresionante el trabajo que hiciste y súper valorable el tiempo que dedicás a ayudar a todos quienes te piden auxilio.
    En este caso, me sumo a las consultas para preguntarte algo.
    Estoy dando soporte en una empresa que trabaja con lectores de carnets mifare. Aparentemente tienen todos los sectores bloqueados y la empresa no tiene las claves de los carnets (quien daba soporte anteriormente se fue sin dejar ninguna documentación).
    No soy de esos programadores que saben varios lenguajes. Trabajo en Visual Basic 6.0 y conozco muy poquito de algún otro.
    ¿Tengo manera de recuperar esos carnets, o debo hacer que compren nuevos y comenzar desde cero? Me gustaría recuperarlos, es decir, poder leer y escribir en ellos, ya que son muchos (miles).
    Muchas gracias.

    Jerónimo

  80. Buenass, como todos, me fue imposible hacer andar las tres cosas juntas (libnfc, mfcuk y mfoc).

    Busque varias combinaciones de releases y versiones, y algunas que se supone que funcionan en mi maquina no compilan (linux mint 17).

    Pero encontre una manera de tener todo andando: libnfc 1.5.1 con mfcuk 0.3.5, y una version estatica de mfoc. Para hacer esto me baje una imagen de Kali linux (donde las tres herramientas andan, pero el mfcuk da claves falsas, esto es un bug conocido), y con la herramienta Elf Statifier, pude sacar el mfoc ya compilado de ese linux y llevarlo a mi maquina.

    Aqui les dejo un link con un pequeño tutorial de como usar el Elf Statifier
    http://archive09.linux.com/feature/150677
    (presten atencion que tienen que modificar un archivo si no le va a dar Seg Fault todo el tiempo).
    Ojalá le sirva a alquien! Saludos desde Buenos Aires!

  81. hola, gracias por toda la ayuda, quisiera preguntar si alguien sabe por que me sale este error al intentar hacer funcionar el arcr122u el error es el siguiente:
    error libnfc.driver.acr122_pcsc
    espero que me puedan ayudar, gracias!

  82. Cualquier lector de NFC funciona con el MFCUK?

  83. buenos días ..he visto aplicaciones para celulares android con nfc como la mct y otras para el cifrado de mifare alguna aplicación para desbloquear las clasves de seguridad de una tarjeta de transporte publico.en chile hay una aplicación en la red q tiene las claves para el transporte de alla .tengo un lector acr122 y un teléfono con nfc.podriamos trabajar actualmente en este tema ya q este post esta un poco atrasado .y hay varias aplicaciones nuevas y ya q ustedes están mas capacitados en esto nos podrían ayudar a estar actualizados con lo q se puede hacer hoy para romper la seguridad de las mifare.muchas gracias

  84. Muy buenas noches, estoy de acuerdo con scorpion, por favor nos pueden ayudar, compre un ACR122U por ebay son los mismos que vendian antes creo. he intentado realizar todos los pasos pero con tantos errores que he visto en comentarios ya quede desconsolado, por favor podrian realizar una actualizacion del post, con herramientas mas recientes, Gracias…
    PDT: David por favor me podrias dar una forma de contactarte, necesito ayuda urgente, Gracias

  85. BUENA NOCHE ME PARECE Q HAY VARIA INFORMACION NUEVA SOBRE ESTE METODO DE RFID http://www.ibuynfc.com SERIA MUY BUENO Y SE LEAGRDECERIA BASTANTE HACER UN NUEVO COMPILADO CON VERSIONES NUEVAS DE SOFTWARE Y DRIVERS.

    MUY BUENA INFORMACION.GRACIAS