Sei sulla pagina 1di 29

Engenharia Reversa sua validade legal, processo,

vantagens e desvantagens.
Joel Simberg Vieira

Resumo: Programas de computador são protegidos


legalmente, seja através do acordo TRIPs (Agreement on Trade-
Related Aspects of Intellectual Property Rights) de 1994, seja
através da lei 9609 de 1998 (lei de proteção da propriedade
intelectual de programa de computador), ou pela lei 9279 de 1996
( lei de patentes), porém podemos discutir a legalidade de se
fazer uma Engenharia Reversa de um programa protegido e obter
seu código fonte e quais seriam os limites legais para o que se
fazer com o código-fonte obtido.

Palavras-chave: Engenharia Reversa, Programa de


Computador, software, plágio, clone.

Abstract: Computer programs are protected legally, either


through the TRIPS Agreement (Agreement on Trade-Related
Aspects of Intellectual Property Rights) 1994 9609 or through the
law of 1998 (law of intellectual property protection of computer
programs), or by Act 9279 of 1996 (patent law), but we can
discuss the legality of doing a reverse engineering of a protected
program and obtain its source code and what are the legal limits to
what you do with the source code obtained.

Key-words: Reverse Engineer, Computer Software,


software, plagiarism, clone.
1 INTRODUÇÃO

Definir o que são programas de computador e o que é software é importante

para entender o que é de fato tutelado pelo Estado. Começando com a lei de proteção

autoral de programas de computador a lei 9609 de 1998, encontramos a seguinte

definição no seu Art. 1º.

Programa de computador é a expressão de


um conjunto organizado de instruções em linguagem
natural ou codificada, contida em suporte físico de
qualquer natureza, de emprego necessário em
máquinas automáticas de tratamento de informação,
dispositivos, instrumentos ou equipamentos periféricos,
baseados em técnica digital ou análoga, para fazê-los
funcionar de modo e para fins determinados.

No Artigo 11 da lei 9609, temos que nos casos de transferência de

tecnologia de programa de computador, que será obrigatória a entrega da

documentação completa, dos seguintes itens:

a-) Código-fonte comentado;

b-) Memorial descritivo;

c-) especificações funcionais internas;

d-) diagramas;

e-) fluxogramas;

f-) outros dados técnicos necessários à absorção da tecnologia

No projeto de Lei do Senado 260/1984 (Sen. Virgílio Távora) artigo 3º , há a

definição do que é software, fazendo diferença do que é programa de computador:

I – software – O conjunto constituído do programa de


computador, descrição do programa de computador, manual do
usuário e especificação interna, ou cada um desses elementos,
desde que integrante de um conjunto;

Segundo Professor Manoel Joaquim Pereira dos Santos em seu material

eletrônico da segunda aula do curso de Direito e TI do PECE-POLI-USP de fevereiro a

abril de 2012, afirma que:

Software é o conjunto formado por: Programa de


Computador, documentação técnica e metodologia de operação e
outros elementos relacionados com o programa de computador.

Essas definições diferenciadas de software e programa de computador

existem porque muito mais que códigos objeto e fonte estão sendo considerados, ou

seja, o objeto da tutela autoral do software, é mais abrangente.

Essa distinção aceita na área jurídica entre software e programa de

computador não é a mesma encontrada na área de Tecnologia da Informação.

Segundo 1Professor Jorge Fernandes, Programa e Software tem o mesmo

significado. Conceituando Software como:

2
Software é uma sentença escrita em uma linguagem
computável, para a qual existe uma máquina (computável) capaz
de interpretá-la. A sentença (o software) é composta por uma
seqüência de instruções (comandos) e declarações de dados,
armazenável em meio digital. Ao interpretar o software, a máquina
computável é direcionada à realização de tarefas especificamente
planejadas, para as quais o software foi projetado.

1 Doutor e mestre em informática pelo Centro de Informática da UFPE, atuando no Departamento de


Ciências da Computação da UnB, em educação, pesquisa, desenvolvimento e consultoria em
engenharia de software.

2 http://www.cic.unb.br/~jhcf/MyBooks/iess/Software/oqueehsoftware.html
3
No glossário do livro da Dra. Patricia Peck Pinheiro, encontramos a

definição de Software:

Software: Programas de computador: instruções que o


computador é capaz de entender e executar.

Essa definição diferenciada criada na área do direito, foi necessária para

englobar o trabalho de análise e documentação do programa e colocá-los debaixo da

tutela de proteção do direito autoral do software, para que todo o trabalho e

documentação de criação do software pudessem também ser protegidos.

2 DESENVOLVIMENTO

Quando se fala em direito autoral, normalmente refere-se à proteção dada

ao autor de obra estética, como de um quadro, um livro, uma música. Para proteção de

invenções técnicas temos as leis de patentes. No caso do software, ele tem proteção

das duas formas.

Programa de computador, segundo a lei 9609 no seu Art. 2º, tem seu regime

de proteção como uma obra literária, mas com legislação específica. Apesar dessa

afirmação, encontramos várias diferenças importantes: em obra literária o período para

se cair em domínio público é de 70 anos após a morte do autor, iniciando pelo início do

ano subsequente ao falecimento. No caso de programa de computador o tempo é de

50 anos, após a publicação, ou colocação no mercado.

3 Peck, Patrícia. Direito Digital. São Paulo, Saraiva. 2009


Além dessa importante diferença, há muitas outras, como do Direito Moral

do Autor, que no software pertence ao contratante e não ao autor contratado.

Na proteção autoral do software, podemos encontrar: “Programa de

computador é a expressão de um conjunto organizado de instruções...”

Sendo expressão a codificação, a arquitetura do sistema e o código-objeto,

com as interfaces do usuário.

Na diretiva da União Europeia tem os objetos tutelados pelo direito autoral:

Diretiva 91/250/CEE (= Diretiva 2009/24/CE de 23.4.2009)

Considerando que, para efeitos da presente directiva a


expressão « programa de computador » inclui qualquer tipo de
programa, mesmo os que estão incorporados no equipamento;
que esta expressão inclui igualmente o trabalho de concepção
preparatório conducente à elaboração de um programa de
computador, desde que esse trabalho preparatório seja de molde
a resultar num programa de computador numa fase posterior;

Podemos encontrar no acordo Trips, a proteção sobre a “expressão” do

programa de computador.

Acordo TRIPs – Art. 9(2)


A proteção do direito de autor abrangerá expressões e
não idéias, procedimentos, métodos de operação ou conceitos
matemáticos como tais.

Temos que observar que existem áreas que a proteção autoral não alcança,

na Lei de Direitos do Autor, temos:

Art. 8° LDA – Não são objeto de proteção autoral


•Idéias, procedimentos normativos, sistemas, métodos, conceitos
matemáticos, projetos.
•Esquemas, planos, jogos ou negócios.
•Formulários em branco.
•Textos legais e regulamentares.
•Informações de uso comum (calendários, agendas, cadastros ou
legendas).
•Nomes e títulos isolados.

Existe ainda como falado a proteção patentaria, caso haja sido feito esse

registro no INPI (Instituto Nacional de Propriedade Industrial).

O tempo para proteção de patentes é diferente também, são de 20 anos.

Observando-se que deve haver originalidade.

Sabendo que não há registro de patente para programas de computadores

em si, conforme artigo 10 inciso V, ou seja, não é considerado invenção nem modelo

de utilidade. O programa de computador não tem proteção patentaria apenas por ser

programa, porém havendo o desenvolvimento de uma nova solução técnica através de

um novo processo é passível de proteção por patente, ou seja, uma criação industrial

que ocorra através de um programa de computador é patenteável. Seguindo as regras

de patenteabilidade da lei 9279 de 1976.

Podemos também encontrar vários itens fora do limite da proteção do direito

autoral.

Art. 6º da Lei 9.609/98


Não constituem ofensa aos direitos do titular de programa de
computador:

I – a reprodução, em um só exemplar, de cópia legitimamente


adquirida, desde que se destine à cópia de salvaguarda, ou
armazenamento eletrônico, hipótese em que o exemplar original
servirá de salvaguarda.
II – a citação parcial do programa, para fins didáticos, desde que
identificados o programa e o titular dos direitos respectivos;

III - a ocorrência de semelhança de programa a outro,


preexistente, quando se der por força das características
funcionais de sua aplicação, da observância de preceitos
normativos e técnicos, ou de limitação de forma alternativa para a
sua expressão;

E na Diretiva da União Européia:

Directiva 91/250/CE – Directiva 2009/24/CE


Artigo 5.o
Excepções aos actos sujeitos a autorização
1. Salvo cláusula contratual específica em contrário, os actos
previstos nas alíneas a) e b) do n.o 1 do artigo 4.o não se
encontram sujeitos à autorização do titular sempre que sejam
necessários para a utilização do programa de computador pelo
seu legítimo adquirente de acordo com o fim a que esse programa
se destina, bem como para a correcção de erros.
2. O contrato não deve impedir a execução de uma cópia de
apoio por uma pessoa que esteja autorizada a utilizar o programa
na medida em que tal seja necessário para a sua utilização.

Diferença entre Clonagem, Plágio e Cópia Servil

Conceito de Clone

Segundo o Professor Manoel Joaquim Pereira do Santos:

4
Programa que é funcionalmente equivalente, porém distinto
de outro programa de computador, do qual imita o modo de
funcionamento.

Um programa que se compara em funcionalidade, aparência e modo de

operação, um programa concorrente, parecido e que permite ao usuário a escolha,

trazendo concorrência no mercado.

Ele é legítimo e aceito, por ajudar a impedir o monopólio, o que é muito bom

para a sociedade.

4 Material professor Manoel aula 4 página 38


Importante observar que o clone pode copiar a funcionalidade e até as

janelas, menus, teclas de atalho, que não são protegidos pelo direito autoral, mas não

pode ter a mesma forma de expressão que é a parte protegida. Porém se o programa

tenta confundir o usuário para que ele ache que está comprando o programa

concorrente, isso acarreta em concorrência desleal.

Textos de “Ajuda”, são protegidos por direito autoral, como texto literário,

bem como Imagens e ícones que podem estar protegidos também por direito autoral.

Caso julgado onde o fato de dois programas serem parecidos não implica

que é uma cópia.

T.J.S.P. – 4ª Câmara de Direito Privado – Apelação N°. 404.488-


4/6/São Paulo -1.9.2006 (Relator: Maia da Cunha)

Direito autoral. Programa de computador. Ausência de prova


da titularidade ou inserção dela no contrato de prestação de
serviços firmado entre autora e ré. A existência de semelhanças
nos programas não é, por si só, causa de ferimento a direito
autoral, nos termos do art. 6° da Lei n° 9609/98. Considerações.
Improcedência acertada. Recurso improvido.

Conceito de plágio
5
Plágio é a usurpação do trabalho criativo de terceiro, é a
cópia disfarçada.

O plágio é a cópia do trabalho de outro, mas apresentando o trabalho como

se fosse seu, esse hábito ilícito ocorre em todas as áreas, mesmo em trabalhos

acadêmicos, em músicas e obras literárias.

5 Material professor Manoel aula 4 página 27


O plágio pode ser parcial, copiando partes da obra de outro, sem colocar a

verdadeira autoria.

6
Pode haver cópia de partes do código-fonte de outro programa, ou mesmo

do código-fonte inteiro. Chamamos o código-fonte de elementos literais. Mas, assim

como na proteção de obra literária, não só o texto é protegido, mas seus elementos

não-literais também são protegidos. Por exemplo, alguém copia a história, trocando

datas, nomes e lugares e alguns detalhes, isso é plágio e é um ilícito.

Em caso de programas de computador nem sempre é fácil descobrir esses

plágios, pois é possível a troca de linguagem, de nome de arquivos e outros detalhes

para encobrir a ação.

Se descobrir plágio pelos elementos literais é difícil, quanto mais pelos

elementos não-literais, mas é possível encontrar características próprias do programa

copiado, fazendo comparação entre os programas, através de várias técnicas que

procuram semelhanças que sejam fortes para descrever esse plágio.

Plágio não é contrafação, pois no caso de contrafação não existe a

usurpação de autoria.

Cópia Servil

Contrafação é a reprodução não autorizada. A famosa pirataria.

6 Dos Santos, Manoel Joaquim Pereira. A Proteção Autoral de Programas de Computador. Rio de
Janeiro, Lumin Juris. 2008 pg 356
Em um contrato de licenciamento, muitas vezes para o usuário não é claro

que ao comprar uma licença, ele não está comprando o programa, mas o direito de uso

do programa, segundo condições pré-estabelecidas.

O fato de se ter acesso ao um DVD com o programa, não significa que se

pode instalar em várias máquinas ou emprestar para terceiros. Muito menos vender ou

emprestar o programa.

Esses conceitos abordados até o momento são importantes para apresentar

a Engenharia Reversa e trabalhar com sua importância, seu carácter científico,

industrial e a controvertida discussão que ela gera.


ENGENHARIA REVERSA

Conceito:
7
"É o processo de análise de um determinado sistema com dois
objetivos em mente :
1) identificar os componentes do sistema e o seus inter-
relacionamentos; e,
2) criar representações do sistema em outra forma ou em níveis
mais altos de abstração. "
Engenharia Reversa normalmente é empreendida com o objetivo
de reprojetar um sistema para melhorar a sua manutenção ou
produzir uma cópia de um sistema sem acesso às informações de
seu projeto original.

Existe uma definição talvez mais elucidativa:

8
Descobrir os princípios tecnológicos de um dispositivo, um objeto
ou um sistema (programa).

Sem palavras bonitas: descobrir como funciona.

(Engenharia reversa para principiantes


Conhecimentos e habilidades necessárias para iniciar-se na arte
da escovação de bits - Wanderley Caloni)

Engenharia Reversa em programas de computador, em termos simples, seria

chegar ao código-fonte tendo acesso apenas ao código-objeto. Ou seja, o código que

fica normalmente como segredo industrial, seria descoberto e com isso seu

funcionamento, abrindo possibilidades de se fazer correções, interconexões com outros

softwares e equipamentos, desenvolvimento de novas funcionalidades, versões e

adaptações. Obtendo pontos importantes e tutelados no direito do autor como sua

expressão, poderia se criar um plágio desse programa, sem ter investido tempo e

dinheiro no seu desenvolvimento.

7 http://www.dcc.ufrj.br/~schneide/es/2001/1/g18/Engenharia%20Reversa.htm

8 https://docs.google.com/present/view?fs=true&id=ddd3j862_29grq4sx
Quando se trata da discussão sobre Engenharia Reversa, existem pontos

que agora se firmam e que estão mais maduros, tanto no Brasil, como no mundo. No

começo a Engenharia Reversa era vista apenas como um meio ilícito de se

desrespeitar o direito autoral, ou mesmo o direito de patentes, mesmo que no meio

acadêmico a visão fosse de estudo e de pesquisa. Hoje existem delimitações de

quando se pode fazer a Engenharia Reversa e quais os limites de sua utilização,

veremos isso mais para frente.

Em 1945, durante a segunda guerra mundial, três bombardeiros americanos

modelo B-29, foram obrigados a pousar no território russo. Os engenheiros russos

desmontaram os aviões e o estudaram, usando Engenharia Reversa, aprenderam o

seu funcionamento e puderam fabricar o bombardeiro Tupolev Tu-4, que voou pela

primeira vez em 1947.

Engenharia Reversa é muito comum, na verdade totalmente esperado,

praticamente todos os fabricantes fazem isso. Mas em invenções existindo o registro

de patente, fica evidente a proteção e o limite legal sobre o aproveitamento do que é

descoberto na Engenharia Reversa, ou seja, não é porque sabemos fazer, que

podemos produzir e vender.

9
Reverse engineering has a long history as an accepted
practice. What it means, broadly speaking, is the process of
extracting know-how or knowledge from a human made artifact.1
Lawyers and economists have endorsed reverse engineering as
an appropriate way to obtain such information, even if the intention
is to make a product that will draw customers from the maker of
the reverse-engineered product.2 Given this acceptance, it may be
surprising that reverse engineering has been somewhat under
siege in the past few decades.

9 http://socrates.berkeley.edu/~scotch/re.pdf
(tradução livre, com ajuda de ferramentas on-line de tradução)
Engenharia Reversa tem uma longa história como prática
aceita. O que significa, em termos gerais, é o processo de
extração de know-how ou conhecimento, de um ser humano, de
artefatos feitos. 1 Advogados e economistas têm endossado
engenharia reversa como um meio adequado para obter tais
informações, mesmo que a intenção é fazer um produto que vai
atrair os clientes da fabricante que teve a engenharia reversa em
seu produto .2 Mesmo com essa aceitação, pode ser
surpreendente que a engenharia reversa tem sido colocada em
questionamento nas últimas décadas.

Não tendo o código-fonte, temos vários métodos para chegar, ou tentar

chegar a ele, vamos falar de três:

Análise do fluxo de dados:

Observar a troca de informações, usando:

Analisadores de bus: (bus são os barramentos, meio físico por onde as

informações passam) Um analisador de bus monitora os dispositivos de Entrada e

Saída, os dados, os pedidos e os acessos a esses dispositivos.

10
Sniffers: (Farejadores) Servem para observar o funcionamento de uma

rede de computadores, os pacotes que passam por ela, também interceptar e registrar

o tráfego de dados. Conforme o fluxo de dados trafega na rede, o sniffer captura cada

pacote e eventualmente decodifica e analisa o seu conteúdo.

A obtenção do comportamento dos dados no bus ou/e na rede, depois de

analisados pode ser usada para gerar em um novo software que imita o

comportamento do software analisado. Muito usado para criar drivers de dispositivos.

10 http://pt.wikipedia.org/wiki/Sniffing
Por exemplo: Uma impressora funciona em um sistema operacional, mas em

outro não há o driver (programa que permite que o equipamento funcione naquele

sistema operacional). Se a empresa fabricante da impressora não disponibilizar esse

driver, pode-se, observando o comportamento do driver existente, copiar suas saídas e

entradas, para emular um driver similar para outro sistema operacional.

11
Um programa muito usado hoje, conhecido como Samba, não por amor ao

Brasil, ou por ser descoberto por um brasileiro, mas sim por ter sido feito Engenharia

Reversa sobre um protocolo chamado smb (Server Message Block), e depois de um

estudo a palavra que mais se encaixava com essas três letras foi Samba, pois o autor

não poderia usar como nome “smb” por ser proprietário. Esse programa foi criado

através da Engenharia Reversa de Análise de Dados, onde ao observar como arquivos

eram compartilhados no Windows, criou esse programa emulando o mesmo

funcionamento, mesmo com sistemas operacionais diferentes do Windows. Hoje ele é

muito usado para integrar e compartilhar arquivos em computadores com sistemas

operacionais diferentes.

Desassemblar:

Através de um programa desassembler é possível transformar a linguagem

de máquina (não compreensível a seres humanos) para linguagem assembly também

conhecida como linguagem de montagem. A linguagem assembly é de baixo nível e de

difícil compreensão e manutenção, cada arquitetura de computador tem sua própria

linguagem de montagem.

11 http://pt.wikipedia.org/wiki/Samba_%28servidor%29
Decompilação:

O programa decompilador, tenta recriar o código-fonte em linguagem de alto

nível, tendo disponível o código-objeto.

A Decompilação dependendo do código-fonte, nem sempre é possível, ou

pelo menos não de forma total.

Existe um artigo interessante falando sobre a decompilação de programas

gerados em Delphi (uma linguagem de alto nível), que creio ser interessante e

elucidativo, colocarei apenas algumas partes do artigo que devam ajudar a entender os

problemas técnicos nesse processo.

12
Então é possível Decompilar um programa?

Não, claro que não. Total decompilação não é possível –


não exatamente como ele foi desenvolvido, ou seja, com o fonte
original….

Quando um projeto em Delphi é compilado e linkado, para


produzir um executável, a maioria dos nomes usados no
programa é convertido em endereços. Na decompilação, se você
observar em seus fontes originais, com os fontes de um
executável decompilado, você irá perceber a troca de nomes em
constantes, variáveis e procedures.

Da mesma forma, continuei a pesquisa sobre a problemática da Engenharia

Reversa, não só em termos Legais, mas em termos técnicos. Pois quando a dificuldade

e o tempo empregado elevam o custo, deve-se analisar, se o resultado de uma

engenharia reversa será mais interessante que se fazer um novo desenvolvimento.

12 http://littleoak.wordpress.com/2009/02/19/como-decompilar-programas-em-delphi-how-to-decompiler-
delphi-application-decompilar-delphi/
Pois muitas vezes, acredita-se que o processo é simples, rápido e fácil, o que não

consiste em uma verdade. Achei um outro artigo sobre a decompilação de uma

linguagem conhecida como Visual Basic.

13
No caso do Visual Basic decompilar um programa é algo
quase impossível de se obter. Isto mesmo , você nunca , nunca
vai obter os fontes originais como eles foram escritos pelo
programador. Quer saber por que ? Vamos lá...
Quando um projeto Visual Basic é compilado e linkado para
produzir um arquivo executável a maioria dos nomes usados no
programa é convertido em endereços; os nomes da constantes,
variáveis e procedimentos são trocados.

Existem muitos programas que ajudam a decompilar e obter o código-fonte,

mas, na Engenharia Reversa o trabalho é mais extenso do que somente apertar um

botão, é necessário fazer uma análise do código obtido, há técnicas bem definidas que

veremos abaixo.

14
O trabalho de Engenharia Reversa é feito em etapas bem
definidas:

− Extração de fatos do sistema a analisar;


− Tratamento dos fatos;
− Visualização dos resultados.

1-) A Extração de Fatos

A Extração de Fatos é feita através de:

• Análise Estática do Código

• Análise Dinâmica do Código

• Análise de Base de Dados

13 http://www.macoratti.net/vb_dcp1.htm

14 http://forum.guiadohacker.com.br/showthread.php?t=3546
• Análise da Documentação

• Outras fontes de informação

Análise Estática do Código - Parsing

Existem pontos importantes que precisam ser obtidos:

• Quais os componentes básicos do sistema: arquivos, rotinas, tipos, variáveis,

classes, etc;

• Relações de definição que conectam um componente ao seu conteúdo;

• Relações de referência, para que conhecer as rotinas que são interdependentes.

• Ferramentas que fazem essa análise são chamadas de “parser”, para conhecer

a sintaxe da linguagem de programação usada.

Mesmo com a Análise estática feita, muitas informações ainda ficam

faltando, para isso usamos a Análise Dinâmica também chamado de Debbugging.

Análise Dinâmica

Na Análise Dinâmica executa-se o programa e se monitora os valores das

variáveis, quais funções são chamadas, etc. As ferramentas utilizadas são

denominadas de "Debuggers".

Dados

Quando um sistema possuir um banco de dados, este pode servir de fonte

de informação sobre o próprio sistema. Existem bancos de dados extremamente


complexos com centenas de tabelas, com índices e relacionamentos entre as tabelas e

várias implementações, que muitas vezes dificulta o trabalho, principalmente se é um

banco de dados usado em um “mainframe” e precisa ser readaptado para

computadores PC em rede.

Documentação

Documentação são informações para fazer funcionar o sistema. Podem ser

textos, diagramas, ajudas, etc.

Outras fontes de informação

A linguagem de programação que foi utilizada, o sistema operacional, o tipo

de processador, etc.

2-) Tratamento dos Fatos

• Anomalias no Código

• Encapsulamento

• "Slicing"

• (Re-) Modularização

• Reconhecimento de Clichés

• Dados

• Documentação
Tendo as devidas informações, é possível e muitas vezes necessário alterar

o código e até a estrutura de um programa utilizando de várias técnicas. A

documentação do tratamento efetuado é fundamental.

Anomalias no Código

O software obtido pode conter várias anomalias, como partes do programa

que nunca podem ser executadas ("dead-code"), teoricamente não seriam complicadas

de detectar, mas que dentro de milhões de linhas de código a dificuldade se expande.

Essas anomalias complicam o código inutilmente, fazendo ele mais longo do que

deveria ser e aumenta em muito o estudo e a compreensão do seu funcionamento por

parte do Analista e do Programador.

Encapsulamento

O encapsulamento (ou "wrapping'') é mais uma técnica de re-engenharia do

que de engenharia reversa. Em vez de reestruturar um sistema, a ideia seria esconder

o velho código dentro de uma outra camada. Por exemplo, um código em uma

linguagem procedural poderia ser encapsulado dentro de uma camada de objetos, ou

seja com várias classes. Para o exterior, o código é orientado a objetos, mas os

atributos e métodos dos objetos só delegam o trabalho às variáveis e rotinas do código

procedural. Por exemplo ao ter um código de validação de CPF, colocá-lo dentro de

uma classe e na necessidade de uso, fazer a chamada a essa classe, que parece

estruturada segundo um novo padrão, orientado à objeto, mas na verdade dentro da

classe, mantém sua estrutura antiga.


"Slicing"

O “slicing” (fatiar) é uma técnica de decomposição do código, observando o

uso das variáveis. O “slicing” de uma parte do código consiste em recolher as

informações do funcionamento do código observando sua relação com uma

determinada variável. Seria estudar por partes o código, tentando encontrar a causa de

erros.

(Re-) Modularização

Separar os componentes dos programas em módulos, que são sub-partes do

mesmo. Dessa forma é mais fácil organizar e compreender o código e ver suas inter-

relações internas e externas.

Reconhecimento de Clichés

Clichés são também chamados de planos de programação.

Um "cliché" é um padrão definido para executar a programação. Existem em

várias linguagens. Padrões criados para que quando houver troca de programador este

possa continuar o trabalho, sabendo relacionar o nome das classes e funções com sua

utilidade e funcionamento. Em Java, por exemplo, existem os “design patterns”, ou

padrões de programação. Uma classe que tem por nome: “Connection Factory”

(Fábrica de Conexões), terá a comunicação com o Banco de Dados, tendo o nome do

usuário e senha de conexão, o endereço de acesso ao Banco de Dados e os drivers de

conexão com o mesmo.

Dados
Agora as atividades aqui se relacionam, porque os dados agora são

analisados dentro do contexto de uso de todas as partes.

Documentação

A documentação de um sistema apresenta um grande interesse porque ela é

destinada a seres humanos. Ela é uma descrição do sistema em termos fáceis de

entender para os engenheiros de software ao contrario do código que é uma descrição

do sistema destinado às máquinas.

15
3-)Visualização dos Resultados

• Navegação

• Quantidade de Informação

Navegação

Verificação dos conceitos implementados, procurando nos comentários e

nos nomes dos componentes de software, testando se de fato todo o trabalho ocorre

segundo o esperado e o trabalho de engenharia reversa trouxe um produto que

funciona com a qualidade esperada.

Quantidade de Informação

Estudo da interação humano / máquina, teste final do programa, a inclusão,

edição e exclusão de informações se houver espaço para isso no programa.

15 http://www.dcc.ufrj.br/~schneide/es/2002/1/g13/trabalho.htm
Esse pequeno estudo sobre a Engenharia Reversa de software serve para

mostrar que o processo é complicado e demorado e pode não ter o resultado esperado,

porque muitos itens importantes como fluxograma e especificações ficam inacessíveis

com o trabalho da engenharia reversa, mas claro que para determinadas situações a

engenharia reversa pode aproveitar pontos importantes do programa e fazer

interoperabilidades importantes. Abaixo, um texto interessante sobre o custo de uma

Engenharia Reversa. Coloquei a integra em Inglês e depois uma tradução livre minha,

com ajuda de dicionários e ferramentas de tradução on-line. Os negritos são meus.

16
Copyright law protects programs from the cheapest and
most rapid way to make a directly competing identical product,
namely, copying program code exactly. However, reverse
engineering of object code is generally so difficult, time-
consuming, and resource-intensive that it is not an efficient
way to develop competing but non-identical programs. As one
technologist has explained, software reverse engineering does not
“lay bare a program’s inner secrets.
Indeed, it cannot. The inner secrets of a program, the real
crown jewels, are embodied in the higher levels of abstraction
material such as the source code commentary and the
specification. This material never survives the process of being
converted to object code.”A software reverse engineer must do
considerable intellectual work to extract higher level
abstractions and information from the text of the decompiled
program, and still more work to incorporate what he or she
has learned from this analysis in a new program. In this
respect, software resembles traditional manufacturing products
because firms are generally insulated from market-destructive
reverse engineering and reimplementation because of high costs
and difficulties of these activities for the purpose of making
directly competing products.
Given the high costs and difficulties of software reverse
engineering, it may seem surprising that it is such a standard
industry practice. Software engineers reverse-analyze programs
for a variety of reasons, including to fix “bugs” (i.e., logical
errors in program instructions), to customize the program for

16 http://socrates.berkeley.edu/~scotch/re.pdf
the user’s needs (e.g., add some firm-specific features), to
detect infringement, and to learn what others have done. We
focus our economic assessment of reverse engineering in the
software industry on interoperability for two reasons: first, because
this has been the most economically significant reason for
software reverse engineering and second, because most of the
litigation about software reverse engineering has involved
interoperability issues.
Tradução

O direito de autor protege programas da forma mais barata e


mais rápida, tornando um produto competitivo de um diretamente
idêntico, ou seja, que tenha o código do programa copiado
literalmente. No entanto, a engenharia reversa do código do
objeto é geralmente tão difícil, demorada, e precisa de muitos
recursos que não é uma forma eficiente de desenvolver
programas concorrentes, mas não idênticos. Como um técnico
explicou: “a engenharia reversa de software não deixa nu os
segredos internos de um programa”.
Na verdade, ele não pode. Os segredos internos de um
programa, as jóias da coroa real, são incorporados nos níveis
mais elevados dos material de abstração, como, por exemplo: os
comentários de código fonte e a especificação. Estes materiais
não sobrevivem ao processo na conversão em código-objeto. "A
engenharia reversa de software precisa fazer um trabalho
intelectual considerável para extrair abstrações de nível superior e
de informações a partir do texto do programa compilado, e
trabalhar ainda mais para incorporar o que ele ou ela tenha
aprendido a partir dessa análise em um novo programa. A este
respeito, o software se assemelha a fabricação de produtos
tradicionais, porque as empresas são geralmente isoladas do
mercado destrutivo da engenharia reversa e reimplementação por
causa dos custos elevados e dificuldades dessas atividades com
a finalidade de tornar os produtos directamente concorrentes.
Dados os altos custos e dificuldades de engenharia
reversa de software, pode parecer surpreendente que ele é
uma prática padrão da indústria. Engenheiros de software
usam a análise reversa em programas por uma variedade de
razões, incluindo a corrigir "bugs" (ou seja, erros lógicos em
instruções do programa), para personalizar o programa para as
necessidades do usuário (eg, adicionar alguns recursos
específicos da empresa), para detectar violação, e para aprender
sobre o que outros têm conseguido. Focamos nossa avaliação
econômica de engenharia reversa na indústria de software sobre
a interoperabilidade por duas razões: primeiro, porque esta tem
sido a razão mais importante economicamente para a engenharia
reversa de software e, segundo, porque a maioria do litígio sobre
a engenharia reversa de software tem envolvido questões de
interoperabilidade.
3 . CONCLUSÃO

Segundo o texto e a descrição técnica sobre Engenharia Reversa, é um

trabalho penoso e de custo alto. Mas, quais seriam as razões que impulsionariam as

empresas ainda continuarem a fazer esse trabalho. Várias seriam as razões, inclusive

uma das razões foi a mais aceita nas brigas judiciais e acabou sendo a liberação para

se fazer a Engenharia Reversa, em muitos países, a interoperabilidade.

17
(Santos) A Diretiva Européia 91/250/CEE Artigo 6 (1) regula a

decompilação estabelecendo condições para que ela seja realizada.

A primeira condição é que a decompilação apenas seja executada por quem

tem direito de uso do programa.

A segunda condição é que seja realizada apenas para se obter informações

para fim de interoperabilidade, resguardando sigilo das informações.

A terceira é de que a de que seja feita apenas na parte do código que seja

necessário essa interoperabilidade.

Ainda no Artigo 6 (2) há limites para que a informação obtida seja usada

exclusivamente para interoperabilidade e que não sejam livremente transferidos para

terceiros e claro que não possa haver desenvolvimento de programas que sejam

similares na sua expressão.

No Brasil, a lei 9609/98 não tem nenhuma declaração direta sobre

Engenharia Reversa o que não significa diretamente proibição e nem, ao mesmo

17 A proteção Autoral de Programas de Computador – Manoel Joaquim Pereira dos Santos – Lumen
Juris – Rio de Janeiro - 2008
tempo, que seria lícito fazer. Se pensarmos que por nem haver nenhuma citação sobre

Engenharia Reversa, a atividade seria livre, estaríamos incorrendo em um erro. Pois

quando se faz a Engenharia Reversa, você cria várias sub-cópias do programa e a lei

9609 no seu artigo 6 na alínea I, diz que será permitido apenas a reprodução de um só

exemplar de cópia legitimamente adquirida, para salvaguarda ou armazenamento

eletrônico.

Não só limita a apenas uma cópia, como também estabelece para qual

razão.

Ainda temos que compreender que o software funciona sobre regime de

licença e na maioria delas há a expressa proibição de Engenharia Reversa.

Olhando por esse lado, a Engenharia Reversa de um programa de

computador que não pertença ao próprio executante poderia ser considerado crime.

Claro que podemos encontrar respaldo em outros pontos, para se fazer a

Engenharia Reversa, como por exemplo: estudo de um sistema, reparo de defeitos que

comprometam o funcionamento do programa, desde que não haja ação corretiva por

parte do fabricante e interoperabilidade de um sistema com outro, pois encontramos na

lei de proteção de software 9609/98:

Art. 6º Não constituem ofensa aos direitos do titular de


programa de computador:
alínea IV - a integração de um programa, mantendo-se suas
características essenciais, a um sistema aplicativo ou operacional,
tecnicamente indispensável às necessidades do usuário, desde
que para o uso exclusivo de quem a promoveu.

Integração de um programa, essa é a frase chave, que abre caminho para

uma Engenharia Reversa no Brasil, nas outras razões, como estudo e reparo, não
encontramos respaldo em nossa legislação, mas em outras partes do mundo, há uma

legislação específica que normatiza a Engenharia Reversa, como podemos encontrar

na Diretiva da Comunidade Européia.

Diretiva 91/259/CEE (Considerandos 18 a 20):


(a) “as pessoas que têm direito a utilizar um programa de
computador não podem ser impedidas de realizar os atos
necessários de observação, estudo ou teste, desde que estes
atos não infrinjam os direitos de autor em relação ao programa”;
(b) “qualquer reprodução, tradução, adaptação ou
transformação não autorizadas da forma do código em que uma
cópia de um programa foi criada constitui uma infração aos
direitos exclusivos do autor” e
(c) “em certas circunstâncias uma tal modificação da
forma do código de um programa de computador no sentido de
sua reprodução e tradução é ...... indispensável para obter as
necessárias informações no sentido de conseguir a
interoperabilidade de um programa independente com outros
programas”.

Artigo 6° Descompilação
1. Não é necessária a autorização do titular dos direitos
quando a reprodução do código e a tradução da sua forma, na
acepção das alíneas a) e b) do artigo 4o, forem indispensáveis
para obter as informações necessárias à interoperabilidade de um
programa de computador criado independentemente, com outros
programas, uma vez preenchidas as seguintes condições:
a) Esses actos serem realizados pelo licenciado ou por outra
pessoa que tenha o direito de utilizar uma cópia do programa, ou
em seu nome por uma pessoa devidamente autorizada para o
efeito;
b) Não se encontrarem já fácil e rapidamente à disposição
das pessoas referidas na alínea a) as informações necessárias à
interoperabilidade;
c) Esses actos limitarem-se a certas partes do programa
de origem necessárias à interoperabilidade.

Artigo 6° Descompilação
2. O disposto no n° 1 não permite que as informações
obtidas através da sua aplicação:
a) Sejam utilizadas para outros fins que não o de assegurar
a interoperabilidade de um programa criado independentemente;
b) Sejam transmitidas a outrem, excepto quando tal for
necessário para a interoperabilidade do programa criado
independentemente; ou c) Sejam utilizadas para o
desenvolvimento, produção ou comercialização de um programa
substancialmente semelhante na sua expressão, ou para qualquer
outro acto que infrinja os direitos de autor.
3. De acordo com o disposto na Convenção de Berna
para a Protecção das Obras Literárias e Artísticas, as disposições
do presente artigo não podem ser interpretadas no sentido de
permitirem a sua aplicação de uma forma susceptível de lesar os
legítimos interesses do titular de direitos ou que não se coadune
com uma exploração normal do programa de computador.

A Engenharia Reversa é um grande recurso para aproveitar um código que

ficou sem o fonte e que precisa ser readaptado ou melhorado, também é um importante

recurso na compreensão e combate aos vírus, para se fazer a interoperabilidade com

outros softwares e para estudo. Também é importante para que concorrentes possam

estudar um código e desenvolver um novo software com as ideias contidas no anterior,

visto que ideia não é protegida por direito autoral e nem por proteção de patentes e é

necessário que tenhamos mais concorrência para evitar os monopólios.

É importante que se faça um estudo sobre o custo de recursos e tempo que

se empregam para se fazer uma Engenharia Reversa, pois ela não é simples, nem

rápida e nem barata. Verificar se um novo desenvolvimento não seria mais

aproveitável, pois há sistemas que são muito antigos e mesmo tendo o código-fonte,

seu uso seria inadequado, pois todo software tem seu ciclo de vida.
BIBLIOGRAFIA

O que é um Programa (Software)? Jorge Fernandes


<http://www.cic.unb.br/~jhcf/MyBooks/iess/Software/oqueehsoftware.html>
acessado dia 13 de maio de 2013.

Peck, Patrícia. Direito Digital. São Paulo, Saraiva. 2009

Dos Santos, Manoel Joaquim Pereira. A Proteção Autoral de Programas de


Computador. Rio de Janeiro, Lumin Juris. 2008

Engenharia Reversa na Engenharia de Software


<http://www.dcc.ufrj.br/~schneide/es/2001/1/g18/Engenharia%20Reversa.htm>
acessado dia 13 de maio de 2013.

Engenharia reversa para principiantes, Conhecimentos e habilidades necessárias


para iniciar-se na arte da escovação de bits. Wanderley Caloni.
<https://docs.google.com/present/view?fs=true&id=ddd3j862_29grq4sx> acessado
dia 13 de maio de 2013.

THE LAW & ECONOMICS OF REVERSE ENGINEERING, Pamela Samuelson*


and Suzanne Scotchmer** - revised December 4, 2001 - forthcoming Yale Law
Journal, April 2002 <http://socrates.berkeley.edu/~scotch/re.pdf> acessado dia 13 de
maio de 2013.

Sniffing. <http://pt.wikipedia.org/wiki/Sniffing> acessado dia 13 de maio de 2013.

Samba (servidor). <http://pt.wikipedia.org/wiki/Samba_%28servidor%29> acessado


dia 13 de maio de 2013.

Como decompilar programas em Delphi


<http://littleoak.wordpress.com/2009/02/19/como-decompilar-programas-em-delphi-
how-to-decompiler-delphi-application-decompilar-delphi/> acessado dia 13 de maio
de 2013.
Visual Basic - Decompilação ??? <http://www.macoratti.net/vb_dcp1.htm>
acessado dia 13 de maio de 2013.

Guia do Hacker - O que é a Engenharia Reversa


<http://forum.guiadohacker.com.br/showthread.php?t=3546> acessado dia 13 de
maio de 2013.

Apresentação sobre Engenharia Reversa


<http://www.dcc.ufrj.br/~schneide/es/2002/1/g13/trabalho.htm> acessado dia 13 de
maio de 2013.

Potrebbero piacerti anche