CPC-POWER : CPC-SOFTS - CPCArchives 
Options de Recherche :
 
 
 

ARTICLES

9 / 21

Opera Soft D7

SPECIFICITES :

La protection Opera Soft D7 consiste en une piste 40 longue incopiable :

- La Piste 40, comprend 8 secteurs de taille 1 (256 octets - ID &01 a &07) + 1 secteur de taille 8 (32 Ko - ID &08)

 

 

 

Exemple : "Mot (S) (Face 1) (1989) (CPM) [Original].dsk"

La portion de code qui nous intéresse (Dessassemblé par Mauricio) :

ORG  $0600
;check_protection
; Read sector 8 track 40 (long track)
DD 21 34 06 .. LD IX,long_sector // Sector info (8)
3E 28 ........ LD A,40            // Track number 40
21 FF BF ..... LD HL,$BFFF        // Load address (load backwards)
01 12 06 ..... LD BC,$0612        // Length in bytes (1554 octets)
CD 16 01 ..... CALL $0116         // Read Sector

; Read sector 7 track 40 (track size 1)
DD 21 3A 06 .. LD IX,other_sector // Sector info (7)
3E 28 ........ LD A,40            // Track number 40
21 FF BF ..... LD HL,$BFFF        // Load address (load backwards)
01 FF 00 ..... LD BC,$FF          // Length in bytes (255 octets)
CD 16 01 ..... CALL $0116         // Read Sector

; check_if_datas_were_read_ok
06 FF ........ LD B,$FF         // Verify : 255 octets
21 FF BF ..... LD HL,$BFFF        // Track 40 Sector 7 (read in second place)
11 ED BA ..... LD DE,$BAED        // Track 40 Sector 8 (datas in the middle of the long track)
.check_loop
1A ........... LD A,(DE)
BE ........... CP (HL)
20 06 ........ JR NZ,protection_failed
2B ........... DEC HL
1B ........... DEC DE
10 F8 ........ DJNZ .check_loop

;protection_correct
AF ........... XOR A
C9 ........... RET

protection_failed
3E 01 ........ LD A,1
B7 ........... OR A
C9 ........... RET

long_sector
08 08 08 ..... DEFB 8,8,8 //SectorSize,SectorID,SectorID

other_sector
01 07 07 ..... DEFB 1,7,7 //SectorSize,SectorID,SectorID

 

Il faut savoir que les données sont stockée sur la disquette en ordre inversée.
C'est très malin comme idée et ça a du en dérouter plus d'un.

00011AC0 : 00 28 16 07 07 01 05 01 03 08 08 08 C9 B7 01 3E
00011AD0 : C9 AF F8 10 1B 2B 06 20 BE 1A BA ED 11 BF FF 21
00011AE0 : FF 06 01 16 CD 00 FF 01 BF FF 21 28 3E 06 3A 21
00011AF0 : DD 01 16 CD 06 12 01 BF FF 21 28 3E 06 34 21 DD 

 

1) La routine va lire 1554 octets en piste 40, secteur 8 (Taille 8, ID &08) et les stocker en : &B9EE a &BFFF (en ordre inversé, le chargement se fera réellement de &BFFF a &B9EE)

2) La routine va lire 255 octets en piste 40, secteur 7 (Taille 1, ID &07) et les stocker en : &BF00 a &BFFF (en ordre inversé, le chargement se fera réellement de &BFFF a &B9EE)

3) La routine va comparer en mémoire si les 255 octets sont identiques entre &BFFF (secteur taille 7) et &BAED (une portion des données du secteur de taille 8), là aussi le test se passe en ordre inversé.

 

A noter que plusieurs jeux d'Opera Soft possédent la piste 40 spéciale avec le secteur de taille 8 mais en fait le programme copié sur la disquette ne test pas sa présence, rendant sa présence inutile. On retrouve l'absence de détection de la protection principalement sur les versions ayant une demande d'identification par mot de passe utilisant les lettres de l'alphabet grec.

 

EDITEURS L'AYANT UTILISES SUR CPC :

Opera Soft

Listing des programmes utilisant ce format spécial

 

NIVEAU DE PROTECTION :

Incopiable sur CPC.

 

Bien entendu une fois qu'une protection est comprise, il est beaucoup plus facile de la court-circuiter.

Etant donné que la protection se situe en piste 40, il suffira de faire une copie intégrale de la piste 0 a 39 et ensuite de patcher la routine de test de la protection. Par exemple pour "Mot" (cf. les explications au dessus), il suffira de remplacer le &DD en &C9

Chaine : 28 3E 06 34 21 (DD) en 28 3E 06 34 21 (C9)

 

Article créé le : Lundi 02 Avril 2012 à 21 h 44
Dernière mise à jour le : Samedi 26 Mai 2012 à 10 h 52
 
 

CPC-POWER/CPCArchives, projet maintenu par Fredouille.
Programmation par Kukulcan © 2007-2017 tous droits réservés.
Reproduction sans autorisation interdite. Tous les titres utilisées appartiennent à leurs propriétaires respectifs.