9751
UTILITAIRE -> Outils pour disquettes et cassettes
© GPA (2003)
 
 
 
Loriciels To Disk 1.0
cpc
 
 

NOTICE / MANUAL

TXT (3)

NOTICE TEXTE n° 1 (11.79 Ko)

Loriciels to disk 1.0 (c) Tom et Jerry du GPA ********************* (c) 11/2003 Maj du 27/03/2004 ! Cet archive contient deux utilitaires permettant de transferer de cassette sur disquette un certain nombre de programmes originaux vendus par la societe d'edition Loriciels. Ces logiciels utilisent des "loaders" ou routines de chargement qui ne permettent pas un transfert classique avec Discology ou Transformateur 3000, par exemple. LTD permet de copier les programmes Loriciels utilisant un loader maison generique qui sert aussi de protection. Important : Loriciels To Disk ne pretend pas etre exhaustif ! Il existe certains programmes qui ne peuvent pas etre transferes avec cet outil, car ils utilisent d'autres routines de chargements (Lorigraph, par exemple). Comme je n'ai pas tous les programmes Loriciels en originaux, je ne peux pas vous faire une liste complete des programmes a probleme (les dons sont acceptes :-) ). La section 4 contient les programmes non copiables avec LDT que j'ai pu verifier. 1) Quels programmes Loriciels to Disk peut-il transferer ? ---------------------------------------------------------- LTD permet de traiter deux types de chargeurs K7. Ces loaders se reperent facilement grace a une page de presentation du programme en mode 1 affichant le nom du logiciel charge en dessous du dessin d'un petit chaton jouant avec une balle. Au cours de sa carriere d'editeur, Loriciels a change de protection. On distingue deux chargeurs, le type 1 et le type 2. Loader type 1 ------------- * Le premier fichier est un fichier BASIC protege * Le deuxieme fichier est un tres court fichier BINAIRE * Le troisieme fichier (non chargeable directement) contient le loader avec le chaton. Le loader de type 1, a ma connaissance, ne permet de charger qu'un seul fichier, puis de l'executer. Il a ete utilise avec les programmes les plus anciens publies par Loriciels (1er semestre 1985, en gros). Bref, vous ne devriez pas trop le rencontrer. Loader type 2 ------------- * Le premier fichier est un fichier BINAIRE implante en &7530, de taille &638, et dont le nom est "** LORICIELS **". Ce chargeur est plus evolue en ce sens qu'il permet de charger a la suite plusieurs fichiers. Il a ete utilise soit pour mettre en memoire l'integralite d'un programme, soit pour charger son premier fichier. Dans ce dernier cas, un autre loader prend la suite des operations. En general, il s'agit d'un simple appel a la routine &BCA1. En fonction des programmes proteges, il existe un nombre important de variantes, voyez a ce sujet la section 3. Pour plus d'informations sur ces deux chargeurs, consultez le fichier ANALYSE.TXT. Pour aller plus loin, vous avez meme droit a des dumps memoire un peu commentes, LOADER1.TXT, LOADER2.TXT et LOADER2B.TXT. A ma grande surprise, j'ai decouvert en decembre 2003 qu'un logiciel de transfert pour cette protection existait deja. Il s'agit d'un outil commercial vendu dans la compilation Nemesis Express ! Il remplit lui aussi son oeuvre mais ne vous explique pas comment fonctionne la protection Loriciels... 2) Utiliser LORI1.BAS --------------------- Tout est tres simple et est vraiment a la portee du premier venu, quand tout se passe bien ! * Copier le fichier LORI1.BAS sur une disquette formatee. * Placez la cassette originale a transferer dans le lecteur de K7. * Positionnez la bande de la cassette juste apres le premier fichier qu'elle contient. Si vous ne savez pas comment faire, tapez les commandes suivantes en mode direct. ùTAPE CAT Une fois le premier fichier affiche, appuyer sur la touche ESC. Voila, vous etes au bon endroit ! * Faire un reset du CPC * Lancer le programme LORI1.BAS Le CPC vous demande le nom du programme a sauver sur disquette. Vous pouvez mettre n'importe quel nom, sous reserve qu'il soit valide (pas plus de 8 caracteres). Faites quand meme en sorte qu'il ait un rapport avec le programme transfere. Tout le reste est automatique. Le programme va d'abord charger en memoire le loader du jeu puis le sauvegarder. Il modifie ensuite son contenu et l'execute. Vous devez voir la page de presentation du programme avec le chaton, tandis que la cassette se deroule. Une fois le programme charge en memoire, il est sauve sur la disquette, puis le CPC se reinitialise. Si tout s'est bien passe, vous devez avoir deux nouveaux fichiers sur votre disquette, ayant les extensions .1 et .2 <fichier>.1 correspond an loader du programme <fichier>.2 correspond au programme lui-meme. Pour utiliser ensuite ce logiciel, deux solutions : Executer avec la commande RUN le fichier <fichier>.2. Charger en memoire le programme LOADER1.BAS, modifier le nom du programme en ligne 10, puis le sauvegarder. Vous aurez ainsi la joie de posseder une version complete de votre programme, avec la page de presentation Loriciels ! Ce programme a ete teste avec succes sur les jeux suivants : RALLY II (version 464/664/6128) et 3D-Fight. 3) Utiliser LORI2. ------------------ Sans etre particulierement compliquee, l'utilisation de ce module de transfert requiert un peu d'attention. Le debut de la procedure d'utilisation est similaire a LORI1. * Copier les fichiers LORI2.BAS et LORI2.BIN sur une disquette formatee. * Placez la bande originale dans votre lecteur de K7 et rembobinez la completement. * Lancez le programme LORI2.BAS. * Si LORI2 est lance pour la premiere fois, il va vous demander le nom du programme a transferer. Il va ensuite charger en memoire le loader du jeu, puis le sauvegarder sur la disquette, sous le nom <fichier>.1. Il va egalement sauvegarder un fichier LORI2.DAT, contenant le nom que vous avez tape precedemment. Ce fichier sert aussi a indiquer a LORI2 qu'il doit charger <fichier>.1, analyser son contenu et tenter de transferer un fichier de cassette sur disquette a partir des informatons collectees. Le programme reinitialise ensuite le CPC. * Relancez LORI2. Le programme lit le fichier <fichier>.1, l'analyse puis affiche le nombre de fichiers a transferer. A ce stade, vous devez saisir le numero du fichier a copier (entre 1 et x). Si aucun fichier n'a encore ete transfere, il faudra taper 1. * LORI2 charge en memoire le fichier K7, puis le sauvegarde sur le disque. Si l'adresse d'implantation du fichier est &16F, il l'enregistrera sous la forme d'un fichier BASIC. Ensuite, le programme reinitialise le CPC. En faisant un catalogue de votre disquette, vous devez trouver un nouveau fichier. * Il faut relancer LORI2 autant de fois qu'il y a de fichiers K7 a copier sur disquette. Si le fichier transfere est le dernier, il aura une adresse d'execution correspondant a celle du programme. Si pour une raison quelconque, vous voulez reprendre le transfert depuis le debut, il faut effacer sur la disquette le fichier LORI2.DAT et de lancer LORI2.BAS. Une fois la phase de transfert terminee, il ne nous reste plus qu'a concocter un chargeur permettant de mettre en memoire les fichiers et executer le programme transfere. La encore, on vous a mache le travail. * Charger le programme LOADER2.BAS * Modifier le nom du fichier en ligne 10. * Sauvez le fichier sous le nom de votre programme transfere. * C'est fini. En theorie, si vous etes arrives jusque la, vous devriez avoir un beau programme en train de fonctionner sur votre CPC. Si cela ne marche pas, trois explications : * Vous avez loupe une etape : verifiez le nombre de fichiers transferes et leurs caracteristiques par rapport a ce que LORI2 vous indique. * Un des fichiers transferes est loge dans une zone memoire necessaire au fonctionnement de la routine de sauvegarde. (La zone &A800-&BFFF). * Le programme est incomplet, l'adresse d'execution du dernier fichier lance un autre chargeur cassette. Vous devrez dans ce cas en faire l'etude et faire votre propre routine de transfert, bon courage ! Ce programme a ete teste avec succes sur les jeux suivants : 3D-Sub ------ Transfert standard. L'execution du programme necessite la personnalisation du fichier LOADER2.BAS. Billy la Banlieue ----------------- Transfert (presque) standard. La cassette contient deux fichiers avant le loader Loriciels. Un Basic et un binaire, tres facile a transferer. Il faut lancer LORI2.BAS apres ces fichiers. Le fichier <fichier>.2 peut etre lance directement. Invitation ---------- Transfert non standard. Comme pour Billy la banlieue, le loader Loriciels se trouve apres un chargeur Basic et une page ecran. On peut transferer avec LTD le programme principal, mais ce dernier charge un autre fichier. Probleme, le fichier principal d'INVITATION est code, donc pas directement patchable. Dans ma mansuetude legendaire, je vous donne la marche a suivre : Transferer le dernier fichier avec le programme suivant : 10 OPENOUT"d":MEMORY &3FFF 20 FOR i=&BE80 TO &BE8A:READ A$:POKE i,VAL("&"+a$):NEXT 30 DATA 21,00,C0,11,00,40,3E,5D,C3,A1,BC 40 CALL &BE80 50 SAVE "INVITAT.SC2",b,&C000,&4000 Ensuite, pour pouvoir lancer le jeu, tapez le listing suivant : 10 MODE 0:OPENOUT"d":MEMORY &12EB 20 LOAD "INVITAT.2" 30 LOAD "INVITAT.SC2" 40 POKE &BCA1,&C9:POKE &BC0E,&C9 50 CALL &7A00 Bon, evidemment, pour avoir un programme reproduisant le chargement de l'original, il vous faudra mixer le loader BASIC original et celui-la. A noter que le programme se plante sur CPC plus. Maracaibo --------- Transfert standard. Le fichier principal est directement executable. Marius Tresor Foot ------------------ Transfert standard. Une fois les deux fichiers sur disquette, il ne vous reste qu'a parametrer le fichier LOADER2.BAS. A la limite, vous pouvez meme executer en mode direct le fichier <fichier>.2. Pro-Tennis (version anglaise de Tennis 3d) ---------- Transfert non standard. Le loader Loriciels charge une fichier binaire contenant lui-meme un autre chargeur, non protege. Le plus simple consiste a detourner ce chargeur en &805A vers une routine de sauvegarde. A vous de bricoler un peu, apres tout ! Reversi Champion ---------------- Transfert standard. Le fichier <fichier>.2 est un programme BASIC. On ne peut donc pas utiliser comme modele LOADER2.BAS. Tapez le listing ci-dessous et sauvez-le sous le nom de <fichier>.BAS. 10 MODE 1:OPENOUT"d":MEMORY &752F 20 LOAD "reversi.1" 30 POKE &75B3,&0:CALL &7552 40 LOAD "reversi.3":LOAD "reversi.4" 50 CALL &BB4E:CLEAR:MEMORY &7FFF:RUN"reversi.2" Sapiens ------- Transfert standard. Le fichier principal est executable directement, mais vous auriez tort de vous priver de la page de copyright Loriciels. Personnalisez donc le fichier LOADER2.BAS. 4) Les recommandations du chef ****************************** Avant de vous lancer tete baissee dans un transfert, verifiez que votre cassette originale fonctionne correctement. N'oubliez pas que la plupart des programmes sont enregistres sur les deux faces de la cassette ! Si votre programme ne se charge pas correctement : * Loader de type 1 : c'est foutu ! * Loader de type 2 : s'il y a plusieurs fichiers, essayez de les transferer a partir de chacune des faces. Avec un peu de chance, les fichiers endommages ne sont pas les memes. Dans tous les cas, LTD ne sauvegarde jamais sur disquette un fichier endommage, car le loader Loriciels fait un reset en cas de probleme de chargement. L'ecran est alors affuble de soubressauts desagreables ! Loriciels to Disk ne permet pas de transferer les programmes suivants : --------------------------------------------------------------------- Graftric, Infernal runner, Le diamant de l'ile maudite, Lorigraph, Planete Base, Tony truand, Turbo Cup, Rally II version 464 (ma version ne fonctionne pas du tout !).
 

NOTICE TEXTE n° 2 (8.67 Ko)

Loriciels to disk 1.0 (c) Tom et Jerry du GPA ********************* (c) 11/2003 Last update 03/26/2004 English user, I apologize for my awful writing, my ugly style... Bu I suppose a bad english notice is always better than a good french one :-). This program is a duo of tools which purpose is to copy on disk some tape programs sold in the eighties by the famous french software house, Loriciels. This company used to sell protected programs, so that it is not possible to do a copy easily without a specific program. Fortunately, LTD can do this awful job ! As I have a game sold in England with that kind of protection (Pro-Tennis), I have decided to release an international release (my god !) of this little tools. Please note ! ------------- LTD is not the ultimate tape to disk program ! Some Loriciels' games are not protected with the "Cat loader", like Lorigraph. You can find in section four a list of tested softwares that are not LTD compatible. 1) What kind of program Loriciels to Disk can transfer ? -------------------------------------------------------- LDT is able to unprotect two kinds of loaders. You can easily locate then thanks to their introduction screen in MODE 1. It shows a cute little cat playing with a ball. Why two loaders ? In fact, Loriciels has totally changed the way its programs are protected but the looking of the loader is the same ! Loader mark 1 (probably not spreaded out of France). ------------- * First file is a Basic protected program. * Second file is a short binary routine (&BCA1 loader). * Third file (not loadable) is the "real" loader. This kind of loader can only load one binary file and launch it. It has been used on some older Loriciels' games (first half-year of 1985). So, it is not an usual loader. Loader mark 2 -------------- * First file is a binary program, start in &7530, length of &638 bytes. Its name is "** LORICIELS **". This program is more sophisticated because it can load several files, and has the rare ability to execute Basic code. it has been used in two ways : * load all files of a program and start it. * load the first file of a program and launch it. In the second case, there is in the loaded program another loader, usually a common &BCA1 routine. If you like machine code, just have a look on the LOADER1.TXT and LOADER2.TXT memory dumps. Sorry, only short explanations in french... I have been quite surprised to discover a commercial tool that do the same nasty thing as LTD (loader mark 2 only !). It is Nemesis Express. 2) I wanna use LORI1.BAS ------------------------ A really comprehensive tool, everything is automatic ! Read and enjoy : * Copy file LORI1U.BAS on a blank formatted disk. * Put the original tape in the recorder. * Load manually the first Basic file. If you don't know how to do this, type these instructions : ùTAPE LOAD"!" * When your CPC answer READY, reset it ! * Start LORI1U.BAS program. The CPC now needs an input, the tape program name. You can choose whatever you want, but this word can't have more than eight characters. Now, Arnold will do the job by itself... LORI1U.BAS first loads the game loader in memory then saves it onto disk. It alters its code and starts it. You should see the introduction screen with the cat whereas the game loads. At the end of the process, the program in memory is saved onto disk then your CPC resets. After this treatment, you should find two new files on the disk, with the extension <file>.1 (original loader) and <file>.2 (main program). There is two way to run the hacked program : RUN the file <file>.2. Use the file LOADER1.BAS, put the program name in line 10 (no extension) and save it as the game loader. Now you have a carbon copy of the program ! LORI1U.BAS has been successfully tested with : RALLY II (version 464/664/6128) and 3D-Fight. 3) How to use LORI2 ------------------- Well, altought this program doesn't need extremely high intellectual capabilities, it needs a minimum of attention. The first steps are basically the same as for LORI1U.BAS * Copy files LORI2U.BAS and LORI2U.BIN onto a formatted disk. * Rewind the tape in your recorder. * Start the program LORI2U.BAS. * If LORI2U is launched for the first time, it asks you for the name of the program to hack. Then, it puts in memory the game loader, and saves it on your 3 inch disk (name <file>.1). It creates too another file, LORI2.DAT, to store the name you have typed. Thanks to it, LORI2U knows that the next time it is launched, it must start the COPY mode. To finish the first event, your CPC resets. * Start again LORI2U. It looks for LORI2.DAT. If found, it loads LORI2U.BIN, scans it and displays the number of tape files to transfer. You have to enter the file number you want to load. The first time, you must of course type 1. * LORI2U loads the choosen file in memory then saves it. If the load address is &16F, the program is considered as a Basic software. At the end of the save, the CPC resets ! * You have to repeat this process for all the tape files (second file, etc). The last copied filed has mainly an execution address, the program start. If, for any reason, you want to start again the process since the first step, delete the file LORI2.DAT. Right, the copy process is over. Now, the goal is to make a beautiful disk loader for the hacked game. One more time, it is a piece of cake ! * Load the LOADER2.BAS file * Change the name in ligne 10 with the program name. * Save it. * Finished ! In theory, everything should be now all right. But, if it not so, I can give you three good reasons : * You haven't follow the notice ! Compare the files properties on the disk with the informations displayed by LORI2U.BAS (start, length). * One of the game file uses a system area of the memory (&A800-&BFFF) * The transfered program is imcomplete, and try to load another tape file. In this case, take your disassembler and your courage... LORI2U.BAS has been successfuly tested with the following softwares : 3D-Sub ------ Billy la Banlieue ----------------- Almost standard procedure. The tape has two standards files (Basic loader and screen) before the Loriciels loader. Invitation (french adventure game) ---------- Non-standard. The Loriciels loader is the third file on the tape. With LTD, the main program can be copied, but this one searches a screen file. Damned, the screen loader is protected ! Ok ok, here is the solution to copy the final game's screen. 10 OPENOUT"d":MEMORY &3FFF 20 FOR i=&BE80 TO &BE8A:READ A$:POKE i,VAL("&"+a$):NEXT 30 DATA 21,00,C0,11,00,40,3E,5D,C3,A1,BC 40 CALL &BE80 50 SAVE "INVITAT.SC2",b,&C000,&4000 Now, type the listing below to use the game : 10 MODE 0:OPENOUT"d":MEMORY &12EB 20 LOAD "INVITAT.2" 30 LOAD "INVITAT.SC2" 40 POKE &BCA1,&C9:POKE &BC0E,&C9 50 CALL &7A00 Gosh, the game crashes on my CPC plus... But its ok on an old one ! Maracaibo --------- Marius Tresor Foot (I don't know the english name of this sport game) ------------------ Pro-Tennis ---------- Non-standard. Loriciels' loader put in memory a screen and a little loader. It is not protected. So you can fix it by yourself to save the game. The easier technic is to patch the loader in &805A. It is time to learn how to use the &BCCE, &BC98, &BC8C and &BC8F vectors ! Sapiens ------- Reversi Champion ---------------- File REVERSI.2 is a BASIC program. So we can't use the LOADER2.BAS file as a model. Type the listing below and save it as the main loader. 10 MODE 1:OPENOUT"d":MEMORY &752F 20 LOAD "reversi.1" 30 POKE &75B3,&0:CALL &7552 40 LOAD "reversi.3":LOAD "reversi.4" 50 CALL &BB4E:CLEAR:MEMORY &7FFF:RUN"reversi.2" 4) Chief's tips *************** * Test your tape software before trying to hack them ! * Do not forget that most programs are recorded on both sides of the tape ! * If the program does not load correctly ! Loader mark 1 : damned, the dustbin will be happy... Loader mark 2 : if the program loads more than one file, try to copy each file from both sides. If you are lucky, the damaged files are not the same... In all cases, LTD never saves a bad file. In fact, the Loriciels's loader hangs if there is a problem during the loading process. The screen is then not synchronised and flickers ! Loriciels to Disk can't copy this games --------------------------------------- Graftric, Infernal runner, Le diamant de l'ile maudite, Lorigraph, Planete Base, Tony truand, Turbo Cup, Rally II 464. Rally II has also been selled in England by Amsoft. I suppose it has no protection...
 

NOTICE TEXTE n° 3 (8.48 Ko)

Analyse protection cassette Loriciels ------------------------------------- La protection cassette Loriciels est un chargeur protege qui a ete employe sur une bonne partie des programmes vendus par cet editeur francais. Il se reconnait aisement par la presence d'une page ecran avec un petit chat. A ma connaissance, il existe deux versions de cette protection. Le petit laius qui suit vous donne des explications utiles sur le fonctionnement de cette protection pas ininteressante. Version 1 ********* L'etude ci-dessous a ete faite avec le jeu 3d-Fight, celebrissime jeu de tir spatial ! Etape 1 ------- Lorsque l'on essaie de transferer ce jeu, on est de prime abord confiant. La cassette contient deux fichiers "standards". * un loader Basic protege. * une routine binaire, dont la fonction est de charger un fichier sans en-tete qui est le "vrai" loader du programme. Un desassemblage de la routine binaire confirme cette impression, elle utilise le vecteur &BCA1, qui permet de charger en memoire un fichier sans en-tete. Probleme, lorsque l'on a transfere ces fichiers et qu'on essaie de les utiliser, il ne se passe rien ! La routine contenue dans le loader binaire n'est rien d'autre qu'un piege a couillon... En etudiant de plus pres le chargeur Basic, on s'apercoit que ce dernier contient des lignes cachees. Ligne 20 : POKE &9FFF,55:POKE &9FFE,55 Ligne 35 : IF PEEK(&BC66)=&70 THEN CALL &B807+28 ELSE CALL &B11F+28 Faites les apparaitre avec les POKE suivants en mode direct : POKE &170,10 POKE &192,9 Nouveau souci : les adresses appelees par ces lignes ne contiennent pas de code valide. Le loader doit donc exploiter une astuce pour faire en sorte qu'il y ait des instructions dans ces cases memoires. Afin d'en etre sur, modifions le chargeur Basic en rajoutant une ligne 31 comme suit (pour un CPC 664 ou 6128) : 31 FOR i=0 TO 70:POKE &BE80+i,PEEK(&B11F+28+i):NEXT:END Une fois modifie, lancez-le et quand le loader binaire est charge, desassemblez en &BE80. On obtient ceci : BE80 F3 DI BE81 01 E9 B0 LD BC,&B0E9 ; vecteur systeme ? BE84 CD 65 BC CALL &BC65 ; Init du MOS BE87 21 68 90 LD HL,&9068 BE8A 11 36 03 LD DE,&336 BE8D 3E E0 LD A,&E0 BE8F CD A1 BC CALL &BCA1 ; vecteur systeme chargement BE92 D2 00 00 JP NC,&0000 ; fichier monobloc BE95 21 A0 90 LD HL,&90A0 ; adresse d'execution du loader BE98 18 E8 JR &BE82 BE9A C3 E5 91 JP &91E5 Si on desassemble en &BE82, on trouve l'instruction suivante : BE82 E9 B0 JP (HL) Cela ressemble furieusement au programme binaire charge en xxxx, a ceci pres que l'octet de synchronisation lors de l'appel de la routine &BCA1 est different. Si on lance en mode direct la routine, ca marche ! D'ou viennent ces donnees ? Elles sont tout simplement stockees dans le header du fichier "!". Pour vous en persuader, demarrez le TRANSFORMATEUR 3000 de chez MBC, et chargez l'editeur d'en-tetes K7. Bien, nous savons donc maintenant charger correctement en memoire le loader principal. Il ne nous reste plus qu'a comprendre comment ce dernier fonctionne. Sans entrer dans les details, une rapide analyse permet de deviner qu'il est facile a detourner, et qu'il contient toutes les informations dont nous avons besoin pour sauvegarder sur disquette le programme charge. Nous avons : en &9068 : l'adresse d'implantation du fichier charge en &906A : la longueur du fichier charge en &906C : l'adresse d'execution (codee) du fichier. en &906E : le nom du fichier. Pour sauvegarder le fichier une fois en memoire, il suffit de detourner la routine decodant l'adresse d'execution (en &91D2). Pour le reste, sachez que le loader utilise directement des routines de chargement situees dans la ROM inferieure du CPC, dans la zone correspondant au MOS. Autre bizarrerie, le petit chat n'est pas un sprite, mais bien une serie de caracteres redefinis ! Pour voir tout cela par vous meme, jettez un oeil sur le fichier LOADER1.TXT Version 2 ********* L'etude ci-dessous a ete faite avec le jeu 3d-Sub, un jeu tres peu connu. Accrochez-vous, les explications ne sont probablement pas tres claires, mais la protection est elle-meme assez tordue ! Contrairement au loader de type 1, le source LOADER2.TXT ne contient pas une etude exhaustive du chargeur, car il s'avere beaucoup plus complexe et evolue au cours de son execution. Ce programme se compose d'un unique fichier binaire, habtuellement nomme ** LORICIELS ** sur la cassette l'utilisant. Quand on commence a desassembler le programme, il apparait qu'il est code, car rien ne ressemble a une routine de chargement cassette. Il faut donc passer par une etude pas a pas du programme. Apres quelques gentilles attentions, la protection apparait rapidement. La methode utilisee repose sur du code automodifie. La routine en &7830 lit une table dont chaque entree se compose de trois octets : * Une valeur sur 2 octets correspondant a l'octet a modifier. Elle est stockee dans le registre HL. * Une valeur sur 1 octet correspondant a l'octet a poker en memoire. Elle est stockee dans le registre A. Tout serait tres simple si la routine ne contenait pas en &7842 une commande XOR decodant l'octet dans A. On ne peut donc pas 'voir' directement quelle valeur sera au final mise en memoire, il faut faire le calcul. Pour compliquer les choses, la routine en &8730 est elle-meme affectee par ces modifications, soit en &7843 (valeur servant a decoder), soit en &7846 (saut vers le debut de la routine de decodage, ou ...). A noter egalement qu'au bout d'un certain nombre de decodages, c'est carrement l'ordre de la table lue qui change ! On a au debut du processus : 7833 LD H,(IX+&00) 7836 LD L,(IX+&01) Apres la 16eme 'passe', la routine de saut pointe sur &7847, qui contient a ce moment la un CALL vers &77C9. Celle routine modifie le code en &7833 comme suit : &7833 LD L,(IX+&01) &7836 LD H,(IX+&00) La question qui se pose est, comment decoder ce genre de programme ? La seule solution consiste a reproduire une routine identique ailleurs en memoire ou a detourner la routine existante. Il faut ensuite executer "pas a pas" cette routine pour comprendre quelles sont les modifications effectuees sur le code et leurs consequences. Je vous l'accorde, c'est tres chiant et long a faire. On peut donc dire bravo au programmeur qui s'est fendu de cette protection. Il a du passer pas mal de temps a se triturer les meninges pour arriver a ce resultat. Notre homme a pourtant commis une maladresse qui rend le decodage un peu moins difficile que prevu, la table des adresses a poker n'est pas totalement codee. On a tot fait de reperer les endroits ou la routine de decodage est modifiee pour lancer l'execution d'une autre routine : en &7851 en &787E etc... La technique consiste alors a compter le nombre de tours ou la boucle de decodage fait des modifications sans "sortir" vers une routine externe afin de l'intercepter et d'avoir du code comprehensible en memoire. Le detournement se fait avec une routine du style : BE80 LD HL,&7851 ; debut de la table de code automodifie BE83 LD B,&10 ; &10 = (&78781-&7851) / 3 BE85 PUSH BC BE86 CALL &7833 BE89 POP BC BE8A DJNZ &BE85 BE8C RET On met un RET en &7845 et on lance la routine. On obtient alors en memoire du code modifie, qu'il faut etudier. Bref, je vous fais grace du processus, la routine au final implante un loader basee sur le vecteur &BCA1 en &0040, apres avoir fait une reinitialisation des vecteurs systemes. Il n'est a priori pas possible de la detourner, mais, enorme defaut, le loader final est toujours le meme, a l'octet pres, quel que soit le programme protege. Une fois que l'on a reussit a isoler ce loader, on peut s'en reservir les yeux fermes avec d'autres logiciels proteges de la meme facon. Les parametres utiles au chargement d'un logiciel sont implantes en &7944 et ne sont meme pas codes. Il devient donc facile de creer un programme de transfert generaliste... A noter qu'on ne peut pas utiliser un simple logiciel capable de lire les fichiers sans en-tete, car les fichiers sont codes. Voir a ce sujet le fichier LOADER2B.TXT, qui decrit la routine de chargement finale. Petite surprise interessante, ce chargeur est capable d'executer du code BASIC. Cette particularite a ete utilisee pour le jeu REVERSI CHAMPION.
 



Goto Top
CPC-POWER/CPCSOFTS, programmation par Kukulcan © 2007-2024 tous droits réservés.
Reproduction sans autorisation interdite. Tous les titres utilisés appartiennent à leurs propriétaires respectifs.
Hébergement Web, Mail et serveurs de jeux haute performance