ARTIGO CIÊNTIFICO ENGENHARIA REVERSA



Documentos relacionados
Sistema Click Principais Comandos

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

Lazarus pelo SVN Linux/Windows

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

INTRODUÇÃO AO WINDOWS

MANUAL DO ANIMAIL Terti Software

Introdução. O que é o Registro do Windows

Faculdade Boa Viagem Sistemas de Informação Gerenciais EXERCÍCIO PASSO-A-PASSO PEDIDOS E CONTROLE DE ESTOQUE. Microsoft Access.

CRIANDO TEMPLATES E LEGENDAS

Manual de Instalação. SafeSign Standard (Para MAC OS 10.7)

Como Gerar documento em PDF com várias Imagens

Atualização De Mapas GPS Apontador. 1º Acessar site: 2º Selecione o Idioma para Português no seu canto direito.

Celebre este natal e ano novo junto aos seus amigos e familiares distantes.

Serviço Seguro de Mensagens Instantâneas

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo

UNIVERSIDADE FEDERAL DO AMAPÁ PRÓ REITORIA DE ADMINISTRAÇÃO E PLANEJAMENTO DEPARTAMENTO DE INFORMÁTICA. Manual do Moodle- Sala virtual

Manual do usuário. Softcall Java. versão 1.0.5

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Manual do Google agenda. criação e compartilhamento de agendas

Como incluir artigos:

Questão Essência do Excel

Criando Banco de Dados, Tabelas e Campos através do HeidiSQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Como funciona? SUMÁRIO

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

MANUAL DE UTILIZAÇÃO SISTEMA DE CADASTRO INTRANET

Sistema de Automaçaõ de Vendas Manual Passo a Passo

Inserindo Dados no Banco de Dados Paradox.

MANUAL DO INSTAR-MAIL 1.0. Pagina de login e senha do Instar-Mail

Tutorial Gerar arquivo PDF. Gerando um documento pdf com várias imagens 1- Inserir imagem no Word

Janelas e seus elementos

Manual Equipamento ST10 Flasher Rev. 1

02 - Usando o SiteMaster - Informações importantes

Lição 1 - Criação de campos calculados em consultas

Dicas para usar melhor o Word 2007

Melhor do que driblar os vírus de pendrive, é não pegá-los! Mas como fazer isto?

FAQ. Erros, e dúvidas frequentes

CONFIGURAÇÃO MINIMA EXIGIDA:

APOSTILA DE INFORMÁTICA MICROSOFT WORD 2012

Projeto Amadeus. Guia de Instalação Windows

GUIA INTEGRA SERVICES E STATUS MONITOR

MANUAL DE FTP. Instalando, Configurando e Utilizando FTP

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - MILLENNIUM

PHP Material de aula prof. Toninho (8º Ano)

ALBUM DE FOTOGRAFIAS NO POWER POINT

Instalando o Lazarus e outros sistemas de suporte. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

CRIANDO UM BANCO DE DADOS

USANDO O ROUNDCUBE WEBMAIL

EXEMPLO DE COMO FAZER UMA MALA DIRETA

GUIA DE INSTALAÇÃO TOOLBOX.

1 UNIT Universidade do Trabalhador Dr. Abel dos Santos Nunes

Manual Administrador - Mídia System

Manual de Atualização MATERIAL DE APOIO - KB IMÓVEIS

Usando o simulador MIPS

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - SLIM

CURSO DE INFORMÁTICA BÁSICA AULA 2 O AMBIENTE WINDOWS

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Token SafeNet Authentication Cliente 8.3 (x32 e x64)

MATERIAL DE APRESENTAÇÃO DO SCRATCH

MANUAL DO USUÁRIO. Projeto/Software/Programa. CDAeM Cadastro de Artistas e Modelos JunioNet. Objetivo desse manual

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO

Sistema de Recursos Humanos

O Windows também é um programa de computador, mas ele faz parte de um grupo de programas especiais: os Sistemas Operacionais.

Configurando um Grupo Doméstico e Compartilhando arquivos no Windows 7

LINGUAGEM C UMA INTRODUÇÃO

Instalando o Sysloc versão manualmente

MANUAL COTAÇAO WEB MANUAL MANUAL AVANÇO INFORMÁTICA AVANÇO INFORMÁTICA. [Digite seu endereço] [Digite seu telefone] [Digite seu endereço de ]

(token SafeNet e-gov - Plataforma Windows 32).

SPARK - Comunicador Instantâneo MANUAL DO USUÁRIO

Resumo da Matéria de Linguagem de Programação. Linguagem C

UNIVERSIDADE FEDERAL DO AMAPÁ NÚCLEO DE TECNOLOGIA DA INFORMAÇÃO. Manual de Avaliação de Desempenho Cadastro

Sistema de Controle de Cheques GOLD

Programação de Computadores I. Conhecendo a IDE Code::Blocks

Gerenciamento de Arquivos e Pastas. Professor: Jeferson Machado Cordini jmcordini@hotmail.com

W o r d p r e s s 1- TELA DE LOGIN

MANUAL ZEDIT 32 Índice:

PASSO A PASSO PARA CADASTRAR OFERTAS, PRODUTOS E SERVIÇOS

SISTEMA DE GERENCIAMENTO DE PROJETOS - REDMINE MANUAL DE USO

Gerenciamento de Projetos

Configurar o Furbot no Eclipse

Este documento visa facilitar e viabilizar a introdução ao módulo de Manufatura no Sistema

15 4 Operação Avançada do Sistema: Inclusão de Nota Fiscal e seus relacionamentos

Banco de Dados Oracle 10g

MANUAL DE UTILIZAÇÃO DO ESPAÇO VIRTUAL DE APRENDIZAGEM EVA

Atualizaça o do Maker

Página 1 MANUAL DE UTILIZAÇÃO DA FERRAMENTA OFFICE ONLINE WORD ONLINE EXCEL ONLINE POWER POINT ONLINE

Guia Site Empresarial

ALUNES MANUAL DO USUÁRIO. Guia rápido Alunes

Microsoft Office PowerPoint 2007

Associação Educacional Dom Bosco Curso de Engenharia 1º ano

4 - Layout de Mapas no QGIS 2.0

MANUAL DO USUÁRIO. Ferramenta de Fidelização Eletrônica ÁGUA DOCE SABORES DO BRASIL. Interface de OPERAÇÃO (no caixa)

Criando uma mala direta com o Word 2007 em 6 Passos

Daruma NFCe Conheça todos os passos para testar a NFCe Daruma

LUXVISION HÍBRIDO VER AS IMAGENS ATRAVÉS DO INTERNET EXPLORER. Abra o INTERNET EXPLORER, vá em FERRAMENTAS, OPÇÕES DA INTERNET.

Portaria Express 3.0

MANUAL DE INSTALAÇÃO DO ODONTO TECHNOLOGY

Manual de utilização do sistema de envio de sms marketing e corporativo da AGENCIA GLOBO. V

Como-Funciona-Banco-Damus-Excel-Com-VBNet-Em-3-Idiomas

Iniciação à Informática

Procedimentos para Reinstalação do Sisloc

Transcrição:

ARTIGO CIÊNTIFICO ENGENHARIA REVERSA Nicollas Fernandes Ricas Profª: Ieda Maria Brighenti RESUMO A engenharia reversa consiste em reverter um programa binário para código-fonte onde se é possível fazer qualquer alteração de uma forma mais fácil depois de feito todo processo de reversão. Hoje, utilizada como uma forma de segurança, estudo e no desenvolvimento de drivers para sistemas operacionais quais os fabricantes de hardware não dão suporte a determinado sistema operacional. INTRODUÇÃO A engenharia reversa consiste em reverter programas de sua forma binária, onde é possível alterar ou inserir alguma instrução em linguagem assembly no programa principal, muito utilizada hoje não só por empresas fabricantes de antivírus, como também crackers, hackers e desenvolvedores de programas. A engenharia reversa em muitas vezes que é praticada consiste na quebra de proteção anti-cópias é considerada ilegal devido à violação de copyrights (direitos autorais), pois permite o uso do programa sem a licença. Fundamentação Um programa de computador é tão inteligente a ponto de varrer todos os programas do seu computador e fazer uma análise de cada função que eles usam para dizer quais são vírus? Não! Isto ocorre porque, assim como alguns vírus, alguns programas não-maliciosos utilizam funções que também são utilizadas por eles, logo, qualquer programa com uma função dada como perigosa também seria considerado um vírus para os antivírus.

Assim como as empresas que fabricam antivírus, os crackers, os hackers, as empresas que desenvolvem gameguards e os desenvolvedores, todos eles utilizam da engenharia reversa para o desenvolvimento ou a analise de informações. As empresas que desenvolvem antivírus, por exemplo, usam a er (Engenharia Reversa), para analisar o arquivo dado como vírus, ou um arquivo que pode oferecer risco. Um vírus passa a ser visto como tal para os antivírus somente após uma análise e cadastro de informações do mesmo na base de dados do antivírus, exatamente por este motivo que os antivírus atualizam sua base de dados freqüentemente, já as empresas que fabricam gameguards também utilizam um processo semelhante, a única diferença é que em vez de analisar os vírus, é feita a analise dos hacks, já os crackers, hackers e desenvolvedores em geral, utilizam a er para reverter programas, ou injetar códigos ou bibliotecas neles para fins de estudo ou alguma alteração, seja ela crackear um programa, alterar o programa e revendêlo, obter o código de um programa onde o fabricante não oferece mais suporte ao mesmo, corrigir problemas, e desenvolver drivers para variados sistemas operacionais quando um fabricante de hardware não presta suporte a determinado sistema. Engenharia reversa trata-se de reverter através do assembly, um programa ou biblioteca que está em sua forma binária (pronta para ser executada) para o código-fonte, que permite ver como funciona ou até alterar o programa ou a biblioteca diretamente sem precisar reverter todo o programa. A Engenharia Reversa costuma ser encarada como sendo apenas uma atividade de hackers e crackers, o que, no meu modo de entender, é uma baita de uma injustiça. Na verdade, a engenharia reversa é uma área do conhecimento que permite recuperar dados, o que pode ser vital para resgatar informações consideradas perdidas. Além disto, serve para rastrear atividades suspeitas ou até mesmo criminosas - tudo depende de como ela é usada. (ELDAD ELIAM, 2005, p 25). Uma das ferramentas mais conhecidas se chama OllyDbg (http://www.ollydbg.de), através desta e outras ferramentas pode-se trabalhar com engenharia reversa. A linguagem Assembly é considerada de baixo nível. Isto não significa que seja menos importante ou eficiente que uma linguagem chamada de alto nível - são apenas modos diferentes de se programar e níveis diferentes de atuação. O que posso dizer é que, com uma linguagem de baixo nível

como a Assembly, você pilota diretamente a CPU do seu computador - nada de intermediário. (ELDAD ELIAM, 2005, p 45). Abaixo segue um exemplo de um código simples em C a ser analisado pelo OLLYDBG a fim de ser aplicado ER sobre ele. Exemplo 1 Figura 1 Código em C do exemplo 1. O exemplo exibirá na tela Teste Programa!, na linha seguinte Teste Programa 2!, quando for executado, figura 2. Segue o resultado do programa rodando: Figura 2 Exemplo 1 rodando. O processo de engenharia reversa trabalha sobre endereços, assim como endereços de memória, os chamados offsets, através destes offsets estaremos localizando as partes de um programa ou biblioteca para que possa ser alterado, remover ou inserir algum código. No exemplo dado não vamos trabalhar diretamente com offsets, pois quando não possuímos o código-fonte é necessário que se localize o código onde desejamos alterar ou inserir manualmente, neste caso estamos criando um programa básico em C para trabalhar ER sobre ele.

Existe um arquivo chamado map que é gerado quando compilamos um projeto que para ser gerado é necessário ativá-lo nas propriedades do projeto, este arquivo map possui informações do offset de cada função utilizadas por um programa, conforme o código exemplo, o nome das nossas duas funções é: main e OutraMensagem, a main é o ponto de partida de um programa então tudo que estiver dentro dela será executado quando o programa for iniciado, a função OutraMensagem foi criada para executar uma tarefa e está sendo chamada dentro da função main que é a principal, por isto as duas mensagens aparecem logo quando o programa é iniciado. O map gerado do projeto diz que o offset da main é 00401020 e da OutraMensagem é 00401070. Vamos analisar estes dois offsets no OllyDbg. Abra o executável ou a biblioteca; pressione Ctrl + G; digite o offset da função main e clique OK, após clicar terá uma tela parecida com a da figura 3. Figura 3 Função main exemplo 1, no OLLYDBG. Compare o offset da função main que foi pega no map com o offset referente à linha que está selecionada, note que são iguais. Com o processo realizado pelo OllyDbg podemos ir direto a o offset desejado uma vez que já sabemos qual é, e se reparar um pouco abaixo à direita, a única linha que possui mensagem em ASCII é a linha do offset 00401038, que está escrito Teste de Programa!. Esta mensagem está na função main na linha: printf ("Teste Programa!\n"). Agora compare a figura 4 e veja o offset selecionado com o offset da função OutraMensagem.

Figura 4 Função OutraMensagem no OLLYDBG. Novamente os offsets são iguais, e a mensagem Teste Programa 2! também está presente e corresponde a o offset 00401088 e no programa em c a seguinte linha: printf("teste Programa 2!\n"). Para uma alteração básica e simples que também se caracteriza como engenharia reversa, vamos apenas alterar as mensagens que serão exibidas na tela. Clique na linha onde está escrito Teste Programa 2!, selecionando-a; clique com o botão direito; um menu se abrirá, clique em fallow in dump; immediate constant. Na janela do OllyDbg um pouco abaixo do bloco de comandos assembly, irá aparecer informações igual a figura 5. Figura 5 Texto da função OutraMensagem em dump no OLLYDBG. Observe o offset 00420030 ou na primeira linha da imagem está escrito Teste Programa 2!, na coluna Hex dump. Clique sobre o número 54 que é o caractere ASCII T, e vá selecionando a mensagem inteira. Ficará exatamente igual à figura 6.

Figura 6 Texto da função OutraMensagem selecionado para dump no OLLYDBG. Com a mensagem selecionada pressione barra de espaço. Uma janela irá se abrir como na figura 7, agora na primeira caixa de texto, altere o texto Teste Programa 2! para Teste Programa 55 ou para uma mensagem qualquer, lembrando que a mensagem precisa ter o mesmo tanto de caracteres que a original Teste Programa 2!, ou seja, no máximo 16 caracteres, e clique em OK. Após alterado a mensagem, selecione novamente toda a mensagem; clique botão direito na mensagem selecionada; clique em copy to executable file. Uma nova janela se abrirá com uma linha selecionada, apenas clique sobre ela com botão direito e clique em save file, então digite o nome do arquivo a ser salvo mantendo sua extensão, nunca salve com o mesmo nome do original, pois o arquivo está em uso; feito isto rode o programa novamente e veja que a mensagem foi alterada pela nova mensagem definida. Isto na verdade é uma simples alteração onde qualquer mensagem ou texto de um programa, pode ser localizado, para isso clique botão direito em qualquer linha; clique em search for; all referenced string; uma nova janela abrirá nesta tela, clique com o botão direito na primeira linha e coloque search for text, digite a informação a ser procurada, quando quiser editar algo apenas dê duplo clique e siga o processo de seleção acima até o fim.

Figura 7 Janela de alteração de informações ASCII, UNICODE, HEX. Segue resultado do programa rodando: Figura 8 Programa com mensagem alterada rodando. Exemplo 2: Figura 9 Código em C do exemplo 2. O exemplo da figura 9 pede para o usuário digitar uma chave, se a chave digitada for igual a 89 ele permite que o programa rode, caso contrário ele se fecha, esta é uma simples validação, porém, em programas ou jogos também existem validações, claro que não é tão simples de quebrar como será no exemplo dado, porém o processo é semelhante.

Esta verificação checa se o programa do usuário foi comprado, ou seja, é original. O processo do crack faz exatamente isto, uma quebra, assim o usuário utiliza o programa como original, ou seja, ele adquiriu os direitos de usar o programa pelo período definido pelo fabricante. Neste exemplo vamos fazer esta quebra de validação fazendo com que se digitarmos qualquer número a validação seja verdadeira. O offset da função main de acordo com o map é 00401010, abra o programa executável; pressione Ctrl + G; digite o offset, a visualização será igual à figura 10. Figura 10 Função main exemplo 2, no OLLYDBG. Ai está, conforme podemos ver na figura 10 está toda a função main, vejam que na linha do offset 00401046 existe o comando: CMP [LOCAL.chave], 59. Está linha faz uma comparação que seria a comparação da chave que deve ser igual a 89, note que a está com o valor 59, isto devido ao valor estar em Hexadecimal. O comando CMP faz a comparação e retorna o valor da comparação, a próxima linha tem o comando JNZ que é diferente de, ou seja, se a comparação for diferente do valor proposto que é 89, o JNZ irá mover para o offset 0040105B que seria a parte onde normalmente fecharia o programa, caso a validação não fosse verdadeira, no exemplo apenas exibe uma mensagem. O que iremos fazer é simplesmente inserir um NOP nesta linha, o NOP nada mais é que um código nulo, o processador vai apenas passar por ele e nada será

executado. Então para tirarmos a validação basta inserirmos um NOP no comando JNZ que por sua vez move para o offset 0040105B se o valor digitado for diferente de 89, com o NOP no lugar do JNZ quando digitado um valor diferente de 89 também será dado como valido.para inserir o NOP basta clicar na linha do JNZ; clicar com botão direito; clique em binary; fill with nop s, veja como irá ficar na figura 11. Figura 11 Função main, após inserir NOP s no JNZ, no OLLYDBG. Agora, selecione as 2 linhas com NOP exatamente como está na figura 11, clique botão direito; clique em copy to executable; selection. Uma janela irá se abrir com 2 linhas selecionadas, apenas clique botão direito; clique em save file e digite o nome do arquivo, lembre-se de mudar o nome para não dar conflito. A quebra de proteções (quase sempre proteções anti-cópias), conhecida também como "Software Cracking", talvez seja o aspecto mais conhecido da engenharia reversa. Trata-se da modificação (ilegal, pois infringe copyrights) de um software, para remover a proteção anti-cópias, permitindo que o software seja utilizado sem a posse de uma licença. (ELDAD ELIAM, 2005, p 215). Rode o programa, digite qualquer coisa e verá que ele sempre vai dizer que tem permissão para rodar e vai rodar o programa.

Segue resultado do programa rodando: Figura 12 Programa com validação alterada rodando. Este artigo será postado no meu blog (http://nicollasfr.blogspot.com) junto ao artigo o código fonte dos exemplos, os programas compilados, os programas após as alterações, para que eu possa dar continuidade, sobre engenharia reversa. No artigo Engenharia Reversa II mostrará como se faz o método mais interessante da engenharia reversa a injeção e também como juntar variadas formas para que impossibilidade a engenharia reversa de seus programas. CONCLUSÃO A engenharia reversa possui várias funcionalidades, todas elas voltadas à alteração, desenvolvimento de hardwares ou software cracking. É também uma das principais formas de criminalidade na computação. Uma vez viola os direitos copyrights. REFERÊNCIAS ELIAM, Eldad. Reversing: Secrets of Reverse Engineering, Wiley, 2005)