Escolar Documentos
Profissional Documentos
Cultura Documentos
Eng Reversa UTILIZADA
Eng Reversa UTILIZADA
Eng Reversa UTILIZADA
ENGENHARIA
REVERSA
UFF Universidade Federal Fluminense
Graduao em Cincia da Computao
Informtica I 2005/2
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
4
4
5
6
7
8
8
9
4. Aspectos Legais
Leis e acordos
Casos famosos
12
12
13
5. Bibliografia
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 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.
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).
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
No primeiro caso, o cdigo-fonte j est disponvel, mas os aspectos mais globais, talvez
documentao escassa ou no vlida, tm que ser descobertos.
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
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
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:
Dualidade, preciso e cobertura (a descrio do clich deve ser geral porm corre-se o risco
de ocorrerem falso-positivos);
Tempo de execuo;
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
14