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

Protection Logiciel n°44 (Amstrad Cent Pour Cent)Applications Cours De Bidouillage
Blindage Software présente: le Retour de la - revanche du fils de la protection logicielle Il : The Disk Quete. Nous vous avons parlé, en long, en large et en travers, des différents moyens de plomber un logiciel. Voici, pour poursuivre et finir, les quelques derniers petits points à connaÎtre, histoire de totalement dégoûter les pirates en culotte courte.

Quand Xor a pris Poum par la main pour l'emmener au fin fond de la Grotte du Savoir, notre héros s'est fait porter pâle. Il en a eu la courante de sa vie. On ne dit plus blanc comme un linge, on dit blanc comme la tronche de Poum lorsqu'il s'est trouvé face à l'entrée de la Grotte de Xor. C'est plus long, mais on ne fait pas mieux. Moi, c'est avec deux litres du meilleur whisky dans le ventre, rond comme un manche de pelle, que Xor me fit rouler dans son antre. Lorsque les éléphants roses me saluèrent en allant vaquer à leurs occupations quotidiennes, il était trop tard. Nous marchions déjà dans le couloir menant au Puits de la Connaissance, aveuglés par l'éclat des torches atomiques, seules armes efficaces contre les puissants mais mortels Copyrats...

Oh ! pardon... reprenons.

C'est bien beau d'empêcher un voyeur de venir tripoter votre code, mais si cet hurluberlu peut copier la disquette à volonté, autant ne pas se casser à plomber. Pour être sûr que le programme ne sera pas violé, il faut le protéger autant physiquement que logiciellement.

Mais si, c'est possible! J'en vois des petits qui rigolent dans le fond. Nous allons avant tout nous prendre la tête avec de nouvelles connaissances, histoire de savoir de quoi on parle. Ensuite, nous pourrons bosser tranquille. Comment voulez-vous savoir comment travaille le contrôleur de disquette si vous ne connaissez pas le format exact d'une piste après un formatage courant?

Il faut parfaitement assimiler ses capacités pour pouvoir le comprendre et le planter, bien évidemment. Contentons-nous pour le moment de le regarder faire. Le reste suivra...

FORMATION DE CROISIERE

Comme vous pouvez vous en douter, le FDC, pour retrouver les données qu'il éparpille sur une piste, range tout minutieusement lors du formatage. Cette forme de rangement permet non seulement d'augmenter la fiabilité des données, car des sommes de contrôles sont calculées pour chacun des secteurs, mais elle permet aussi de partitionner la piste pour ne pas gérer la totalité des données simultanément. Une piste mesurant 6 144 octets, il faudrait en mémoire un buffer de 2 x 6144 octets pour la lecture et l'écriture, ce qui serait bien trop important pour les machines de petite capacité comme le CPC. Les concepteurs du contrôleur FDC 765 ont donc implémenté une sectorisation qui permet d'accéder à des secteurs de tailles paramétrables. Il existe ainsi six tailles de secteurs différentes numérotées de 0 à 5. Pour calculer la taille des secteurs en fonction de leur numéro, il suffit d'appliquer le calcul suivant:

Taille = 128 x 2 Numéro.

Où Numéro est le numéro du secteur comme spécifié ci-dessus et Taille est la taille du secteur en octet. Comme vous le voyez, une valeur de 0 donnera un secteur de longueur 128 et un secteur de type 5 vous fournira une zone de 4 096 données.

Mais ce n'est pas tout, comme des tas d'octets servent à délimiter les secteurs, à donner des informations sur la piste en cours, à préparer des synchronisations entre le contrôleur et la disquette, nous ne disposons pas effectivement de 6 144 octets consacrés aux données. Selon la taille des secteurs utilisés et selon la longueur qu'il est possible de fixer aux zones de synchro, plus ou moins de secteurs identiques ou non viendront se loger sur la piste. Il est ainsi possible, par exemple, de loger sur une piste un secteur de type 5 (4 096) suivi d'un de type 2 (512) et un de type 1 (256). A vous de calculer la bonne place pour ces secteurs et d'organiser le formatage en fonction.

A titre indicatif, voici un bref descriptif de la manière dont sont placées les données sur la piste pour que le FDC s'y retrouve. Nous n'entrerons pas dans les détails, mais nous montrerons simplement pourquoi tant de place est perdue en dehors de la taille prise effectivement par les secteurs. Voici donc le descriptif d'une piste d'un trou d'index à l'autre (qui est le même, mais la piste est ronde), donc en piste:

- 80 octets de Gap 4A (valeur 4E) ;
— 12 octets de synchronisation (valeur 00) ;
— 3 octets d'Index Adress Mark ( ???)
— 1 octet (valeur FC) ;
— 50 octets de Gap 1 (valeur 4E) ;
------------------Début du secteur-------------------
— 12 octets de synchronisation (valeur 00) ;
— 3 octets d'Index Adress Mark ????) ;
— 1 octet (valeur FE) ;
— 1 octet (numéro de piste) ;
— 1 octet (numéro de tête) ;
— 1 octet (numéro de secteur) ;
— 1 octet (taille du secteur) ;
— 2 octets de CRC (checksum des 8 dernières valeurs) ;
— 22 octets de Gap 2 (valeur 4E) ;
— 12 octets de synchronisation (valeur 00); - 3 octets d'Index Adress Mark (ml;
— 1 octet (valeur FB) ;
— X octets de données selon la taille du secteur;
— 2 octets de CRC (checksum des données et des 4 octets les précédant) ;
— Z octets de Gap 3 (valeur 4E).
---------------------Fin de secteur--------------------
— N autres secteurs...
— W octets résiduels de Gap 4B comblant le vide entre la fin et le début de piste (valeur 4E).
GAP #3: PERDRE POUR MIEUX GAGNER

Si nous partons à la chasse aux octets, on s'aperçoit vite qu'un secteur prendra effectivement 62 octets de descripteurs et de CRC, plus le nombre d'octets de données, plus la taille du GAP #3 choisie. Le Gap #3 est très important, car il permet de séparer physiquement deux secteurs. Il faut savoir que cette zone a été réalisée dans le but de garder une compatibilité entre divers lecteurs. Il suffit qu'un de ces joujoux tourne un tout petit peu plus vite qu'un autre pour qu'une écriture de secteur vienne écraser l'ID du suivant. Pourquoi faire dans l'instable alors qu'il est possible de toucher une fiabilité relativement idéale.

C'est pour cela que des valeurs de sécurité ont été instaurées. Lorsque vous réalisez le format qui tue avec 2 méga-octets par piste et des GAP #3 de 0,5 octets, dites-vous bien qu'il y a de fortes chances pour que le CPC de M. Bolocksbroken (Belgique) ne lise et n'écrive que des pistes irrécupérables. Alors, pensons aux copains, jouons la carte de la sécurité au détriment de quelques octets perdus.

Voici une théorie simple permettant de calculer un GAP #3. Vous choisissez votre taille de secteurs, par exemple 3 (1 024 octets). Vous lui ajoutez le header par secteur, soit 62. Cela nous donne 1 086 octets effectifs par secteur. Sachant qu'une piste mesure en moyenne (selon la vitesse théorique des lecteurs) 6 144 octets auxquels nous retranchons 146 octets de header piste, il nous reste 5 998 octets réellement exploitables. Nous divisons 5 998 par la taille d'un secteur (1 086) ce qui nous donne 5 secteurs par piste. Pour calculer la taille du GAP #3, facile. Il suffit de diviser en 5 la place laissée libre par la soustraction de l'espace total disponible, moins la place prise par les secteurs. Elle est de (5 998 - 5 430)/5 soit dans notre cas, d'environ 113,6. Comme ce GAP #3 est de loin supérieur à 80, nous ne risquons rien et pouvons utiliser cette dernière valeur tout en sachant que ce format sera certainement ultra fiable. Le reste du libre ira dans le GAP 4B. Pourquoi prendre 80 ? Je présume que cette valeur n'est pas à négliger, car elle a été choisie par le constructeur comme valeur initiale de séparation entre le trou d'index de piste et la première synchro (GAP 4A). Dans ce cas, mieux vaut présumer que se planter. Si vous vous retrouvez, dans certains cas de figure, avec des GAP #3 très courts (de loin inférieurs à 80), je vous conseille de répartir une partie du dernier GAP #3 sur les autres. Cela augmentera quelque peu les espaces intersecteurs, ce qui n'est pas un mal, sans pour autant trop tirer sur la piste. Notez que si un petit débordement de GAP #3 du dernier secteur apparaît en début de piste, cela ne sera pas gênant, car les octets écrits auront la même valeur dans les deux zones (le remplissage des deux GAP se fait avec 4E). Dans le cas où le GAP #3 est paisible (supérieur à 80), laissez la fin de piste telle qu'elle est, cela ne gênera personne.

Pour en finir avec le GAP #3, sachez qu'il en existe de deux valeurs différentes: une de formatage permettant de séparer physiquement les secteurs, et une d'écriture permettant de recouvrir des données de valeur 4E dans le cas où la disquette aurait tourné trop vite et où des octets différents seraient visibles après le CRC. Il n'y a pas de réel rapport calculable entre les deux valeurs, si ce n'est que pour des valeurs de formatage aux alentours de 80, prenez la moitié pour l'écriture. Plus la valeur au formatage est petite, plus la valeur à l'écriture doit se restreindre, sous peine d'écraser l'ID suivant si elle est trop gonflée. (Exemple: GAP #3 de 50 au formatage donnerait un GAP #3 d'environ 12 à l'écriture.)

Tout ce que je peux vous dire c'est que la meilleure protection pour CPC dont vous puissiez rêver est celle réalisée sur un ORIC Atmos. En effet, le FDC 765 ne peut pas écrire dans la première zone GAP 4A, alors que l'Oric sait le faire. Ecrivez votre prénom à cet endroit et allez le lire avec une lecture piste sur CPC. Je défie n'importe quel FDC 765 de faire de même ( c'est théoriquement impossible ). La protection de rêve, quoique plus chère car il faut acheter un Oric.

Même Disco 145.3 ne sait pas faire ce truc-là. Diabolique... Voilà pour les conseils. On attaque la suite.

LE PRETA-PORTER

Des listings sont fournis dans ces pages pour vous aider à réaliser le formatage ou la protection nec plus ultra. En voici un rapide descriptif, car nous nous sommes quelque peu trop étendus sur le premier chapitre (ND Sined : pardon à Alexe, Poum, Gambas, Fifou, Agnès, moi, lui, vous et à tous ceux qui s'en foutent).

La routine de formatage écrite par Valère est un petit bijou parfaitement orienté protection. Bravo camarade. Son utilisation est ultra simple et en voici le descriptif: à titre d'essai, nous allons formater une disquette au format DATA.

Le programme vous demande avant tout la taille des secteurs que vous désirez installer par piste. Vous saisissez ensuite 9 à la question portant sur le nombre des secteurs, 80 pour le Gap #3 (valeur par défaut), et enfin &E5 pour l'octet de formatage. A ce moment apparaît une grille de saisie demandant, pour chaque secteur physique numéroté de 1 à 9, son numéro suivi de sa taille. Voici ce qu'il faut répondre:

No 1 – C1/ 2
No 2 – C6/ 2
No 3 – C2/ 2
No 4 – C7/ 2
No 5 – C3/ 2
No 6 – C8/ 2
No 7 – C4/ 2
No 8 – C9/ 2
No 9 – C5/ 2

Certains se demanderont alors pourquoi les noms de secteurs ne sont pas donnés dans l'ordre? C'est ici qu'entrent les notions d'ordres logique et physique. L'ordre physique, représenté de 1 à 9, est l'ordre dans lequel seront rangés les secteurs sur la piste. L'ordre logique est celui dans lequel seront chaÎnés les secteurs et dans lequel ils seront aussi appelés. Cela est dû à ce qu'on nomme communément l'entrelacement. Après que le contrôleur a lu un secteur, il lui faut un petit moment avant de se recalibrer et d'être prêt à se resynchroniser sur le secteur suivant. Ce temps est malheureusement plus long que le GAP #3, mais plus court qu'un secteur. Ainsi, après avoir lu le secteur &C1, il se retrouve prêt à relire des données lorsque la tête se trouve au milieu du secteur &C6. Le secteur suivant rencontré sera le bon au niveau logique, soit le &C2. Si cet entrelacement n'avait pas été installé, il aurait fallu un tour complet avant que la tête ne repasse alors sur le secteur &C2 à la place de &C6. Je pense que vous avez suivi. En fait, il suffit de laisser un secteur physique entre deux logiques pour ne pas perdre de vitesse. Essayez donc ce format sans entrelacement et vous comprendrez vite.

Saisissez la piste de départ (zéro pour la première), la piste d'arrivée (42 pour la dernière) et c'est parti. Attention! n'oubliez surtout pas de mettre une disquette quelconque dans le lecteur, et au besoin, protégez Format avant qu'il ne se volatilise.

Nous allons maintenant voir un petit truc en détail. Vous avez dû vous demander pourquoi il était nécessaire de saisir deux fois la taille des secteurs. C'est fait pour l'ID piste et pour chaque ID secteur. D'accord, c'est redondant, mais c'est la clef de tout plombage. La première valeur va préciser la taille effectivement prise sur le disque par chaque secteur. La seconde n'est pas prise en compte lors du formatage mais seulement lors de l'écriture. Ainsi, une piste formatée en taille 2 dans l'ID piste contiendra des secteurs théoriques de taille 2, dont la taille formatée sera effectivement de 512 octets. Si vous dites dans les ID secteurs qu'ils sont de taille 3, toute écriture dans l'une de ces zones engendrera un débordement de données de 512 octets (512 réservés contre 1 024 écrits). Vous voyez que la moindre erreur peut être fatale. C'est cette erreur que nous allons utiliser.

Les copieurs se voient obligés d'écrire dans tous les secteurs analysés, cela dans l'espoir de créer une copie conforme à l'original. Si nous lui faisons une ruse dans les tailles annoncées par les ID secteurs comme expliqué ci-dessus, il se verra écraser bêtement une disquette qu'il voulait engendrer. C'est gros, mais ça protège super sec. Cette explication n'est pas la plus pure, mais elle fait palper le principe fondamental d'anticopies sur CPC.

Lorsque vous formatez une piste de secteurs de taille 0, voici ce qui se passe: l'écriture d'un secteur de taille différente écrase quelques secteurs de taille O. Un exemple. Un secteur écrasé pour l'écriture d'un secteur de taille 1 ; 2 pour 2 ; 5 pour 3 ; 10 pour 4 ; et 21 pour 5. Si vous écrivez dans un secteur leurre de taille 4 sur ce genre de piste, il ne vous restera que 22 secteurs au lieu de 32. Facile alors, en lisant chaque secteur, de savoir s'il en manque.

Si vous avez pigé le truc, on peut passer à du beaucoup plus sérieux.

TOUT CE QUI SE LIT S'ECRIT

No 1 : &01/ 2
No 4 : &02/ 2
No 5 : &03/ 2
No 10 : &04/ 2
No 13 : &05/ 2
No 16 : &06/ 2
No 19 : &07/ 2
No 22 : &08/ 2
No 25 : &09/ 2
No 26 : &0A/ 2
No 27 : &0B/ 2
No 28 : &0C/ 2
No 29 : &0D/ 2
No 30 : &0E/ 2
No 31 : &0F/ 2
No 32 : &10/ 2

C'est bien beau de mettre des secteurs partout. Encore faut-il pouvoir les utiliser. C'est ce que se propose avant tout cette routine. Elle va permettre de remplir les récipients vides que nous avons installés sur la disquette. Son fonctionnement en est simple.

Elle se nomme ECRISECT.BIN et se loge en &8000. Lorsque vous l'appelez, il suffit de lui passer les paramètres suivants:

  • CALL &8000, Pist, Premsect, dernsect, Tailsect, Buffer;
    • Pist : numéro de la piste entre 0 et 42 (plus ne sert à rien car les lecteurs sont équipés de butée et certains stoppent à 41);
    • Premsect : numéro logique du premier secteur à remplir;
    • dernsect : numéro logique du dernier secteur à remplir;
    • Tailsect : type des secteurs à remplir (de 0 à 5 pour 128 à 4096);
    • Buffer : adresse de la zone mémoire contenant les données à déposer dans les secteurs visés (&4000 par exemple). Pour écrire un seul secteur, donnez le même nom au premier et au dernier.

Facile d'écrire, mais pour lire? Même principe, même adresse, mêmes paramètres, mais pas le même nom. Le programme se nomme LIRESECT.BIN.
Notre cher Valère nous a aussi envoyé un petit format de derrière les fagots qui envoie Disco 5 au rencart. Poubelle, la bête. Le principe utilisé est celui précédemment cité. C'est parti pour les valeurs.
Taille: 0, nombre: 32, Gap #3: 1, remplissage: 0.

Laissez tout à zéro sauf:

No 1 : &01/ 2
No 4 : &02/ 2
No 5 : &03/ 2
No 6 : &04/ 2
No 9 : &05/ 2
No 12 : &06/ 2
No 15 : &07/ 2
No 16 : &08/ 6
No 17 : &09/ 5
No 18 : &10/ 4
No 19 : &11/ 3
No 20 : &12/ 2
No 21 : &13/ 1
No 23 : &14/ 6
No 24 : &15/ &FF
No 25 : &16/ 2
No 28 : &17/ 128
No 29 : &18/ 1
No 31 : &19/ 6
No 32 : &20/ 2

Ecrivez les secteurs de 1 à 8 comme sous un format IBM. Comme deux secteurs seront écrasés par ceux-ci, mais qu'ils ont été réservés, pas de problème. Utilisez-les comme pour tout autre secteur qui se respecte. N'écrivez surtout pas dans les 8 autres (de &09 à&10) sans quoi le plombage sera naze, c'est ce que fera Disco 5.0 et il ne laissera que 7 secteurs en état de marche. Pour vérifier si on est bien sur l'original, il suffit de lire les 8 secteurs légaux. S'ils sont actifs, on peut rouler. Dans le cas contraire, dites bonjour au pirate en herbe.

DISCO 6.0 : AUX FRAISES

C'est l'ami et éternel génie Xor qui a trouvé le truc que voici:
— Taille: 0, nombre: 32, Gap #3 : 1, remplissagè : 0.
Laissez tout à zéro sauf:

Ecrivez dans les secteurs logiques 1,4, 5 et 6, et vous vous retrouverez avec une piste de 24 secteurs que Disco 6.0 ne saura recopier. Pour tester l'original, faites simplement un test de présence des secteurs (Disco n'en laisse que 7 ou 8 d'actifs).

Voilà, c'est fini pour ce mois-ci, mais nous vous en réservons encore pour le mois prochain.
La vie est ainsi faite. Merci à XOR, à Valère et à Thierry Frache pour leur collaboration si précieuse.

Merci à tous pour cette intrusion dans le monde merveilleux de la technique. Bonne lecture.

Sined le Barbare (99,9 % - 1 verre de whisky) Poum (0,1 % -5 bouteilles de whisky) A100% n°44 p34-35-36-37

★ ANNÉES: 1991
★ AUTEURS: XOR , Alain Massoumipour , SINED

 

Page précédente : Protection Logiciel n°43
★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tool:
» Formateur  HARD-PIM  PAM  POUM  SoftwareDATE: 2008-09-13
DL: 374
TYPE: ZIP
SiZE: 4Ko
NOTE: 40 Cyls
.HFE: Χ

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Protection Logiciel n°45 (Amstrad Cent Pour Cent)
» Applications » Protection Logiciel n°42 (Amstrad Cent Pour Cent)
» Applications » Protection Logiciel n°43 (Amstrad Cent Pour Cent)
Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 597 millisecondes et consultée 2959 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.