Como ingeniero jefe inversor en Well Done Technology, recientemente lideré una misión para descifrar los microcontroladores STM8S105K6 incrustados en sensores de infraestructura crítica. Este estudio de caso describe nuestro enfoque técnico para eludir sus funciones de seguridad manteniendo la integridad del sistema.
Introducción
El STM8S105K6 (32KB Flash, 16MHz 8 – bit core) es un caballo de batalla en sistemas industriales heredados. Sin embargo, su combinación de protección de lectura (Nivel 2) y cifrado personalizado plantearon importantes desafíos cuando nuestro cliente se enfrentó a la obsolescencia no planificada de su red de sensores. Este documento detalla nuestra exitosa metodología de descifrado.
Especificaciones del chip y funciones de seguridad
Parámetros clave
| Parameter | Value |
|---|---|
| Architecture | STM8S (8 - bit) |
| Memory | 32KB Flash / 2KB SRAM |
| ADC Resolution | 10 - bit |
| Security Levels | Read Protection (Level 2) |
| Encryption | Proprietary XOR Scheme |
Pines críticos para el ataque
| Pin Location | Pin Details |
|---|---|
| Left Side (Pins 1 - 20) | 1 - PC7 • 2 - PC8 • 3 - PC9 • 4 - PC10 • 5 - PC11 6 - BOOT1 • 7 - PH3 • 8 - PH2 • 9 - VDD • 10 - VSS 11 - PA0 • 12 - PA1 • 13 - PA2 • 14 - PC3 • 15 - PC2 16 - PC1 • 17 - PC0 • 18 - NRST • 19 - PH1 • 20 - PH0 |
Análisis de seguridad
Mecanismos de protección
// Protection configuration
FLASH->CR2 |= FLASH_CR2_LP; // Level 2 protection
FLASH->OPTR |= FLASH_OPTR_RDP; // Read protection enable
void encrypt_data(uint8_t *data, uint16_t len) {
uint8_t key = get_hardware_id();
for(int i = 0; i < len; i++) {
data[i] ^= key;
}
}
Estrategia de descifrado
Ingeniería inversa de software
Análisis de la memoria:
# Python script for XOR key detection
def find_xor_key(encrypted_data):
for key_candidate in range(256):
decrypted = bytes([b ^ key_candidate for b in encrypted_data])
if b'INIT' in decrypted:
return key_candidate
return None
Configuración del ataque de hardware
// Glitch generation code
void apply_glitch() {
DAC->DHR12R1 = 0x0000; // Initial voltage
delay_us(100);
DAC->DHR12R1 = 0x03FF; // Glitch voltage
delay_us(50);
DAC->DHR12R1 = 0x0000;
}
Estudio de caso: Recuperación de la red de sensores
Desafío
- Sistema: 500+ sensores ambientales con STM8S105K6
- Problema: Firmware bloqueado por el fabricante impidiendo las actualizaciones de seguridad
- Objetivo: Recuperar los algoritmos de calibración del sensor
Ejecución técnica
Flujo clave de recuperación:
Guión de validación:
bool validate_calibration() {
uint16_t checksum = calculate_checksum(calibration_data);
return checksum == *(uint16_t*)(FLASH_BASE + 0x7FFE);
}
Estrategias de mitigación
Seguridad mejorada
// Dual - key implementation
void secure_keygen() {
uint8_t temp = ADC1->DR;
uint16_t rtc = RTC->CNTH << 16 | RTC->CNTL;
session_key = crc16((uint8_t*)&rtc, sizeof(rtc)) ^ temp;
}
Mejoras del proceso
- Autenticación de dos factores para actualizaciones de firmware
- Desordenamiento de memoria durante la ejecución
- Rotación dinámica de claves cada 24 horas
Conclusión

Ingeniero Principal:
Dr. Billy Zheng
Well Done PCB Technology
billy@reversepcb.com
Soporte de emergencia: +86-157-9847-6858




