Como engenheiro reverso líder na Well Done Technology, recentemente liderei uma missão para descriptografar microcontroladores STM8S105K6 incorporados em sensores de infraestrutura crítica. Este estudo de caso descreve nossa abordagem técnica para contornar seus recursos de segurança, mantendo a integridade do sistema.
Introdução
O STM8S105K6 (32 KB de memória Flash, núcleo de 8 bits a 16 MHz) é um cavalo de batalha em sistemas industriais legados. No entanto, sua combinação de proteção contra leitura (Nível 2) e criptografia personalizada representou um obstáculo significativo quando nosso cliente enfrentou a obsolescência não planejada de sua rede de sensores. Este documento detalha nossa metodologia de descriptografia bem-sucedida.
Especificações do chip e recursos de segurança
Parâmetros-chave
| 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 |
Pinos críticos para 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álise de segurança
Mecanismos de proteção
// 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;
}
}
Estratégia de descriptografia
Engenharia reversa de software
Análise de despejo de memória:
# 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
Configuração do ataque de hardware
Parâmetros de falha de tensão:
// 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;
}
Estudo de caso: Recuperação da rede de sensores
Desafio
- Sistema: Mais de 500 sensores ambientais com STM8S105K6
- Problema: Fabricante – firmware bloqueado impedindo atualizações de segurança
- Objetivo: Recuperar algoritmos de calibração do sensor
Execução Técnica
Fluxo de recuperação de chaves:
Script de validação:
bool validate_calibration() {
uint16_t checksum = calculate_checksum(calibration_data);
return checksum == *(uint16_t*)(FLASH_BASE + 0x7FFE);
}
Estratégias de mitigação
Segurança reforçada
// 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;
}
Melhorias nos processos
- Autenticação de dois fatores para atualizações de firmware
- Codificação da memória durante o tempo de execução
- Rotação dinâmica de chaves a cada 24 horas
Conclusão

Engenheiro principal:
Dr. Billy Zheng
Well Done PCB Technology
billy@reversepcb.com Suporte
de emergência: +86-157-9847-6858




