Eletrônica
Proteger programa contra BREAK
Uma medida obrigatória para proteger um programa e evitar sua listagem é não deixar que seja interrompida. Quando um programa BASIC é executado no TK90X, pode ser interrompido ao se pressionar a tecla BREAK (Caps-shift e Espaço).
BREAK reseta computador
Experimente digitar e rodar o seguinte programa BASIC:
10 LET e=PEEK 23613+256*PEEK 23614:POKE e,0:POKE e+1,0
20 FOR n=0 TO 1e6
30 PRINT AT 10,0;n
40 NEXT n
Ao pressionar a tecla BREAK, ao invés de de interromper sua execução, ocorrerá reset do computador.
A variável de sistema em 23613 (P_ERR ou ERR_SP) contém o endereço do elemento da pilha do Z80 com o endereço de retorno de uma sub-rotina, caso ocorra uma interrupção ou fim do programa. No programa BASIC acima, o elemento da pilha ficaria no endereço e
e o endereço de retorno seria dado por PEEK e+2546*PEEK (e+1)
. Ao colocar com POKE o valor 0 em e e em e+1, o endereço de retorno é redefinido como 0, o que é equivalente a USR 0
, isto é, a rotina de reset (inicialização) do TK90X é chamada. Qualquer interrupção no programa BASIC, inclusive por se pressionar a tecla BREAK, irá apagar toda a RAM.
BREAK desativado Experimente digitar e rodar o seguinte programa BASIC:
10 LET e=PEEK 23613+256*PEEK 23614:
15 LET e=e-2:POKE 23614,INT (e/256):POKE 23613,e-256*PEEK 23614
20 FOR n=0 TO 1e6
30 PRINT AT 10,0;n
40 NEXT n
Mesmo que se pressione a tecla
BREAK, o programa em execução não será interrompido. O efeitos dos POKEs acima é alterar a variável de sistema P_ERR ou ERR_SP, para que aponte uma posição abaixo na pilha do Z80. Com isto o BREAK, ao invés de direcionar a execução para a rotina de tratamento de dados, irá retornar para o interpretador BASIC.
BREAK trava computador
Experimente digitar e rodar o seguinte programa BASIC:
10 POKE 23659,0
20 FOR n=0 TO 1e6
30 PRINT AT 10,0;n
40 NEXT n
Se o programa for interrompido, a tela fica toda preta e o computador fica travado (
crash). A variável de sistema em 23659 é o DF_SZ, que especifica o número de linhas da parte inferior da tela, empregada pelo editor de linhas. O editor requer no mínimo 2 linhas para funcionar, caso contrário o monitor BASIC fica travado. Quando um programa BASIC está rodando, o editor não está ativo e não há grandes problemas. Porém quando o programa é interrompido por qualquer motivo, o monitor tenta acionar o editor de linhas e acaba travando.
O comando INPUT uitliza o editor de linhas e portanto travará se for invocado após POKE 23659,0. O remédio é fazer um POKE 23659,2 antes de INPUT.
Conclusão Foram apresentadas três técnicas empregadas por programas comerciais para proteger um programa BASIC, normalmente um dos pontos fracos contra pirataria. Nenhuma delas é infalível, pois há situações em que as variáveis de sistema acabam sendo sobrepostas. Em programas longos, recomenda-se colocar os POKEs em vários locais diferentes.
loading...
-
Reclaim
Experimente digitar o seguinte programa no seu TK90X: Pode ser que a listagem não fique clara na imagem, portanto estou repetindo abaixo: 10 FOR n=50000 TO 50009: READ a: POKE n,a: NEXT n 20 RAND USR 50000 30 DATA 237,91,83,92,42,75,92,195,229,25...
-
Quazatron E A Proteção Do Carregador Basic
Na postagem anterior mostrei uma técnica de proteção de programa BASIC, que consiste em camuflar os valores reais de constantes numéricas. O jogo Quazatron é um que faz uso desta artimanha. Ao carregar o programa e interrompendo sua execução,...
-
Proteção De Programas Em Fitas: Constantes Numéricas
Eu já tive oportunidade, na série sobre adaptação de jogos para disquetes Beta 48, mencionar sobre proteção de programas BASIC contra listagem. Na ocasião, recomendei o uso do utilitário STK para poder carregar e listar tais programas. O que eu...
-
Adaptação De Jogos De Fita Para Beta 48 (parte 4)
Na parte 3, o jogo Motos teria sido adaptado para funcionar em disquete Beta 48. Só que ficou faltando um detalhe: como ter acesso à listagem do programa carregador em BASIC? A resposta mais simplista seria pressionar BREAK antes que ocorra o carregamento...
-
Desativando A Autoexecução De Um Programa Basic
Esta postagem mostra uma aplicação prática de uso do debugger do emulador Fuse. Para examinar o conteúdo de um programa BASIC faz-se necessário interromper sua execução, mas nem sempre isto é possível, especialmente quando ele foi salvo com...
Eletrônica