CPC Rulez
https://cpcrulez.fr/forum/

Protections sur Amstrad CPC
https://cpcrulez.fr/forum/viewtopic.php?f=6&t=223
Page 5 sur 16

Auteur :  markerror [ 20 Sep 2008, 07:59 ]
Sujet du message :  Re: Protections sur Amstrad CPC

Pour faire un "vrai" fichier Basic du chargeur, c'est pas bien compliqué. Il suffit de charger en mémoire le fichier (Hacker, ou routine utilisant les vecteurs système), puis de le sauver à partir de &170 en indiquant qu'il s'agit d'un fichier Basic.

Ce type de "protection" a été utilisée à ma connaissance pour la première fois dans un vieux jeu d'aventure que j'ai transféré il y a peu de temps, "Le Dernier Metro". Ce n'est pas très courant dans les softs commerciaux, et à part Hercule, je l'ai trouvé aussi dans un éducatif dont ke nom m'échappe pour l'instant...

Ces routines pour la plupart se plantent sur CPC Plus, pour une sombre raison de connexion des rom. Faudra d'ailleurs que je mette à jour mon site, j'ai une routine debugguée qui fait ce genre de bidouille...

T&J/GPA

Auteur :  hERMOL [ 20 Sep 2008, 09:29 ]
Sujet du message :  Re: Protections sur Amstrad CPC

sous winape tu sauve les données en &170 pui apres un reset tu les recherchage .. si j'avais ton orginal je te fais ca en deux deux :bomb:

Auteur :  Megachur [ 20 Sep 2008, 10:01 ]
Sujet du message :  Re: Protections sur Amstrad CPC

allez, je te lance une autre idée...

vu que tu as les octets du programme basic...

tu les pokes en mémoire à partir du basic et tu listes le résultat...

simple non ?! ;-)

Bonne suite... Allez au boulot ! :D

P.S : markerror & Hermol -> je crois que le but de Babar est de ne pas utiliser d'émulateur ou cartouche pour rendre le truc copiable...juste pour se prouver qu'il peut le faire sur un vrai cpc sans truc additionnel !!! 8)

Auteur :  Babar [ 20 Sep 2008, 14:26 ]
Sujet du message :  Re: Protections sur Amstrad CPC

Megachur a écrit :
vu que tu as les octets du programme basic...
tu les pokes en mémoire à partir du basic et tu listes le résultat...
simple non ?! ;-)

D'une logique implacable ! Mignon comme idée ! Mais un peu long à mettre en oeuvre.

hERMOL a écrit :
sous winape tu sauve les données en &170 pui apres un reset tu les recherchage ..

J'ai essayé de faire "save snapshot" du menu "File", puis Reset, puis load"snapshot" mais ça lance le Basic automatiquement donc je ne peux pas LISTer.
J'ai aussi essayé dans le Debuggeur de faire "save data" (la petite disquette) en format .bin, mais ça ne marche pas.
HERMOL, tu "sauves en &170" comment sous WinAPE ?

markerror a écrit :
puis de le sauver à partir de &170 en indiquant qu'il s'agit d'un fichier Basic

Je n'ai plus la Bible du PC donc je ne sais pas quel CALL permet de sauver un fichier...

Megachur a écrit :
je crois que le but de Babar est de ne pas utiliser d'émulateur

C'est vrai qu'il n'y a pas de mérite à appuyer sur un bouton de Multiface...ça n'a aucune subtilité.
D'ailleurs avec Hercule II en jouant avec le Débuggeur de WinAPE je suis arrivé assez rapidement à une routine qui XOR la suite du programme. Cracker avec WinAPE est un jeu d'enfant !
Mais je suis arrivé au milieu de la protection sans comprendre ce qui s'était passé avant, donc va falloir continuer là où on en était.

En plus j'ai découvert le Débuggeur WinAPE avec ses Breakpoints, etc, un REGAL !!! :magic:

Et surfer toute la mémoire du CPC d'un coup d'ascenseur c'est OVER GRAND !

De préférence j'aimerais déplomber le soft sans émulateur, sans tricherie, à l'ancienne, mais si la modernité peut nous faire gagner du temps, vu qu'on en a pas bcp... 8)

L'idée de fond est d'être ingénieux, et d'apprécier l'ingéniosité donc la beauté (?) d'une protection, et de jouer à la déplomber...mais sans émulateur/multiface ce qui reviendrait à se mettre VieInfinies sur un jeu, ou un personnage avec 25 en Force à Dungeons&Dragons :kissed:

Auteur :  hERMOL [ 20 Sep 2008, 17:32 ]
Sujet du message :  Re: Protections sur Amstrad CPC

Babar a écrit :
hERMOL a écrit :
sous winape tu sauve les données en &170 pui apres un reset tu les recherchage ..

J'ai essayé de faire "save snapshot" du menu "File", puis Reset, puis load"snapshot" mais ça lance le Basic automatiquement donc je ne peux pas LISTer.
J'ai aussi essayé dans le Debuggeur de faire "save data" (la petite disquette) en format .bin, mais ça ne marche pas.
HERMOL, tu "sauves en &170" comment sous WinAPE ?


dans le debugger , comme sur le screenshot :

Image

tu selectionne ta partie à sauver dans la RAM et non pas dans la ROM ( "write" doit être coché )

Auteur :  Babar [ 21 Sep 2008, 14:47 ]
Sujet du message :  Re: Protections sur Amstrad CPC

Merci hERMOL. Cool ce WinAPE !

Auteur :  Babar [ 21 Sep 2008, 14:59 ]
Sujet du message :  Re: Protections sur Amstrad CPC

DEPLOMBAGE D'HERCULE II: solution de l'étape 1

L'objectif est de pouvoir LISTer la partie Basic du fichier ESAT hybride binaire-basic:
    Charger DAMS en &4000
    Faire NEW pour enlever le Basic de Dams
    load"ESAT",&A000
    Dans Dams faire un LDIR pour repositionner le code Esat chargé en &A000 vers son adresse originale &134
    Taper "B" dans Dams pour retourner au Basic, il suffit de faire LIST

Ce Basic ne semble pas protégé, il charge l'écran de présentation, puis ensuite fait un RUN"LATIS" (on peut penser que cette protection du Basic avait pour objectif de ne pas permettre à Monsieur/Madame tout le monde de faire sauter l'écran de présentation trop facilement ?)

Auteur :  Babar [ 21 Sep 2008, 15:13 ]
Sujet du message :  Re: Protections sur Amstrad CPC

DEPLOMBAGE D'HERCULE II: étape 2: le fichier LATIS.BAS

Ce fichier est protégé par un SAVE ,P...
Solution: on peut le loader à partir du binaire tout en faisant sauter la protection (d'ailleurs j'ai pas trouvé l'endroit dans le Catalogue de la D7 où est le flag de protection à faire sauter..si quelqu'un sait...je l'ai fait avec un petit prog en Basic).

Ensuite en faisant LIST, on n'a que 4 lignes de remarques.
Les autres lignes, visiblement, ou plutôt invisiblement, n'apparaissent pas !

Les lignes Basic commencent en effet par 4 octets qui précisent le N° de ligne, et la longueur de la ligne. On peut rendre des lignes invisibles en modifiant cette longueur.
Or il s'avère que la Longueur de la ligne n'est utilisée que par la commande LIST, et pas par la commande RUN, donc l'affichage est perturbé, mais l'exécution du programme Basic est toujours possible.

Laissez-moi le temps de repositionner la bonne longueur de chaque ligne (ce qui sera pas évident, car faut pouvoir identifier la fin d'une ligne, quelqu'un sait-il s'il y a un code de fin de ligne et lequel ?)

Auteur :  Babar [ 26 Oct 2008, 17:16 ]
Sujet du message :  Re: Protections sur Amstrad CPC

étape 2: obtenir le LISTing du basic LATIS.BAS (qui n'affiche que 4 lignes alors qu'il y en a bcp plus):

Remarque1 : quand on dumpe la partie de la mémoire correspondant au programme Basic, on distingue une liste de DATA : F3, F1, ED,… On peut raisonnablement imaginer que le code Basic poke ces valeurs en mémoire pour les exécuter ; en les pokant, on obtient ceci :

Code :
DI
POP AF
IM 2
RLCA
DAA
LD I,A
RET PO
XOR (HL)
LD D,A
LD BC,#1914
IN A,(C)
ADD D
LD I,A
LD HL,#7000
OTIR
RET

La suite d’instructions est logique (c-a-d que ce n’est pas une suite incohérente de données, mais vraiment du code assembleur) par contre pour savoir ce que cela peut bien faire concrètement…en tous cas ça concerne les interruptions…


Remarque 2: en faisant ce dump de la partie Basic, on peut aussi lire ceci :

FOR N=&170 TO &2C0:IF PEEK(N)>&1F THEN ?CHR$(PEEK(N));:NEXT N

…ce qui affiche le copyright et autres noms d’auteurs.
D’ailleurs la visibilité sur les commande « FOR N… » ci-dessus n’est pas logique, car en Basic les commandes ne sont pas représentées par des codes Ascii mais par des codes internes, donc le fait de voir cette ligne est un clin d’œil volontaire du programmeur…a priori pour faire tourner en bourrique le cracker, et insister sur le nom du logiciel, l'éditeur, etc…

Auteur :  Babar [ 26 Oct 2008, 17:39 ]
Sujet du message :  Re: Protections sur Amstrad CPC

Babar a écrit :
Laissez-moi le temps de repositionner la bonne longueur de chaque ligne (ce qui sera pas évident, car faut pouvoir identifier la fin d'une ligne, quelqu'un sait-il s'il y a un code de fin de ligne et lequel ?)

Visiblement personne n'avait la réponse, en creusant un peu il semblerait en fait que les lignes du Basic soient terminées par un 00.

Pour positionner les bonnes longueurs de ligne, j'ai préféré développer un petit programme automatique (que vous pourrez ainsi réutiliser car de mémoire plusieurs jeux étaient protégés de la sorte) qui cherche le prochain zéro, recalcule la longueur de la ligne et la corrige, ceci pour tout le programme Basic:

Code :
ld hl,#170

b1: push hl
pop de
inc hl
inc hl
ld a,(hl)
inc hl
add a,(hl)
ret z

ld bc,4
cherche0: inc hl
ld a,(hl)
inc bc
or a
jr nz,cherche0

ld a,c
ld (de),a
inc dec
ld a,b
ld (de),a
inc hl
jr b1

Oui, d'accord la programmation n'est pas très pro...mais ça faisait 23 ans que je n'avais plus programmé en Z80 !!!

[Texte ajouté + tard au msg] Après avoir creusé, en fait ce programme ne fonctionnera pas bien, car si en effet chaque ligne se termine par un zéro, il peut y avoir des zéros en milieu de ligne par exemple dû à un poke(&AC00) avec le 00 du AC00...donc pour bien recaler les longueurs de ligne, soit il faut décoder chaque token Basic pour faire des sauts de puce, soit tatonner visuellement...et c'est ce que je fais, et ça marche pas mal, bientôt fini...

Par contre cela ne suffit pas pour obtenir tout le listing de latis.bas, car on n'obtient que 3 lignes de plus qui ne sont que des commentaires...
Il y a visiblement insérées au milieu plusieurs lignes factices qui ne semblent pas exécutées par le Basic mais qui perturbent l'affichage du Listing, donc on ne peut pas voir la suite du programme Basic.
J'ai tatonné pendant plus d'une heure à essayer de recoller les longueurs de ligne (en essayant de sauter les lignes factices) mais je n'ai réussi qu'à obtenir une seule ligne supplémentaire: :cry:

270 INK 0,0:INK 1,15:PEN 1:PAPER 0

...oui, bon, je galère...mais je vous tiens au courant dès que j'arrive au bout du Basic... :?

(évidemment si quelqu'un a une idée...? Ma technique est simplement de me placer sur la dernière ligne Basic qui s'affiche bien, et d'augmenter sa longueur pour sauter la ligne suivante et etc sauter chaque ligne qui suit jusqu'à ce que la ligne suivante s'affiche correctement...et rebelote)

Auteur :  dlfrsilver [ 26 Oct 2008, 22:53 ]
Sujet du message :  Re: Protections sur Amstrad CPC

Je l'ai choppé sur ebay, mais le dump ne marche sur aucun émulateur.....

Enfin, sur CPCE on arrive jusqu'a l'écran LATIS sur winape il arrive meme pas à lire le catalogue (m'énerve celui-là!)
et wincpc ça n'arrive pas à l'écran de présentation.....

Auteur :  Babar [ 27 Oct 2008, 00:21 ]
Sujet du message :  Re: Protections sur Amstrad CPC

Salut dlfrsilver,
(même si ta remarque n'est pas dans le sujet de ce post, et plutôt dans le post référencé ci-dessous, elle est intéressante)

* Si tu parles d'un dump original d'Hercule II, ça paraît logique qu'il ne soit pas émulable car sa protection doit être très "couches basses code machine", on va d'ailleurs pas tarder à y arriver dans ce post une fois que j'aurai franchi le Basic...

* Si tu parles d'un dump déplombé, et qui a du mal à fonctionner car chaque programme fait appel plus ou moins directement au FDC, c'est logique aussi, et tu trouveras le résultat de mes tests en cliquant là. En synthèse seul WinAPE semble arriver à le faire fonctionner + ou - après avoir décoché FastDriveEmulation.

Auteur :  hERMOL [ 27 Oct 2008, 08:47 ]
Sujet du message :  Re: Protections sur Amstrad CPC

dlfrsilver a écrit :
Envoyez les dumps les gars, même le dump plombé nous on prend !


je veux bien y jeter un oeil, mais j'ai pas ton original Babar, autant travailler sur la même version non ?

Auteur :  Babar [ 29 Oct 2008, 00:39 ]
Sujet du message :  Re: Protections sur Amstrad CPC

(hERMOL comment je peux te transmettre le dump ?)

étape 2: obtenir le LISTing du basic LATIS.BAS (qui n'affiche que 4 lignes alors qu'il y en a bcp plus):

Remarque3 : quand on dumpe la mémoire du programme Basic on voit un LATIS.BIN, donc on peut supposer que c'est la suite du programme.
Voici son contenu:

Code :
org #8000

ld a,#01
ld (#be66),a  inhibe les erreurs
ld (#be78),a        1 seul essai
ld c,#07
call #b90f      ROM7 disquette
ld a,r          recupere la valeur R  (interruptions)
ld d,a           
ld c,a                secteur a lire
ld hl,#7000     emplacement ou mettre le secteur lu
push hl
ld e,l

.l8016  ld a,d
and #1f
ld d,a             d est la piste
call #c03c      lis un secteur
jp c,#7000      execute le contenu du secteur si Carry
ld a,r          modifie la Piste et le Secteur en fonction de R
ld c,a
add #ad
ld d,a
jr l8016              retourne a la lecture de secteur


Tout ceci me laisse perplexe, notamment le fait de lire une Piste/Secteur basée sur R dont je ne vois pas d'où peut bien venir la valeur...donc je préfère continuer à rendre visible les lignes du Basic...

Auteur :  hERMOL [ 29 Oct 2008, 05:06 ]
Sujet du message :  Re: Protections sur Amstrad CPC

Babar a écrit :
(hERMOL comment je peux te transmettre le dump ?)


https://cpcrulez.fr/forum/faq.php#f90

les fichiers autoriser sont les .zip , donc zip ton fichier .dsk et join le au message ...

le dialog est la , en bas de la page : http://cpcrulez.free.fr/img/phpbbfiles.jpg

Page 5 sur 16 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/