Security Chip

Avatar du membre
Bio Stein
Dept: 000
Collec Perso: 0 flip
Rech/Achete: 0 flip
Messages : 641
Enregistré le : 08/08/2017
Niveau : Confirmé
Pro / revendeur : non

Security Chip

Message par Bio Stein » sam. 18 05, 2024 16:23

Hello @tous.

Je n’ai pas ou peu trouvé de documentations qui décrivent de façon approfondies le fonctionnement du security chip. Je propose de regrouper ici les différentes informations qui existent sur le web et d’en faire une synthèse, du moins, du peu qu’il reste, car je pense qu’il y a eu beaucoup de ménage sur le web en ce qui concerne la retro-ingénierie wpc ou les modification de rom wpc et autre.

La page la plus intéressante est celle ou Faboule y insère le code source d’un site qui n’existe probablement plus aujourd’hui, je ne sais pour quelle raison :

viewtopic.php?f=58&t=89156

Ensuite il y a bien sur la page de flipprojet

https://www.flipprojets.fr/SecurityChip_FR.php

J’ai passé quelques dizaines d’heures à comprendre ces documentations, et j’aimerai partager mon analyse et synthèse sur ce que j’ai compris pour le moment.


Voila.
En full restoration : T2 - Dr Who - GetAway *2

Avatar du membre
Faboule
Site Admin
Dept: 20
Collec Perso: 14 flips
Rech/Achete: 0 flip
aimable donateur accepte les visites de sa Gameroom
Messages : 3258
Enregistré le : 16/11/2007
Niveau : Confirmé
Pro / revendeur : non
Localisation : Biguglia
Contact :

Re: Security Chip

Message par Faboule » sam. 18 05, 2024 19:12

Je me suis passionné pour ce sujet, j'ai hâte de te lire pour voir tes avancées. J'ai un lot de pic vierges que j'avais commandé puis entre temps je suis passé à autre chose...
Longue vie aux flips :-) :bd:

Avatar du membre
Bio Stein
Dept: 000
Collec Perso: 0 flip
Rech/Achete: 0 flip
Messages : 641
Enregistré le : 08/08/2017
Niveau : Confirmé
Pro / revendeur : non

Re: Security Chip

Message par Bio Stein » sam. 18 05, 2024 19:20

Capture d’écran 2024-05-18 à 19.48.14.png
En premier lieu, commençons par analyser le schéma de la cpu wpc89-s

L’asic possède 2 broches de strobe, COL et ROW.

Sur la carte cpu sans security chip, le strobe COL permet de faire une ecriture sur le lactch qui permet de selectionner une seule colonne à la fois, sur l’ensemble des 8Bits. Le strobe ROW permettait alors la lecture des lignes correspondantes à la colonne selectionnées préalablement.

Pour la mise en place du security-chip, il ont dû se baser sur le hardware existant et il n’était pas possible de redessiner l’asic, probablement à cause du volume de production de celui çi.

Les concepteurs ont donc choisi de transformer la signification du latch des colonnes afin d’introduire un protocol de communication entre la cpu et le microcontroleur PIC qui sera intercalé entre la cpu et la matrice de swicth.

le strobe COL est donc connecté au latch U14 et permet d’enregistrer la commande venant de la cpu sur le latch U14. Comme le PIC U22 écoute aussi ce strobe sur le broche RTCC 1, il sera alors averti qu’une commande venant de la cpu est enregistrée sur le latch. Pour autant, le lactch U14 ne reflete pas le contenu des données car la broche 1 (Output Enable) est controlée par le PIC sortie RA1, et c’est donc ce PIC qui choisira la moment de lire les données. nous verrons plus tard dans la pratique comment cela se passe avec un analyseur logique.

Le PIC va donc mettre la sortie 11 OE du latch U14 à l’état bas, venir lire la donnée 8Bits sur le BUS de données RC0-7 et remettre le latch U14 en tri-state. Le bus RC du PIC est donc un bus qui fonctionne en lecture et servira à lire les commandes qui viennent de la CPU, soit lire la valeur des lignes de la matrice.

A la reception d’une commande provenant de la CPU, le PIC peut initier une réponse sur le latch U24, mais c’est la cpu qui décidera QUAND la donnée sera lu. Au bout d’un délai certain (environ 60us) la cpu va donner un coup de strobe ROW pour venir lire la donnée de réponse si elle a lieu, ce qui n’est pas toujours le cas.

le système fonction donc en mode MAITRE-ESCLAVE synchrone. le PIC n’écrit jamais en direction de la cpu, si la cpu n’a pas envoyé une commande préalable.

voici donc la base schématique expliquée.
En full restoration : T2 - Dr Who - GetAway *2

Avatar du membre
Bio Stein
Dept: 000
Collec Perso: 0 flip
Rech/Achete: 0 flip
Messages : 641
Enregistré le : 08/08/2017
Niveau : Confirmé
Pro / revendeur : non

Re: Security Chip

Message par Bio Stein » sam. 18 05, 2024 19:43

Capture d’écran 2024-05-18 à 20.21.50.png
Bronchons tout cela sur l’analyseur logique et voici donc les toutes premières communications entre la cpu et le PIC au boot.

la première commande est 00 et correspond à une commande de reset du PIC.

les ligne 0-7 sont les commandes venant de la cpu, en sortie du latch U14
les ligne 8-15 sont les réponses du PIC en sortie de latch U24

la ligne 16 est le strobe COL venant de la CPU
la ligne 17 est la commande OE du latch U14 venant du PIC

la ligne 18 est la clk du latch U24 venant du PIC
la ligne 19 est la commande OE du latch U24 venant de la cpu commande ROW (les schémas sont faux d’ailleurs DIR et ROW sont inversés)

nous considérons les données valides lors des fronts montants des signaux 17 et 19.

nous voyons donc la cpu envoyer la commande 00 pour faire un reset, il n’y a pas de réponse de la part du PIC, mais la commande est logiciellement prise en compte.
nous voyons ensuite une commande 7E pour laquelle le PIC va répondre 82 (on verra plus tard pourquoi

l’analyseur logique permet donc de voir les aller-retour de données entre la cpu et le PIC.
En full restoration : T2 - Dr Who - GetAway *2

Avatar du membre
Bio Stein
Dept: 000
Collec Perso: 0 flip
Rech/Achete: 0 flip
Messages : 641
Enregistré le : 08/08/2017
Niveau : Confirmé
Pro / revendeur : non

Re: Security Chip

Message par Bio Stein » sam. 18 05, 2024 20:18

Capture d’écran . 2024-05-18 à 20.56.01.jpeg.png
voici donc les valeurs que je reçois pour le chip de mon médiéval madness, pour 4 commandes successives.

Toutes les données lues sont à chaque fois les mêmes sauf pour la 0xF5 et 0xFD, parce que, nous le verrons plus tard, une opération de calcul crypte les valeurs de ces 2 octets et la cpu devra faire la vérification de son coté de la cohérence ces 2 valeurs. Enfin, ces 2 valeurs ne servent qu'à la vérification qu'il n'a pas été essayé de simuler le PIC, mais ne servira pas à autre chose sauf peut-être pour calculer l'UNLOCK KEY.

La position 0x02 et 0x0A est la clé de cryptage, et permettra à la cpu de décrypter la donnée.

le reste des valeurs est donc la donnée en elle même et devra donc être décryptée par la CPU à l'aide de la clé de cryptage.

je pense que comme il n'était pas possible de cacher le code source du 6809, il était impossible de cacher indéfiniment comment tout cela est crypté, il suffisait de décompiler l'eprom et celui qui était un peu tenace finira par ressortir comment décoder ces donnée, et donc comment elles sont encodées dans le PIC.

pour finir, ces données sont le numéro de série, et une fois décodée par la cpu et vérification de la correspondance du type de JEU (MM, AM, etc..), celui çi va calculer un UNLOCK KEY de 3octets et va l'envoyé au PIC qui fera la vérification interne que celui çi correspond bien à celui calculé en interne préalablement.

si je ne me trompe pas, cet UNLOCK KEY n'est jamais le même, puisqu'il est calculé sur les 2 octets des positions 0xF5 et 0xFD qui sont tournant.
En full restoration : T2 - Dr Who - GetAway *2

Avatar du membre
Bio Stein
Dept: 000
Collec Perso: 0 flip
Rech/Achete: 0 flip
Messages : 641
Enregistré le : 08/08/2017
Niveau : Confirmé
Pro / revendeur : non

Re: Security Chip

Message par Bio Stein » sam. 18 05, 2024 21:40

C'est là que vient le premier algorithme trouvé par Faboule. celui çi ne se trouve pas dans le PIC, mais sur un ordinateur et va permettre à partir du numéro de série stocké dans le array ser[] (array de 17) d'encoder celui çi à l'aide de la clé key (int) et sera stocké en retour dans le array pic[] '(array de 16) qui sera lui stocké sur le PIC.

pic[5] et pic[13] ne sont pas calculé, puisqu'il le seront pendant l'exécution du programme sur le pic.


8.1 Serial number encoder
-------------------------
This c-program ecrypts the serial number stored in ser[] into the 16 PIC
registers pic[].

Note that pic[5] and pic[13] are the PIC internal registers described in 8.2.

Code : Tout sélectionner




/* "ser" contains the serial numbers 0-9 without blanks */
/* e.g. unsigned char ser[17] = {1,2,3,1,2,3,4,5,6,1,2,3,4,5,1,2,3}; */
/* A A A B B B B B B C C C C C D D D */
void ser2pic(unsigned char ser[17], unsigned char pic[16], int key) {
int tmp;

pic[10] = key>> 8;
pic[2] = key;
tmp = (100*ser[1] + 10*ser[7] + ser[4] + 5*pic[10]) * 0x001bcd + 0x01f3f0;
pic[1] = tmp>> 16;
pic[11] = tmp>> 8;
pic[9] = tmp;

tmp = (10000*ser[2] + 1000*ser[15] + 100*ser[0] + 10*ser[8] + ser[6] +
2*pic[10] + pic[2]) * 0x0000107f + 0x0071e259;
pic[7] = tmp>> 24;
pic[12] = tmp>> 16;
pic[0] = tmp>> 8;
pic[8] = tmp;

tmp = (1000*ser[16] + 100*ser[3] + 10*ser[5] + ser[14] +
pic[2]) * 0x000245 + 0x003d74;
pic[3] = tmp>> 16;
pic[14] = tmp>> 8;
pic[6] = tmp;

tmp = 99999 - (10000*ser[13] + 1000*ser[12] + 100*ser[11] +
10*ser[10] + ser[9]);
pic[15] = tmp>> 8;
pic[4] = tmp;
}
En full restoration : T2 - Dr Who - GetAway *2

Avatar du membre
Bio Stein
Dept: 000
Collec Perso: 0 flip
Rech/Achete: 0 flip
Messages : 641
Enregistré le : 08/08/2017
Niveau : Confirmé
Pro / revendeur : non

Re: Security Chip

Message par Bio Stein » sam. 18 05, 2024 21:57

a partir de maintenant, je suis dans les supposition, car je n'ai pas encore vérifié en pratique ce qui est écrit ici :


8.2 Serial number registers
---------------------------
The internal registers used when reading the serial number are calculated as:
initialisation :

Code : Tout sélectionner

x = 0xa5;
pic[5] = pic[0] ^ pic[15];
pic[13] = pic[2] ^ pic[12];
et ensuite à chaque lecture de la part du cpu (no = byte to read 0..15):

Code : Tout sélectionner

x = ((x> > 4) | (no < <4)) & 0xff;
pic[5] = (pic[5] ^ x) + pic[13];
pic[13] = (pic[13] + x) ^ pic[5];
On voit donc qu'a chaque fois que le cpu envoie une commande (à voir si c''est 7X ou toutes les commandes futures) la valeur du registre X et les pic[5] et pic[13] sont recalculées par rapport aux anciennes valeurs mais aussi en fonction de pic[0], pic[15], pic[2] et pic[12] à l'initialisation.

donc, lorsque la cpu reçoit les données, il est possible qu'il reçoit les valeurs de pic[5] ou pic[13] bien avant la réception de 4 autres valeurs de pic, donc il n'est pas en mesure de vérifier que les valeurs sont corrects sur le moment. je pense qu'il les vérifie donc à la fin de la réception des 16 valeurs à l'aide d'une fonction récursive.

maintenant, comment le cpu vérifie ces données, ce n'est pas vraiment notre problématique ici.
En full restoration : T2 - Dr Who - GetAway *2

Avatar du membre
Bio Stein
Dept: 000
Collec Perso: 0 flip
Rech/Achete: 0 flip
Messages : 641
Enregistré le : 08/08/2017
Niveau : Confirmé
Pro / revendeur : non

Re: Security Chip

Message par Bio Stein » sam. 18 05, 2024 22:06

enfin, calcul de l'unlock KEY

il est basé sur le serial Number (que la cpu va devoir reconstruire), et cet unlock key semble fixe, puisque ce serial ne change pas en fonction d'un contexte.

étrange et à vérifier en pratique.



8.3 Switch matrix unlock code
-----------------------------
The three byte unlock code sent to the PIC are calculated as:

Code : Tout sélectionner

/* "ser" contains the serial numbers 0-9 without blanks (only the A digits */
/* are used) */
/* e.g. unsigned char ser[17] = {1,2,3,1,2,3,4,5,6,1,2,3,4,5,1,2,3}; */
/* A A A B B B B B B C C C C C D D D */
void ser2code(unsigned char ser[17], unsigned char code[3]) {
int tmp;

tmp = 100*ser[0] + 10*ser[1] + ser[2];
tmp = (tmp >> 8 ) * (0x100*ser[14] + ser[16] + 0x3030) +
(tmp & 0xff) * (0x100*ser[15] + ser[14] + 0x3030);
code[0] = tmp>> 16; code[1] = tmp>> 8; code[2] = tmp;
En full restoration : T2 - Dr Who - GetAway *2

Avatar du membre
Bio Stein
Dept: 000
Collec Perso: 0 flip
Rech/Achete: 0 flip
Messages : 641
Enregistré le : 08/08/2017
Niveau : Confirmé
Pro / revendeur : non

Re: Security Chip

Message par Bio Stein » lun. 20 05, 2024 16:42

Je soude un atmega2560 pro mini directement sur la cpu wpc95
IMG_0268.jpg
IMG_0269.jpg
IMG_0270.jpg
IMG_0271.jpg
IMG_0272.jpg
IMG_0273.jpg
IMG_0274.jpg
IMG_0275.jpg
IMG_0276.jpg
IMG_0277.jpg
En full restoration : T2 - Dr Who - GetAway *2

Avatar du membre
Bio Stein
Dept: 000
Collec Perso: 0 flip
Rech/Achete: 0 flip
Messages : 641
Enregistré le : 08/08/2017
Niveau : Confirmé
Pro / revendeur : non

Re: Security Chip

Message par Bio Stein » lun. 20 05, 2024 17:10

nous passons donc à la phase finale de programmation, j'utilise l'environnement Arduino, afin que cela soit compilable facilement.
IMG_0285.jpg
on se sert de l'analyseur logique pour vérifier facilement la valeur des signaux, c'est un énorme gain de temps
IMG_0286.jpg
Sans code du tout, le cpu retourne un G10 error, préalablement avec un numéro de série affiché à 0000000000
IMG_0287.jpg
le code commence à fonctionner, et le numéro de série apparait sur l'afficheur au boot, mais si les valeurs de pic[5] et pic[13] ne correspondent pas à celles attendues de la CPU, il y a toujours l'affichage d'un G10 Error.
IMG_0281.jpg
finalement, avec les bonnes valeurs de pic[5] et pic[13], la cpu passe la phase de sécurité et affiche les erreurs de fusibles, normal, puisque la cpu n'est pas branchée au plateau du Flip. Il me reste à implémenter le Scan des switch, et espérant qu'il n'y a pas d'autre surprise qui m'attendent, car j'ai remarché que la cpu refait une demande de numéro de série au bout de 45 minutes, à vérifier donc.
IMG_0288.jpg
En full restoration : T2 - Dr Who - GetAway *2

Répondre