Déprotèger un programme MO5.

Couvre tous les domaines de l'émulation ou de la virtualisation ainsi que les discussions sur les divers outils associés.

Modérateurs : Carl, Papy.G, fneck

Répondre
Avatar du membre
Xavier_AL
Messages : 556
Enregistré le : 06 déc. 2017 20:30

Déprotèger un programme MO5.

Message par Xavier_AL » 09 juil. 2019 04:56

BIDOUILLE-GRENOUILLE Hebdogiciel 94-97:
Tiens, en passant, si vous avez un MO5 el des sorfs protèges, faites:
POKE 8699,57
...chargez le programme et vous pourrez le lister et le modifier à loisir. Qu'est-ce que je cause bien, aujourd'hui.

jasz
Messages : 717
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: Déprotèger un programme MO5.

Message par jasz » 09 juil. 2019 13:10

Oui, un classique qui remplace le JMP par un RTS mais attention aux erreurs :P

Daniel
Messages : 11646
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Déprotèger un programme MO5.

Message par Daniel » 09 juil. 2019 13:38

Oui, jasz a parfaitement raison, ce POKE désactive le traitement de toutes les erreurs. C'est une méthode grossière et dangereuse.
Il est beaucoup plus propre de remettre à zéro l'octet de protection programme en $217F.
Voici la méthode que j'ai inventée à l'époque. Elle a 35 ans d'ancienneté mais fonctionne toujours aussi bien :

En BASIC 1.0, l'instruction AUTO n'est pas utilisée.
On la remplace par le programme de remise à zéro de $217F :

Code : Tout sélectionner

POKE&H2236,&H0F 
POKE&H2237,&H7F 
POKE&H2238,&H39
Ensuite, on charge le programme BASIC protégé puis on tape la commande AUTO ==> le programme BASIC est déprotégé.
Avec cette méthode le système de traitement des erreurs n'est pas désactivé, il n'y a aucun effet secondaire indésirable.
Daniel
L'obstacle augmente mon ardeur.

__sam__
Messages : 4600
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Déprotèger un programme MO5.

Message par __sam__ » 09 juil. 2019 13:54

Pourquoi pas un simple "poke &h217f,0" ? Le basic empêche-t-il le poke en page 1 du basic ?
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.

Daniel
Messages : 11646
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Déprotèger un programme MO5.

Message par Daniel » 09 juil. 2019 14:25

Oui, quand un programme BASIC protégé est chargé plusieurs instructions sont désactivées, en particulier PEEK, POKE, LIST, EXEC, SAVE, LOADM, SAVEM et peut-être d'autres. Elles produisent l'erreur 61 (Programme protégé).

L'instruction AUTO n'est pas désactivée, et en plus elle n'est pas implémentée en BASIC 1.0, c'est pourquoi je l'ai utilisée.

Une variante, que je n'ai pas utilisée mais qui devrait marcher, serait de détourner l'instruction AUTO vers la routine qui effectue le POKE. On pourrait ainsi taper AUTO &H217F,0 sans avoir l'erreur 61.
Daniel
L'obstacle augmente mon ardeur.

jasz
Messages : 717
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: Déprotèger un programme MO5.

Message par jasz » 09 juil. 2019 15:02

Il faut savoir que seul le programme basic est protégé et non le programme binaire. En fouillant dans les tampons on trouve l'adresse de début et l'adresse d’exécution... Que j'ai perdu avec le temps :oops:

Daniel
Messages : 11646
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Déprotèger un programme MO5.

Message par Daniel » 09 juil. 2019 16:03

Il y a bien longtemps que je n'ai pas déprotégé un programme BASIC avec un vrai MO5. C'est tellement plus simple avec l'émulateur dcmoto : dans l'outil de mise au point, il suffit de décocher la case de protection, ce qui remet automatiquement à zéro l'octet $217F.

deprotection.png
deprotection.png (29.03 Kio) Vu 183 fois

Même sans émulateur, avec un programme sur PC, on peut facilement protéger ou déprotéger un fichier xxxx.BAS

Code : Tout sélectionner

//Decryptage du programme Basic////////////////////////////////////////////////
void Decryptage(int s)
{
 //s : 0=deprotection  1= protection
 int i, a;
 int cod0[] = {0,0x86,0x1e,0xd7,0xba,0x87,0x99,0x26,0x64,0x87,0x23,0x34,0x58,0x86};
 int cod1[] = {0,0x80,0x19,0x56,0xaa,0x80,0x76,0x22,0xf1,0x82,0x38,0xaa};
 int c[2];
 c[0] = 13;
 c[1] = 11;
 for(i = 3; i < basicsize; i++)
 {
  a = (basic[i] & 0xff) - c[s];
  if(a < 0) a += 256;
  a ^= cod0[c[0]];
  a ^= cod1[c[1]];
  a += c[1 - s];
  if(a > 256) a -= 256;
  c[0]--; if(c[0] == 0) c[0] = 13;
  c[1]--; if(c[1] == 0) c[1] = 11;
  basic[i] = a;
 }
}
Daniel
L'obstacle augmente mon ardeur.

jasz
Messages : 717
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: Déprotèger un programme MO5.

Message par jasz » 09 juil. 2019 20:48

Ce n'est pas une exclusivité dans la mesure ou 32 ans plus tôt j'avais noté cela sur mon guide précieux du MO6. Et à l'époque je ne connaissais pas hebdogiciel ;)
Fichiers joints
0.jpg
0.jpg (364.64 Kio) Vu 153 fois

Avatar du membre
Xavier_AL
Messages : 556
Enregistré le : 06 déc. 2017 20:30

Re: Déprotèger un programme MO5.

Message par Xavier_AL » 10 juil. 2019 01:16

Donc, si je comprends bien, on utilise la commande valide "AUTO" et on redirige son vecteur Basic.
Si on prend "REM"="POKE", on tape "REM $217F,0"...
C'est l'esprit ?

Daniel
Messages : 11646
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Déprotèger un programme MO5.

Message par Daniel » 10 juil. 2019 08:33

Oui, c'est le principe. Sauf que REM est une commande valide en BASIC 1.0, donc toutes les remarques du programme chargé vont faire des POKE, ce qui n'est probablement pas le résultat souhaité.
Daniel
L'obstacle augmente mon ardeur.

Répondre