Desproteger programas de BASIC

Esta vez aplicaremos una funcionalidad que incorpora el emulador Altirra para desproteger de forma rápida y fácil programas creados en Basic o Turbo Basic con protección del listado, esto se vio en Técnicas de protección para Basic.



1. Recuperar variables


Primero : Cargamos nuestro programa Basic con altirra, ya sea desde ATR, CAS, H:, etc..


Para este ejemplo usaremos el copiador famoso de casete llamado tapetape del tesoro del pirata. Al cargar el programa se ve que tiene la protección de cambiar variables por caracteres inválidos.


https://www.atariware.cl/archivos/altirra/despro01.png

Segundo : Presionamos F8 para el modo Debug y aparecerá la consola dejando al emulador parado.


https://www.atariware.cl/archivos/altirra/despro02.png

Tercero : En la zona de consola donde dice "Altirra >" escribimos lo siguiente :

.basic_dumpline -c 0

Al ejecutar verás el listado del programa por la consola

https://www.atariware.cl/archivos/altirra/despro03.png

Cuarto : Ahora vamos a restablecer la tabla de variables del programa, con el siguiente comando :

.basic_rebuildvnt

https://www.atariware.cl/archivos/altirra/despro04.png

Quinto : Ahora volvemos a presionar F8 para salir del modo Debug y el emulador está corriendo, ahora hacer un LIST


https://www.atariware.cl/archivos/altirra/despro05.png

Y verás que el programa tendrá todas sus variable recuperadas.


Ahora solo queda guardarlo ya sea desde Basic usando SAVE"D:TAPETAPE.BAS, CSAVE o desde la consola:

.basic_save g:/tapetape.bas

para guardarlo directo a nuestro disco duro del PC.

2. Recuperar listado


Cargamos nuestro programa con LOAD. Escribimos LIST y presionamos ENTER.

https://www.atariware.cl/archivos/altirra/despro10.png

El emulador no mostrara nada, entonces vamos al debug presionado F8. En la consola escribimos los siguientes comandos :

.basic_rebuildvnt
.basic_dumpline -c 0

https://www.atariware.cl/archivos/altirra/despro11.png

Veremos en la consola que aparecerá el listado del programa cargado en memoria, el programa original es este :

10 GRAPHICS 2
20 POSITION 5,4: ? #6;"ATARIWARE"
30 GOTO 30
32766 END
32767 POKE PEEK(138)+256*PEEK(139)+2,0:SAVE "H:PRUEBA.BAS":NEW

Como se ve entre la consola y el programa original falta una línea que es 32767 la cual activa la protección para no listar el programa.


Ahora necesitamos saber el final de la penúltima línea, que corresponde 32766. El final de ella esta marcado entre paréntesis que es el fin de la línea en memoria {end $1DB9}


Con ese dato ahora vamos a eliminar esa línea de la memoria usando el siguiente comando:

e 1DB9 00 80

https://www.atariware.cl/archivos/altirra/despro12.png

Después podemos salir del modo debug presionando otra vez F8. Ahora te mostrara el listado y el Basic esta liberado.

https://www.atariware.cl/archivos/altirra/despro13.png


NOTA IMPORTANTE

Si es posible recuperar la línea 32767. No es importante ya que la linea es muy conocida y única, pero si quieres recuperarla esta explicado en la ayuda de altirra desde su menú HELP > Contents > Debugging BASIC programs