Trabalho Pratico de Arquitetura de Computadores I - sem 2008/1
Porto Alegre, Marco de 2008.
Engenharia da Computacao, FACIN/FENG, PUC-RS
Trabalho Pratico 2
Desenvolver um programa em assembly para a arquitetura IA32, para execucao no Linux (NASM) que ao ser executado realize alteracoes em um programa executavel existente no mesmo diretorio (ou, opcionalmente, em outro diretorio qualquer). O programa devera' apresentar as seguintes funcionalidades:
abertura de arquivos visando encontrar programa executavel a ser alterado;
busca por determinadas instrucoes “alteraveis” em codigo de maquina no programa alvo executavel;
ao encontrar uma instrucao (ou trecho de instrucoes), realizar a alteracao no programa alvo executavel de forma a inserir o pseudo-virus (codigo malicioso) nesse arquivo executavel;
gravar uma assinatura do pseudo-virus nesse arquivo;
gravar no disco o programa alvo executavel devidamente alterado.
Observacoes:
O programa devera' realizar essa atividade em apenas um arquivo. Deverao ser testados varios arquivos, porem, ao ser encontrado o primeiro programa executavel com o trecho alvo definido no pseudo-virus, sua tarefa deve ser realizada e interrompida a busca por novos arquivos.
sugestoes de codigo malicioso a ser inserido, rotina que realiza uma copia do virus para outros programas, rotina que consome recursos do sistema (tempo de CPU, espaco em disco, ...).
sugestao de instrucao a ser modificada - algum JMP, CALL, trecho equivalente ao exit() do C, ...
Objetivos do trabalho:
Praticar e solidificar conhecimentos na arquitetura IA32 (conjunto de instrucoes, conjunto de registradores, modos de enderecamento, estrategias de desenvolvimento de programas em assembly IA32, relacao linguagem de alto nivel com linguagem de montagem, uso de chamadas de sistema, entre outros).
Entender na pratica sistemas de apoio a programacao e execucao de programas (compilador, montador, linker, carga, execucao, formato de programa executavel).
Entender o funcionamento interno de um virus de computador, visando a defesa de sistemas computacionais contra essas ameacas.
Entender em detalhes o funcionamento da linguagem de programacao C em arquiteturas IA32, por meio da implementacao de rotinas equivalentes em assembly para acesso ao sistema de aquivos, tratamento de strings, manipulacao de segmentos de memoria, uso da pilha, entre outros.
Dicas e sugestoes:
Implementar simples programas exemplo em C (ou outra linguagem qualquer), compilar, gerar executaveis, e usar um editor Hexadecimal para abrir manualmente esses programas executaveis e identificar trechos de codigos a serem alterados.
Alterar manualmente os programas executaveis gerados, de forma a verificar se a alteracao proposta ira' funcionar na pratica.
Estudar os programas da turma do semestre 2007/2 de forma a encontrar solucoes para problemas que venham a surgir durante o projeto e desenvolvimento do trabalho.
Chamadas de sistema no Linux – Syscall
Exemplo de manipulacao de arquivos (open, read, write) – ler_arq.asm.
Exemplo de manipulacao de informacoes armazenadas no segmento de dados (o programa a ser alterado poderia ser carregado no segmento de dados e toda a alteracao ser realizada em memoria) – inv_str_p.asm
Resumo das instrucoes do x86 – resumo das instrucoes.pdf
Sugestao de editor hexadecimal: HexEdit. Copia local disponivel em hexit/. Nessa pasta existe inclusive uma versao para windows (hexitw.exe)
Apresentacao e entrega:
A entrega/demonstracao sera' na aula do dia 04/07.
Preparar um relatorio completo descrevendo tudo o que foi realizado, incluindo as estrategias e metodologia de projeto e desenvolvimento utilizadas e, muito importante, os problemas enfrentados bem como modulos nao implementados com a devida justificativa. O relatorio representa 20% da avaliacao e devera' ser preparado em HTML de forma a ser disponibilizado na pagina da disciplina. Consultar o professor da disciplina para maiores informacoes sobre o conteudo esperado do relatorio.
Os demais 80% da avaliacao consistem na implementacao do pseudo-virus, apresentando um correto funcionamento, ou seja, alterando programas que continuam sendo executados, porem com o funcionamento modificado. Ainda como parte da avaliacao sera' analisada a documentacao detalhada do codigo fonte em assembly, o estilo de programacao, e informacoes de como compilar e executar (essas informacoes devem constar no relatorio).
Nao e' necessario entregar nenhum material impresso. Basta enviar tudo o que foi implementado, bem como o relatorio, por email para Eduardo.Bezerra @ pucrs.br ou bezerra @ innalogics.com.br IMPORTANTE!!!! So' serao atribuidas notas para aqueles alunos que enviarem os fontes e relatorios por email ate' a data da entrega (04/07/2008).
Lista de grupos:
Grupo 1 - Roberto Port de Oliveira, Robson Ortiz, Leandro Paixao e Ricardo Aoki [Solucao] [Relatorio]
Grupo 2 - André Goron Farinon, Everaldo Araujo e Rafael Companhoni [Solucao] [Relatorio]
Grupo 3 - Akram Kmal Falcão Mashni, Roger Goerl e Renan Castanheira da Silva [Solucao] [Relatorio]
Grupo 4 - Ivan Jr. Quadros, Rodrigo Gobbi e Yan de Souza [Solucao] [Relatorio]
Grupo 5 - Bruna silva, Bruno Porcher e Vinicius Fochi [Solucao] [Relatorio]
Grupo 7 - Samir Young Jun Zampiva e Tchiesla Pereira Rocha [Solucao] [Relatorio]