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...
Inscription : 12 Juin 2008, 20:29 Message(s) : 1711
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 !
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 !!!
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 !!!
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...
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
Inscription : 20 Août 2007, 18:21 Message(s) : 5002
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 :
tu selectionne ta partie à sauver dans la RAM et non pas dans la ROM ( "write" doit être coché )
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 ?)
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 ?)
é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…
Dernière édition par Babar le 27 Oct 2008, 00:43, édité 1 fois.
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:
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)
Dernière édition par Babar le 29 Oct 2008, 14:00, édité 1 fois.
Inscription : 29 Août 2007, 12:04 Message(s) : 1990 Localisation : seine et marne 77
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.....
_________________ SPS Community Expert (SPS CE) / SPS France
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.
é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...
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 15 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum