En tant qu'ingénieur en chef en rétro-ingénierie chez Well Done Technology, j'ai récemment mené une mission visant à décrypter les microcontrôleurs STM8S105K6 intégrés dans les capteurs d'infrastructures critiques. Cette étude de cas décrit notre approche technique pour contourner ses fonctionnalités de sécurité tout en préservant l'intégrité du système.
Introduction
Le STM8S105K6 (32 Ko de mémoire Flash, cœur 8 bits à 16 MHz) est un pilier des systèmes industriels traditionnels. Cependant, sa combinaison de protection en lecture (niveau 2) et de cryptage personnalisé a posé des obstacles importants lorsque notre client a été confronté à l'obsolescence imprévue de son réseau de capteurs. Ce document détaille notre méthodologie de décryptage réussie.
Spécifications de la puce et caractéristiques de sécurité
Paramètres clés
| Paramètre | Valeur |
|---|---|
| Architecture | STM8S (8 bits) |
| Mémoire | 32 Ko Flash / 2 Ko SRAM |
| Résolution ADC | 10 bits |
| Niveaux de sécurité | Protection en lecture (Niveau 2) |
| Chiffrement | Schéma XOR propriétaire |
Pins critiques pour l'attaque
| Emplacement des broches | Détails des broches |
|---|---|
| Côté gauche (Broches 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 |
Analyse de sécurité
Mécanismes de protection
// Configuration de la protection
FLASH->CR2 |= FLASH_CR2_LP; // Protection de niveau 2
FLASH->OPTR |= FLASH_OPTR_RDP; // Activation de la protection en lecture
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;
}
}
Stratégie de décryptage
Rétro-ingénierie logicielle
Analyse du vidage mémoire :
# Script Python pour la détection de clé XOR
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
Configuration de l'attaque matérielle
Paramètres de glitching de tension :
// Code de génération de glitch
void apply_glitch() {
DAC->DHR12R1 = 0x0000 ; // Tension initiale
delay_us(100);
DAC->DHR12R1 = 0x03FF ; // Tension de problème
delay_us(50);
DAC->DHR12R1 = 0x0000 ;
}
Étude de cas : Récupération d'un réseau de capteurs
Défi
- Système : plus de 500 capteurs environnementaux avec STM8S105K6
- Problème : fabricant – micrologiciel verrouillé empêchant les mises à jour de sécurité
- Objectif : récupérer les algorithmes d'étalonnage des capteurs
Exécution technique
Processus de récupération des clés :
Script de validation :
bool validate_calibration() {
uint16_t checksum = calculate_checksum(calibration_data);
return checksum == *(uint16_t*)(FLASH_BASE + 0x7FFE);
}
Stratégies d'atténuation
Sécurité renforcée
// Implémentation à double clé
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;
}
Améliorations des processus
- Authentification à deux facteurs pour les mises à jour du micrologiciel
- Brouillage de la mémoire pendant l'exécution
- Rotation dynamique des clés toutes les 24 heures
Notes pratiques : Liste de contrôle de la conception MCU pour le décryptage de la puce STM8S105K6 : techniques avancées de récupération du système hérité
UTILISEZ CES NOTES AVANT D APPLIQUER LES INFORMATIONS DANS UNE CONCEPTION REELLE.
Points de vérification
- Comparez la plage d’approvisionnement, le nombre de GPIO, les temporisateurs, les ressources ADC/DAC, les interfaces de communication, la taille du package et la prise en charge de la chaîne d’outils avant de sélectionner le MCU.
- Gardez l’accès SWD, JTAG, UART ou Bootloader disponible pour la programmation de production, la récupération du micrologiciel et l’analyse des pannes.
- Placez les condensateurs de découplage à proximité de chaque broche d’alimentation, gardez les traces de cristal courtes et évitez d’acheminer des bus numériques bruyants à proximité de références analogiques ou de nœuds d’oscillateur.
Conclusion

Ingénieur principal :
Dr Billy Zheng
Well Done PCB Technology
billy@reversepcb.com Assistance
d'urgence : +86-157-9847-6858




