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.
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.
Sommaire
Lien |
Information |
Source |
|
Articles sur le pseudo langage Electronic Arts
(appelé EOAPL). |
Computist 57 et 64. |
|
Article sur le MCODE Electronic Arts. |
DEPME 4. |
Desassembleur EOAPL dans Computist
EOAPL est un autre nom donné pour le MCODE par l'auteur de
l'article.
Retour sommaire
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
_______________________________________________________________________________
|
|
Retour sommaire