APPLICATIONSDEPLOMBAGE ★ DESPROTEGER PROGRAMAS EN BASIC (AMSTRAD SEMANAL) ★

Desproteger programas en Basic (Amstrad Semanal)Applications Deplombage
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

lEn principio, este artículo parece uno de tantos que se limitan a ampliar el Basic del CPC recurriendo al abuso del Código Máquina, por obra y gracia de los misteriosos comandos RSX. No obstante, como adelanto, les podemos decir que nunca más les molestará un programa protegido escrito en Basic.

En muchas ocasiones deseamos conocer el contenido de un disco o cassette. Para ello, nos valemos del comando CAT, que nos proporciona el nombre de los programas y su longitud. Pero realmente, en ciertos casos, esta información resulta verdaderamente escasa. Por eso, hemos preparado dos nuevos comandos RSX, que nos van a ser de gran utilidad.

El primero de ellos nos va a proporcionar el contenido de los parámetros más importantes que se encuentran en la cabecera de cada programa. Es lo que podríamos llamar un lector de cabeceras. Este comando deberá ejecutarse de la forma que se indica a continuación:

|CAT, “NOMBRE”

o bien:

|CAT,@A$

donde la variable A$, deberá contener el nombre del programa del cual se desea obtener información. Una vez ejecutada dicha instrucción, nos aparecerán en pantalla los siguientes datos:

Nombre
Dirección inicial
Longitud
Tipo
Dirección de ejecución

Donde el nombre, nos indicará el programa introducido en el parámetro; dirección inicial, la posición de memoria a partir de la cual se cargará el programa en memoria; longitud, nos dará el número de bytes que contiene el programa; dirección de ejecución, la dirección donde se ejecuta el programa, si se ha especificado en el momento de salvarlo, de lo contrario, no existirá.

Dentro de tipo, podremos encontrar cualquiera de las siguientes expresiones:

Basic
Basic P. (Basic protegido)
Binario
Binario P. (Binario protegido)
Ascii

que corresponda al rango de valores 0-5, que son los que indican en la cabecera de cada programa el tipo al que pertenece dicho programa.

Debemos tener en cuenta que, si lo ejecutamos, cuando se esté trabajando con disco, el nombre del programa se buscará en el disco. Asimismo, si lo hacemos con la cinta, el nombre del programa se intentará obtener de ella.

Así pues, para cambiar de un sistema a otro, deberemos utilizar los comandos de todos conocidos de cambio de periférico, como son: |DISC y |TAPE.

Cuando ejecutemos este comando con un nombre de programa que no se encuentra en el disco, aparecerá el mensaje típico que nos proporciona el disco de fichero no encontrado y, además, aparecerá la información que nos proporciona nuestro comando RSX, aunque en este caso no servirá para nada, ya que el programa no se ha podido leer en el disco.

Además de éste, hemos preparado otro nuevo comando RSX que, igual que el anterior, nos puede ser de gran utilidad.

Dicho comando deberá ejecutarse de la forma que se indica a continuación:

|LOADP, “NOMBRE”

o bien:

|LOADP,@A$

donde la variable A$ deberá contener el nombre del programa que se desea cargar.

Como su nombre indica, nos servirá para cargar en memoria programas que se hayan salvado de forma protegida, con la particularidad de que una vez cargados, podremos visualizarlos, y salvarlos de nuevo de forma normal.

Así pues, diríamos que dicho comando nos permitirá desproteger programas Basic que se hayan salvado de la forma siguiente: SAVE “nombre”,P

Para la realización de dichos comandos, se han utilizado varias rutinas del firmware, aparte de las necesidades para inicializar comandos RSX.

A continuación veremos cuáles son y la forma en que actúa cada una de ellas.

#BC77. Prepara para leer un fichero

Abre el canal para cargar el primer bloque de un programa.

Condiciones de entrada:

B.—Contiene la longitud del nombre del programa.
HL.—Contiene la dirección del nombre.
DE.—Contiene la dirección del buffer de carga de 2 K.

Condiciones de salida:

En caso de que no exista ningún error:

— Carry verdadero.
— El flag de cero falso.
— HL contiene la dirección del buffer que contiene la cabecera.
— DE contiene la dirección inicial del programa.
— BC contiene la longitud.
— A contiene el tipo de programa.

Si ya se había abierto dicho canal:

— Carry falso.
— Flag de cero falso.
— A, BC, HL y DE de corrompen.

Si se ha pulsado la tecla 'ESC':

— Carry falso.
— Flag de cero verdadero.
— A, BC, DE y HL se corrompen.

En cualquier caso:

— Se corrompe el registro IX y los demás flags.

#BC7A. Cierra el canal para la carga

No necesita condiciones de entrada.

A la salida nos da el carry verdadero, si el canal ya estaba cerrado. El carry falso, si dicho canal no se había abierto. En cualquier caso, se corrompen los registros A, BC, HL y DE y todos los flags.

Las rutinas anteriores se han utilizado tanto para confeccionar el primer comando RSX, como para el segundo, aunque en este último, además, se ha recurrido a la que se indica a continuación.

#BC83. Carga el programa en la memoria

Condiciones de entrada:

El registro HL deberá contener la dirección donde debe ser colocado el programa en la RAM.

Condiciones de salida:

Si el fichero se ha cargado correctamente:

— Carry verdadero.
— Flag de cero falso.
— HL contiene la dirección inicial.

Si el canal no estaba abierto:

— Flag de carry y cero falsos.
— HL se corrompe.

En cualquier caso:

— Se corrompen los registros A, BC, DE, e IX y todos los flags.

Por último, diremos que estos nuevos comandos funcionan correctamente en un Amstrad CPC 6128 y 664, pero aquellos que posean un 464, deberán tener en cuenta las correcciones que se indican a continuación.

En el listado ensamblador, se deberán cambiar las siguientes líneas:

1750 LD (#AE83), HL
1760 LD (#AE85), HL
1770 LD (#AE87), HL
1780 LD (#AE89), HL

Para los que utilicen el programa cargador, los cambios deberán ser en las siguientes líneas:

820 DATA 193,33,112,1,9,34,131
830 DATA 174,34,133,174,34,135,174
840 DATA 34,137,174,201,33,45,146

Para disponer de estos dos nuevos comandos, únicamente se deberá copiar el listado ensamblador que aparece a continuación, o bien el programa cargador Basic. Para inicializar dichos comandos, deberemos hacer una llamada a la dirección #9000. (CALL &9000).

SA

★ PUBLISHERS: Hobby Press , Amstrad Semanal
★ YEAR: 1987
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: AMSTRAD SEMANAL 1987
★ AUTHOR: Alberto Súñer
 



★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» Desproteger  programas  en  Basic    (Amstrad  Semanal)    (ASM-Source)    SPANISH    LISTINGDATE: 2024-05-20
DL: 180
TYPE: PDF
SiZE: 407Ko
NOTE: 1 page/PDFlib v1.6

» Desproteger  programas  en  Basic    (Amstrad  Semanal)    SPANISH    LISTINGDATE: 2024-05-20
DL: 191
TYPE: PDF
SiZE: 441Ko
NOTE: 1 page/PDFlib v1.6

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

Lien(s):
» Applications » Récupérez vos programmes ou fichiers protégés (Amstrad Magazine)
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» 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.732-desktop/c
Page créée en 679 millisecondes et consultée 797 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.