Você está na página 1de 14

Engenharia Reversa

ENGENHARIA REVERSA
UFF Universidade Federal Fluminense Graduao em Cincia da Computao Informtica I 2005/2

Antonio Jorge Sapage da Canhota Junior Diego Alves de Souza Diogo dos Santos Moutinho Felipe Paixo Lohnefink

Engenharia Reversa

Engenharia Reversa

ndice

1. Introduao Por que a engenharia reversa na informtica? Exemplos de engenharia reversa Reengenharia Definio de engenharia reversa de software 2. Tcnicas de engenharia reversa sem cdigo-fonte 3. Tcnicas de engenharia reversa com cdigo-fonte Extrao dos fatos Tratamento dos fatos 4. Aspectos Legais Leis e acordos Casos famosos 5. Bibliografia

4 4 5 6 7 7 8 8 9 12 12 13 14

Engenharia Reversa

1. INTRODUO
A Engenharia Reversa uma atividade que trabalha com um produto existente (um software, uma pea mecnica, uma placa de computador, etc.) tentando entender como este produto funciona, o que ele faz exatamente e como ele se comporta em todas as circunstncias. Fazemos engenharia reversa quando queremos trocar, modificar uma pea (ou um software) por outro, com as mesmas caractersticas ou entender como esta funciona e no temos acesso a sua documentao. Por exemplo, numa fbrica, uma bomba falhou e tem que ser trocada por uma nova. A bomba foi instalada h 25 anos e as pessoas que fizeram o trabalho se aposentaram h muito tempo. A empresa que vendia essas bombas faliu. A fbrica tem que achar uma nova bomba, com exatamente as mesmas caractersticas, ou seja, ela tem que ser montada sobre a tubulao existente (dimenses definidas, como a bomba est fixada, volume ocupado pela bomba, etc.) que so caractersticas fceis de descobrir, mas podem tambm existir outras menos evidentes (a bomba tem que fornecer um dbito definido, ela precisa respeitar algumas restries desconhecidas). Todas essas caractersticas da bomba podem ser importante ou no, a fbrica tem que descobrir isso antes de comprar uma nova.

Por que a Engenharia Reversa na Informtica?


Organizaes trabalham com sistemas apresentando problemas tais como:

O sistema foi iniciado h muitos anos (at 20 anos atrs). O sistema tem pouca documentao e ela no foi atualizada. O que quer dizer que a documentao descreve um estado anterior do sistema, mas no a configurao atual. As pessoas que criaram o sistema deixaram a empresa, ningum pode explicar muitas decises que foram tomadas. Algumas partes do sistema foram implementadas com mtodos estranhos ou sem mtodo nenhum. Muitos programadores diferentes implementaram pequenas partes do sistema. Cada um usava um mtodo e um estilo particular de programao. O sistema implementado numa linguagem de programao antiga (Cobol, Fortran, APL, etc.) para a qual existem poucas ferramentas.
4

Engenharia Reversa

Mas o sistema tem que evoluir:

Para ser adaptado a novos computadores (mais barato, mais rpido ou porque ningum mantm mais os velhos). Para ser adaptado a novos softwares (novas bibliotecas, novas linguagem de programao, novas ferramentas). Para ser adaptado a novas regras (troca de moeda em todos os pases da Europa). Para disponibilizar novas funcionalidades que outras empresas usam. Para corrigir bugs (bug do ano 2000).

A engenharia reversa pode ser de programas como nos exemplos acima ou de dados. Por exemplo, se queremos construir um editor de texto compatvel com o MS-Word, vamos ter que entender a representao que ele usa para ler os documentos MS-Word ou poder salvar documentos nesse formato. Outro exemplo de banco de dados, ou seja, para passar de um banco de dados relacional a um banco de dados orientado a objeto. Para software, restries fsicas como as dimenses da tubulao sobre a qual a bomba tem que ser montada, so restries de interface. O velho programa tinha uma interface especfica, e costumava ser chamado de maneira bem definida. O novo programa tem que respeitar a mesma interface. As outras caractersticas do programa vo se tornar requisitos no funcionais para o novo programa. importante observar que esses problemas no so raros, pelo contrrio, so muito freqentes.

Exemplos de Engenharia Reversa


Fora da Computao Tupolev Tu-4: Em 1945, durante a segunda guerra mundial, trs bombardeiros americanos modelo B-29 foram forados a aterrissar em territrio russo. Os soviticos os desmontaram e estudaram. Usaram a engenharia reversa para copiar o bombardeiro nos mnimos detalhes. O resultado foi o bombardeiro Tupolev Tu-4 que voou pela primeira vez em 19 de maio de 1947. A produo em srie do bombardeiro comeou neste mesmo ano.

Engenharia Reversa

Na Computao IBM-PC compatvel: A IBM abriu mo da patente de sua plataforma, deixando o caminho livre para qualquer um produzir uma maquina que fosse compatvel com o IBM-PC. Assim surgiram vrios clones do IBM-PC. Samba: Software que permite sistemas que no esto rodando o Microsoft Windows a compartilhar arquivos com sistemas que esto. A engenharia reversa foi utilizada para descobrir como o compartilhamento de arquivos do Windows funcionava, para que ento computadores que no estivessem com a plataforma Windows pudessem emula a mesma. Wine: Programa que funciona como a API do Windows. Permite executar aplicativos desenvolvidos para Windows 3.1X, 9X, NT e 200x no GNU/Linux. OpenOffice.org: um conjunto de aplicativos em OpenSource (cdigo aberto). Est disponvel para diferentes plataformas: incluindo Microsoft Windows, Unix, Solaris, Linux e Mac OS X. A Suite compatvel com o Microsoft Office.

Reengenharia
A engenharia reversa consiste em apenas analisar o sistema ou a ferramenta para criar uma representao dela. J a Reengenharia vai alm. Analisa-se o projeto, cria-se uma representao do mesmo e, atravs dessa representao, monta-se uma nova estrutura que funcione Exatamente como a primeira, mas que no seja meramente uma cpia dela.

Engenharia Reversa

Definio de engenharia reversa de software


A engenharia reversa de software consiste em analisar um determinado sistema para criar representaes do prprio em um nvel mais alto de abstrao. Tambm pode ser encarada como Voltar atrs no ciclo de desenvolvimento do software. Na prtica, existem dois tipos de engenharia reversa de software: No primeiro caso, o cdigo-fonte j est disponvel, mas os aspectos mais globais, talvez documentao escassa ou no vlida, tm que ser descobertos. No segundo caso o cdigo-fonte do software no est disponvel, e todos os esforos para descobrir uma possvel fonte do cdigo para o software so considerados como engenharia reversa.

OBS: As pessoas que trabalham com engenharia reversa de software esto mais familiarizadas com o segundo caso, chegando at a desconsiderar o primeiro.

2. TCNICAS DE ENGENHARIA REVERSA SEM O CDIGO-FONTE


Engenharia reversa de software pode ser efetuada por vrios mtodos.Trs grupos principais da engenharia de software so: Anlise de fluxo de dados: Anlise atravs da observao da troca de informaes que envolvem analisadores de bus e pacotes de sniffers por exemplo, para "ouvir" dentro do bus de um computador ou uma coneco de rede, revelando o trfico de dados "escondidos". O comportamento dos dados no bus ou na rede podem ento ser analisados para produzir uma nova implementao do software que imita o mesmo comportamento. Isto especialmente utilizado na engenharia reversa de drivers de dispositivos. Desassemblar: Usando um desassembler, conseguimos obter a linguagem de mquina diretamente do programa. Este cdigo lido e entendido nos seus prprios termos, apenas com a ajuda de mneminics da linguagem de mquina. Isto funciona em qualquer programa de computador, mas pode levar um bom tempo, especialmente para algum que no esteja acostumado ao cdigo de mquina. Decompilao: Neste mtodo utiliza-se um decompilador, um programa que tenta recriar o cdigo-fonte em uma linguagem de alto nvel, tendo disponvel apenas o cdigo de mquina.
7

Engenharia Reversa

3. TCNICAS DE ENGENHARIA REVERSA COM O CDIGO-FONTE

Extrao das Informaes


O primeiro trabalho que se deve fazer coletar informaes sobre o sistema a ser estudado. As atividades da engenharia reversa se fazem sobre essas informaes extradas, mais do que sobre o prprio sistema. As informaes podem ser extradas de vrias fontes: o cdigo fonte, a execuo, os dados (por exemplo, em banco de dados), a documentao, ou outras fontes. Cdigo (anlise esttica) A primeira fonte, o cdigo, a mais usada. A anlise do cdigo chamada tambm de anlise esttica (por oposio anlise dinmica que a execuo do sistema). Ela permite extrair as informaes mais bsicas do sistema:

Quais so os componentes bsicos do sistema: arquivos, rotinas, tipos, variveis, classes, etc; Relaes de definio conectam um componente com seu contedo (onde ele se encontra); Relaes de referncia conectam um componente com aqueles que o usam (se uma rotina A chamar uma outra rotina B. A depende de B porque uma modificao na definio de B pode ter conseqncias sobre a execuo de A).

Ferramentas para fazer essa anlise so chamadas de parser. O parsing a primeira etapa da compilao do cdigo fonte. Para fazer isso, preciso conhecer a sintaxe da linguagem de programao usada. Dependendo das necessidades, pode-se usar parsers especficos que vo procurar s um tipo particular de informao. Por exemplo, num programa Pascal, podemos extrair o nome de todas as funes definidas. Trace de execuo (anlise dinmica) A anlise esttica pode extrair muitas informaes de um programa, mas nem todas. Por exemplo, qual parte de uma instruo IF realmente usada pode depender dos dados com que o programa foi chamado. Para descobrir esse tipo de informao, precisamos da anlise dinmica, que consiste em executar o programa e monitorar os valores das variveis, quais funes so chamadas, etc.
8

Engenharia Reversa

Dados Os bancos de dados podem ser usados como fonte de informao para ajudar na engenharia reversa de um sistema. Mas a engenharia reversa de dados tambm um trabalho especfico que pode ser feito independentemente de qualquer sistema que possa manipular esses dados. Por exemplo, poderamos querer converter um velho banco de dados sobre um main frame para um banco de dados relacional e distribudo sobre vrios PCs. Documentao Chamamos de documentao tudo o que no est usado pelo computador para fazer funcionar o sistema, mas se destina aos engenheiros que usam o cdigo: relatrios, comentrios no cdigo, diagramas da anlise ou do projeto, etc. Como ela se destina aos seres humanos ela de difcil de analisar automaticamente. A abordagem mais usada usar as palavras da documentao. Isso pode permitir extrair os conceitos importantes do domnio de aplicao do sistema. Esta abordagem est baseada sobre a suposio que os conceitos importantes aparecem com mais freqncia na documentao. Outras fontes de informao Finalmente, possvel usar outras fontes de informao. Por exemplo, para definir sub-sistemas, poderamos procurar quem escreveu cada poro do cdigo. razovel pensar que se duas partes do cdigo foram desenvolvidas pela mesma pessoa elas tem maior probabilidade de pertencer ao mesmo sub-sistema

Tratamento dos Fatos


Essas so algumas das principais atividades envolvidas na engenharia reversa. Essas atividades usam as informaes que foram extradas do sistema. Podemos resumir o objetivo geral dessas atividades da seguinte forma: elas tentam abstrair informaes de mais alto nvel de abstrao dos fatos do sistema. O que quer dizer que elas vo eliminar os inumerveis detalhes. O problema decidir nessa massa de informaes o que importante ou no. Anomalias no cdigo Num software legado, o cdigo pode conter vrias anomalias, como partes do programa que nunca podem ser executadas (cdigo morto) e trechos de cdigo que foram copiados e levemente modificados. Essas anomalias complicam o cdigo inutilmente, fazendo ele mais longo do que deveria ser e multiplicando as coisas que um programador tem que estudar e entender. Para resolver esse problema podemos deletar o cdigo morto, e no caso dos clones podemos modificar o cdigo para suprimir-los ou ento comentar o cdigo dizendo que existem clones.

Engenharia Reversa

Encapsulamento O encapsulamento mais uma tcnica de re-engenharia do que de engenharia reversa. Em vez de reestruturar um sistema, ela prope esconder o velho cdigo dentro de uma nova camada.

Slicing
Slicing (fatiar) uma tcnica de decomposio do cdigo de acordo com a utilizao das variveis. O slicing de uma parte do cdigo consiste em extrair dela todas as instrues que tm uma influncia sobre o valor de uma varivel definida a um ponto definido do cdigo. Isso pode ajudar na localizao de um bug (erro no valor da varivel), limitando a pesquisa nas nicas instrues realmente necessrias. (Re-)Modularizao A (re-)modularizao a decomposio de um conjunto de componentes de software em sub-partes (os mdulos). Em engenharia de software, normalmente, se espera que os mdulos tenham uma forte coeso interna e um pequeno acoplamento com o exterior. Essa atividade de agrupar arquivos em sub-sistema no trivial. Um sistema legado pode ser composto de milhares de arquivos, em vrias linguagens de programao (por exemplo: uma linguagem procedural, assembler, dados e alguns scripts para compilaes e execues). Para agrupar os componentes so utilizados algoritmos que medem as distancias entre os componentes com base em informaes extradas do sistema.

Definio de mdulos a partir de informaes de incluso entre arquivos.

10

Engenharia Reversa

Porm eles apresentam dois problemas principais:

O resultado pode ser difcil de entender; No h nada mgico neles. Eles agrupam todos os componentes segundo algumas restries. Se as restries forem erradas, o resultado tambm ser.

O resultado desta tcnica globalmente bom. Mas sempre h detalhes errados em alguns mdulos. Esses algoritmos so bons quando existem muitos componentes para tratar e como uma primeira abordagem para desbravar o sistema. Reconhecimento de Clichs Um clich um padro que descreve uma maneira geral de implementar um conceito de programao. A atividade de reconhecimento de clichs trabalha com um banco de clichs e procura esses clichs no cdigo. A idia que um clich implementado com vrias linhas de cdigo. Reconhecer um clich pode simplificar o cdigo porque isso vai substituir um s conceito a essas linhas. O reconhecimento de clich sofre de vrias dificuldades:

Construo do banco de clichs; Dualidade, preciso e cobertura (a descrio do clich deve ser geral porm corre-se o risco de ocorrerem falso-positivos); Tempo de execuo; Clichs deslocalizados ou interligados (podem existir outras instrues entre as que implementam o clich ou dois clichs cujas instrues esto misturadas).

11

Engenharia Reversa

4. ASPECTOS LEGAIS
Leis e Acordos
A engenharia reversa pode tambm gerar problemas de legalidade, como uma empresa querendo criar uma cpia de um produto que vende bem. No entanto a questo legal depende das leis de cada pas. E, mesmo assim, ainda existem pases que no possuem leis especficas sobre o assunto. Uma das leis mais conhecidas o Digital Millenium Copyright Act dos Estados Unidos, aprovado em 1998 que, entre vrias medidas para proteger direitos autorais na informtica, tambm faz restries em relao engenharia reversa. S permitida para fins de analisar compatibilidade com outros softwares e/ou hardware. Na Unio Europia, o EU Copyright Directive, de 2001, similar ao Digital Millenium Copyright Acts, porm no to restritiva. S so feitas restries caso o objetivo final da engenharia reversa seja a cpia de algum programa ou quebra de patente com objetivo de lucro. Caso seja pra fins acadmicos ou de compatibilidade, princpio no existem restries. Na sua, a lei a respeito do assunto bastante curiosa e, de certo modo, polemica. A Lei Sua de Concorrncia Desleal de 1986 exige dos competidores a realizao de investimentos em engenharia reversa mesmo quando a tecnologia no seja secreta. Os tribunais suos, porm, tm rejeitado ou limitado severamente a aplicao de tal norma, pela inexistncia de prazo e limites. No Japo, a Lei Japonesa de Concorrncia Desleal de 1993 probe a imitao servil, mesmo no caso de produtos no patenteados, nem protegidos por direitos autorais. A lei japonesa impe limites claros aplicao da norma de apropriao ilcita: o lead time vigora apenas por trs anos; no se protegem as idias e os conceitos tcnicos; e ressalva-se o caso de modificaes ou aperfeioamento tcnico efetuado pelo competidor com base no item copiado; a necessidade de padronizao e compatibilizao de produtos e o uso de elementos de carter estritamente funcional. Ou seja, a proibio de imitao no impede o progresso tcnico, ressalva o domnio das patentes para proteger idias e conceitos, e o interesse social na padronizao e compatibilizao industrial. No Brasil, no existe uma lei especfica sobre Engenharia Reversa. Apesar disso, quando ocorre engenharia reversa, costuma-se proceder de duas maneiras: caso a engenharia reversa no tenha como objetivo a pirataria ou infrao de algum direito autoral, no considerado crime; porm caso contrrio, a Lei de Software e tambm de Direitos Autorais protege seus autores.

12

Engenharia Reversa

Alguns Casos Famosos


Apesar dessas leis, os problemas legais relacionados engenharia reversa so bastante comuns e difceis de serem resolvidos. Na Noruega (um dos pases que permitem engenharia reversa) Jon Johansen, um jovem de 16 anos, desenvolveu um programa capaz de fazer um computador com Linux exibir um filme em DVD. O que Jon e alguns colaboradores fizeram foi descobrir que uma das empresas, a Xing Technologies, subsidiria da RealNetworks, no mantinha chaves criptografadas. Eles entraram no site da empresa, pegaram as chaves e simplesmente olharam como elas funcionavam. como uma espcie de quebra-cabeas, onde o que precisa ser feito estabelecer correlaes entre smbolos. A chave criptogrfica do DVD tem a extenso de cinco bytes, o que torna a matemtica envolvida nisso bem simples. Como as outras chaves das empresas concorrentes tambm so parecidas, ele ainda adivinhou algumas chaves diferentes das da Xing. Isso faz com que o Decoded-CSS, nome dado ao seu programa, possa rastrear uma chave adequada entre algumas que ele entende, ou seja, mesmo que os discos de DVD daqui para frente no possuam a chave Xing, o programa ainda funcionar. Ele foi acusado de "facilitar a pirataria". Segundo os advogados que o acusam, Jon teria criado um software que permite aos usurios fazer e distribuir cpias digitais de filmes em DVD. Seu programa permitiria que o arquivo que contm o filme fosse copiado por um microcomputador caseiro. Jon est sendo processado por autoridades norueguesas do DOEC (Departamento Noruegus de Crimes Econmicos) e pela MPAA (Motion Pictures Association of America), entidade que representa as sete maiores distribuidoras de filmes nos EUA: Universal City Studios lnc, Paramount Pictures Corporation, Metro-Goldwin-Mayer Studios lnc, Tristar Pictures lnc, Columbia Pictures lnc, Time Warner Entertainment Co., Disney Enterprises lnc. e Twentieth Century Fox Film Co. O caso Lotus Development Corp. vs. Borland International foi uma disputa judicial entre duas empresas produtoras de Software. A Lotus produzia o Lotus 1-2-3, e a Borland, o Quattro Pro. A Borland produziu seu programa de computador com a interface idntica ao da Lotus, de maneira que os usurios da Lotus 1-2-3 pudessem usar o Quattro Pro sem dificuldades. A Lotus entrou com ao em face da Borland por infrao de Copyright. Grande parte da controvrsia foi a respeito da possibilidade de se proteger pelo direto do autor a mera interface do programa. Por fim a deciso final achou "absurdo" sugerir que "se algum faz uso de vrios programas diferentes, seja forado a aprender como efetuar cada a mesma operao de maneiras diferentes em cada programa utilizado". A corte decidiu que, se uma empresa atinge um monoplio, por conseqncia a maioria do mercado fica bem adaptada interface de seu programa. Desse modo, justo que um competidor utilize a mesma interface como meio de concorrncia.

13

Engenharia Reversa

5. Bibliografia
Nicolas Anquetil Homepage
http://www.ucb.br/ucbtic/mgcti/paginapessoalprof/Nicolas/Disciplinas/RevEng/index.html

Wikipedia
www.wikipedia.org

DVD e Linux: liberdade na era digital


http://www.comciencia.br/reportagens/softliv/softliv1.html

Limitaes ao direito do autor na lei brasileira, cpia privada e engenharia reversa de software
http://www.direitonet.com.br/artigos/x/19/08/1908/

Implementing the EU Copyright Directive


www.fipr.org/copyright/guide/eucd-guide.pdf

The Digital Milllenium Copyright Act of 1998


www.copyright.gov/legislation/dmca.pdf

14