MCODE


A l'origine j'avais placé cette note dans l'interview du pirate LOT mais comme elle prenait de la place, j'ai préféré la mettre à part.

A chaque fois qu'un déplombeur parle du top de la protection mémoire, il cite le MCODE d'Electronic Arts (EOA ou ECA en abrégé). Il est vrai que ce pseudo langage n'est pas suffisamment élaboré pour permettre la réalisation de programmes de jeu et reste donc cantonné à une forme de protection mémoire.

J'aimerai aborder deux points que je trouve intéressants car je ne les ai jamais vu mentionnés sur les productions underground.

Le top de la protection mémoire

Pour beaucoup de pirates, décortiquer le MCODE fut pénible, et il a donc tout naturellement fini sur le podium des protections.
Pourtant il y a mieux, bien mieux... dans le même genre.

Beaucoup de crackers ne juraient que par l'assembleur et donc très peu se sont intéressés au p-system pascal UCSD.
Ce qui à mon sens était une grave erreur!

Tout d'abord, il faut savoir que le pascal UCSD est ni plus ni moins que l'ancêtre du langage moderne java. Rien que ça!!!
Un source de pascal UCSD est transformé en p-code (pseudo-machine code) lors de sa compilation et est normalement exécutable sur plusieurs plateformes quand une machine virtuelle existe, par exemple sur les hardwares 6502, Z80, 8080, PDP-11.
Rappelons que pour l'Apple II, l'interpréteur avait été écrit en langage machine par le très célèbre Bill Atkinson (avec Richard Gleaves et Mark Allen) qui allait par la suite s'illustrer (entre autre) sur Macintosh...

Précisons que le p-code du Pascal UCSD est antérieur au MCODE puisqu'il date de 1979!
Il est beaucoup plus complexe: il y a 8 registres, des dizaines et des dizaines d'opcodes avec des paramètres de tailles variables...

Lot cite Numéro 6 comme expert pour avoir compris et mis en source le MCODE (comme nous l'avons vu, JPL en avait fait aussi plusieurs versions).

A mon sens, une personne vraiment balaise, c'est Randall (Randy) Hyde qui a désassemblé l'interpréteur 6502 du p-code et a fait un bouquin de 450 pages sur le sujet: "P-Source, a guide to the Apple Pascal System" édité en 1983 par... l'éditeur de softs Datamost!
Ce qui est intéressant à signaler, c'est que Datamost proposait pour un peu moins de 50 dollars US un disk contenant le source au format Lazerware LISA 2.6 de l'interpréteur p-code Apple Pascal et un package de support run-time.
Un plombeur qui voulait vraiment envoyer à l'asile les curieux avait une arme (ou les bases s'il le changeait) rendant pitoyable le MCODE.

P-Source
P-Source
P-Source
P-Source review

Ce n'est pas un hasard si dans son livre "Systèmes d'exploitation et systèmes de protection sur Apple II" publié chez Micro Application, Jean-Pierre Lagrange cite le principe du pascal UCSD ainsi que du CCI d'Aztec C (Manx Software) dans la partie sur les protections mémoire pour rendre inexécutable un code sans son interpréteur et non désassemblable sans le désassembleur associé (voir pages 261 à 266).

Il ne faut pas oublier non plus l'ancêtre des interpréteurs: SWEET16 écrit par Steve Wozniak.
Il fit son apparition dans le magazine BYTE de novembre 1977 (pages 150 à 159) sous le titre "SWEET16 : The 6502 Dream Machine". L'objectif était d'implémenter un "métaprocesseur" 16 bits inexistant (avec 16 registres 16 bits, 15 opcodes utilisant ces registres et 13 instructions de tests/branchements/return/...)
Lent... mais déjà très efficace pour bien perturber un fouineur avec une simple routine de contrôle de password.

L'hypothèse du multi-plateformes

Le 2nd point est une hypothèse... que je ne peux pas vérifier faute de connaissance.

Ce type de pseudo-langage a un avantage considérable: il peut s'exécuter sur n'importe quelle machine dans la mesure où il existe dessus un interpréteur. Il s'affranchit donc des différences de hardware.
Je me demande dans quelle mesure Electronic Arts n'avait pas écrit des interpréteurs de ce langage sur toutes les machines cibles des jeux publiés.
Le code de protection aurait pu ainsi être le même partout pour un même jeu.
Il faudrait demander à des déplombeurs sur d'autres machines de cette époque (comme le commodore 64) pour vérifier cette hypothèse.


hr EOA


Sommaire


Lien Information Source
Voir Articles sur le pseudo langage Electronic Arts (appelé EOAPL). Computist 57 et 64.
Voir Article sur le MCODE Electronic Arts. DEPME 4.


hr EOA


Desassembleur EOAPL dans Computist


EOAPL est un autre nom donné pour le MCODE par l'auteur de l'article.

Computist 57
Computist 57
Computist 57
Computist 64
Computist 64


Retour sommaire


hr EOA

Le MCODE selon JB art (Elite Crack Band)


_______________________________________________________________________________

                   M     M          CCCCC   OOOOO   DDDDD   EEEEEE
                   MM   MM  -----  C       O     O  D    D  E
                   M M M M  -----  C       O     O  D    D  EEEE
                   M  M  M  -----  C       O     O  D    D  E
                   M     M          CCCCC   OOOOO   DDDDD   EEEEEE (2)

                                      PAR
                          JB art FROM ELITE CRACK BAND
_______________________________________________________________________________

LE MCODE EST LA DERNIERE PROTECTION DE CHEZ ELECTRONIC ARTS. CE LANGAGE A DEJA
ETE EMPLOYE SUR DE NOMBREUX ET NON MOINS CELEBRES LOGICIELS TELS QUE ARCHON II,
BARD'S TALE, ADVENTURE CONSTRUCTION SET, BOULDER DASH II..ET PLUSIEURS PIRATES
S'EN SONT INSPIRES LARGEMENT POUR CREER LEURS PROPRES PROTECTIONS. (JE SALUE
DONC LOT ET GODFATHER (1) AU PASSAGE!!). MAIS REVENONS EN AU FAIT. LE M-CODE
EST UNE SORTE DE LANGAGE, TRES LONG A DECODER MAIS QUI, UNE FOIS COMPRIS,
SEMBLE TRES FACILE. POUR LE COMPRENDRE, J'AI BOOT-TRACE LA ROUTINE PRINCIPALE
DU M-CODE ET J'AI PU AINSI DECODER LES INSTRUCTIONS. J'AI DONC DECOUVERT
PLUSIEURS CHOSES TRES INTERESSANTES A MON HUMBLE AVIS. TOUT D'ABORD, LES
FONCTIONS M-CODE (2) SONT CODEES DE $00 A $0F, ET IL SEMBLE TRES PROBABLE
QU'IL Y EN AIT 15. (LES AVIS DE PLUSIEURS DEPLOMBEUX COLLENT SUR CE POINT)
POUR MIEUX COMPRENDRE LES PRINCIPALES FONCTIONS, JE VOUS AI FAIT UN PETIT
TABLEAU AVEC LES FONCTIONS CONNUES DU M-CODE ET LEUR EQUIVALENT 6502.

        NUMERO     fonction                   equivalent en assem normal

         01        jump absolute (to MCODE)     JMP A UNE ROUTINE DU MCODE
         02        jsra absolute (to NORMAL)    JSR A UNE ROUTINE NORMAL
         03        bequ absolute (to MCODE)     BEQ A L'ADRESSE INDIQUEE
         04        ldaa absolute                LDA $.ex:lda $C000
         05        jsbr absolute (to MCODE)     JSR A UNE ROUTINE DU MCODE
         06        staa absolute                STA $.ex:sta $C010
         07        sbai immediate               CMP #$ + sbc acc
         08        jmpa absolute (to NORMAL)    JMP A UNE ROUTINE.(EX:JMP FF59)
         09        rtrn  inherent               RTS (FIN D'UNE ROUTINE MCODE)
         0A        ldax  indexe                 LDA $   ,X.ex:lda $1000,X
         0B        inc absolute                 INC $.
         0C        bneq absolute                BNE A L'ADRESS INDIQUEE
         0D        sbaa absolute                CMP $  .ex:CMP $2000
         0E        copy inherent                ???
         0F        ???                          ???

MAINTENANT, JE VAIS PARLER DE LA MANIERE DONT SONT CODEES LES ADRESSES POUR
DES FONCTIONS TELLES QUE JMP, JSR ET EGALEMENT DES VALEURS QUI SUIVENT LES
FONCTIONS TELLES QUE LDA, STA. JE COMMENCERAIS DONC PAR L'ADRESSAGE ABSOLU
DU M-CODE, SI L'ON PEUT DIRE AINSI. L'ADRESSAGE ABSOLU DU M-CODE EST FAIT DE
LA MANIERE SUIVANTE...
LA PARTIE BASSE QUI SUIT JUSTE L'INSTRUCTION EST CODEE PAR UN EOR #$03
TANDIS QUE LA PARTIE HAUTE EST CODEE PAR UN EOR #$D9. PRENONS UN EXEMPLE.
JE VOUDRAIS CODER LDA $C0E9 EN M-CODE. CECI DEVIENT 04 EB 19. OK?
BON. PARLONS DU CODAGE DES OCTETS QUI SUIVENT LES LDAi PAR EXEMPLE.
L'OCTET QUI SUIT EST CODE PAR UN EOR #$4C. L'EXEMPLE EST LE SUIVANT:
ON VEUT CODER LDA #$00, CA DONNE: 03 4C. CELA PEUT VOUS PARAITRE COMPLEXE
MAIS UNE FOIS COMPRIS, C'EST SIMPLE COMME HELLO. (3)
ATTENTION, JE NE DIS PAS QUE SI VOUS CONNAISSEZ LE M-CODE, IL VOUS SERA
POSSIBLE DE DEPLOMBER TOUS LES ELECTRONIC ARTS, IL SE PEUT QU'ILS FASSENT
DE NOUVELLES MODIFS DANS LA ROUTINE PRINCIPALE DE DECODAGE, POUR VOUS
RENDRE LA COMPREHENSION ENCORE PLUS BALAISE. (COMME L'ONT FAIT CERTAINS
DEPLOMBEUX DE MES RELATIONS...). EN TOUT CAS, J'ESPERE QUE CE FICHIER
VOUS SERA D'UNE GRANDE UTILITE. SI JAMAIS VOUS TROUVEZ DE NOUVELLLES
INSTRUCTIONS (ON NE SAIT JAMAIS...) ALORS LAISSEZ UN MESSAGE SUR MA BAL
EN T3 SUR HG : ECB (59). MERCI D'AVANCE!

                                                        JB art from ECB
_______________________________________________________________________________

(1) MSG DE GODFATHER: LE DOS DE DEP. III ETAIT UN 3.3 DONT J'AVAIS ARRANGE
    LA RWTS...MAIS LE DOS DE DEP. 5 SERA BASE SUR LE PRINCIPE DU M-CODE!!
(2) LE NOM D'ORIGINE ETAIT LE I-CODE.
(3) MISTER Z AVAIT DEJA FAIT ALLUSION A CES EOR DANS SON FICHIER ECA SUR DEP/3
_______________________________________________________________________________


Archon
Archon II

Retour sommaire