Proteger programa contra BREAK
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








.