Als leitender Reverse Engineer bei Well Done Technology habe ich kürzlich eine Mission zur Entschlüsselung von STM8S105K6-Mikrocontrollern geleitet, die in Sensoren kritischer Infrastrukturen eingebettet sind. Diese Fallstudie beschreibt unseren technischen Ansatz zur Umgehung der Sicherheitsfunktionen unter Beibehaltung der Systemintegrität.
Einführung
Der STM8S105K6 (32 KB Flash, 16 MHz 8-Bit-Kern) ist ein Arbeitstier in älteren Industriesystemen. Seine Kombination aus Leseschutz (Stufe 2) und benutzerdefinierter Verschlüsselung stellte jedoch eine erhebliche Hürde dar, als unser Kunde mit der ungeplanten Veralterung seines Sensornetzwerks konfrontiert war. Dieses Dokument beschreibt unsere erfolgreiche Entschlüsselungsmethode.
Chip-Spezifikationen und Sicherheitsmerkmale
Wichtige Parameter
| 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 |
Kritische Pins für Angriffe
| 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 |
Sicherheitsanalyse
Schutzmechanismen
// 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;
}
}
Entschlüsselungsstrategie
Software-Reverse-Engineering
Speicherauszugsanalyse:
# 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
Hardware-Angriff einrichten
Spannungsstörungs-Parameter:
// 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;
}
Fallstudie: Wiederherstellung eines Sensornetzwerks
Herausforderung
- System: Über 500 Umweltsensoren mit STM8S105K6
- Problem: Hersteller – gesperrte Firmware verhindert Sicherheitsupdates
- Ziel: Wiederherstellung der Sensorkalibrierungsalgorithmen
Technische Ausführung
Wiederherstellungsablauf für Schlüssel:
Validierungsskript:
bool validate_calibration() {
uint16_t checksum = calculate_checksum(calibration_data);
return checksum == *(uint16_t*)(FLASH_BASE + 0x7FFE);
}
Strategien zur Schadensminderung
Verbesserte Sicherheit
// 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;
}
Prozessverbesserungen
- Zwei-Faktor-Authentifizierung für Firmware-Updates
- Speicherverschlüsselung während der Laufzeit
- Dynamische Schlüsselrotation alle 24 Stunden
Fazit

Chefingenieur:
Dr. Billy Zheng
Well Done PCB Technology
billy@reversepcb.com
Notfall-Support: +86-157-9847-6858




