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
Notas practicas: MCU Design Checklist for STM8S105K6 Chip Decryption: Advanced Techniques for Legacy System Recovery
Use estas notas antes de aplicar la informacion en un diseno real.
Puntos de verificacion
- Compare supply range, GPIO count, timers, ADC/DAC resources, communication interfaces, package size, and toolchain support before selecting the MCU.
- Keep SWD, JTAG, UART, or bootloader access available for production programming, firmware recovery, and failure analysis.
- Place decoupling capacitors close to every power pin, keep crystal traces short, and avoid routing noisy digital buses near analog references or oscillator nodes.




