Escolar Documentos
Profissional Documentos
Cultura Documentos
RESUMO
O presente trabalho tem por objetivo apresentar a engenharia reversa de software, uma
prática existente dentro da engenharia de software para análise e compreensão de programas.
A engenharia reversa tem suas origens na análise de hardware e é frequentemente usada para
obter um projeto finalizado, visando entender como ele funciona e melhorar o produto de um
concorrente ou empresa. O presente artigo apresenta os conceitos básicos da engenharia de
software e faz uma revisão bibliográfica de seus principais termos para apresentar a técnica e
seus conceitos, além de propiciar uma introdução para pesquisas futuras relacionadas ao tema
e sua aplicabilidade no mercado de trabalho. Ao analisar como a engenharia reversa atua em
softwares para encontrar possíveis falhas e melhorar seu desempenho, constata-se que ela se
mostra uma ferramenta muito útil para a indústria e que sua utilização pode ser explorada de
forma mais detalhada nas disciplinas de engenharia das graduações na área da computação.
ABSTRACT
The present work aims to present software reverse engineering, an existing practice
within software engineering for analyzing and understanding programs. Reverse engineering
has its origins in hardware analysis and is often used to get a finished design to understand
how it works and improve a competitor's or company's product. This article presents the basic
concepts of software engineering and makes a bibliographic review of its main terms to
present the technique and its concepts, in addition to providing an introduction for future
research related to the topic and its applicability in the job market. When analyzing how
reverse engineering works in software to find possible flaws and improve its performance, it
appears that it is a very useful tool for the industry and that its use can be explored in more
detail in the engineering disciplines of undergraduate courses in computing area.
1. INTRODUÇÃO
também sua importância para utilização em correção e/ou adaptação de software de terceiros,
recuperação de dados em sistemas inutilizados, como também análise de vírus, trojans e
malwares (HOGLUND, 2006).
Conforme o mercado de Software cresce, aumenta à demanda de manutenção e
criações de software mais completo, a manutenção do software torna-se um problema, uma
vez que sua documentação foi criada e associada ao software, na grande maioria não está de
acordo com seu código fonte. Diante dessas condições e da necessidade de manutenção, a
equipe de desenvolvimento encontra uma documentação incompleta não refletindo ao
software existente.
Rugaber (1996) afirma que a maior parte do esforço de desenvolvimento de software é
gasto na manutenção de sistemas existentes e não no desenvolvimento de sistemas novos.
Rugaber (1996) afirma que a maior parte do desenvolvimento de software é gasto na
manutenção e não no desenvolvimento e grande parte do processo de manutenção é dirigida
ao entendimento do software. Sendo assim, se é desejável melhorar o processo de manutenção
de software, é necessário facilitar o processo de sua compreensão. A engenharia reversa
aborda diretamente o problema de compreensão do software.
2. METODOLOGIA
3. FUNDAMENTAÇÃO TEÓRICA
Fonte:https://fluxoconsultoria.poli.ufrj.br/blog/engenharia-reversa-5-passos-para-replicar-sua-maquina-no-
mercado/
Fonte: https://www.beltsysplus.com.br/engenharia-reversa-de-software/
De acordo com McGraw (2006, p. 85-89), a programação de muito alto nível possui,
assim como está definido em sua classificação, um alto nível de abstração, sendo basicamente
utilizada como uma ferramenta de produtividade. Normalmente estas linguagens são limitadas a
um propósito específico e, na maioria das vezes, são encapsuladas, internas e próprias de
softwares. Quanto às gerações das linguagens, existem:
6
3ª geração ou 3GL: linguagens de alto nível, estruturadas e projetadas para um mais fácil
entendimento e utilização. Suporta programação orientada a objetos (POO) tornando-a
extremamente mais flexível e poderosa.
4ª geração ou 4GL: estas linguagens possuem sintaxe similar à fala humana, sendo
geralmente utilizadas em banco de dados via scripts de consulta e programação. Objetivam a
redução de custo e de tempo de desenvolvimento.
• Funções que passam por dados fornecidos pelo usuário ou os utilizam em uma string
de formato (format string);
7
• Rotinas que obtém entradas de usuários utilizando loop; Operações de baixo nível de
cópia de bytes; Rotinas que utilizam aritmética de ponteiro em buffers fornecidos pelo usuário;
chamadas de sistema confiáveis que aceitam entradas dinâmicas.
aplicativo. E, como nem sempre é possível ter acesso ao código-fonte ou binário do aplicativo,
este tipo de análise faz com que invasores reais frequentemente adotem-na.
A alta conectividade proporcionada pela Internet também aumenta este risco. Estima-se
que o número de vulnerabilidades tende a aumentar cada vez mais. Pesquisadores e acadêmicos
de segurança afirmam que mais da metade das vulnerabilidades atuais provêm de estouros de
buffer. Porém, outros problemas mais sutis podem ser igualmente perigosos, mesmo sendo
considerados apenas meros bugs. (McGRAW, 2006)
4. RESULTADOS
5. CONSIDERAÇÕES FINAIS
Engenharia reversa é um termo que pode ser usado em uma vasta amplitude, tanto da
engenharia como atividades de design. Além disso, é uma estratégia comum de design na
indústria. Sua estratégia de aplicabilidade deve ser observada, a fim de verificar se é adequada
ou não sua utilização. É muito importante observar os princípios que aumentam a dificuldade
ou o investimento dos produtos de engenharia reversa, uma vez que o seu entendimento será
benéfico para todos os envolvidos em suas atividades. Existem várias razões para empregar a
engenharia reversa como uma tática de design de engenharia, tais quais: para comparar
produtos através de um benchmarking competitivo, na preparação para imitar um produto,
para obter informação técnica que não existe, para obter informação técnica que o fabricante
não mais tenha ou não deseje compartilhar, dentre outras.
Tais exemplos mostram a diversidade do uso de engenharia reversa, que pode ajudar o
desenvolvedor a produzir algo mais difícil de ser replicado ou ter suas informações extraídas
com o objetivo de obter uma vantagem comercial em cima de seus concorrentes, e, também,
usando as informações para determinar quais projetos terão sucesso.
Para isso, são identificadas as barreiras, que nada mais são que algo que impedem a
extração de informação do produto dele mesmo. Tais barreiras existem nas áreas de software,
hardware, dentre outras, e são importantes pois obrigam os competidores a gastarem tempo
desenvolvendo sua própria tecnologia ou investir em engenharia reversa com tempo e
recursos a fim de extrair informações, permitindo que o produto fique com uma fatia maior do
mercado por mais tempo. Cabe salientar que alguns produtos, devido ao seu baixo custo ou
baixa margem de lucro, não são alvo da engenharia reversa, pois seria um desperdício.
Pesquisas futuras podem partir da presente revisão para revisitar o tema e discutir a
importância dele no mercado, além de compreender como o assunto é abordado durante a
graduação e outras etapas do ensino de computação.
12
REFERÊNCIAS
SCHNEIER, B. Secrets and Lies: Digital Security in a Networked World. Estados Unidos
da América: John Wiley & Sons, 2000.