APPLICATIONSCOURS DE BIDOUILLAGE ★ INITIATION - PROTECTIONS LOGICIELLES (IV) ★

Protection Logiciel N45|Amstrad Cent Pour Cent)Applications Cours De Bidouillage

Pour qu'un logiciel shareware ou du commerce vous rapporte un tantinet de monnaie, il faut au minimum qu'il ne soit pas dupliqué par le premier copieur venu. Mais cela n'est pas tout, encore faut-il bien organiser la protection au sein du système et du programme, pour qu'elle ne soit pas trop vulnérable. Voici quelques conseils en tout genre pour mieux vous protéger.

Imaginez une disquette incopiable, dans un format que même Discologie 38.2 ne saurait reproduire. Un produit quelconque sur une telle disquette serait-il réellement en sécurité? Non et cinquante fois non. Révisez vos leçons. Si le code permettant de vérifier la protection n'est pas lui aussi protégé par quelques plombages puissants, le format d'enfer de la disquette ne sera qu'un leurre inutile et seulement bon à rebuter les inconditionnels des copieurs. N'importe quel petit bidouilleur malin saura taper dans le code et enlever le petit morceau de programme qui plante le produit.

Il faut donc protéger la routine de vérification de format. Pour cela, un second sous-programme est chargé de vérifier l'intégralité de la routine de vérification. Ce dernier doit aussi être surveillé, car s'il est contourné, sa routine protégée pourra l'être aussi. Bref, à tout endroit du programme, en n'importe quelle circonstance, il faut penser à aller voir du côté de la protection ou de sa routine.

OU PROTEGER QUOI ?

De préférence, il faudra protéger les parties sensibles du programme par des sommes de contrôle et des comparaisons de zones.

Pour ne pas que tout saute tout de suite, il ne faut pas appeler la protection par un CALL, mais recopier le programme de protection çà et là dans le code, pour que le pirate fasse un maximum de manipulations avant de déplomber totalement le logiciel. Pour brouiller les pistes et pour que les recherches de protections soient les plus ardues possibles, n'hésitez pas à coder la partie vérification. Créez ainsi deux routines; la première décodera le sous-programme de vérification, puis l'appellera.

La seconde le recodera après son appel pour ne laisser aucune trace. Le programme de codage basé sur un XOR, ou quelques décalages, devra générer différentes versions de camou flage pour qu'une recherche numérique soit, elle aussi, inefficace.

POUSSER LE VICE

Pour que les outils mémoire ne soient pas facilement utilisables, régénérez les vecteurs système et remplissez de zéros les zones de mémoire non utilisées par le programme. Vérifiez quelques centaines d'octets plus loin que ces zones sont bien vierges. Lors de l'initialisation de votre logiciel, faites un maximum de CALLs imbriqués. Cela embrouille considérablement les pirates et peut faire déborder la pile si elle est déjà utilisée par un programme résident. N'hésitez pas à utiliser des routines de scanning sous interruption pour vérifier si telle ou telle routine clef n'est pas contournée. A la limite de la folie, faites des routines de calcul de sommes de contrôle pour vérifier que chaque page de 256 octets meublant la mémoire est bien telle que vous l'avez écrite. Le cas échéant, faites des sommes de contrôle sur ces checksums. N'oubliez pas que tout ce que vous avez fait, un pirate peut le défaire. Les pirates qui veulent protéger leurs oeuvres vont jusqu'à utiliser des timings. De cette manière, si le moindre octet de code est modifié, la machine plante. Bref, une protection est le contraire de ce qu'on ne doit pas faire dans la vie et se limite en une phrase: faites aux autres ce que vous n'aimez pas qu'on vous fasse. J'espère que ces quelques lignes vous auront donné des idées plus que malignes.

CATALOGUE CAMOUFLE

Pour ceux qui ne se sentent pas la force de réaliser des protections de folie comme celles citées ci-dessus, il est possible de dresser des pièges système. Comme vous le savez, le CP/M n'est capable de s'en sortir que si les programmes et données qu'il manipule sont organisés dans des fichiers à son format. Le fait d'éparpiller des données sur le disque ou de cacher des fichiers dans des catalogues parsemés sur la face de la disquette rend les copies de fichiers totalement aberrantes. Vous pouvez ainsi rendre irréutilisables vos programmes en embrouillant le petit pirate avec des pokes et des appels étranges et incompréhensibles pour un non-initié.

Il va sans dire que de tels procédés ne seront pas à l'abri de la copie intégrale de disquette. En revanche, toute copie de fichiers ou tentative de détournement ou de réutilisation de codes sera retardée, voire compromise. Ne restons pas sur notre faim et voyons quelques exemples.

DES INFORMATIONS NON FICHEES

Le truc le plus bête est de sauvegarder des programmes sur des secteurs qui n'appartiennent à aucun fichier. Le chargement de ces informations devra donc se faire en passant par des lectures de secteurs. Une copie de fichiers ou une sauvegarde quelconque de fichier sur la disquette risquera de compromettre le fonctionnement du logiciel entier.

En poussant un peu, la ruse encore plus folle est de loger des petits bouts de programme en langage machine à la fin des blocs d'un fichier. Pour l'exemple, une zone de données de 1 000 octets laissera 24 octets de libre dans un bloc de 1 024 octets. Vous pouvez vous servir de ce bout pour Y coller n'importe quelle routine assembleur. Appeler une routine machine dans le buffer disque, sans qu'on ait chargé autre chose qu'un programme en Basic, en déconcertera plus d'un et le mettra aux fraises. J'ai même vu des fous dessiner une page écran autour d'une petite routine. Le fait de faire un CALL au beau milieu de l'écran se révélait complètement ébouriffant. Surtout que l'adresse de la routine était finement calculée puis stockée dans HL, et son corps, en dehors de quelques pokes fort à propos, faisait du n'importe quoi sur mesure.

Vous passerez de longues heures pour vérifier les calculs de l'adresse, autant encore pour essayer de déchiffrer une routine piège-couillon, pour vous apercevoir que tout était bon du premier coup. J'ai perdu 32 768 cheveux ce jour-là ( Poum aussi, mais les siens n'ont pas repoussé ).

LES CATALOGUES FANTOMES

Eh oui, ce n'est pas de la magie. Notre CPC est bien capable de faire naviguer des informations sur la disquette. Il est possible de déplacer le catalogue.

On peut aussi changer sa taille mais, malheureusement, on ne peut changer sa structure. Dans la longue liste des variables utilisées par le système au sujet du lecteur de disquette, il en existe quatre qui vont nous être d'un grand secours. Les voici dans leur ordre d'apparition:

  • &A897-&A898 : nombre d'entrées du catalogue moins une (63 par défaut) ;
  • &A899-&A89A : masque binaire des positions des blocs du catalogue sur les pistes ( &C000 soit % 1100 000 000 000 000 par défaut, où les 1 représentent les endroits où sont les blocs à utiliser )
  • &A890 : nombre de pistes utilisées par le système, soit encore le numéro de la piste contenant le catalogue ( 0 en data, 2 en CP/M ) ;
  • &A8A8 : super génial, de la plus haute importance: c'est ce flag qui va nous permettre de travailler avec les trois autres variables.

Avant tout, il faut savoir que le système est très prudent. Il faut qu'il vérifie tout et qu'il réinstalle sans cesse. des valeurs qu'il aime utiliser.

Si nous pokons 95 en &A897 et 224 en &A899, nous devrions avoir un catalogue long de trois blocs, donc de 96 entrées.

Que nenni, le système regardera la disquette, et une fois la commande CAT lancée, nous nous apercevons que ce que nous avons fait est vain et que les valeurs par défaut sont revenues. Quelques PEEK le prouvent. Serions nous perdus?

LE POKE BONHEUR

Non, nous n'avons pas été menés à notre perte par le système.

Les programmeurs de l'Amsdos ont fait des miracles et nous permettent de forcer le système à nous écouter.

Le fait de poker 255 en &A8A8 le supplie de laisser nos valeurs tranquilles, ce qu'il fait, tombant sous le charme de tant de bits tendus. Cela fait, nous pouvons poker ce que nous voulons, où nous voulons.

.-----.-------.-------.
| CAT | &A897 | &A899 |
|-----+-------+-------|
|  32 |    31 |   128 |
|  64 |    63 |   192 |
|  96 |    95 |   224 |
| 128 |   127 |   240 |
| 160 |   159 |   248 |
| 192 |   191 |   252 |
| 224 |   223 |   254 |
| 256 |   255 |   255 |
'-----'-------'-------'

En voici quelques exemples:

CAT est le nombre d'entrées de répertoire, qu'il ne faut pas confondre avec le nombre de fichiers stockables (voir le cours assembleur de ce mois). Formatez une disquette, pokez un des couples de ces valeurs sans oublier le fatidique POKE &A8A8,255, et tapez la ligne suivante:

FOR I = 1 TO CAT:SAVE STR$(I):? I:NEXT

Où CAT est la valeur correspondant à votre choix. Vous ne serez pas déçu du voyage. Sachez tout de même qu'utiliser plus de 160 entrées devient aberrant, aussi bien dans la lenteur de l'émission du catalogue que dans le fait que 172 Ko de données - 5 ko de catalogue = 168 blocs libres, soit environ 1 Ko par fichier. Cent soixante fichiers sur une disquette, c'est déjà pas si mal.

Le dernier truc que nous vous offrons consiste à propulser le catalogue à tout endroit de la disquette par un poke de 0 à 41 en &A890. Vous pouvez tout à fait laisser un catalogue bidon sur votre piste 0, en créer un vrai en piste 20 et laisser profiter les données des zones intermédiaires.

Attention toutefois de protéger les blocs de la piste 20 par un fichier factice du catalogue d'origine, sans quoi vos données situées sur la seconde partie seront bonnes pour la poubelle! Remplissez la première partie de la disquette, sauvegardez un fichier factice de 2 Ko qui doit commencer sur le secteur &C1 d'une piste, et le tour est joué. Il ne reste plus, à ce moment, qu'à poker le décalage de votre fichier (en piste à l'adresse &A890) et de travailler sur votre nouveau catalogue protégé.

FIN DE DOSSIER

Et voilà, notre folle épopée au milieu du monde des pirates et des plombeurs est maintenant terminée. C'est bête, j'aurais bien voulu que cela continue, mais je suis à cours d'astuces.

Anecdote: pour se crêper le chignon, Longshot et Ruby s'envoyaient à tour de bras des plombages en défi. Ils ne cessaient de faire des merveilles. Je laisse votre imagination chercher qui fut le vainqueur.
Nous espérons que toutes ces idées vous seront utiles et vous souhaitons bonne plombe.

Sined(redon), A100% n°45 p42-43

★ LICENCE: COMMERCIALE
★ ANNÉES: 1991
★ AUTEUR(S): ???

Page précédente : Protection Logiciel N44 (Amstrad Cent Pour Cent)

CPCrulez[Content Management System] v8.75-desktop/c
Page créée en 064 millisecondes et consultée 1001 fois

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.