Muchos de los routers Wifi de bajo coste esconden misterios en su interior... Bueno, lo que queremos decir es que muchos de ellos ofrecen un puerto serie con el que acceder a la consola del sistema GNU/Linux que utilizan. En este artículo os vamos a contar localizarlos y acceder a ellos.
Antes de comenzar, aquí va el mensajillo obligatorio cada vez que os contamos como, potencialmente, destruir vuestros dispositivos o incluso haceros daño... Básicamente esto quiere decir que si la liáis es vuestro problema.
Si tenéis uno de estos, podéis encontrar todos los detalles sobre el cacharro, en los siguientes enlaces:
https://wiki.openwrt.org/toh/tp-link/tl-wr841nd
http://www.dd-wrt.com/phpBB2/viewtopic.php?p=627915
https://giannoug.gr/unbricking-a-tp-link-tl-wr841nd/
Este router es bastante fácil de abrir... sólo hay que quitar unos tornillos y tirar. Los tornillos se encuentra bajo las almohadillas en la parte inferior del dispositivo. Al abrirlo intentad tener cuidado, nosotros rompimos una de las pestañas de plástico que mantienen unidas las dos partes de la carcasa.
Una vez abierto es muy fácil identificar dos conectores que no se han instalado. Podéis verlos realzados en la siguiente imagen.
Como lo sabemos todo sobre este router, no necesitamos hacer nada especial para localizar el conector con el puerto serie y la función de cada una de las conexiones. Pero bueno, en general, cuando veáis un conector de 4 pines en la placa... bueno, ese suele ser el que nos interesa.
Ahora, dependiendo de las herramientas que tengáis, podréis conectar cables a las conexiones de la placa de distintas formas. Podéis soldar los cables directamente, usar algunos PogoClips, o soldar unos PINs para conectar esos prácticos jumpers que utilizamos con las placas de prototipos. Nosotros nos decantamos por esta última solución.
En principio, el PIN 1 no se suele conectar. Sin embargo para este modelo, y la versión específica que nosotros tenemos es necesario. Antes de conectar nada, comprobad la documentación. Hay varias versiones de este router y cada una tiene sus peculiaridades con respecto al puerto serie.
En general, NUNCA conectéis el pin Vcc de primeras. Si no conseguís acceder al dispositivo, intentad buscar información en Internet primero, y si eso no funciona, y realmente queréis acceder a ese puerto cueste lo que cueste, pues probad, pero bajo vuestra única y exclusiva responsabilidad. Tenéis muchas papeletas para romper el puerto serie... el router quizás siga funcionando... depende.
La conexión específica al adaptador que hayáis elegido será diferente en cada caso. Sin embargo, existen unas reglas generales:
Construye tu fuente de 3.3V
■
Ni el autor de este artículo, ni la Revista On-line Occam's Razor se hacen responsable de cualquier daño que se pueda causar derivado del contenido de este artículo
Finalmente comentaros que el contenido de este artículo es una versión en castellano extendida del siguiente artículo en inglés.
http://papermint-designs.com/dmo-blog/2016-12-hardware-hacking-box--serial-access-to-routers
Sin más preámbulos... amo allá
-
Se responsable, aprende y presta atención para no hacerte daño y para no destruir tu equipo.
Normalmente, una vez que desmontes el dispositivo habrás perdido la garantía. Utiliza dispositivos viejos fuera de garantía o atente a las consecuencias.
Los routers deben conectarse a la red eléctrica principal. Ten mucho cuidado si manipulas el dispositivo cuando está encendido. Intenta hacer todas las comprobaciones/conexiones posibles con el dispositivo apagado
En general conectar el pin Vcc puede dañar el dispositivo. Enseguida sabrás de lo que hablamos... Avisado estás
La Víctima
Nuestra víctima va a ser un TP-Link WR841N. Se trata de un router un poco viejo (uno que utilizábamos para pruebas) y de bajo coste (unos 20 euros). Lo bueno de este router es que hay cantidad de información sobre él, de tal forma que si nos quedamos atascados en algo, será fácil encontrar la solución en Internet. Además sabemos seguro que este ofrece un puerto serie con el que aplicar nuestros conocimientos (además de un puerto JTAG... pero eso es para otro artículo). Nuestro WR841N lo hemos reflasheado con el firmware OpenWRT (https://openwrt.org/). Esto lo hicimos hace algunos años, así que no podemos daros muchos detalles del firmware original del router. Sin embargo, el proceso de reflasheo, tanto de OpenWRT como de DD-WRT es muy sencillo y altamente recomendable. En caso de que no encontréis o dispongáis de uno de estos, y realmente queráis juguetear con un router, nuestra recomendación es que consultéis la base de datos on-line de OpenWRT antes de comprar uno y os aseguréis que, esos interfaces en los que estáis interesados están disponibles en el modelo que queréis adquirir. En el caso de que sea necesario hacer alguna modificación a la placa, ahí también os lo contarán y podréis decidir si os veis capaces o mejor lo intentáis con otro dispositivo.Preparación
Antes de ponernos a hurgar en las tripas de los cacharros, vamos a necesitar algún material. Además de algunas herramientas, las cuales variarán dependiendo del dispositivo que queráis abrir, vamos a necesitar un adaptar Serie-TTL. La mayoría de los puertos serie que ofrecen los routers no utilizan los +12/-12 V típicos de los interfaces serie RS-232C.. Normalmente utilizan niveles TTL (5V o 3.3V) para transmitir la información. De tal forma que tenemos un par de opciones para poder hablar con nuestro router: La primera es construir nuestro propio adaptador. Hay mucha información en Internet sobre el tema y no vamos a discutir esta opción aquí. Podéis consultar esta página para conseguir más detalles: https://wiki.openwrt.org/doc/hardware/port.serial.cables La siguiente opción es usar uno de esos adaptadores USB-Serie baratos. Nosotros solemos utilizar uno basado en el PL2303, como el que aparece en la página del enlace anterior. Cuesta unos poco euros y la verdad que es bastante útil. En general, cualquiera de estos adaptadores suelen funcionar bien. La última opción es utilizar un dispositivo intermedio capaz de hablar con nuestro ordenador (Arduino) o que sea un ordenador en si mismo (Rpi, BBB, Olinuxino, BananaPi) y que además sea capaz de conectarse a un puerto Serie-TTL. Cualquiera de las opciones anteriores es perfectamente válida. Es una cuestión de que tenéis a mano y de cuanto dinero os queréis gastar. En concreto nosotros hemos utilizado un adaptador USB-Serie PL2303 y una Raspberry Pi para este artículo. Ambos funcionan perfectamente, si bien, en el caso de la Rpi es necesaria alguna configuración. Volveremos sobre esto en un momento cuando hablemos del SW.Abriendo el TP-Link WR841N
Vamos a comenzar a destripar nuestra plataforma de referencia, el TP-Link WR841N.
Nuestra Víctima. TP-Link WE841N
http://www.dd-wrt.com/phpBB2/viewtopic.php?p=627915
https://giannoug.gr/unbricking-a-tp-link-tl-wr841nd/
Este router es bastante fácil de abrir... sólo hay que quitar unos tornillos y tirar. Los tornillos se encuentra bajo las almohadillas en la parte inferior del dispositivo. Al abrirlo intentad tener cuidado, nosotros rompimos una de las pestañas de plástico que mantienen unidas las dos partes de la carcasa.

Las entrañas del TP-Link WE841N

Ubicación de las conexiones para los conectores Serie y JTAG del TP-Link WE841N

Nuestra Víctima. TP-Link WE841N
Puertos Serie. Una breve Introducción
Si ya sabes como funciona un puerto serie, te puedes saltar esta sección. Si eso de 8N1 te suena a chino, entonces sigue leyendo. Cuando quieres conectar dos dispositivos digitales para que intercambien información, tienes básicamente dos opciones. Puedes enviar los datos en serie o en paralelo. En principio, la unidad mínima de información que podemos intercambiar es un byte (8 bits en general, desde el punto de vista de la CPU), así que tenemos dos opciones.- Utilizamos 8 cables y enviamos un bit por cada cable, de forma que podemos transmitir nuestro byte de una sola tacada. Esto es lo que hace un puerto paralelo. El antiguo interfaz centronics de las impresoras, o el bus GPIB utilizado en instrumentación, funcionan de esta manera.
- La otra opción es utilizar un solo cable y enviar los bits de nuestro byte, uno detrás del otro en bloques. El dispositivo en el otro lado, lee los bits y los junta de nuevo en un byte que se envía al programa principal que recibe/transmite los datos. Los puertos serie clásicos (RS-232C, RS-485,... etc) funcionan de esta forma. En la actualidad, los puertos USB, I2C o SPI también funcionan así.
- Un bit de comienzo conocido como START BIT. Este bit indica el comienzo de un dato
- Los bits de datos que pueden ser 5, 6, 7 u 8. Normalmente utilizamos 8 bits, pero, recordemos que el código ASCII original utilizaba solo 7 bits
- A continuación se suele incluir un bit extra llamado de PARIDAD. En su forma más sencilla el bit de paridad indica si el número de "UNOS" en los datos es par o impar. Así, la paridad puede ser PAR o IMPAR. Este bit es una rudimentaria forma de detectar errores en los datos. En conexiones directas de corta distancia, este bit no se suele utilizar.
- Uno o dos bits indicando el fin del dato. Estos bits se conocen STOP bits o bits de parada ;).
- D indica los bits de datos que vamos a utilizar
- P indica el tipo de parida. Los valores posibles son N (None, sin parida), E (Even, paridad par) u O (Odd, paridad impar). Existen otros tipos de paridad pero son menos comunes.
- S indica el número de bits de parada (STOP). Este valor puede ser 1 o 2.
115200 8N1
Accediendo Al WR-841N
Ahora ya podemos acceder al puerto serie. Solo tenemos que conectar los cables a nuestro adaptador (ya sea un USB-Serie o un pequeño ordenador -Arudio, Rpi,...-). Si consideramos que el pin 1 es el que se encuentra más cerca de los conectores Ethernet del router, los pines en el router tienen las siguientes funciones:PIN 1 | Vcc |
PIN 2 | GND |
PIN 3 | Rx |
PIN 4 | Tx |
- Conectad siempre todas las tierras (Pines GND) juntas y conectadlas antes que ningún otro pin. Si no lo hacéis... bueno, un montón de cosas raras pueden pasar. O dicho de otra forma: cuando pasen cosas muy raras que no tengan ningún sentido... Comprobad que todos los pines GND están conectados juntos
- Los pines Tx/Rx deben conectarse en lo que se conoce como una configuración de modem nulo. Esto significa que el pin Tx del router debe conectarse al pin Rx de nuestro adaptador y el pin Rx del router debe conectarse al pin Tx de nuestro adaptador. Esto suele requerir un poco de prueba y error, ya que ciertos adaptador marcan los pines desde su propio punto de vista y otros desde el punto de vista del dispositivo que se conecta al adaptador...
Una breve pincelada sobre identificar pins
Nuestra recomendación fue empezar con un router del que dispongáis la información, pero si eso no es posible, tendréis que obtener esa información vosotros mismos. La siguiente página ofrece una descripción detallada del proceso para localizar los PINes en la placa del router (la información interesante está al final de la página). https://wiki.openwrt.org/doc/hardware/port.serial Para los que no queráis leer la página en inglés (que deberíais ya que contiene muchísima información muy útil), este es un resumen de como proceder si solo disponemos de un multímetro.- Activar el test de continuidad (o medidor de resistencia).
- Para localizar el PIN de tierra (GND), poned una de las pruebas del multímetro en un punto que sepáis que es tierra y comprobad que pin está conectado con tierra. Un buen punto de partida es utilizar uno de los pines en el conector de alimentación.... Haced este test con el cacharro apagado
- Para localizar el pin de alimentación, colocad una de las pruebas en el pin de tierra que habéis encontrado y cambiad el multímetro para medir voltaje, en una escala de al menos 5V. Luego, con la otra prueba del multímetro, comprobad los pines, y buscad uno con unos 3.3V o 5V estables. Esto hay que hacerlo con el router encendido... así que mucho cuidadín.
- En esta misma configuración, comprobaremos los otros pines. Una vez que tengáis las pruebas del multímetro conectadas a GND y al pin a comprobar, encenderemos el router. Esto provoca que el router envíe todos esos mensajes de arranque y por tanto, el pin Tx será aquel en el que el la lectura varíe más.
- El pin que queda es Rx
Software
Ahora que ya estamos conectados necesitamos algún programa para poder recibir y enviar datos por el puerto serie. Tenemos varias opciones:-
Minicom. Minicom es la mejor opción. Es un programa diseñado para trabajar con puertos serie y lo hace de forma correcta. Además nos permitirá, de forma sencilla, probar distintas configuraciones del puerto serie, para encontrar la que le guste a nuestro router. Para iniciar minicom contra un determinado puerto utilizad el comando:
minicom -D /dev/TuDispositivo
Luego podéis utilizar los menús para cambiar la configuración cuando lo necesitéis. -
screen. Este programa se utiliza normalmente para ejecutar sesiones en background, de forma que nuestros programas sigan ejecutándose cuando nosotros ya no estemos conectados. Además de eso, screen nos permite conectarnos a puertos serie con un comando como este:
screen /dev/ttyS0 115200
Donde el número final es la velocidad del puerto serie al que nos queremos conectar. -
NetKitty. Esta es mi versión reducida de Netcat a la que le he añadido soporte para acceder a puertos serie estándar (8N1). La ventaja de Netkitty is que podéis descargar una versión estática compilada para las principales plataformas (podrías utilizar bustro teléfono android para acceder al router por ejemplo) y que nos permite acceder al puerto serie de forma remota.
nk -c S,/dev/ttyS0,115200
Si además de acceder al puerto serie localmente, queremos acceder a él a través de una conexión TCP al puerto 5000 de la máquina conectada al router, solo tenemos que escribir algo como esto.nk -hub -s T,5000 -c S,/dev/ttyS0,115200
Netkitty ofrece muchas más opciones. Echadle un ojo a este tutorial.
Liberando el puerto serie de la RPI
A diferencia de otras tarjetas de desarrollo, la RPI tiene un solo puerto serie accesible (en principio) que, por defecto se utiliza como consola del sistema. Es decir, durante el arranque es adquirido por el programa (mgetty o equivalente) para proporcionar un login al sistema. Normalmente esto se configuraba en el fichero /etc/inittab pero en versiones recientes, la versión de DEbian en la que se basa Raspbian a comenzado a utilizar systemd. En cualquier caso, si vais a utilizar una Rpi con una versión reciente de Raspbian, seguid los siguientes pasos en caso de que no consigáis acceder al puerto serie de la tarjeta.- Utilizando la herramienta de configuración de la tarjeta (raspi-config) acceded al menu de las opciones avanzadas y luego seleccionad Serial. El programa os preguntará si queréis acceso shell a través del puerto serie. Responded que no
- Luego comprobad que el ficherto /boot/config.txt contiene la linea
enable_uart=1
- Reiniciar
QUIZÁS TAMBIÉN TE INTERESE
Como Instalar una Puerta Trasera en un Router CaseroConstruye tu fuente de 3.3V
■
CLICKS: 11323