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.
Déprotèger un programme MO5.
Modérateurs : Papy.G, fneck, Carl
Déprotèger un programme MO5.
BIDOUILLE-GRENOUILLE Hebdogiciel 94-97:
Re: Déprotèger un programme MO5.
Oui, un classique qui remplace le JMP par un RTS mais attention aux erreurs
Re: Déprotèger un programme MO5.
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 :
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.
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
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.
L'obstacle augmente mon ardeur.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Déprotèger un programme MO5.
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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: Déprotèger un programme MO5.
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.
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.
L'obstacle augmente mon ardeur.
Re: Déprotèger un programme MO5.
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
Re: Déprotèger un programme MO5.
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.
Même sans émulateur, avec un programme sur PC, on peut facilement protéger ou déprotéger un fichier xxxx.BAS
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.
L'obstacle augmente mon ardeur.
Re: Déprotèger un programme MO5.
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 (364.64 Kio) Consulté 3190 fois
Re: Déprotèger un programme MO5.
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 ?
Si on prend "REM"="POKE", on tape "REM $217F,0"...
C'est l'esprit ?
Re: Déprotèger un programme MO5.
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.
L'obstacle augmente mon ardeur.