Idioma :

Ver el código de Desproteger programas de BASIC

Esta vez aplicaremos una funcionalidad que incorpora el emulador ((http://www.virtualdub.org/altirra.html 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 ((/Apuntes/TécnicasdeProtecciónparaBASIC Técnicas de protección para Basic)).

{{toc numerate=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 ((http://www.retrobits.net/atari/treasurechest.shtml tesoro del pirata)). Al cargar el programa se ve que tiene la protección de cambiar variables por caracteres inválidos.

%%(wacko wrapper=text wrapper_align=center)((https://www.atariware.cl/archivos/altirra/despro01.png))%%

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

%%(wacko wrapper=text wrapper_align=center)((https://www.atariware.cl/archivos/altirra/despro02.png))%%

**Tercero :** En la zona de consola donde dice "Altirra >" escribimos lo siguiente : 
%%(code)
.basic_dumpline -c 0
%%
Al ejecutar verás el listado del programa por la consola
%%(wacko wrapper=text wrapper_align=center)((https://www.atariware.cl/archivos/altirra/despro03.png))%%

**Cuarto :** Ahora vamos a restablecer la tabla de variables del programa, con el siguiente comando :
%%(code)
.basic_rebuildvnt
%%
%%(wacko wrapper=text wrapper_align=center)((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 

%%(wacko wrapper=text wrapper_align=center)((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:
%%(code)
.basic_save g:/tapetape.bas
%%
para guardarlo directo a nuestro disco duro del PC.

===Recuperar listado===

Cargamos nuestro programa con **LOAD**. Escribimos **LIST** y presionamos **ENTER**. 
%%(wacko wrapper=text wrapper_align=center)((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 :
%%(code)
.basic_rebuildvnt
.basic_dumpline -c 0
%%
%%(wacko wrapper=text wrapper_align=center)((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 :
%%(code)
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:
%%(code)
e 1DB9 00 80 
%%
%%(wacko wrapper=text wrapper_align=center)((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.
%%(wacko wrapper=text wrapper_align=center)((https://www.atariware.cl/archivos/altirra/despro13.png))%%
%%(info type="note" title="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**
%%