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 : Papy.G, fneck, Carl

Répondre
Xavier_AL

Déprotèger un programme MO5.

Message par Xavier_AL »

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 : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: Déprotèger un programme MO5.

Message par jasz »

Oui, un classique qui remplace le JMP par un RTS mais attention aux erreurs :P
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Déprotèger un programme MO5.

Message par Daniel »

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 : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Déprotèger un programme MO5.

Message par __sam__ »

Pourquoi pas un simple "poke &h217f,0" ? Le basic empêche-t-il le poke en page 1 du basic ?
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Déprotèger un programme MO5.

Message par Daniel »

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 : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: Déprotèger un programme MO5.

Message par jasz »

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 : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Déprotèger un programme MO5.

Message par Daniel »

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) Consulté 3203 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 : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: Déprotèger un programme MO5.

Message par jasz »

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 ;)
Pièces jointes
0.jpg
0.jpg (364.64 Kio) Consulté 3173 fois
Xavier_AL

Re: Déprotèger un programme MO5.

Message par Xavier_AL »

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 : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Déprotèger un programme MO5.

Message par Daniel »

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