Escolar Documentos
Profissional Documentos
Cultura Documentos
Eng Reversa
Eng 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.
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
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.
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
OBS: As pessoas que trabalham com engenharia reversa de software esto mais familiarizadas com o segundo caso, chegando at a desconsiderar o primeiro.
Engenharia Reversa
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
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.
10
Engenharia Reversa
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
13
Engenharia Reversa
5. Bibliografia
Nicolas Anquetil Homepage
http://www.ucb.br/ucbtic/mgcti/paginapessoalprof/Nicolas/Disciplinas/RevEng/index.html
Wikipedia
www.wikipedia.org
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/
14