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.
Segundo : Presionamos F8 para el modo Debug y aparecerá la consola dejando al emulador parado.
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
Cuarto : Ahora vamos a restablecer la tabla de variables del programa, con el siguiente comando :
.basic_rebuildvnt
Quinto : Ahora volvemos a presionar F8 para salir del modo Debug y el emulador está corriendo, ahora hacer un LIST
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.
El emulador no mostrara nada, entonces vamos al debug presionado F8. En la consola escribimos los siguientes comandos :
.basic_rebuildvnt .basic_dumpline -c 0
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
Después podemos salir del modo debug presionando otra vez F8. Ahora te mostrara el listado y el Basic esta liberado.
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