Top Qs
Linha do tempo
Chat
Contexto
Engenharia reversa
Processo pelo qual um objeto feito pelo homem é desconstruído para revelar seus desenhos, arquitetura, código ou extrair conhecimento do objeto; semelhante à pesquisa científica, a única diferença é que esta é sobre um fenômeno natural Da Wikipédia, a enciclopédia livre
Remove ads
A engenharia reversa é o processo de descobrir os princípios tecnológicos e o funcionamento de um dispositivo, objeto, ou sistema, através da análise de sua estrutura, função e operação.[3] Objetivamente a engenharia reversa consiste em, por exemplo, desmontar uma máquina para descobrir como ela funciona.[4][5] É objeto de estudo em universidades e faculdades principalmente ligada à área de tecnologia.[6][7] Na informática a reversa binária é a prática de obter o código fonte a partir do arquivo executável de um programa computacional (decompilação),[8][9] possibilitando a modificação e recompilação (prática ilegal do cracker).[8]
A engenharia reversa é aplicada em áreas como a engenharia da computação, engenharia mecânica, engenharia eletrônica, engenharia de software, engenharia química[10] e biologia computacional[11].
Remove ads
História
Resumir
Perspectiva
Tecnologia militar
Durante a Primeira Guerra Púnica (264-241 a.C.), a até então inferior marinha romana, foi equipada com embarcações construídas seguindo o modelo de navios capturados de Cartago. Segundo Plínio, o Velho, a República Romana construiu uma esquadra de 200 quinquerremes em apenas 60 dias [12][13] (ver: Engenharia romana).
O ás da aviação francês da I Guerra Mundial, Roland Garros, criou um sistema de placas metálicas defletoras para proteger as pás da hélice de sua aeronave dos disparos de sua metralhadora. Em 19 de Abril de 1915, problemas mecânicos forçaram-no a pousar atrás das linhas inimigas e ele tentou, sem sucesso, destruir seu avião para ocultar seu sistema, antes de ser capturado pelos alemães.[14]
Garros conseguiu fugir de seus captores mas, seu caça Morane-Saulnier Type L, foi estudado por Anthony Fokker que, em resposta, criou um mecanismo sincronizador para metralhadoras que foi instalado no monomotor Fokker Eindecker.[15] O mecanismo desenvolvido por Fokker permitia que a arma deste avião disparasse através das pás da hélice sem atingi-las. O caça Fokker Eindecker garantiu ao Luftstreitkräfte (braço aéreo do Exército Imperial Alemão) a superioridade aérea sobre os aliados entre 1915 e 1916, período conhecido como "Flagelo Fokker".[16] Nesta fase da guerra, os pilotos aliados chamavam seus próprios aviões de Fokker Fodder ("Alvos para os Fokker").[16]
Na II Guerra mundial, os aliados copiaram o desenho dos recipientes (bidões) para transporte de combustíveis alemão, considerado mais eficiente. O recipiente kanister alemão deu origem ao jerrycan aliado.[17] O armamento antitanque panzerschreck alemão foi um "clone" da bazuca americana.[18] Em 1944, quatro bombardeiros Boeing B-29 Superfortress dos EUA fizeram pousos de emergência na URSS [19] e, com a tecnologia obtida através da análise destas aeronaves, os soviéticos criaram o Tupolev Tu-4.[1]
Boeing B-29 Superfortress (EUA) modelo para o desenvolvimento do Tupolev Tu-4 (URSS).[1]
MiG-21 da "Operação Diamante" exposto no Israel Air Force Museum.
A Operação Diamante, executada pelo Mossad durante a Guerra Fria, teve o objetivo de adquirir um caça MiG-21 soviético.[20] O que foi alcançado em 16 de Agosto de 1966, quando o piloto desertor Munir Redfa roubou um MiG-21 da Força Aérea do Iraque levando-o para Israel.[20] O estudo deste caça, revelou segredos que foram aproveitados pelas forças aéreas de Israel e dos Estados Unidos.[20] A Operação Diamante foi dramatizada no telefilme da HBO, Steal the Sky (pt. "Céu em Chamas", 1988), estrelado por Ben Cross e Mariel Hemingway.[21]
Remove ads
Descrição
Muitas vezes, a engenharia reversa envolve desmontar algo (um dispositivo mecânico, componente eletrônico, programa de computador, ou fatores biológicos, químicos ou matéria orgânica) e analisar seus componentes e funcionamento em detalhes, tanto para fins de manutenção ou para apoiar a criação de um novo dispositivo ou programa que faz a mesma coisa, assim como duplicar o original [4] (ver: Cópia ilegal).
A engenharia reversa tem suas origens na análise de hardware para obter vantagem comercial ou militar. O objetivo é deduzir as decisões de design de produtos finais com pouco ou nenhum conhecimento adicional sobre os procedimentos envolvidos na produção original. As mesmas técnicas são posteriormente pesquisadas para aplicação em sistemas de software, não para fins industriais ou de defesa, mas sim para substituir documentação incorreta, incompleta ou indisponível.[4]
Remove ads
Uso
Resumir
Perspectiva
Máquinas
Conforme o design auxiliado por computador (CAD) tornou-se mais popular, a engenharia reversa tornou-se um método viǘel para criar modelos 3D virtuais de uma parte física existente para utiliziiar em 3D CAD, CAM, CAE, e outros softwares.[22] O processo de engenharia reversa envolve a medição de um objeto e então reconstruí-lo como um modelo tridimensional. O objeo físico pode ser medidio utilizando tecnologias de escaneamento 3D tais como CMMs, scanners a lase, tomografia computadorizada, etc. Fazendo a medição dos dados separadamente, geralmente representados como uma nuvem de pontos, fornecem informações insuficientes a respeito de aspectos topográficos e de intenção de design. A forma pode ser recuperada por meio da conversão da nuvem de pontos em uma malha de face triangular. A engenharia reversa tem por objetivo ir além de produzir tal malha e recuperar a intenção de design quando se trata de aspectos de superfícies analíticas simples, quando adequado, bem como, possivelmente superfícies NURBSS para produzir um modelo CAD de representação de limites.. A recuperação de tal modelo permite que um design seja modificado para atender a novos requisitos, um plano de fabricação seja gerado, etc.
A engenharia reversa também é utilizada por empresas para trazer geometria física existente para ambientes de desenvolvimento de produtos digitais, para fazer um registro digital tridimensional de seus próprios produtos ou para avaliar produtos de competidores. Também é usada para analisar como um produto funciona, o que ele faz, quais componentes possui,, custos estimados, identificar potencial violação de patente, etc.
Engenharia Reversa em PCI
A engenharia reversa de placas de circuito impresso envolve recriar os dados da fabricação para uma placa de circuito específica. Isso é realizado para permitir testes (benchmarking) e fornecer suporte para sistemas embarcados.
Software
Em 1990, o Instituto de Engenheiros Eletricistas e Eletrônicos (IEEE) definiu engenharia reversa de software (SRE) como “o processo de analisar um determinado sistema para identificar as componentes desse sistema e suas inter relações e criar representações do sistema em outra forma ou ao um maior nível de abstração, sendo que esse sistema é o produto final do desenvolvimento de software. A engenharia reversa é apenas o processo de investigação, e o sistema de software que está sendo considerado não é modificado, que de outro modo seria reestruturado. A engenharia reversa pode ser realizada a partir de qualquer estágio do ciclo do produto, não necessariamente no quando esse produto está finalizado e funcional.[23]
Há duas componentes na engenharia reversa: Documentar novamente e recuperação de design (projeto). O intuito de documentar novamente é a criação de um novo modo de representar o código de forma que fique mais fácil de compreender. Enquanto isso, a recuperação de design (projeto) é o uso da dedução ou raciocínio lógico a partir de conhecimento geral ou experiência pessoal do produto para entender completamente a funcionalidade do produto. [23] Isso pode ser visto como “voltar no ciclo de desenvolvimento”. Em 1990, o Instituto de Engenheiros Eletricistas e Eletrônicos (IEEE) definiu engenharia reversa de software (SRE) como “o processo de analisar um determinado sistema para identificar as componentes desse sistema e suas inter relações e criar representações do sistema em outra forma ou ao um maior nível de abstração, sendo que esse sistema é o produto final do desenvolvimento de software. A engenharia reversa é apenas o processo de investigação, e o sistema de software que está sendo considerado não é modificado, que de outro modo seria reestruturado. A engenharia reversa pode ser realizada a partir de qualquer estágio do ciclo do produto, não necessariamente no quando esse produto está finalizado e funcional. [23]
Há duas componentes na engenharia reversa: Documentar novamente e recuperação de design (projeto). O intuito de documentar novamente é a criação de um novo modo de representar o código de forma que fique mais fácil de compreender. Enquanto isso, a recuperação de design (projeto) é o uso da dedução ou raciocínio lógico a partir de conhecimento geral ou experiência pessoal do produto para entender completamente a funcionalidade do produto. [23] Isso pode ser visto como “voltar no ciclo de desenvolvimento”. Nesse modelo, a saída da etapa de implementação (na forma de código fonte) é aplicar a engenharia reversa de volta à fase de análise, em uma inversão do modelo tradicional de cascata. Outro termo para essa técnica é a compreensão do programa [24]. A Conferência de Trabalho sobre Engenharia Reversa (The Working Conference on Reverse Engineering – WCRE) tem sido realizada anualmente para explorar e expandir as técnicas de engenharia reversa [25]. A engenharia de software auxiliada pelo computador (CASE – Computer-aided software engineering) e a geração automática de código contribuíram imensamente na área da engenharia reversa.[25]
Software com tecnologia anti-adulteração como ofuscação é usado para impedir a engenharia reversa e aplicar a engenharia reversa de software proprietário e sistemas alimentados por software. Na prática, dois aspectos principais da engenharia reversa aparecem. No primeiro caso, o código fonte já está disponível para o software, mas há aspectos de alto nível do programa, os quais esteja mal documentados ou estão documentados porém não são mais válidos. No segundo caso, não há código fonte disponível para o software, e quaisquer esforços para descobrir um possível código fonte para esse software são considerados engenharia reversa. A engenharia reversa pode fazer uso da técnica de design de sala limpa para evitar violações de direitos autorais.
Outros propósitos da engenharia reversa incluem a auditoria de segurança, remoção da proteção contra de cópia (cracking), contornar as restrições de acesso frequentemente presente nos dispositivos eletrônicos, customização de sistemas embarcados, reparos ou retroajustes internos, habilitar recursos adicionais em hardwares de baixo custo que foram utilizados demasiadamente.
Software Binário
A engenharia reversa binária é executada se o código fonte para determinado software está indisponível.[24] Esse processo às vezes é denominado como engenharia reversa de código (RCE) . Por exemplo, a decompilação de binários para a plataforma Java pode ser realizada utilizando Jad. Um caso famoso de engenharia reversa foi a primeira implementação não IBM do PC BIOS, que lançou o histórico setor compatível com IBM PC, que tem sido a plataforma de hardware predominante por muitos anos. Um exemplo moderno é a reversão do arquivo .APK (arquivo de instalação de aplicativos no sistema Android),[8][26] usando os programas Dex2Jar junto com JD-GUI,[8] ou usando o programa apktool.[26]
Técnicas de software binário
A engenharia reversa de software pode ser realizada por meio de diversos métodos. Os três principais grupos de engenharia reversa de software são:
- Análise através observação da troca de informação, mais predominante na engenharia reversa de protocolos, o que envolve o uso de analisadores de barramento e farejador (sniffers) de pacotes, tais como para acessar o barramento de computador ou a conexão de rede de computador e revelar os dados de tráfego nele. O comportamento do barramento ou da rede pode ser analisado para produzir uma implementação independente que copia seu comportamento. Isso é especialmente útil para engenharia reversa de drivers de dispositivos. Às vezes, a engenharia reversa em sistemas embarcados é amplamente auxiliada por ferramentas que deliberadamente foram apresentadas pelo fabricante, tais como os portas de JTAG ou outros meios de depuração . No Microsoft Windows, os depuradores de baixo nível como SoftICE possuem bastante popularidade.
- Desmontagem (Disassembly) utilizando um desmontador (disassembler), isto é, a linguagem de máquina pura/bruta do programa é lida e compreendida em seus próprios termos, apenas com a ajuda de mnemônicos de linguagem de máquina. Isso funciona em qualquer programa de computador mas pode levar algum tempo, especialmente para aqueles que não estão acostumados com código escrito em linguagem de máquina. O desmontador interativo (The Interactive Disassembler) é uma ferramenta particularmente popular.
- Decompilação utilizando um decompilador, um processo que tenta, com resultados diversos, recriar o código fonte em alguma linguagem de alto nível para um programa que apenas está disponível em código escrito em linguagem de máquina ou bytecode.
Classificação de Software
A classificação de software é o processo de identificar semelhanças entre diferentes binários de software (como duas versões diferentes do mesmo binário) utilizados para detectar relações de código entre amostras de software. A tarefa foi tradicionalmente feita manualmente por diversos motivos (como análise de correções para detecção de vulnerabilidade e violação de direitos autorais), mas atualmente pode ser feita automaticamente, de certo modo, para um grande número de amostras.
Esse método é usado principalmente para tarefas de engenharia reversa longas e completas (análise completa de um algoritmo complexo ou grande parte do software). Em geral, a classificação estatística é considerada um problema difícil, o qual também é verdade para classificação de software, e poucas soluções/ferramentas lidam bem com essa tarefa.
Remove ads
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads
