Kali Linux: Guía de i2c-tools
Kali Linux: Guía de i2c-tools
Entrar en el mundo de la comunicación entre dispositivos mediante el protocolo I2C (Inter-Integrated Circuit) en Kali Linux es una excelente forma de aprender sobre hardware y seguridad física.
La suite i2c-tools es el estándar de oro para interactuar con buses de datos serie. Aquí tienes una guía rápida en español sobre cómo empezar y para qué sirve cada comando.
1. Instalación
Aunque suele venir preinstalado en muchas versiones de Kali, puedes asegurarte de tener la última versión con:
sudo apt update && sudo apt install i2c-tools -y
Nota importante: Para que estas herramientas funcionen, el kernel debe tener cargado el módulo I2C. Puedes activarlo con
sudo modprobe i2c-dev.
2. Comandos Principales de i2c-tools
Aquí tienes el "kit de supervivencia" para manejar dispositivos I2C:
A. i2cdetect - El escáner
Se usa para ver qué dispositivos están conectados al bus. Es el primer paso para saber si el hardware está bien cableado.
Comando:
sudo i2cdetect -y -r 1Qué hace: Escanea el bus número 1. Verás una tabla con direcciones hexadecimales. Si aparece un número (ej.
0x48), ¡hay un dispositivo ahí!
B. i2cdump - El visor de memoria
Vuelca todo el contenido de los registros de un dispositivo específico.
Comando:
sudo i2cdump -y 1 0x48Qué hace: Te muestra una "fotografía" de todos los datos internos que el dispositivo tiene almacenados en ese momento.
C. i2cget - Lectura precisa
Lee el valor de un registro específico en un dispositivo.
Comando:
sudo i2cget -y 1 0x48 0x00Qué hace: Lee el byte almacenado en el registro
0x00del dispositivo con dirección0x48.
D. i2cset - Escritura (¡Cuidado!)
Envía un dato a un registro específico. Útil para configurar sensores o encender LEDs.
Comando:
sudo i2cset -y 1 0x48 0x01 0xffQué hace: Escribe el valor
0xffen el registro0x01.
3. Arquitectura del protocolo I2C
Para entender qué estás haciendo, recuerda que I2C funciona con un sistema de Maestro/Esclavo (o Controlador/Target) usando solo dos cables:
SDA (Serial Data): Por donde viajan los datos.
SCL (Serial Clock): El pulso que sincroniza la velocidad de envío.
4. Consejos de seguridad en Kali
Si estás usando Kali para auditoría de hardware (como extraer firmware de una memoria EEPROM):
Voltaje: Asegúrate de que los niveles lógicos coincidan (3.3V o 5V). Conectar un bus de 5V a un pin de 3.3V de tu adaptador puede ser fatal para el hardware.
Permisos: Siempre necesitarás
sudoo pertenecer al grupoi2c.
Vamos a crear un script sencillo en Python. Python es la forma más común de interactuar con I2C en Kali (especialmente si usas una Raspberry Pi o un adaptador USB-to-I2C como el CH341A) porque es mucho más flexible que usar comandos individuales de la terminal.
Para esto usaremos la librería smbus2, que es la versión moderna y más estable de la original smbus.
1. Preparación del entorno
Primero, instala la librería necesaria:
pip install smbus2
2. El Script de Python (lector_i2c.py)
Este código es una plantilla profesional que puedes adaptar. Imagina que queremos leer un sensor de temperatura o simplemente monitorear un registro:
import smbus2
import time
# Configuración del bus (usualmente es el 1 en dispositivos modernos)
I2C_BUS = 1
# La dirección hexadecimal que encontraste con i2cdetect (ejemplo: 0x48)
DEVICE_ADDRESS = 0x48
# El registro interno que queremos leer (ejemplo: 0x00)
REGISTER = 0x00
def leer_dispositivo():
try:
# Abrimos el bus
with smbus2.SMBus(I2C_BUS) as bus:
# Leemos un solo byte del registro
dato = bus.read_byte_data(DEVICE_ADDRESS, REGISTER)
print(f"--- Lectura Exitosa ---")
print(f"Dirección: {hex(DEVICE_ADDRESS)}")
print(f"Registro: {hex(REGISTER)}")
print(f"Valor (Hex): {hex(dato)}")
print(f"Valor (Decimal): {dato}")
except Exception as e:
print(f"Error al conectar con el dispositivo: {e}")
if __name__ == "__main__":
# Bucle simple para monitorear en tiempo real
while True:
leer_dispositivo()
time.sleep(2) # Espera 2 segundos entre lecturas
3. ¿Cómo funciona el flujo de datos?
Cuando ejecutas este script, Python se comunica con el driver del kernel de Kali Linux, que a su vez manipula físicamente los niveles de voltaje en los pines SDA y SCL.
4. Casos comunes en Auditoría
Si estás usando esto para hacking de hardware o ingeniería inversa, aquí hay dos funciones que te serán muy útiles:
Lectura de Bloques: Muchos dispositivos (como memorias EEPROM) no envían solo un byte, sino cadenas de datos.
bus.read_i2c_block_data(ADDRESS, OFFSET, LENGTH)
Escritura de Configuración: Para activar un dispositivo que está en "modo sueño".
bus.write_byte_data(ADDRESS, REGISTER, VALUE)