13 may 2020

Introducción al reversing de señales #3 - Saltandonos los límites del HackRF

¡Muy buenas!

Como vimos en el primer post, el HackRF tiene un span de hasta 20 MHz. Esto quiere decir que únicamente podemos ver en tiempo real una ventana de 20 MHz dentro del ancho de banda de funcionamiento del HackRF (recordemos: 1 MHz - 6 GHz).

Pues bien, ¿y si yo quisiera ver una señal con un ancho de banda mayor? ¿Me compro otro cacharro? No, no es necesario (salvo que quieras hacer un trabajo de calidad, entonces sí, pero te advierto que te va a doler el bolsillo...). Hace unos años, nuestro querido Michael Ossmann actualizó el firmware del HackRF y añadió una herramienta que nos permite saltar los límites del aparato: hackrf_sweep.

El funcionamiento es bastante sencillo e inteligente: el HackRF tiene un límite de procesamiento de una señal en una banda de 20 MHz, pero ¿realmente es necesario ver una señal estrictamente en tiempo real? Imaginemos que queremos ver la banda de frecuencias entre 100 MHz y 200 MHz, no podríamos estar viendo en tiempo real este span, pero el HackRF sí podría hacer un barrido: captura el espectro entre 100 y 120 MHz en un momento dado, pasa rápidamente a analizar 120-140 MHz, 140-160, 160-180 y, finalmente, 180-200. Si el análisis en cada una de las bandas es de un tiempo ínfimo, a nuestros ojos parecerá que estamos viendo un span de 100 MHz en tiempo real, cuando no es cierto (¿pero a quién le importa?).

A continuación veremos qué se visualiza el lanzar el programa con los parámetros por defecto. Observamos que se realiza un escaneo del rango de frecuencias completo y aparecen una serie de registros con la siguiente información:
  1. Fecha
  2. Hora
  3. Frecuencia inicial
  4. Frecuencia final: vemos que analiza un ancho de banda de 5 MHz por cada captura.
  5. Ancho del "Frequency bin" de 1 MHz: este es un concepto relacionado con la transformada rápida de Fourier (FFT) para calcular el espectro en función de la señal (como sospecharéis, este concepto se nos escapa por su complejidad).
  6. Número de muestras analizadas para calcular la FFT (ídem al anterior).
  7. A partir de aquí, se muestra la potencia detectada en cada "frequency bin". En este caso, como se analizan 5 MHz con "bins" de 1 MHz, tendremos cinco valores de potencia distintos.
Números que por sí solos no nos dicen gran cosa, ¿verdad?
Ahora bien, ¿cuánto tardamos en hacer un barrido de los 6 GHz que cubre el HackRF? Un segundo (casi) exacto.
Casi parece que lo hayan hecho adrede ;)
Así pues, nuestro HackRF puede hacernos ver casi en tiempo real un ancho de banda de 6 GHz, siempre y cuando tengamos en cuenta que cada punto de ese espectro que estamos viendo puede tardar hasta un segundo en actualizarse. Si lo que queremos es, simplemente, visualizar el espectro, esta solución nos es más que suficiente; si queremos hacer un análisis profundo de la señal (con su correspondiente captura, retransmisión, etc.) me temo que ya no es una buena opción...

En cualquier caso, una ristra de números no nos vale de nada, ¿no? Lo importante es el programa que represente esos datos. Para ello existe una solución llamada QSpectrumAnalyzer (bueno, realmente hay varios forks... Yo he probado el de mossmann). Tened en cuenta que parece que no funciona con Python 3.8, así que tal vez tengáis que tirar de pyenv e instalar módulos algo antiguos con pip, en mi caso probé con Python 3.5.9 y me funcionó sin problema.

El programa no tiene demasiado misterio, es similar a GQRX (pero más sencillo al tener menos opciones). Prácticamente permite seleccionar qué parámetros establecemos en hackrf_sweep y elegir distintas opciones para la representación de la señal como la persistencia del espectro (que no cambie cada segundo, sino que tenga una transición más suave) o la representación del máximo y mínimo del espectro en cada frecuencia.

Hagamos un experimento rápido, veamos nuestra querida banda de radio FM completa. Como sabréis, esta banda está en torno a los 80-110 MHz, por lo que con el HackRF "en modo normal" no podríamos cubrirlo completamente. Por tanto, hagamos un barrido de frecuencias (como veréis, se captura también entre 110 y 120 MHz, ya que las capturas se hacen en múltiplos de 20 MHz):
¡Ahora sí que podemos "ver" la radio completamente!
Como se nos está quedando el post un poco largo, vamos a dejar una pregunta que relacione con el próximo post: ¿qué creéis que veremos si analizamos todo el espectro que nos deja el HackRF?

¡Saludos!

No hay comentarios:

Publicar un comentario