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.
Гораздо больше, чем просто документы.
Откройте для себя все, что может предложить Scribd, включая книги и аудиокниги от крупных издательств.
Отменить можно в любой момент.