No artigo de hoje vamos nos aprofundar no fascinante mundo de Engenharia reversa. Das suas origens à sua influência na sociedade atual, exploraremos as diferentes facetas e aspectos que fazem de Engenharia reversa um tema de interesse para um amplo espectro de públicos. Analisaremos o seu impacto em diferentes áreas, a sua evolução ao longo do tempo e as possíveis implicações que terá para o futuro. Junte-se a nós nesta viagem de descoberta e aprendizagem sobre Engenharia reversa, onde procuraremos lançar luz sobre os seus aspectos mais relevantes e aprofundar o seu significado no mundo contemporâneo.
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].
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]
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]
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]
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.
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.
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.
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]
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:
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.
Existem vários motivos para realizar engenharia reversa em varias áreas.
A engenharia reversa tem suas origens na análise de hardware para obter vantagem comercial ou militar[28]. Entretanto, a engenharia como processo, como tal, não está preocupada em criar cópias ou mudar o artefato de alguma maneira. Sua principal preocupação está na análise para dedução de características de design (projeto) de produtos com pouco ou nenhum conhecimento adicional sobre os procedimentos envolvidos na sua produção original. [28]
Em alguns casos, o objetivo do processo de engenharia reversa pode ser simplesmente substituir a documentação de sistemas obsoletos. Mesmo quando o produto ,que estamos realizando esse processo, seja de um competidor, o objetivo pode não ser realizar uma cópia mas sim executar uma análise de concorrentes. A engenharia reversa pode também ser usada para criar produtos interoperáveis e, apesar de algumas legislações restritas dos Estados Unidos e União Européia, a legalidade de uso de técnicas específicas de engenharia reversa para esse propósito tem sido fortemente contestada nos tribunais ao redor do mundo por mais de duas décadas.[29]
A engenharia reversa de software pode ajudar a melhorar o entendimento do código fonte, que é fundamental para a manutenção e melhora do software, informações relevantes podem ser extraídas para tomar uma decisão a cerca do desenvolvimento de software e representações gráficas do código podem fornecer visões alternativas a respeito do código fonte, o qual pode auxiliar a detectar e corrigir uma vulnerabilidade de software. Frequentemente, à medida que alguns softwares se desenvolvem, suas informações de projeto e melhorias são perdidas com o tempo, mas essas informações perdidas podem normalmente ser recuperadas através da engenharia reversa. Esse processo pode também ajudar a reduzir o tempo necessário para entender o código fonte, assim reduzindo o custo total do desenvolvimento do software[30]. A engenharia reversa também auxilia a detectar e eliminar código malicioso escrito para o software com melhores detectores de código. Reverter o código fonte pode ser usado para encontrar usos diversos para o código fonte, tais como detectar a cópia não autorizada do código fonte onde ele não deveria ser usado ou revelar como o produto do concorrente foi construído[25]. Esse processo é normalmente utilizado para “crackear” software ou mídia para remover sua proteção contra cópia,[25] ou criar uma cópia possivelmente melhorada ou uma duplicata , que geralmente é o objetivo de um concorrente ou hacker.[25]
Desenvolvedores de Malware (software malicioso) frequentemente utilizam de técnicas de engenharia reversa para encontrar vulnerabilidades em um sistema operacional para construir códigos maliciosos (vírus) que podem explorar as vulnerabilidades do sistema[25]. A engenharia reversa também é usada na criptoanálise (análise de criptografia) para encontrar vulnerabilidades na substituição de cifra, algoritmo de chave-simétrica ou criptografia de chave-pública.[25]
Dentre as diversas razões para a engenharia reversa encontramos:[31][32][33]:
Nos Estados Unidos, mesmo se um artefato ou processo é protegido por segredos comerciais, realizar engenharia reversa no artefato ou processo, frequentemente é legal se foi obtido de forma legítima.
Engenharia reversa em software frequentemente cai sob lei contratual, em ambos aspectos, tanto como brecha de contrato assim como quaisquer outras leis relevantes. Isso acontece devido a maioria dos contratos de licença de usuário final proibirem essa prática, e as côrtes dos EUA estão de acordo se tais termos estão presentes, eles sobrepõem a lei de direitos autorais que expressamente permite isso. De acordo com a seção 1039 f) da Lei de Direitos Autorais do Milênio Digital, a pessoa que possuir posse legal de um programa pode desmontar (aplicar engenharia reversa no programa) e contornar sua proteção caso seja necessário para atingir a interoperabilidade, tal termo abrange vastamente outros dispositivos e programas que podem interagir e fazer uso dele, e usar e transferir dados de e para ele de maneiras úteis. Existe uma isenção limitada que permite que o conhecimento assim adquirido seja compartilhado e usado para fins de interoperabilidade.[36]
|pmc=
(ajuda). PMID 24307566. doi:10.1098/rsif.2013.0505. Consultado em 23 de julho de 2022