Rétro-ingénierie de MCU

Déverrouillage de microcontrôleur - MikaTech

Nos valeurs et objectifs

À propos de MikaTech

Le temps a passé vite, depuis le jour où nous avons réalisé notre premier projet de rétro-ingénierie sur MCU 8051 en 1998, jusqu'à la mise en place de notre laboratoire de rétro-ingénierie d'un million de dollars en 2012, 14 années se sont écoulées. Aujourd'hui, nous lançons notre nouvelle activité de développement de systèmes visuels embarqués, avec l'espoir de servir encore 10 ans.

signature Peter Lee Co-fondateur et PDG

Architecture et programmation des MCU 8051 pour le rétro-ingénierie

Chapitre 1 : Introduction aux microcontrôleurs

Préface

L'histoire de l'électronique a commencé avec l'électricité. Au début, les humains vivaient aux côtés de l'énergie électrique sans réaliser son immense potentiel, et cette époque resta paisible. Puis vint Faraday, qui mit en marche la roue de l'innovation électronique, la faisant avancer petit à petit...

Peu après, les premières machines alimentées par cette toute nouvelle source d'énergie firent leur apparition. Des décennies passèrent, et alors que le grand public s'habituait peu à peu à ces appareils électriques et cessait de s'intéresser de près aux recherches des professionnels techniques émergents, une idée révolutionnaire prit forme : il était possible de manipuler des électrons dans des tubes à vide en verre pour construire des circuits fonctionnels. Ce qui semblait au départ une astuce expérimentale ingénieuse devint bientôt irréversible. Le domaine de l'électronique était officiellement né, et la roue du progrès technologique commença à tourner de plus en plus vite en descente...

De nouvelles disciplines apportèrent de nouveaux praticiens. Le personnel d'usine en bleu de travail fut remplacé par des chercheurs en blouse blanche, et un groupe de spécialistes en électronique monta sur la scène historique. Alors que le grand public observait ces percées technologiques avec étonnement et confusion, les chercheurs se divisèrent en deux camps distincts : les développeurs matériels et les développeurs logiciels. Les deux groupes, plus jeunes que leurs prédécesseurs, débordaient de passion et d'idées créatives, mais poursuivaient des recherches sur des voies séparées. L'équipe logicielle fit avancer ses théories de manière régulière et progressive, tandis que les ingénieurs matériels, enhardis par des succès successifs, prirent des risques audacieux et inventèrent le transistor.

Jusqu'à ce stade, le développement technologique pouvait encore être contrôlé dans une certaine mesure, et le grand public restait ignorant de ces innovations sous-jacentes. Cependant, cette situation ne devait pas durer et aboutit finalement à un tournant inévitable. Trompés par l'hypothèse naïve que limiter la commercialisation pouvait ralentir l'évolution technologique et ramener la société à des temps plus simples, les marchés de consommation de masse ouvrirent leurs portes aux produits de l'industrie électronique, formant un cycle d'offre et de demande indissociable. La chute des prix des composants rendit le matériel électronique accessible à un vaste public, et la roue de l'innovation s'accéléra de manière incontrôlable...

Les premiers circuits intégrés et microprocesseurs généralistes apparurent peu après, entraînant une baisse encore plus forte des prix des ordinateurs et autres équipements électroniques. Les dispositifs de calcul devinrent largement disponibles à l'achat partout, bouclant un autre cycle de développement. Les citoyens ordinaires eurent accès aux ordinateurs personnels, marquant le début officiel de l'ère informatique...

Pendant que cette révolution technologique se déroulait, les passionnés d'électronique et les ingénieurs professionnels – également divisés en groupes matériel et logiciel et protégés par un anonymat relatif – continuèrent à perfectionner leurs projets jour et nuit. Finalement, une question cruciale émergea au sein de la communauté : pourquoi ne pas concevoir un circuit intégré universel ? Une puce reprogrammable à faible coût, déployable dans tous les domaines de l'électronique, intégrée dans n'importe quel équipement ou système selon les besoins. À ce stade, la technologie de fabrication et la demande du marché étaient suffisamment mûres pour soutenir une telle création. Il n'y avait aucune raison de se retenir. Les concepts de conception matérielle et logicielle convergèrent, et les ingénieurs finalisèrent l'architecture de la toute première puce intégrée, qu'ils nommèrent MICROCONTRÔLEUR (MCU).

L'invention du microcontrôleur révolutionna toute l'industrie des systèmes embarqués, mais cette capacité programmable sans précédent créa également une demande urgente de protection de la propriété intellectuelle. Aujourd'hui, une grande partie de la conception matérielle des MCU modernes se concentre sur des mécanismes de sécurité intégrés, tels que les bits de verrouillage et les fusibles matériels, qui bloquent toute lecture externe non autorisée du code firmware interne. Néanmoins, comme ce chapitre le détaillera, aussi robustes que semblent les fonctionnalités de sécurité natives d'un MCU, elles deviennent vulnérables au rétro-ingénierie une fois qu'un attaquant a un accès physique à la puce. Les attaquants adoptent couramment des approches techniques incluant le décapage de la puce, la micro-sondage laser et l'injection de fautes pour désactiver les verrous de sécurité et extraire des images complètes du firmware. La course perpétuelle entre les concepteurs de sécurité et les rétro-ingénieurs malveillants a continuellement fait progresser les mécanismes de protection, évoluant de simples bits de verrouillage à des accélérateurs de chiffrement complexes sur puce. Maîtriser ces principes de sécurité est aussi essentiel que d'apprendre l'architecture de base des MCU. Un microcontrôleur dépourvu de protection suffisante risque une duplication complète du code et un clonage fonctionnel total. Ce chapitre introductif pose les bases fondamentales pour une plongée approfondie dans les blocs matériels et logiciels qui confèrent aux microcontrôleurs une extrême polyvalence – ainsi que leurs faiblesses de sécurité inhérentes.

1.1 Que sont les microcontrôleurs et à quoi servent-ils ?

Malgré leurs performances fonctionnelles puissantes, les microcontrôleurs suivent une logique de conception centrale intrinsèquement simple. Ils sont assemblés à partir de composants électroniques de base matures et hautes performances selon un flux de travail standardisé décrit ci-dessous :

  1. Un processeur généraliste simplifié agit comme le "cerveau" de calcul central du système embarqué.
  2. Les fabricants intègrent des périphériques supplémentaires selon le positionnement du produit, notamment différentes tailles de blocs de mémoire, convertisseurs analogique-numérique, temporisateurs matériels, broches d'entrée/sortie générales multicanaux, etc.
  3. La totalité du die du circuit intégré est encapsulée dans des boîtiers standard de l'industrie pour un déploiement physique.
  4. Des chaînes d'outils de programmation légères sont développées pour contrôler le MCU, avec une courbe d'apprentissage douce accessible à la plupart des débutants.

Sur la base de ce modèle de conception standardisé, d'innombrables variantes de microcontrôleurs ont été publiées, devenant silencieusement des compagnons invisibles intégrés dans presque tous les équipements modernes. Leur simplicité inégalée et leur programmabilité flexible ont dominé la conception embarquée pendant des décennies. Si vous envisagez de développer un produit embarqué basé sur des MCU, gardez à l'esprit que presque tous les scénarios d'application courants ont déjà été explorés par des ingénieurs précédents, qui ont soit livré des solutions finalisées, soit effectué une vérification expérimentale préliminaire.

Trois avantages clés expliquent l'adoption généralisée et le succès commercial des microcontrôleurs :

  • Les circuits périphériques entièrement intégrés à l'intérieur des MCU peuvent contrôler indépendamment une large gamme de processus physiques et d'équipements – soit de manière autonome, soit via des périphériques d'entrée/sortie externes tels que des interrupteurs, boutons-poussoirs, capteurs environnementaux, écrans LCD et modules relais. Les scénarios d'application typiques couvrent les systèmes d'automatisation industrielle, la régulation de puissance, la surveillance de température et le réglage des performances des moteurs à combustion interne.
  • Les coûts unitaires ultra-bas permettent d'intégrer des MCU dans des appareils grand public qui n'étaient auparavant pas rentables à automatiser. Grâce à cette accessibilité, le marché mondial est inondé de machines automatiques à bas prix et de toutes sortes d'appareils électroménagers "intelligents".
  • Le seuil de programmation est extrêmement bas. Les développeurs n'ont besoin que d'un ordinateur personnel standard (avec un logiciel de développement léger et facile à apprendre) et d'un programmateur matériel simple pour compiler et télécharger des binaires de firmware exécutables directement dans le microcontrôleur.

Si vous êtes passionné par l'ingénierie électronique, apprendre à maîtriser et manipuler la logique matérielle des microcontrôleurs est une compétence essentielle à acquérir.

Mécanisme de fonctionnement d'un microcontrôleur

Bien qu'il existe des milliers de familles de microcontrôleurs distinctes, ainsi que des millions de programmes firmware personnalisés écrits exclusivement pour eux, tous les MCU partagent une logique de fonctionnement fondamentale identique. Une fois que vous maîtrisez le flux de travail d'un modèle, vous pouvez vous adapter à presque toutes les autres variantes. La séquence de fonctionnement standard sur l'ensemble du cycle de vie d'un microcontrôleur est la suivante :

  1. L'alimentation est coupée et tous les circuits restent inactifs. Les binaires du firmware précompilé sont stockés dans la mémoire non volatile du MCU, sans aucune indication visible de l'exécution à venir...
  2. L'alimentation est mise sous tension et une initialisation à grande vitesse démarre immédiatement. L'unité de contrôle logique interne prend le contrôle total du système, mettant hors tension tous les circuits périphériques à l'exception du cristal oscillateur pendant la préparation au démarrage. Cette phase d'initialisation dure plusieurs millisecondes.
  3. La tension d'alimentation se stabilise à sa valeur maximale nominale et l'oscillateur atteint une fréquence d'horloge fixe et stable. Les registres de fonctions spéciales (SFR) sont initialisés avec des valeurs binaires prédéfinies reflétant l'état par défaut de tous les circuits internes, tandis que toutes les broches d'E/S générales passent par défaut en mode entrée. La puce entière commence à fonctionner de manière synchronisée rythmée par des impulsions d'horloge continues, tous les événements ultérieurs étant mesurés en microsecondes et nanosecondes.
  4. Le registre du compteur de programme se réinitialise à l'adresse zéro. L'instruction machine stockée à cette adresse mémoire est lue et envoyée au décodeur d'instructions, qui identifie la commande et déclenche une exécution matérielle immédiate.
  5. La valeur du compteur de programme s'incrémente d'une unité d'adresse, et le cycle complet de lecture-décodage-exécution se répète en continu – atteignant des vitesses de plusieurs millions de cycles par seconde.
Diagramme d'architecture globale du microcontrôleur

Pendant le fonctionnement normal, le microcontrôleur lit les instructions machine séquentiellement depuis sa mémoire programme interne. Cependant, une fois que le bit de verrouillage de sécurité est programmé, les interfaces de débogage externes et de lecture de mémoire sont définitivement désactivées, empêchant les programmateurs tiers d'extraire le binaire complet du firmware. Ce mécanisme de verrouillage constitue la principale barrière de sécurité matérielle, mais il n'est pas imperméable aux techniques avancées de rétro-ingénierie. Par exemple, des acteurs malveillants peuvent effectuer un décapage complet de la puce pour exposer le die en silicium, puis utiliser un équipement à faisceau d'ions focalisé pour modifier physiquement l'état des fusibles de sécurité, déverrouillant complètement la puce protégée. Après avoir contourné le verrou, les attaquants peuvent extraire l'intégralité de la mémoire programme flash et récupérer la logique complète du code source propriétaire. L'extraction non autorisée de firmware pose de graves risques commerciaux pour les industries qui dépendent d'algorithmes embarqués confidentiels. Pour atténuer ces menaces, les fabricants de semi-conducteurs mettent en œuvre des stratégies de défense multicouches, notamment le stockage EEPROM chiffré et des capteurs de détection d'effraction physique. Même ainsi, le flux de travail d'exécution séquentielle décrit ci-dessus reste le principe de fonctionnement fondamental de chaque microcontrôleur. Comprendre ce cycle central constitue la première étape critique pour soit mettre en œuvre une protection de sécurité MCU robuste, soit mener des opérations légitimes de récupération de firmware forensique.

1.2 Modules internes principaux d'un microcontrôleur

Comme démontré ci-dessus, toutes les opérations internes du MCU s'exécutent à des vitesses d'horloge extrêmement élevées suivant un flux logique simplifié. Cependant, les microcontrôleurs manqueraient de valeur pratique sans des circuits périphériques dédiés intégrés aux côtés du processeur central. Les sections suivantes détaillent la fonction de chaque module interne clé.

Mémoire morte (ROM / Mémoire Flash)

La mémoire morte (ROM) est une catégorie de stockage non volatile conçue pour stocker en permanence le firmware exécutable. La taille maximale du programme pris en charge est déterminée par la capacité de la ROM. Le stockage ROM peut être intégré sur la puce du microcontrôleur ou implémenté sous forme de puce externe discrète, avec des compromis pour chaque configuration. Les puces ROM externes réduisent le coût de base du MCU et prennent en charge un espace programme beaucoup plus grand, mais consomment plusieurs broches d'E/S générales pour la connexion au bus mémoire, limitant ainsi les interfaces périphériques disponibles. La ROM interne sur puce offre une capacité maximale plus petite et augmente le coût global du composant, mais préserve toutes les broches d'E/S pour connecter des capteurs et actionneurs externes. Les capacités ROM standard vont de 512 octets à 64 kilo-octets.

Les microcontrôleurs modernes remplacent presque universellement la ROM masquée traditionnelle par de la mémoire flash, permettant des mises à jour du firmware sur le terrain sans équipement de programmation d'usine spécialisé. Cette flexibilité de reprogrammation introduit simultanément de nouvelles vulnérabilités de sécurité. La plupart des MCU intègrent un bit de verrouillage dédié qui, une fois programmé, bloque tout accès en lecture au firmware via les interfaces de programmation externes – une protection essentielle pour la propriété intellectuelle. Ce mécanisme de verrouillage n'est toutefois pas incassable. Les attaquants exploitent fréquemment les perturbations de l'alimentation électrique ou une distorsion précise du timing d'horloge pour contourner les restrictions de verrouillage et extraire l'intégralité du code programme. Des protections supplémentaires par fusibles matériels sont déployées sur de nombreuses puces haute sécurité, qui déconnectent physiquement le chemin de lecture de la mémoire ; de telles conceptions nécessitent un décapage complet de la puce et une micro-sondage du silicium pour être compromises. Si les propriétaires légitimes de l'appareil perdent leur code source original, la récupération du firmware à partir d'un matériel complètement verrouillé devient presque impossible à moins qu'il n'existe des portes dérobées de test d'usine non documentées. Par conséquent, distinguer les différents types de mémoire et analyser leurs fonctionnalités de sécurité intégrées est essentiel tant pour les développeurs embarqués que pour les analystes de sécurité matérielle. La ROM externe hors puce est triviale à lire à l'aide d'analyseurs logiques standards, tandis que la mémoire flash sur puce exige des techniques de rétro-ingénierie physique sophistiquées pour contourner les couches de protection natives.

Mémoire vive (RAM)

La mémoire vive (RAM) sert de stockage volatile temporaire pour les données d'exécution et les résultats de calcul intermédiaires générés pendant le fonctionnement du MCU. Toutes les données stockées dans la RAM sont complètement effacées dès que l'alimentation est coupée. À titre d'illustration : si le firmware exécute une opération d'addition arithmétique, un registre RAM désigné agit comme un conteneur temporaire pour le résultat cumulé. La capacité RAM générale plafonne généralement à plusieurs kilo-octets pour les familles de microcontrôleurs courantes.

Bien qu'elle soit volatile et incapable de conserver des données sans alimentation constante, la RAM reste une cible de choix pour le vol de données pendant l'exécution active de l'appareil. Si un attaquant peut figer l'exécution du MCU et lire directement le contenu de la RAM, il peut extraire des clés cryptographiques sensibles ou des valeurs de calcul intermédiaires stockées temporairement en mémoire. De nombreux microcontrôleurs sécurisés implémentent des verrous matériels qui bloquent l'accès des débogueurs externes à la RAM pendant l'exécution normale du programme. Si un attaquant désactive ce verrou via une injection de fautes matérielles, un vidage complet de la RAM et une analyse des données deviennent réalisables. Ce risque pousse les conceptions embarquées axées sur la sécurité à adopter des contre-mesures, notamment l'exécution cryptographique en temps constant et des routines de mise à zéro automatique de la mémoire pour minimiser les données sensibles exposées. Combinée à la mémoire non volatile EEPROM, la RAM conserve des paramètres d'étalonnage critiques et des jetons de sécurité uniques qui peuvent être entièrement dupliqués après une compromission réussie de la puce. Une récupération forensique complète du système nécessite l'analyse à la fois du firmware ROM et de l'état de la RAM à l'exécution, en particulier lorsque les vidages flash bruts manquent de contexte pour la logique dynamique d'exécution.

Mémoire programmable effaçable électriquement (EEPROM)

L'EEPROM est un périphérique de stockage non volatile spécialisé qui n'est pas inclus sur tous les modèles de microcontrôleurs. Elle prend en charge la modification en lecture/écriture en circuit pendant l'exécution active du programme (similaire à la RAM) tout en conservant toutes les données stockées indéfiniment après une coupure de courant (similaire à la ROM). Les concepteurs déploient couramment l'EEPROM pour persister des paramètres générés à l'exécution, notamment les compensations d'étalonnage des capteurs, les codes d'autorisation d'accès et les compteurs d'utilisation cumulés qui doivent survivre aux cycles d'alimentation. La principale limitation de l'EEPROM est sa latence d'écriture lente, avec des opérations de programmation uniques mesurées en millisecondes.

En tant que stockage non volatile accessible en écriture, l'EEPROM figure parmi les cibles prioritaires pour le rétro-ingénierie malveillant. Si le verrouillage de sécurité global du MCU ne s'étend pas à la région mémoire EEPROM, les attaquants peuvent lire toutes les données de configuration stockées et cloner les ensembles de paramètres de l'appareil. Les adversaires exploitent également la fonctionnalité d'écriture EEPROM pour modifier intentionnellement les valeurs stockées, désactivant les contrôles de validation de sécurité intégrés ou modifiant les seuils de limitation de performance. La cohérence de l'implémentation des bits de verrouillage varie considérablement selon les fabricants de microcontrôleurs, et de nombreux schémas de sécurité ne parviennent pas à protéger entièrement les blocs mémoire EEPROM. Les flux de travail complets de rétro-ingénierie incluent toujours des vidages complets de la carte mémoire complète – EEPROM incluse – pour reconstruire la logique complète du système embarqué. Un exemple concret classique est celui des imprimantes à jet d'encre grand public, qui stockent les données de suivi du niveau d'encre dans l'EEPROM ; les attaquants répliquent les données de cette région mémoire pour contourner les restrictions de recharge et permettre une utilisation illimitée de l'encre. Cela démontre à la fois les risques d'exploitation malveillante du stockage EEPROM exposé et les cas d'utilisation légitimes de récupération de données de configuration d'appareil perdues. Le matériel embarqué haute sécurité atténue ces menaces en chiffrant toutes les données EEPROM ou en associant les paramètres stockés à un identifiant matériel unique à la puce pour empêcher le clonage de l'appareil.

Schéma bloc complet du microcontrôleur

Registres de fonctions spéciales (SFR)

Les registres de fonctions spéciales occupent un espace d'adressage réservé dans la carte mémoire RAM globale du MCU. Leurs affectations fonctionnelles individuelles sont définitivement définies par le fabricant du semi-conducteur et ne peuvent pas être reconfigurées par les développeurs de firmware. Chaque bit à l'intérieur d'un SFR est câblé pour contrôler un périphérique matériel interne dédié – tels que les convertisseurs analogique-numérique, les modules de communication série et les ports d'E/S généraux. Modifier toute valeur binaire altère directement l'état de fonctionnement du circuit interne correspondant. Par exemple, écrire un 0 ou un 1 logique dans le SFR de configuration de port bascule la broche physique correspondante entre les modes d'entrée et de sortie ; chaque bit de registre gouverne une broche de puce dédiée.

D'un point de vue sécurité matérielle, les bits de contrôle de sécurité critiques sont fréquemment mappés sur des SFR dédiés. Un registre de sécurité dédié peut stocker l'état du bit de verrouillage qui active ou désactive les autorisations de lecture de mémoire externe. Si un attaquant manipule ce SFR via des vulnérabilités logicielles ou des attaques par glitch matériel, il peut déverrouiller complètement la puce sans nécessiter de décapage physique. Des SFR supplémentaires gèrent les interfaces de débogage matériel JTAG et SWD ; un verrouillage insuffisant de ces registres permet aux sondes de débogage externes de capturer des vidages mémoire complets. Pour cette raison, un bootloader personnalisé sécurisé valide l'état des SFR liés à la sécurité avant d'exécuter le code applicatif utilisateur. Dans le domaine du rétro-ingénierie, l'étape d'analyse initiale consiste à cartographier toutes les adresses SFR et à documenter leur interaction avec les fusibles de sécurité matériels. L'écriture de valeurs binaires ciblées dans ces registres peut désactiver les protections de verrouillage et permettre une extraction complète du firmware, constituant la base de l'analyse de vulnérabilité ultérieure. Récupérer la fonctionnalité d'un microcontrôleur complètement verrouillé repose souvent sur l'identification de vecteurs de manipulation SFR exploitables.

Compteur de programme (PC)

Le compteur de programme sert de pointeur d'exécution central qui dirige toutes les opérations du firmware, stockant l'adresse mémoire de la prochaine instruction machine à traiter. Après chaque exécution d'instruction, la valeur du PC s'incrémente d'une unité d'adresse, permettant une exécution séquentielle du programme correspondant au flux du code source écrit. Cependant, la valeur du compteur de programme peut être écrasée à n'importe quelle étape d'exécution, déclenchant un saut inconditionnel vers une nouvelle adresse mémoire – ce mécanisme implémente les appels de sous-routines et la logique de branchement conditionnel. Après l'exécution de la cible de saut, le PC reprend son incrémentation séquentielle régulière (+1, +1, +1...) à nouveau.

Le compteur de programme est un vecteur d'attaque principal pour les exploits d'injection de fautes conçus pour rediriger le flux d'exécution du programme. En introduisant des fautes matérielles contrôlées ou une corruption intentionnelle de bits dans le registre PC, les attaquants forcent le MCU à exécuter un code arbitraire non autorisé, qui peut ensuite désactiver les verrous de sécurité ou vider l'intégralité du contenu de la mémoire flash. Cette technique d'injection de fautes combine des pointes de tension précises ou des glitches de signal d'horloge avec un décapage de la puce pour cibler des fenêtres de timing critiques lors des vérifications de validation de sécurité. Dans la recherche en rétro-ingénierie, documenter le comportement du PC sous des conditions d'horloge ou d'alimentation déformées éclaire le développement de contre-mesures de sécurité matérielle. De nombreux microcontrôleurs intègrent un périphérique de temporisation de surveillance (watchdog) qui déclenche une réinitialisation complète du système si le compteur de programme référence une adresse mémoire invalide hors limites, bloquant certaines variantes d'attaques par glitch. Si le périphérique watchdog reste désactivé dans le firmware, les attaquants peuvent glitcher le registre PC à plusieurs reprises jusqu'à contourner les verrous de sécurité et extraire les binaires complets du firmware.

Unité centrale de traitement (CPU)

Comme son nom l'indique, l'unité centrale de traitement supervise et coordonne toutes les opérations internes du microcontrôleur, fonctionnant indépendamment de l'intervention directe du firmware utilisateur. La CPU intègre plusieurs sous-modules, dont les trois composants les plus critiques sont détaillés ci-dessous :

  • Décodeur d'instructions : Ce sous-circuit matériel analyse les instructions machine au niveau du programme et active la logique de contrôle périphérique correspondante en fonction des données de commande décodées. L'ensemble d'instructions pris en charge diffère selon chaque famille de produits microcontrôleurs, définissant la capacité de calcul complète de la puce.
  • Unité arithmétique et logique (ALU) : Exécute tous les calculs mathématiques et opérations logiques binaires sur les valeurs de données stockées.
  • Accumulateur : Un registre de fonctions spéciales dédié étroitement couplé au fonctionnement de l'ALU, agissant comme un espace de travail temporaire dédié pour toutes les données actives subissant des opérations arithmétiques ou de décalage. Il stocke également les résultats de calcul pour les étapes de traitement ultérieures. Un SFR complémentaire nommé Mot d'état du programme (PSW) fonctionne aux côtés de l'accumulateur, signalant en continu l'état en temps réel de la valeur numérique stockée – tels que les indicateurs de signe positif/négatif et les indicateurs de débordement arithmétique.

Référence de terminologie binaire de base
Bit : Une unité binaire fondamentale souvent déroutante pour les débutants en électronique. En termes matériels pratiques, un bit indique la présence ou l'absence de tension sur une piste conductrice. Si la tension atteint le seuil logique haut, la broche correspondante lit un 1 logique (valeur binaire = 1) ; si le conducteur mesure 0V, la broche lit un 0 logique (valeur binaire = 0). Les définitions théoriques décrivent un bit comme un chiffre binaire unique, avec seulement deux valeurs discrètes possibles : 0 ou 1.

La CPU constitue la frontière de sécurité centrale de tout système embarqué à microcontrôleur, et son architecture interne détermine la vulnérabilité globale de la puce. De nombreuses conceptions de CPU intègrent des circuits de débogage matériel dédiés qui peuvent être activés via des séquences de déclenchement standardisées, accordant aux sondes externes un accès complet en lecture aux régions mémoire internes. Si les fabricants ne verrouillent pas définitivement ces interfaces de débogage via la programmation de fusibles, les attaquants peuvent facilement vider l'intégralité de la mémoire programme flash. Les fournisseurs de semi-conducteurs implémentent des fusibles de verrouillage pour désactiver les voies de débogage après la programmation du firmware, mais une configuration incomplète des fusibles laisse la CPU exposée aux sondes externes. De plus, toutes les opérations de calcul de l'ALU et de l'accumulateur génèrent des signaux physiques de fuite mesurables – notamment des modèles de consommation de courant variables et des émissions de rayonnement électromagnétique. Ces signaux de fuite peuvent être capturés de manière non invasive pour récupérer des clés cryptographiques embarquées via des attaques par analyse de puissance et par émission électromagnétique, sans nécessiter de décapage de la puce. Le firmware embarqué sécurisé doit donc prendre en compte à la fois les protections logiques de verrouillage mémoire et les risques de fuite physique par canaux auxiliaires. Récupérer des clés de chiffrement confidentielles à partir de MCU verrouillés combine généralement de multiples méthodologies d'attaque : analyse des traces de puissance, injection de fautes d'horloge et décapage physique pour contourner les verrous de sécurité natifs et extraire les données sensibles stockées.

Ports d'entrée/sortie généraux (ports E/S)

Les microcontrôleurs offrent une fonctionnalité embarquée pratique via des connexions physiques à des périphériques externes. Chaque MCU intègre plusieurs banques de registres dédiées, appelées ports E/S, chacune mappée directement sur les broches externes du boîtier de la puce.

Diagramme des ports d'E/S générales

Le terme "port d'entrée/sortie" provient de la double fonctionnalité reconfigurable de chaque broche, dont le mode de fonctionnement peut être dynamiquement commuté selon les besoins du développeur. Ces registres de port sont uniques parmi toutes les ressources mémoire internes du MCU : leur état logique en temps réel peut être directement mesuré avec un voltmètre standard !

Les ports E/S servent d'interface physique principale reliant le microcontrôleur au monde extérieur, et ils représentent simultanément une surface d'attaque exploitable majeure. Par exemple, les broches en mode entrée laissées électriquement flottantes sont susceptibles d'être perturbées par des interférences de signaux externes générant des glitches logiques intentionnels, corrompant l'état des registres internes. Les attaquants appliquent également des surtensions sur les broches E/S pour endommager les circuits périphériques et déclencher des dysfonctionnements qui désactivent la logique de verrouillage de sécurité. De nombreux microcontrôleurs réutilisent les mêmes broches E/S physiques à la fois pour le fonctionnement normal et le mode de programmation d'usine ; si le bit de verrouillage de sécurité reste non programmé, des programmateurs matériels externes peuvent lire directement l'intégralité de la mémoire flash via ces broches partagées. Cela rend obligatoire la programmation complète du bit de verrouillage après le téléchargement du firmware pour désactiver les interfaces de programmation non authentifiées. Dans les flux de travail d'extraction de firmware, l'écoute passive des signaux des broches E/S actives pendant le fonctionnement normal de l'appareil révèle des données transmises sensibles, notamment les clés de chiffrement et les paramètres de configuration de l'appareil. La combinaison des traces de communication E/S capturées avec les vidages de mémoire interne permet aux attaquants de répliquer complètement le comportement fonctionnel complet du matériel embarqué cible.

Oscillateur système

Schéma du circuit oscillateur

Les signaux d'impulsions uniformes continus générés par l'oscillateur système synchronisent tous les circuits internes du MCU pour fonctionner en parfaite synchronisation. Les circuits oscillateurs utilisent couramment des composants à cristal de quartz ou des résonateurs céramiques pour une stabilisation précise de la fréquence, bien que des configurations oscillateur RC simples sans composants résonants externes soient également prises en charge pour des applications à bas coût et faible précision. Un détail critique à noter : les instructions machine ne s'exécutent pas à la fréquence d'horloge brute de l'oscillateur, mais à une vitesse divisée plus lente. Chaque exécution d'instruction se décompose en plusieurs cycles d'horloge discrets. Certaines architectures de microcontrôleurs utilisent un nombre de cycles fixe identique pour chaque instruction, tandis que d'autres implémentent des nombres de cycles variables dépendant de la complexité de la commande. À titre de comparaison illustrative : un système équipé d'un oscillateur à cristal de quartz de 20MHz n'exécutera pas des instructions individuelles en 50 nanosecondes ; la latence réelle des instructions varie de 200ns à 800ns, déterminée entièrement par la famille d'architecture MCU spécifique !

La fréquence d'horloge de l'oscillateur régit le timing de toutes les opérations internes de la puce, et la distorsion précise de l'horloge constitue la base des principales techniques d'attaque par injection de fautes. En décalant temporairement la fréquence d'horloge de fonctionnement ou en injectant des impulsions de glitch étroites dans le signal d'horloge, les attaquants forcent la CPU à mal décoder les instructions ou à sauter entièrement les vérifications de validation de sécurité critiques. Cette méthode déverrouille les microcontrôleurs protégés sans nécessiter de modification physique des fusibles de sécurité via décapage. De plus, le circuit oscillateur génère souvent la tension de programmation élevée requise pour les opérations d'écriture EEPROM ; des signaux d'horloge instables peuvent déclencher des cycles d'écriture mémoire involontaires qui désactivent les bits de verrouillage programmés. Récupérer des appareils brickés ou complètement verrouillés nécessite parfois de contourner le circuit oscillateur natif pour forcer le MCU dans des modes de test d'usine non documentés. Le matériel professionnel de rétro-ingénierie intègre des modules de génération de glitches d'horloge dédiés pour injecter des distorsions de signal minutées avec précision à des points ciblés du flux d'exécution du firmware. Une compréhension approfondie des caractéristiques du circuit oscillateur est essentielle tant pour les ingénieurs renforçant la sécurité des systèmes embarqués que pour les chercheurs développant des méthodologies d'exploitation matérielle.

Temporisateurs & compteurs matériels

La quasi-totalité des firmwares embarqués s'appuie sur ces mini-périphériques de chronométrage matériel pendant l'exécution normale. Les temporisateurs et compteurs sont implémentés sous forme de registres de fonctions spéciales dédiés de 8 ou 16 bits, dont la valeur stockée s'incrémente automatiquement à chaque impulsion d'horloge reçue. Une fois que la valeur du registre atteint sa limite maximale de débordement, le périphérique déclenche un signal d'interruption matérielle vers la CPU.

Si le registre temporisateur utilise l'oscillateur à quartz interne comme source d'horloge, les ingénieurs peuvent mesurer avec précision le temps écoulé entre deux événements distincts : soustraire la valeur de départ T1 de la valeur de fin T2 pour calculer la durée totale mesurée. Si le temporisateur reçoit des signaux d'impulsions d'une source d'entrée physique externe, le périphérique se reconfigure en compteur d'événements plutôt qu'en temporisateur de mesure de temps.

Ce résumé ne couvre que la logique de fonctionnement fondamentale de base ; l'implémentation pratique des temporisateurs réels intègre des fonctionnalités configurables bien plus complexes.

Aperçu fonctionnel du temporisateur/compteur

Référence de définition des registres binaires
Registre / cellule mémoire : Un circuit matériel capable de stocker un octet complet de données d'état binaires. Au-delà des 8 bits de données accessibles aux développeurs de firmware, chaque registre inclut également des bits d'adressage dédiés pour le mappage mémoire. Deux règles de classification clés s'appliquent :

  • Toutes les cellules mémoire du stockage ROM et des registres RAM générales sont fonctionnellement identiques sans étiquettes prédéfinies fixes. Les développeurs peuvent attribuer des noms de variables personnalisés à n'importe quelle adresse mémoire pendant la programmation pour simplifier la lisibilité du code.
  • Chaque registre de fonctions spéciales (SFR) porte une étiquette unique assignée par le fabricant correspondant à sa fonction matérielle dédiée fixe, avec des conventions de nommage différentes selon les familles de microcontrôleurs.

Les temporisateurs matériels sont fréquemment utilisés pour implémenter des mécanismes de sécurité clés, notamment les réinitialisations de surveillance (watchdog) et la logique d'authentification limitée dans le temps. Cependant, ces périphériques sont également vulnérables à une manipulation adverse. Par exemple, les attaquants modifiant les valeurs du prédiviseur du temporisateur ou du registre de comparaison peuvent étendre la fenêtre d'exécution disponible pour les attaques par injection de glitch ou contourner les verrous de sécurité basés sur des délais. Certaines familles de microcontrôleurs utilisent un temporisateur matériel dédié pour contrôler la fenêtre de délai d'activation du verrouillage post-programmation ; geler ou accélérer ce temporisateur peut empêcher l'activation correcte du bit de verrouillage de sécurité. Dans l'analyse de rétro-ingénierie, la surveillance continue de l'état des registres temporisateurs révèle la séquence temporelle exacte de toutes les branches de code critiques pour la sécurité, permettant aux attaquants de synchroniser parfaitement les signaux d'injection de fautes. Les vidages mémoire complets capturant l'intégralité de la configuration des périphériques temporisateurs permettent aux ingénieurs de répliquer le comportement temporel précis du matériel cible original pour des dispositifs clonés. Les flux de travail de récupération forensique du firmware reposent fortement sur la reconstruction des séquences d'horloge originales des temporisateurs pour contourner les verrous de sécurité imposés par le matériel.

Temporisateur de surveillance indépendant (Watchdog)

Le périphérique Watchdog se connecte à un oscillateur RC interne totalement isolé, fonctionnant indépendamment de la source d'horloge principale du système.

Lorsque la fonction watchdog est activée, un comptage continu sans réinitialisation déclenchera une réinitialisation matérielle complète du microcontrôleur une fois que le temporisateur atteint son seuil de débordement, redémarrant l'exécution du firmware depuis l'adresse mémoire initiale. Le principe de fonctionnement central repose sur des commandes de rafraîchissement périodiques structurées placées stratégiquement dans les boucles principales d'exécution du programme.

Si les développeurs insèrent des instructions de réinitialisation du watchdog à des intervalles appropriés dans toutes les boucles principales du firmware, le compteur watchdog n'atteindra jamais le débordement, et le déroulement normal du programme se poursuit sans interruption.

En cas de défauts d'exécution inattendus – le plus souvent des interférences de bruit électrique dans les environnements industriels embarqués – le compteur de programme peut stagner indéfiniment dans une adresse mémoire invalide sans issue possible. Sans signaux de rafraîchissement réguliers du watchdog, la valeur du compteur continue de s'incrémenter jusqu'au débordement, déclenchant automatiquement une réinitialisation complète de la puce pour rétablir un fonctionnement stable !

Le temporisateur watchdog est une sauvegarde de fiabilité système vitale, mais il crée des obstacles pour les attaquants en rétro-ingénierie. Toute tentative de suspendre l'exécution du MCU pour sonder la mémoire déclenchera une réinitialisation matérielle initiée par le watchdog, empêchant des opérations de lecture mémoire complètes stables. Néanmoins, les attaquants peuvent contourner cette restriction soit en chronométrant précisément l'injection de fautes pour éviter le débordement du watchdog, soit en exploitant des vulnérabilités logicielles pour désactiver entièrement le périphérique watchdog, déverrouillant ainsi la puce pour un vidage mémoire complet. Les variantes de microcontrôleurs haute sécurité intègrent des protections par bits de verrouillage qui bloquent les commandes de désactivation du watchdog via le firmware, ajoutant une barrière de sécurité matérielle supplémentaire. Lors d'attaques d'extraction de firmware, les adversaires peuvent injecter des glitches d'horloge pour sauter intentionnellement des instructions de rafraîchissement watchdog critiques, forçant une réinitialisation matérielle contrôlée qui accorde un accès temporaire à des modes de récupération de bootloader non documentés. La récupération forensique réussie d'une puce nécessite une analyse complète des caractéristiques de temporisation du watchdog pour éviter des réinitialisations involontaires perturbant les flux de capture mémoire.

Circuits de gestion d'alimentation sur puce

Deux modules matériels critiques liés à l'alimentation sont intégrés dans les sous-systèmes d'alimentation des microcontrôleurs :

Schéma du circuit de réinitialisation en cas de baisse de tension

Détection de baisse de tension (Brown-Out) : Un état d'exécution dangereux déclenché lors de cycles de mise hors tension ou d'une chute soutenue de la tension d'alimentation causée par des interférences électriques. Différents circuits périphériques internes du MCU fonctionnent à des seuils de tension minimaux distincts ; des niveaux d'alimentation instables conduisent à un comportement indéfini et incontrôlé de la puce. Pour atténuer ce risque, la plupart des microcontrôleurs intègrent un matériel de réinitialisation natif en cas de baisse de tension qui déclenche instantanément une réinitialisation complète du système dès que la tension d'alimentation tombe en dessous du seuil de fonctionnement sûr prédéfini.

Broche de réinitialisation maître (MCLR) : Broche externe dédiée pour la réinitialisation manuelle complète de la puce, déclenchée en appliquant des niveaux de tension logique haut ou bas selon l'architecture MCU spécifique. Si le microcontrôleur cible ne dispose pas de circuit intégré de détection de baisse de tension, les concepteurs peuvent connecter un matériel externe discret de réinitialisation en cas de baisse de tension à cette broche MCLR pour reproduire la fonctionnalité de sécurité.

La manipulation de l'alimentation électrique représente l'un des vecteurs d'attaque par injection de fautes les plus largement déployés pour contourner les protections de verrouillage des MCU. Des glitches de tension de courte durée (sous-tension ou surtension) perturbent la logique des circuits internes, forçant la CPU à exécuter des séquences d'instructions invalides qui désactivent les barrières de verrouillage de sécurité. Bien que les circuits intégrés de détection de baisse de tension déclenchent des réinitialisations automatiques lors de conditions de sous-tension prolongées, des glitches de tension transitoires ultra-rapides peuvent échapper à la détection et permettre un contournement réussi du verrou. De plus, la broche de réinitialisation MCLR sert également de signal de déclenchement pour entrer en mode de programmation d'usine ; des broches de réinitialisation non protégées permettent aux attaquants de forcer des réinitialisations de la puce et d'initier une lecture mémoire avant que le bit de verrouillage de sécurité ne s'active complètement après le démarrage. Pour des attaques physiques avancées, le décapage complet de la puce donne un accès direct aux rails d'alimentation internes via des sondes, permettant une manipulation ciblée de la tension des circuits de fusibles de sécurité. La récupération forensique légitime du firmware repose souvent sur des glitches d'alimentation précis et contrôlés pour induire des défauts matériels prévisibles qui désactivent définitivement les protections de verrouillage de la mémoire.

Périphériques de communication série

Schéma de l'interface de communication série

La transmission de données parallèles via des ports d'E/S générales offre des performances optimales pour les communications à courte distance pouvant atteindre plusieurs mètres. Pour l'échange de données entre dispositifs sur de plus longues distances, le câblage parallèle devient impraticable, faisant de la communication série la solution standard privilégiée par l'industrie.

Presque tous les microcontrôleurs modernes intègrent plusieurs périphériques de communication série matériels dédiés en tant que périphériques standard sur puce. La sélection du protocole série approprié dépend de quatre critères de conception fondamentaux :

  • Nombre total de dispositifs externes nécessitant un échange de données bidirectionnel avec le MCU
  • Débit de transmission de données obligatoire et latence
  • Distance de séparation physique entre les nœuds matériels communicants
  • Exigences de prise en charge d'une opération simultanée en duplex intégral (émission et réception)

L'exigence fondamentale pour un échange de données série fiable est le strict respect d'un protocole de communication standardisé : un ensemble formel de règles de timing de signal et de trame de données garantissant que les dispositifs récepteurs interprètent correctement les flux de données binaires transmis. Les périphériques matériels des microcontrôleurs automatisent toute la logique de gestion du protocole bas niveau, réduisant la charge de travail du développeur à de simples opérations d'écriture de registre pour les données sortantes et de lecture de registre pour les données entrantes capturées.

Référence de terminologie octet et bit
Octet : Une unité de données standard composée de 8 bits binaires groupés. Si un bit représente un chiffre en base 2, un octet fonctionne comme un nombre binaire à 8 chiffres capable de tous les calculs arithmétiques standards traités dans l'ALU. Les bits individuels d'un octet portent un poids numérique inégal : le bit de poids fort (Most Significant Bit, MSB) à gauche détient la valeur maximale. Le bit de poids faible (Least Significant Bit, LSB) à droite porte le poids minimum. Huit bits binaires forment 256 combinaisons permutationnelles uniques, prenant en charge une représentation numérique décimale allant de 0 à 255 inclus.

Les interfaces de communication série telles que UART, SPI et I2C servent à deux fins : l'échange de données périphériques en cours d'exécution et la programmation d'usine dédiée. Si le bit de verrouillage de sécurité reste non programmé, les attaquants exploitent ces bus série pour extraire les binaires complets du firmware de la mémoire flash sur puce. Même les microcontrôleurs complètement verrouillés restent vulnérables à l'analyse par canaux auxiliaires du trafic de transmission série, exposant des données secrètes intégrées si des protocoles de communication non chiffrés sont utilisés. Les flux de travail standards de rétro-ingénierie commencent par une surveillance passive des lignes de bus série pour rétro-ingénieriser les protocoles de communication propriétaires, suivie de l'injection de commandes de déclenchement personnalisées pour activer des modes de test non documentés qui désactivent les verrous de lecture mémoire. De nombreuses familles de microcontrôleurs hérités incluent des séquences de test d'usine cachées activées par la transmission d'un motif d'octets spécifique via le périphérique UART. Une fois déverrouillée via cette porte dérobée série, l'extraction complète de la mémoire flash est possible sans nécessiter de décapage destructif de la puce. La récupération du firmware à partir de matériel embarqué obsolète dépend souvent entièrement de la découverte de ces commandes de déclenchement série non documentées pour extraire le code binaire propriétaire de manière non invasive.

Fondamentaux de la programmation du firmware

Contrairement aux circuits intégrés analogiques génériques qui ne nécessitent qu'un câblage de composants externes et une mise sous tension pour fonctionner, les microcontrôleurs exigent une programmation de firmware précompilée avant le déploiement. Cette condition préalable représente une barrière d'apprentissage significative qui décourage de nombreux ingénieurs électroniques purs de l'adoption de conceptions basées sur les MCU. La complexité perçue du développement de firmware crée des retards de projet inutiles, car le flux de travail de programmation réel des microcontrôleurs suit une logique intuitive et rationalisée.

Plusieurs langages de programmation bas niveau prennent en charge le développement de firmware pour microcontrôleurs, notamment l'Assembleur, le C standard et le BASIC embarqué, ainsi que leurs variantes de compilateurs respectifs. Le développement de firmware consiste simplement à écrire des instructions machine séquentielles ordonnées selon le flux d'exécution souhaité. Un vaste écosystème d'environnements de développement intégrés (IDE) sous Windows simplifie les flux de travail de développement avec des outils graphiques de débogage et de visualisation mémoire.

Ce manuel privilégie l'enseignement du langage assembleur en raison de son faible encombrement de calcul, de sa vitesse d'exécution maximale et de son contrôle granulaire complet sur chaque signal matériel interne du microcontrôleur.

Graphique de guide du débutant en programmation embarquée
Interruption — Le matériel des microcontrôleurs fonctionne des ordres de grandeur plus rapidement que la plupart des processus physiques externes qu'il surveille et contrôle, laissant la CPU inactive pendant la majeure partie du temps d'exécution en attente d'événements déclencheurs externes. Une interrogation continue constante des broches d'entrée et des registres d'état gaspille des ressources de traitement considérables. C'est pourquoi des signaux d'interruption matériels dédiés informent la CPU immédiatement lorsque des événements externes notables se produisent. Comme son nom l'indique, une interruption suspend l'exécution séquentielle du programme pour traiter l'événement déclencheur. Les signaux d'interruption proviennent de multiples sources périphériques internes et externes ; dès leur détection, le MCU interrompt le traitement actif pour identifier la cause racine. Si une logique de service est requise, l'adresse courante du compteur de programme est empilée dans la région de mémoire de la pile, et une routine de service d'interruption dédiée s'exécute pour gérer l'événement.


Pile — Un segment réservé de la mémoire RAM utilisé pour stocker temporairement les adresses de retour du compteur de programme chaque fois que des interruptions ou des appels de sous-routines interrompent l'exécution du programme principal. Cette adresse stockée permet au MCU de reprendre le flux séquentiel original du firmware après avoir terminé le traitement de l'interruption ou de la sous-routine. L'entrée de pile se libère automatiquement une fois que l'exécution du programme revient à l'adresse d'origine, récupérant cet emplacement mémoire pour les opérations de pile ultérieures. La profondeur de pile à plusieurs niveaux prend en charge les appels de sous-routines imbriqués, permettant aux développeurs d'invoquer des sous-routines secondaires à partir de la logique des sous-routines primaires.

Guide de programmation pour débutants en microcontrôleur

Le binaire du firmware compilé représente l'actif le plus précieux sur le plan commercial dans tout produit embarqué, ce qui fait de la prévention de la lecture mémoire non autorisée une priorité de conception matérielle fondamentale. Les fusibles de verrouillage forment la principale barrière défensive contre le vol de firmware, mais ces mécanismes de protection contiennent des vulnérabilités exploitables. Les attaquants ont développé une vaste boîte à outils de techniques d'exploitation pour contourner les verrous de sécurité natifs, allant des exploits de logique logicielle au décapage physique destructif de la puce. Après une extraction complète réussie du firmware, les adversaires effectuent une analyse statique approfondie pour identifier les vulnérabilités de code exploitables ou produire en masse des dispositifs contrefaits clonés avec une fonctionnalité propriétaire identique. Pour cette raison, les fabricants de matériel commercial investissent massivement dans l'obscurcissement du code binaire et le chiffrement de la mémoire sur puce pour augmenter la complexité du rétro-ingénierie. Tout firmware chiffré doit être déchiffré à une étape d'exécution définie, créant une fenêtre d'exécution étroite où le code en clair non chiffré est exposé aux attaques par canaux auxiliaires. La récupération forensique légitime du firmware à partir de microcontrôleurs verrouillés réussit parfois grâce à l'analyse des données résiduelles de la mémoire flash, en particulier lorsque le bit de verrouillage de sécurité n'a jamais été correctement programmé lors de la fabrication. Des voies de récupération supplémentaires exploitent les vulnérabilités du code du bootloader pour désactiver les protections de verrouillage et permettre un vidage complet de la mémoire flash pour une analyse binaire complète. En fin de compte, la sécurité complète d'un système embarqué repose sur une stratégie de défense en couches combinant verrous matériels par fusibles, normes de codage sécurisées et cycles de mise à jour réguliers du firmware pour corriger les failles de sécurité nouvellement découvertes. Ce chapitre introductif établit le cadre théorique fondamental pour tous les sujets d'analyse matérielle et de sécurité ultérieurs, dotant les lecteurs des connaissances essentielles pour soit concevoir des schémas de protection anti-rétro-ingénierie robustes, soit mener des opérations légitimes de récupération forensique de firmware lorsque cela est nécessaire.

 

  • Liste des MCU Atmel 8051 rétro-ingéniérés par Mikatech :
  • Série AT89xx complète : AT89C51 AT89C52 AT89S52 AT89S53 AT89S54 AT89S58 AT89S64 AT89C1051 AT89C2051 AT89C4051 AT89C55 AT89C55WD AT89C5131A AT89C51WD AT89C51ED2 AT89C51CC01 AT89S51 AT89C51CC02 AT89C51CC03 AT89C51RB2 AT89C51RC AT89C51RD2 AT89C51RD-CM AT89C51RC2 AT89C51ID2 AT87C5101 AT89C1051U AT89C2051X2 AT89C5130AM AT89C5130A AT89C5131AL AT89C5131AM AT89C51AC3 AT89C5132 AT89C51AC2 AT89C51CC03C AT89C51SND1C AT89C51CC03U AT89C51IC2 AT89C51RE2 AT89C51SND2 AT89LP2051 AT89LP2052 AT89LP213 AT89LP214 AT89LP216 AT89LP4051 AT89LP4052 AT89LP828 AT89LP428 AT89LS51 AT89LS52 AT89LV51 AT89LS53 AT89LS8252 AT89LV52 AT89LV55 AT89S2051 AT89S4051 AT89S8252 AT89S8253 ...

  • Série AT90xx complète : AT90S1200 AT90S2323 AT90S2343 AT90S2331 AT90S4433 AT90S8515 AT90S8535 AT90S4414 AT90S4434 AT90S2313 90S1200 90S2323 90S2343 90S2331 90S4433 90S8515 90S8535 90S4414 90S4434 90S2313 ...

  • Série AT90CAN/PWM/USB/xx complète : AT90CAN32 AT90CAN64 AT90CAN128 AT90PWM2 AT90PWM216 AT90PWM2B AT90PWM3 AT90PWM316 AT90PWM3B AT90USB1286 AT90USB1287 AT90USB162 AT90USB646 AT90USB647 AT90USB82 ...
  • Série AT91SAMxx complète : AT91SAM9XE512 AT91SAM9XE256 AT91SAM9XE128 AT91SAM7S64B AT91SAM7S32B AT91SAM7SE512 AT91SAM7SE256 AT91SAM7SE32 AT91SAM7XC512 AT91SAM7XC256 AT91SAM7XC128 AT91SAM7X512 AT91SAM7X256 AT91SAM7X128 AT91SAM7S161 AT91SAM7S512 AT91SAM7S256 AT91SAM7S128 AT91SAM7S64 AT91SAM7S321 ...

  • Série ATTinyxx complète : ATtiny4 ATtiny5 ATtiny10 ATtiny11 ATtiny12 ATtiny13 ATtiny15 ATtiny20 ATtiny22 ATtiny24 ATtiny25 ATtiny26 ATtiny261 ATtiny28 ATtiny2313 ATtiny40 ATtiny4313 ATtiny43 ATtiny44 ATtiny45 ATtiny461 ATtiny48 ATtiny84 ATtiny85 ATtiny861 ATtiny87 ATtiny88 ATtiny4A ATtiny5A ATtiny10A ATtiny11A ATtiny12A ATtiny13A ATtiny15A ATtiny20A ATtiny22A ATtiny24A ATtiny25A ATtiny26A ATtiny261A ATtiny28A ATtiny2313A ATtiny40A ATtiny4313A ATtiny43A ATtiny44A ATtiny45A ATtiny461A ATtiny48A ATtiny84A ATtiny85A ATtiny861A ATtiny87A ATtiny88A ATtiny4V ATtiny5V ATtiny10V ATtiny11V ATtiny12V ATtiny13V ATtiny15V ATtiny20V ATtiny22V ATtiny24V ATtiny25V ATtiny26V ATtiny261V ATtiny28V ATtiny2313V ATtiny40V ATtiny4313V ATtiny43V ATtiny44V ATtiny45V ATtiny461V ATtiny48V ATtiny84V ATtiny85V ATtiny861V ATtiny87V ATtiny88V ...

  • Série ATMegaxx complète : ATmega16 ATmega162 ATmega164 ATmega165 ATmega168 ATmega169 ATmega128 ATmega1280 ATmega1281 ATmega2560 ATmega2561 ATmega328 ATmega48 ATmega32 ATmega324 ATmega325 ATmega3250 ATmega329 ATmega3290 ATmega64 ATmega640 ATmega645 ATmega6450 ATmega649 ATmega6490 ATmega8 ATmega88 ATmega8515 ATmega8535 ATmega16L ATmega162L ATmega164L ATmega165L ATmega168L ATmega169L ATmega128L ATmega1280L ATmega1281L ATmega2560L ATmega2561L ATmega328L ATmega48L ATmega32L ATmega324L ATmega325L ATmega3250L ATmega329L ATmega3290L ATmega64L ATmega640L ATmega645L ATmega6450L ATmega649L ATmega6490L ATmega8L ATmega88L ATmega8515L ATmega8535L ATmega16P ATmega162P ATmega164P ATmega165P ATmega168P ATmega169P ATmega128P ATmega1280P ATmega1281P ATmega2560P ATmega2561P ATmega328P ATmega48P ATmega32P ATmega324P ATmega325P ATmega3250P ATmega329P ATmega3290P ATmega64P ATmega640P ATmega645P ATmega6450P ATmega649P ATmega6490P ATmega8P ATmega88P ATmega16A ATmega162A ATmega164A ATmega165A ATmega168A ATmega169A ATmega128A ATmega1280A ATmega1281A ATmega2560A ATmega2561A ATmega328A ATmega48A ATmega32A ATmega324A ATmega325A ATmega3250A ATmega329A ATmega3290A ATmega64A ATmega640A ATmega645A ATmega6450A ATmega649A ATmega6490A ATmega8A ATmega88A ATmega8515A ATmega8535A ...

  • Série ATFxx complète : ATF16V8B ATF16V8BL ATF16V8BQ ATF16V8BQL ATF16LV8C ATF16LV8CEXT ATF16V8C ATF16V8CEXT ATF16V8CZ ATF20V8B ATF20V8BL ATF20V8BQ ATF20V8BQL ATF22LV10C ATF22LV10CEXT ATF22LV10CUES ATF22LV10CZ ATF22LV10CQZ ATV22V10 ATF22V10B ATF22V10BQ ATF22V10BL ATF22V10BQL ATF22V10C ATF22V10CEXT ATF22V10CUES ATF22V10CZ ATF22V10CQZ ATF22V10CZUES ATF22V10CQZUES ATF1500A ATF1500ABV ATF1500ABVL ATF1500 ATF1500L ATF1502AS ATF1502ASL ATF1502ASV ATF1502ASVL ATF1504AS ATF1504ASVL ATF1508 ATF1508AS ATF1508ASV ATF2500C ATF2500CL ATF2500CQ ATF2500CQL ATF750C ATF750CEXT ATF750CL ATF750LVC ATF750LVCCEXT ATF750LVCEXT ATF750LVCL ATV2500 ATV2500H ATV2500L ATV2500B ATV2500BL ATV2500BQL ATV5000 ATV5000L ATV750 ATV750B ATV750BL ATV750L ...

  • Série AT88scxx/90scxx complète : AT88SC0104 AT88SC0104C AT88SC0204 AT88SC0204C AT88SC0404 AT88SC0404C AT88SC0808 AT88SC0808C AT88SC1003 AT88SC101 AT88SC102 AT88SC1281 AT88SC12816C AT88SC150 AT88SC153 ...

Questions générales sur l'extraction de firmware de microcontrôleur


  • Est-il sûr d'envoyer un paiement à MikaTech ?

    Si MikaTech était une mauvaise société, vous trouveriez des tonnes de mauvaises réputations sur son service sur Internet au cours de ses 28 ans d'histoire

    Donc, la réponse est OUI ! Nous sommes de bonnes personnes.

    Pourquoi choisir Mikatech, veuillez cliquer ici pour le savoir


  • Mikatech peut-il casser des CI non répertoriés sur ce site ?

    Différents fabricants de puces ont des numéros de pièce différents, mais le cœur interne de la puce peut être fabriqué avec la même technologie, il serait tout à fait impossible de lister tous les numéros de pièce où notre technologie peut s'appliquer, tels que MYSON, STK, FEELING, ANALOG, FUJITSU, NOVATEK, LG/HYNDAI.

    De plus, avec l'avancée de la technologie, chaque jour nous acquérons de plus en plus d'expérience et développons de nouvelles méthodes de rétro-ingénierie pour différents composants de circuits intégrés. La liste complète des numéros de pièces de circuits intégrés relevant de notre champ de compétence ne cesse de s'agrandir, veuillez nous contacter pour en savoir plus.

  • Ma vie privée sera-t-elle protégée ?

    Mikatech Innovative Limited comprend l'importance de la confidentialité de ses clients. Dès que vous contactez Mikatech, les informations personnelles vous concernant seront placées sous la protection de nos règles de gestion élaborées au fil des années de pratique. Mikatech utilise ces informations pour personnaliser ses services à votre égard, et ne divulguera jamais ces informations à des tiers pour quelque raison que ce soit.
    Pour chaque projet que nous réalisons, nous supprimons toutes les données, matériaux et codes 60 jours après la livraison des fichiers, ce qui nous protège et protège votre vie privée.

  • Est-il légal de bénéficier des services de Mikatech ?

    Oui, c'est totalement légal.
    Mikatech fournit ses services de rétro-ingénierie à des fins éducatives uniquement. Il peut être illégal d'utiliser les services mentionnés ci-dessus dans certains pays ou régions, veuillez vérifier vos lois locales. Mikatech n'assume aucune responsabilité quant à l'utilisation des services mentionnés ci-dessus qui pourrait être considérée comme illégale.


  • Je vous ai envoyé un e-mail, pourquoi n'y a-t-il pas de réponse ?

    • A. Notre serveur de messagerie est temporairement en panne, votre message n'a pas été livré dans notre boîte aux lettres même si le message d'envoi réussi s'affiche à l'écran, veuillez nous contacter à nouveau.
    • B. Notre e-mail est reconnu comme courrier indésirable par votre serveur de messagerie, donc notre réponse a été rejetée par votre serveur ou elle est dirigée vers votre dossier de courrier indésirable, veuillez supprimer notre compte de la liste des indésirables ou vérifier votre dossier de courrier indésirable, ou utilisez un autre compte e-mail comme Gmail pour nous contacter.
    • C. Votre e-mail est reconnu comme courrier indésirable par notre serveur, donc votre e-mail a été placé dans notre dossier de courrier indésirable, veuillez utiliser un autre compte e-mail pour nous contacter à nouveau.



    temps de piratage de microcontrôleur

    Années

    28 +
    pays de piratage de microcontrôleur

    Pays

    110 +
    clients d'attaque de microcontrôleur

    Clients

    5000 +
    projets de microcontrôleur déverrouillés

    Projets

    60000 +