segunda-feira, 21 de abril de 2014

Strike Force Cobra (Piranha)

Depois de um longo tempo, converti um jogo para disco Beta.


Strike Force Cobra é um jogo 3D isométrico em que se controlam 4 personagens alternadamente. Destaca-se dos demais do gênero - em geral monocromáticos - por ter cores na área de jogo.

A princípio parece ser um programa sem proteção, como de afirma no World of Spectrum. O seu carregador BASIC parece bem simples:

1 CLEAR 24750: INK 7: PAPER 7: POKE 23624,63: CLS : POKE 23692,255
2 LOAD ""CODE
3 LOAD ""CODE 24576
4 RAND USR 24576

Porém esta aparência é falsa, pois as linhas 3 e 4 jamais são executadas. O que parece ser o simples carregamento de uma tela na linha 2, sobrepõe-se sobre a área BASIC pelo código extra que vem junto com este bloco. Se uma tela normal tem tamanho de 6912 bytes, este bloco é de 8366 bytes. Para entender o que se está passando, deve-se carregar o  bloco em endereço 20000 bytes mais adiante, com o comando LOAD ""CODE 36384.

Feito isto, basta analisar com POKE o conteúdo deste bloco, em especial as variáveis de sistema do BASIC. Resumindo os resultados, não há programa BASIC neste bloco, porém foi encontrado um comando digitado no modo imediato:

RAND USR a : STOP

A variável a contém o valor 25000, que não está presente no código mas provavelmente trata-se de um programa para salvar o jogo. A seguir vem o comando STOP, que levanta um estado de erro do BASIC. Analisando o endereço da rotina de tratamento de erros, apontado pela variável ERR_SP (em 23613), finalmente encontrei o endereço verdadeiro do carregador do código de máquina do jogo: 23351. Fazendo o disassembly a partir deste endereço pode-se compreender em fim, o carregamento e a decodificação do código de máquina do jogo.

Este exemplo mostra que a aparente falta de proteção de um jogo é enganadora. Não deixa de ser uma forma de proteger bastante eficaz, pois pode iludir o hacker achando que é só copiar os blocos tipo CODE.

Para baixar os arquivos Hobeta, clique neste link.

Nenhum comentário:

Postar um comentário

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.