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