★ APPLICATIONS ★ COURS DE BIDOUILLAGE ★ INITIATION - PROTECTIONS LOGICIELLES ★ |
Protection Logiciel n°42|Amstrad Cent Pour Cent) | Applications Cours De Bidouillage |
Nous avons tous, un jour ou l'autre, tenté de copier des fichiers sans succès, lister un programme Basic sans rien obtenir de cohérent. Le pourquoi du comment est simple : ces fichiers et listings étaient protégés pour que vous ne puissiez rien voir de leur contenu. Nous allons vous expliquer le fonctionnement de ces protections; ainsi, vous pourrez vous amuser comme des petits fous pour mettre vos chefs d'oeuvre à l'abri des regards indiscrets. XOR LE MAGNIFIQUE Pour m'aider à préparer ce dossier, j'ai simplement demandé à l'un des plus férus en La matière, XOR, de me révéler quelques-uns de ses secrets, Il va de soi que sous ce pseudo ( bien connu dans le milieu des tripatouilleurs d'octets ) se cache une tête remplie d'idées, qui nous a fait la gentillesse de partager son savoir avec nous. TOI PAS LIRE MOI La méthode la plus simple et la moins efficace est la « sauvegarde par l'option P ». En effet, encodez un fichier Basic de quelques lignes, sauvegardez le comme suit:
Réinitialisez votre ordinateur et chargez le fichier par:
Faites « LIST ». Etrange, non? Pas de liste disponible, C'est comme si le fichier n'avait jamais existé. Pourtant ,le fichier ainsi protégé peut être exécuté normalement par:
Cette fameuse « option P » code le programme. L'ordinateur teste ce codage en exécutant la commande LOAD. S'il constate une protection, il exécute un NEW en fin de chargement, d'où l'impossibilité de lister le programme car, en fait, celui-ci n'est plus en mémoire. Aujourd'hui n'importe quel logiciel de traitement de fichier possède une instruction pour supprimer cette protection, Renommez, par exemple, un tel fichier à l'aide de Discology en suppriment le [P]. Voilà, le fichier vient d'être déprotégé. Il existe d'autres méthodes plus radicales pour cacher une liste, Vous pouvez, par exemple, cacher des lignes Basic qui n'apparaîtront pas à la commande LIST, ajouter un programme en langage machine à la suite de votre source Basic, encoder une petite routine machine dans le programma lui même - et cela sous les yeux du voyeur - , écrire vos fichiers dans les User inaccessibles au Basic automodifier un programme Basic ( poker de nouveaux Token ) ; eu encore plus compliqué, masquer (ou coder) votre source Basic pour le rendre complètement incompréhensible. Il reste enfin le classique des classiques,« le code d'accès au programme ». Nous allons faire maintenant le tour de ces méthodes, Avant de nous lancer, il faudra vous munir d'une disquette vierge et formatée et, si vous en avez les moyens, d'un éditeur de secteurs comme Discology. Et pourquoi pas un assembleur si le coeur vous en dit ? Voici, pour vous mettre en haleine, un petit programme qui trouvera sa place an début de vos listings Basic. Il vous demandera un code qui autorisera l'accès au programme. Attention, ce programme ne protège pas le source contre la lecture mais rend son utilisation impossible aux personnes non autorisées. Voilà, il suffit de modifier la variable CODE$ an remplacent le mot « PASSE » parce lui de votre choix,. Passons à des choses plus sérieuses. Faites un CAT après avoir inséré une disquette dans le lecteur. L'ordinateur affiche alors:
Suivi du contenu de la disquette. Le « Drive A » indique qu'il s'agit du lecteur A ( premier lecteur ), « User 0 » vous indique que les fichiers affichés sont dans la zone courante 0. Cela nous emmène à penser qu'il existe d'autres zones pour sauvegarder nos fichiers. Sous Basic, vous pouvez accéder à 16 zones utilisateur ( User de 0 à 15 ). Pour cela, utilisez la commande: ùUSER, nb Avec la variable nb allant de 0 à 15. Vous Constatez grâce à là commande CATque les fichiers de l'User 0 ne figurent pas dans l'User, 1, 2, 3 ... 15. Au-delà de cette limite (15), le Basic est incapable d'accéder aux Users supérieurs, Pour cela, utilisez le poke suivant :
Avec la variable nb allant de 0 à 255. Cool, non ? Saviez-vous que ces User ne sont pas détectés par la commande CATALOGUE de Discology? Autre chose, quand un fichier est effacé du catalogue d'une disquette par la commande ùERA,"fichier", celui-ci est en fait encore disponible dans le User 229 jusqu'à la prochaine sauvegarde d'un fichier sur cette même disquette. Allez voir cet User pour vous en persuader. La récupération d'un fichier effacé devient alors un jeu d'enfant. Si TOTO.BIN a été effacé par:
Récupérez-le avec:
Vous venez ainsi de renommer le fichier "TOTO.BIN" en le replaçant en USER 0. Jusqu'à présent, nous n'avons pas fait appel è des connaissances trop particulières. Par contre, pour la suite de notre histoire, il va falloir être attentif, Pas de frayeurs inutiles car je vais juste vous démontrer comment est stockée une ligne Basic par l'ordinateur, Ces explications seront primordiales pour la suite de notre initiation, LES LIGNES BASIC En chargeant un programme Basic, ou plus simple en saisissant une ligne Basic grâce Il son éditeur, la mémoire de l'ordinateur subit certaines modifications. Le Basic sait comment stocker vos lignes en mémoire, nous allons les décoder. Un programme Basic commence toujours à l'adresse 368 (&170 héxadécimal). Les deux premiers octets indiquent la longueur de la lignetle Basic n'en n'utilise qu'un et c'est une faille que nous étudierons plus loin}, les deux suivants stockent le numéro de la ligne ; vient ensuite une suite de codes (lestokens) qui sont la représentation des instructions Basic. Ex: le Token 138 correspond à l'instruction CLS. Suite à toutes cesinstructrons,vientserajouterunO qui signifie la fin de la ligne, Alors, la deuxième ligne peut commencer, etc. La fin du programme sera marquée par trois 0 successifs. Cela vous parait compliqué 7 Alors suivez-moi de très près. Réinitialisez votre ordinateur et pokez les valeurs suivantes: Pour un numéro de ligne égale à 50:
Pour mettre un CLS dans cette ligne:
Enfin, pour marquer la fin de la ligne:
Reste la longueur. 2 octets pour stocker la longueur+2 octets pour le numéro de ligne + 1 octet pour le Token et 1 dernier octet pour le 0 de fin de ligne. Cela nous fait une petite addition dont le résultat est 8. Donc:
Pour voir le résultat, faites simplement LIST. C'est magique, non? Vous venez de créer une ligne 50 contenant l'instruction CLS. Il va de soi que la prochaine ligne Basic sera stockée à partir de 368+6 et cela jusqu'en fin de programme ( trois 0 ). Vous voulez connaître le numéro de la 33eme ligne d'un programme Basic ? Pas de problème, encodez en mode direct celui-ci:
Il va de soi qu'il faut remplacer le « nbligne » par 33 ou toute autre valeur de votre choix. Voyons maintenant d'autres astuces sorties tout droit du sac de XOR. LES LIGNES CACHEES DU BASIC Pour commencer ce chapitre, saviez vous que le Basic n'affiche les lignes (par les commandes LIST ou EDIT) qu'à partir de la ligne numéro 1 ? Le zéro, il ne connaît pas. Alors, rien ne nous empêche de lui balancer une ligne zéro pour l'embrouiller jusqu'à la moelle. la méthode est fort simple. Il suffit de poker en 370 un zéro. Vous vous souvenez qu'à cette adresse (tout comme la suivante) se trouve le numéro de la première ligne du Basic. Voici un exemple. Tapez:
Faites LIST pour constater la présence de cette ligne. Puis pokez directement:
Refaites LIST. Hé ! hé ! hé ! Y'a p'us de Liste. Mais attention, le programme est toujours là et vous pouvez même le lancer par RUN, Quelle classe! Je ne le dirais jamais assez. Voilè pour la ligne zéro: sachez tout de même qu'un éditeur de fichiers tel Discology est capable de lire ce type de ligne. Vous voulez cacher la ligne 25 de votre programme ? Il suffit de calculer sa longueur (disons 35 octets) puis celle de la ligne précédente (disons la ligne 20 qui a une longueur de 56 octets), d'additionner l'ensemble et de poker la somme de cette addition comme longueur de la ligne 20. Je vais vous donner un exemple. Tapez ce petit programme:
Nous allons cacher la ligne 35. Calculons donc, dans un premier temps, l'adresse des octets qui renferme la longueur des lignes 30 et 35 de notre programme Basic. Pour cela, j'ajoute en fin de programme, le sous-programme que voici:
Faites alors un RUN 100 (pour executer le programme à partir de la ligne 100) et vous saurez tout sur votre programme Basic: â savoir, la ligne 30 fait 8 octets qui sont stockés an 395-396 (même si 396 'est égal à zéro). tout comme la ligne 35 qui a una longueur de 15 octets. J'ajoute les 8 au 15 pour obtenir une longueur fictive de 23. Je poke en 395 cette valeur et hop lia ligne 30 va cacher la suivante. Essayez maintenant:
La ligne 35 a disparu ! ET LES TOKENS DOCTEUR? Il t a très longtemps, avec mon ami Septh, j'avais concocté un petit programme intitulé « Le CLS le plus rapide du monde ». Il était truffé de lignes automodifiant le programme Basic, donc carrément incompréhensible à première vue. lmaginez, en effet, une ligne du type:
Cela ne veut rien dire. Parcontre, si la ligne précédente modifie le TOKEN de OUT; qui est 185, en le remplaçant par 204 (TOKEN de SOUND), les choses n'auront plus la même signification. Voici un exemple:
Cachez les deux lignes 15 et 25 par la méthode décrite plus haut et donnez m'en des nouvelles. ETRANGES APPLICATIONS Cela dit, vous ne voyez toujours pas comment il est possible, à partir de ces éléments, de tromper une personne fouinant dans vos programmes. O.K. ! je suis là pour ça.
En désassemblant cette routine, on obtient les cinq codes hexadécimaux suivants:
Nous allons également créer une ligne Basic bidon qui réservera cinq octets pour stocker notre routine. Que pensez-vous de: 10 REM 12345 Cette ligne est la première de notre programme Basic. Elle commence donc en 368. La zone 368-369 réservée pour la longueur, 370-371 pour le numéro de ligne. Le token de REM {ou de l'apostrophe le remplaçant « ' » est codé avec un 192 dans l'octet 372. Vient ensuite un espace en 373 et cinq octets ( de 374 à 378 ) qui stockent les Cinq valeurs ASCII de 1,2,3,.4, 5 soit 49,50,51,52,53.
C'est dans cette zone que nous allons poker notre routine assembleur. C'est également cette zone qui sera appelée pour l'exécution de la routine du bip sonore. Voici la démarche à suivre:
Faites LIST. Vous voyez, votre ligne da REM ne ressemble plus à grand-chose. Parcontre, elle renferme maintenant la petite routine. Vous pouvez sauvegarder ce programme et une éventuelle suite sans problème avec l'instruction:
Pour exécuter le routine, il suffit de l'appeler par:
Essayez, vous m'en donnerez des nouvelles. I1vadesoi qu'au lieu de faire un petit bip, vous auriez pu décoder un programme ( préalablement codé ) ou lancer un appel à une autre routine machine ...
ORG 314 |
| ![]() |
![]() |
CPCrulez[Content Management System] v8.7-desktop/cache L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko. |