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.
Peter LeeCo-fondateur et PDG
Architecture et programmation des MCU 8051 pour le rétro-ingénierie 4
Quelle est toujours la chose la plus difficile à faire ? Vous avez acheté le microcontrôleur, vous avez tout appris sur ses circuits et ses registres, vous avez une excellente idée sur la façon d'appliquer toutes vos connaissances dans la pratique. Mais la chose la plus difficile à faire est de commencer...
Commencer avec un **microcontrôleur** (MCU) semble souvent intimidant, mais le chemin qui va d'une puce vierge à un dispositif fonctionnel est extrêmement gratifiant. Avant même d'écrire votre première ligne de **code**, il est judicieux de réfléchir à la manière dont vous protégerez ce **code** une fois déployé. De nombreux développeurs négligent la fonction **lockbit** jusqu'à ce qu'il soit trop tard, laissant leur **firmware** exposé à une **lecture** non autorisée. Dans les produits commerciaux, le **verrou** est la première barrière contre les tentatives de **rétro-ingénierie** visant à **extraire la flash** et à **dupliquer** l'ensemble du système. Même pendant le développement, vous pourriez avoir besoin d'effectuer une **récupération** d'une version précédente à partir d'une puce verrouillée si vous perdez les fichiers sources. L'**EEPROM** du AT89S8253, par exemple, contient des données d'étalonnage qui pourraient être critiques pour une **extraction de firmware** dans une analyse forensique. Certains attaquants utilisent le **décapsulage** pour exposer le silicium et sonder directement les **fusibles** qui contrôlent l'état de **déverrouillage**. C'est pourquoi comprendre les outils de programmation et de débogage n'est pas seulement une question de commodité – c'est une question de conscience de la sécurité. Le **vidage** d'un fichier **hex** compilé est le résultat final, mais le processus de création implique de nombreuses étapes où des erreurs peuvent survenir. Un bon système de développement vous aide à tester chaque broche E/S, chaque temporisateur et chaque interruption, ce qui renforce indirectement votre défense contre les attaques par canaux auxiliaires. Le **bit de verrouillage** doit être défini à la toute fin du cycle de programmation pour empêcher toute **lecture** externe. Cependant, si vous **verrouillez** accidentellement la puce sans vérifier votre **code**, vous pourriez avoir besoin d'un équipement spécialisé pour la **déverrouiller** à nouveau. C'est pourquoi les exemples des chapitres précédents sont si importants – ils vous enseignent les bases qui deviendront plus tard les briques de base des systèmes sécurisés. Conservez toujours une sauvegarde de votre **firmware** et du contenu de l'**EEPROM** sur votre PC, afin qu'une **récupération** soit possible sans recourir à des sondes physiques. Avec ces réflexions en tête, examinons maintenant les étapes pratiques pour faire fonctionner votre premier programme.
Comment commencer à travailler ?
Un microcontrôleur est un « génie dans la bouteille » de bonne nature et aucune connaissance supplémentaire n'est requise pour l'utiliser.
Pour créer un dispositif contrôlé par le microcontrôleur, il est nécessaire de fournir un PC simple, un programme de compilation et un dispositif simple pour transférer le code du PC vers la puce elle-même.
Bien que l'ensemble du processus soit tout à fait logique, il y a souvent des questions, non pas parce que c'est compliqué, mais en raison des nombreuses variantes. Jetons un coup d'œil.
Écrire un programme en langage d'assemblage
Pour écrire un programme pour le microcontrôleur, un programme spécialisé dans l'environnement Windows peut être utilisé. Cela peut, mais ce n'est pas obligatoire... Lors de l'utilisation d'un tel logiciel, il existe de nombreux outils qui facilitent l'opération (l'outil simulateur vient en premier), ce qui est un avantage évident. Mais il existe aussi d'autres moyens d'écrire un programme. Fondamentalement, le texte est la seule chose qui compte. N'importe quel programme de traitement de texte peut être utilisé à cette fin. Le but est d'écrire toutes les instructions dans l'ordre dans lequel elles doivent être exécutées par le microcontrôleur, de respecter les règles du langage d'assemblage et d'écrire les instructions exactement comme elles sont définies. En d'autres termes, il suffit de suivre l'idée du programme. C'est tout !
;RESET VECTOR
CSEG AT 0
JMP XRESET ; Vecteur de réinitialisation
CSEG
ORG 100H
XRESET: ORL WMCON,#PERIOD ; Définir la période du Watchdog
ORL WMCON,#WDTEN ; Activation du Watchdog
Pour que le compilateur fonctionne avec succès, il est nécessaire que le document contenant ce programme ait l'extension .asm dans son nom, par exemple : Programme.asm.
Lorsqu'un programme spécialisé (mplab) est utilisé, cette extension sera automatiquement ajoutée. Si un autre programme de traitement de texte (Notepad) est utilisé, le document doit être enregistré et renommé. Par exemple : Programme.txt -> Programme.asm. Cette procédure n'est pas obligatoire. Le document peut être enregistré dans son format d'origine et son texte peut être copié dans le programmateur pour une utilisation ultérieure.
Compilation d'un programme
Le microcontrôleur « ne comprend pas » le langage d'assemblage en tant que tel. C'est pourquoi il est nécessaire de compiler le programme en langage machine. C'est plus que simple lorsqu'un programme spécialisé (mplab) est utilisé car un compilateur fait partie du logiciel. Un simple clic sur l'icône appropriée résout le problème et un nouveau document avec l'extension .hex apparaît. C'est en fait le même programme, seulement compilé en langage machine que le microcontrôleur comprend parfaitement. Ce document est communément appelé « code hex » et représente apparemment une séquence de nombres dans le système hexadécimal.
Dans le cas où un autre logiciel d'écriture de programme en langage d'assemblage est utilisé, un logiciel spécial de compilation doit être installé et utilisé comme suit : configurer le compilateur, ouvrir le document avec l'extension .asm et compiler. Le résultat est le même : un nouveau document avec l'extension .hex. Le seul problème maintenant est qu'il est stocké sur votre PC.
Programmation d'un microcontrôleur
Pour transférer un « code hex » vers le microcontrôleur, il est nécessaire de fournir un câble de communication série et un dispositif spécial, appelé programmateur, avec son logiciel. Il existe plusieurs façons de le faire.
Un grand nombre de programmes et de circuits électroniques à cet effet peuvent être trouvés sur Internet. Procédez comme suit : ouvrez le document du code hex, définissez quelques paramètres et cliquez sur l'icône de compilation. Après un certain temps, une séquence de zéros et de uns sera programmée dans le microcontrôleur via le câble de communication série et le programmateur. Il ne reste plus qu'à placer la puce programmée dans le dispositif cible. Dans le cas où il est nécessaire d'apporter des modifications au programme, la procédure précédente peut être répétée un nombre illimité de fois.
La fin ou... ?
Cette section décrit brièvement l'utilisation de MPLAB et du logiciel de programmation développé par Mikroelektronika. Tout est très simple...
Lancez le programme Mikroelektronika Asm51 Console. La fenêtre apparaît...
...Ouvrez un nouveau document : Fichier -> Nouveau. Écrivez votre programme ou copiez le texte...
... Enregistrez et nommez votre document : Fichier -> Enregistrer sous... (Le nom du document est limité à 8 caractères !)
Enfin, pour compiler le programme en code HEX, sélectionnez : Projet -> Build ou cliquez sur l'icône 'play'.
Si tout fonctionne correctement, l'ordinateur répondra par un bref rapport.
Le programme est écrit et compilé avec succès. Il ne reste plus qu'à transférer le programme vers le microcontrôleur. Pour cela, il est nécessaire de disposer d'un logiciel qui prend le programme écrit et compilé et le transmet au microcontrôleur.
Lancez le programme 8051 Flash_setup.exe...
L'installation du programme s'effectue comme d'habitude - il suffit de cliquer sur Next, Accept, Next...
...et enfin - Finish !
Le programme est installé et prêt à être utilisé. Les réglages sont faciles à effectuer, il n'est donc pas nécessaire de fournir d'explications supplémentaires (type de microcontrôleur, fréquence et oscillateur d'horloge, etc.).
Connectez le PC et le programmateur via un câble USB ;
Chargez le code HEX en utilisant : Fichier -> Charger HEX ; et
Cliquez sur le bouton 'Write' et attendez...
Voilà ! Le microcontrôleur est programmé et tout est prêt pour le fonctionnement. Si vous n'êtes pas satisfait, apportez quelques modifications au programme et répétez la procédure. Jusqu'à quand ? Jusqu'à ce que vous soyez satisfait...
Systèmes de développement
Un dispositif qui, dans la phase de test du programme, peut simuler n'importe quel environnement est appelé un système de développement. Outre le programmateur, l'alimentation et le support du microcontrôleur, le système de développement contient des éléments pour l'activation des broches d'entrée et la surveillance des broches de sortie. La version la plus simple a chaque broche connectée à un bouton-poussoir et à une LED. Une version de haute qualité dispose d'afficheurs LED, d'afficheurs LCD, de capteurs de température et de tous les autres éléments pouvant être présents dans le dispositif cible. Ces périphériques peuvent être connectés au MCU via des cavaliers miniatures. De cette façon, l'ensemble du programme peut être testé en pratique pendant sa phase de développement, car le microcontrôleur ne sait pas et ne se soucie pas de savoir si son entrée est activée par un bouton-poussoir ou par un capteur intégré dans un dispositif réel.
7.2 Système de développement Easy8051A
Le système de développement Easy8051A est un système de développement de haute qualité utilisé pour programmer les microcontrôleurs compatibles 8051 fabriqués par Atmel. En plus de la programmation des puces, ce système permet de tester toutes les parties du programme car il contient la plupart des composants qui sont normalement intégrés dans les dispositifs réels.
Le système de développement Easy8051A se compose de :
Supports pour placer les microcontrôleurs (boîtiers 14, 16, 20 et 40 broches)
Connecteur pour alimentation externe (DC 12V)
Programmateur USB
Sélecteur d'alimentation (externe ou via USB)
Oscillateur à cristal 8 MHz
32 LED pour l'indication de l'état des broches de sortie
32 boutons-poussoirs pour l'activation des broches d'entrée
Quatre afficheurs LED 7 segments en mode multiplexé
Afficheur LCD graphique
Afficheur LCD alphanumérique (mode 4 ou 8 bits)
Connecteur et pilote pour communication série RS232
Thermomètre numérique DS1820
Convertisseur A/N 12 bits (MCP3204)
Convertisseur N/A 12 bits (MCP4921)
Source de tension de référence 4,096V (MCP1541)
Connecteurs multiproches pour accès direct aux ports E/S
Le texte suivant décrit brièvement quelques circuits de ce système de développement. Il s'agit plutôt d'une illustration de ses caractéristiques que d'un manuel complet. De plus, en apprenant à connaître ce dispositif, on comprend que les microcontrôleurs et leurs outils sont destinés à tout le monde, pas seulement aux privilégiés.
Supports
Tous les microcontrôleurs fabriqués par Atmel se présentent dans quelques boîtiers DIP standard. Afin de permettre leur programmation à l'aide d'un seul dispositif, les broches correspondantes (ayant le même nom) sur les supports sont connectées en parallèle. En conséquence, en étant placé dans le support approprié, chaque microcontrôleur est automatiquement correctement connecté. La figure de droite montre un microcontrôleur en boîtier 40 broches et la connexion de l'une de ses broches E/S (P1.5). Comme on le voit, la broche peut être connectée à un périphérique externe (connecteur PORT1), à une LED (microswitch SW2), à un bouton-poussoir ou à une résistance via des connecteurs. Dans les deux derniers cas, la polarité de la tension est sélectionnée à l'aide de cavaliers sur la carte.
Programmateur
Le rôle du programmateur est de transférer le code HEX du PC vers les broches appropriées et de fournir des niveaux de tension réguliers pendant la programmation de la puce. Pour ce système de développement, le programmateur y est intégré et doit être connecté au PC via un câble USB. Lorsque le processus de programmation est terminé, les broches utilisées à cet effet sont automatiquement disponibles pour d'autres applications.
Alimentation du système de développement
Il y a un connecteur sur la carte de développement permettant la connexion à une source d'alimentation externe (AC/DC, 8-16V). De plus, la tension nécessaire au fonctionnement du dispositif peut également être obtenue du PC via le câble USB. Le cavalier J5 est utilisé pour la sélection de l'alimentation.
Oscillateur 8MHz
Le système de développement EASY8051A dispose d'un oscillateur intégré utilisé comme générateur de signal d'horloge. La fréquence de cet oscillateur est stabilisée par un cristal de quartz de 8 MHz. De plus, il est également possible de sélectionner l'oscillateur RC interne lors de la programmation de la puce.
LED pour l'indication de l'état des broches de sortie
Chaque broche de port E/S est connectée à une LED qui permet une indication visuelle de son état logique. Dans le cas où la présence de LED polarisées directement et de résistances série n'est pas acceptable dans certaines applications, le commutateur DIP SW2 permet de les déconnecter du port.
Boutons-poussoirs pour l'activation des broches d'entrée
De la même manière que les LED, chaque broche de port E/S est connectée à un bouton-poussoir sur la carte de développement. Cela permet une activation simple des broches d'entrée. Le cavalier J6 est utilisé pour sélectionner la polarité de tension (+ ou -) appliquée aux broches en appuyant sur le bouton-poussoir approprié.
Afficheurs LED 7 segments
Étant souvent utilisés dans l'industrie, quatre afficheurs LED haute performance en mode multiplexé font partie du système de développement. Les segments d'affichage sont connectés au port P0 via des résistances. Les pilotes à transistors utilisés pour activer les chiffres individuels sont connectés aux quatre premières broches du port P1. Cela permet de tester les programmes utilisant des afficheurs 7 segments avec un minimum d'utilisation des ports E/S. Comme pour les LED, le commutateur DIP SW2 permet de déconnecter les pilotes à transistors des broches du microcontrôleur.
Affichages LCD
Le système de développement EASY8051A permet la connexion à un afficheur LCD graphique ou alphanumérique. Les deux types d'afficheurs sont connectés en les plaçant dans le connecteur approprié et en commutant la position du cavalier J8. Si les afficheurs ne sont pas utilisés, toutes les broches utilisées pour leur fonctionnement sont disponibles pour d'autres applications. Outre les connecteurs, il y a également un potentiomètre pour le réglage du contraste sur la carte.
Communication série via RS232
Afin de permettre de tester les programmes utilisant la communication série, le système de développement dispose d'un connecteur SUB-D 9 broches standard. Le MAX232 est utilisé comme régulateur de tension.
Comme pour les autres circuits intégrés, l'électronique supportant la communication série peut être activée ou désactivée à l'aide des cavaliers J9 et J10.
Thermomètre numérique DS1820
La mesure de température est l'une des tâches les plus courantes des dispositifs qui fonctionnent dans l'industrie. Pour cette raison, un circuit DS1820 est présent sur le système de développement EASY8051A qui mesure la température dans la plage de -55 à +125°C avec une précision supérieure à 0,50. Les résultats de mesure sont transférés via une communication série vers les broches P3.3 ou P2.7. Le cavalier J7 est utilisé pour sélectionner les broches pour la réception des données. Dans le cas où aucun cavalier n'est installé, les broches du port sont disponibles pour d'autres applications.
Convertisseur A/N 12 bits MCP3204
Un convertisseur A/N 12 bits MCP3204 intégré dispose de quatre canaux d'entrée connectés à des connecteurs sur la carte. Les données sont échangées avec le microcontrôleur via le système de communication série SPI utilisant les broches P1.5, P1.6, P1.7 et P3.5. Si le convertisseur A/N n'est pas utilisé, ces broches peuvent être utilisées pour d'autres applications (commutateur DIP SW1). Afin de vérifier le fonctionnement, il y a un potentiomètre sur la carte de développement utilisé comme source de tension variable. Il peut être amené aux broches d'entrée du convertisseur à l'aide de l'un des quatre cavaliers J12. En guise de commodité particulière, une source de tension de référence MCP1541 (4,096V) est intégrée. Le cavalier J11 est utilisé pour sélectionner si le convertisseur utilisera cette tension ou le 5V.
Convertisseur N/A 12 bits MCP4921
La conversion numérique-analogique (N/A) est une autre opération souvent réalisée par le microcontrôleur dans la pratique. Pour cette raison, il y a une puce spéciale sur la carte qui échange des données avec le microcontrôleur via le système de communication SPI. Elle peut également générer une tension analogique avec une résolution de 12 bits sur sa broche de sortie. Lorsqu'elle n'est pas utilisée, toutes les broches du microcontrôleur sont disponibles pour d'autres applications à l'aide du commutateur DIP SW1. Comme pour le convertisseur A/N, le cavalier J11 est utilisé pour sélectionner la tension de référence.
Connecteurs pour accès direct aux ports E/S
Afin de permettre aux ports du microcontrôleur d'être directement connectés à des composants supplémentaires, chacun d'eux est connecté à un connecteur sur la carte. De plus, deux broches de chaque connecteur sont connectées à la tension d'alimentation, tandis que chaque broche peut être connectée à une polarité + ou - de tension via des résistances (résistances de pull up ou pull down). La présence et la connexion de ces résistances sont déterminées par des cavaliers. Le cavalier J3 qui contrôle le port P3 est illustré dans la figure de droite.
Tout au long de ce chapitre, nous avons vu qu'un système de développement n'est pas seulement un programmateur – c'est un laboratoire complet pour vos projets de **microcontrôleur**. La possibilité de tester chaque broche, chaque afficheur et chaque périphérique avant de finaliser un circuit imprimé fait gagner d'innombrables heures de débogage. Pourtant, même avec les meilleurs outils, la sécurité de votre produit final dépend de la façon dont vous gérez le **bit de verrouillage** et les **fusibles** lors de l'étape de programmation. De nombreux ingénieurs oublient de définir le **verrou** après le **vidage** final du fichier **hex**, laissant la mémoire **flash** ouverte à une simple **lecture** via le programmateur. Un adversaire déterminé pourrait alors **extraire** tout le **code** et **dupliquer** votre dispositif, compromettant tout votre travail. L'**EEPROM** du AT89S8253 est particulièrement vulnérable car elle peut être lue avec le même programmateur si le **verrou** n'est pas activé. C'est pourquoi l'Easy8051A, comme beaucoup de cartes de développement, vous donne un contrôle total sur la tension de programmation et les paramètres de sécurité. Vérifiez toujours que vous avez activé le **bit de verrouillage** et, si disponible, le **verrouillage mémoire à trois niveaux** pour empêcher l'**extraction du firmware** via l'interface SPI. Dans le cas où vous auriez besoin d'effectuer une **récupération** d'une puce verrouillée, certains outils avancés permettent le **décapsulage** et la micro-sonde, mais ils sont coûteux et destructifs. Par conséquent, il est bien préférable de conserver une sauvegarde sécurisée de votre **code** et de vos données de configuration sur votre PC. Le processus de **déverrouillage** n'est que rarement nécessaire si vous suivez un cycle de développement discipliné. Cependant, comprendre les techniques de **rétro-ingénierie** utilisées par les attaquants vous rendra plus conscient de la sécurité. Par exemple, les ensembles de LED et de boutons-poussoirs sur l'Easy8051A sont excellents pour les tests fonctionnels, mais ils nous rappellent également que chaque broche E/S est une porte d'entrée potentielle pour les attaques par glitch. En simulant des conditions réelles sur la carte de développement, vous pouvez tester comment votre **firmware** se comporte sous contrainte et si les mécanismes de **verrouillage** tiennent bon. En fin de compte, le chemin qui va d'une puce vierge à un produit fini sécurisé est un processus d'apprentissage continu – et l'Easy8051A est un excellent compagnon dans ce parcours.
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.
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.
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.
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.
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.