Proteção de programas em fitas: constantes numéricas
Eletrônica

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 não tinha dito é que existe uma forma de proteção que não pode ser contornada pelo STK. 

Fonte: Wikipédia

Para ter uma ideia de como isto funciona, digite no TK90X ou emulador a seguinte linha BASIC e rode com RUN:

10 PRINT 0

Como esperado, observa-se que aparece impressa na tela o número 0. Agora digite a seguinte linha:

POKE PEEK 23635+256*PEEK 23636+10,1

e faça um LIST. Aparentemente o programa BASIC não mudou nada. Rode o programa, e... surpresa! Não aparecerá na tela o número 0, mas um outro valor! Como isso seria possível?

O BASIC Sinclair armazena constantes numéricas em duas formas, sendo uma que é usada apenas para ser vista na listagem. A outra, com codificação binária. de fato é a usada no processamento, porém é invisível da listagem. O motivo de se fazer isto é que a velocidade de processamento em codificação binária é muito mais rápida do que em decimal, porém esta última que é compreensível ao ser humano. Portanto, armazenando uma constante com dupla codificação consegue-se contemplar tanto uma boa velocidade de execução, como a legibilidade da listagem.

A proteção consiste justamente em subverter a dupla codificação, deixando que a listagem deixe de coincidir com o valor binário. No caso acima, o POKE alterou o valor binário para 256, porém a listagem foi mantida como se fosse 0. A propósito, os endereços 23635-23636 correspondem à variável de sistema PROGBAS ou PROG que contém o endereço do início da área em que o programa BASIC é armazenado.

Infelizmente o STK não leva em conta a codificação interna das constantes numéricas e acaba sendo ludibriado por alguns jogos protegidos. Eu tive que elaborar um pequeno programa assembly para estes casos, o Basic Lister, que exibe em modo INVERSE os códigos invisíveis inseridos numa listagem. Este programa está disponível no Google Drive ou 4 Shared. Eu pretendo melhorar este programa ainda, mas é possível ir usando como está.

Carregando este programa na RAM a partir do endereço 50000, para rodá-lo basta digitar:

RAND USR 50000

No exemplo acima, será exibida a constante 0 seguido do valor codificado em binário que é 256.

Para entender melhor como uma linha BASIC é armazenada na RAM, e como é a codificação numérica de 5 bytes no BASIC Sinclair vide:
  • http://wiki.tk90x.com/index.php?title=Mem%C3%B3ria_do_BASIC#Organiza.C3.A7.C3.A3o_de_dados 
  • http://wiki.tk90x.com/index.php?title=Calculadora#Representa.C3.A7.C3.A3o_em_5_bytes



loading...

- 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...

- 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...

- Menor Valor De Ramtop Com Beta 48/128
Uma das aplicações de compressores como Lerm Code Compressor 1 ou o mais recente ZX7, é liberar espaço para o carregador BASIC. Sobra a pergunta: qual espaço mínimo é necessário para o programa BASIC? Fonte: Wikipédia O endereço de início do...

- Programa '48kbmode'
Alguns programas para 48KB são incompatíveis com o modo 128KB e não rodarão na TKMEM-128, a não ser que o chaveamento da RAM seja desativado. Os jogos da Ultimate como Knight Lore, Alien 8 e Pentagram têm este problema. Para solucionar isto, os...

- Adaptação De Jogos De Fita Para Beta 48 (parte 3)
Na parte 2 eu prometi comentar os esquemas de proteção de jogos gravados em fitas cassetes mas, como interlúdio, abordarei um assunto igualmente importante: o consumo de memória.  Uma das dificuldades encontradas na adaptação de programas...



Eletrônica








.