Engenharia reversa

Origem: Wikipédia, a enciclopédia livre.
O soviético Tupolev Tu-4 (acima), criado a partir da engenharia reversa do Boeing B-29 Superfortress dos EUA (embaixo).[1] [2]

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. Objetivamente a engenharia reversa consiste em, por exemplo, desmontar uma máquina para descobrir como ela funciona.[3][4] É objeto de estudo em universidades e faculdades principalmente ligada à área de tecnologia.[5][6]

A engenharia reversa é aplicada em áreas como a engenharia da computação, engenharia mecânica, engenharia eletrônica, engenharia de software, engenharia química[7] e biologia computacional[8].

História[editar | editar código-fonte]

Tecnologia militar[editar | editar código-fonte]

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 [9][10] (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.[11]

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.[12] 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".[13] Nesta fase da guerra, os pilotos aliados chamavam seus próprios aviões de Fokker Fodder ("Alvos para os Fokker").[13]

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.[14] O armamento antitanque panzerschreck alemão foi um "clone" da bazuca americana.[15] Em 1944, quatro bombardeiros Boeing B-29 Superfortress dos EUA fizeram pousos de emergência na URSS [16] 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.[17] 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.[17] O estudo deste caça, revelou segredos que foram aproveitados pelas forças aéreas de Israel e dos Estados Unidos.[17] 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.[18]

Descrição[editar | editar código-fonte]

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 [3] (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.[3]

Situações Comuns[editar | editar código-fonte]

Máquinas[editar | editar código-fonte]

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.[19] 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[editar | editar código-fonte]

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[editar | editar código-fonte]

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.[20]

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. [20] 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. [20]

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. [20] 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 [21]. 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 [22]. 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.[22]

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[editar | editar código-fonte]

A engenharia reversa binária é executada se o código fonte para determinado software está indisponível [21]. 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.

Técnicas de software binário[editar | editar código-fonte]

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:

  1. 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.
  2. 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.
  3. 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[editar | editar código-fonte]

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.

Razões[editar | editar código-fonte]

Processo de engenharia reversa do Mercedes-Benz W196 1954 "Flecha de Prata".[23]

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[24]. 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. [24]

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.[25]

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[26]. 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[22]. Esse processo é normalmente utilizado para “crackear” software ou mídia para remover sua proteção contra cópia,[22] ou criar uma cópia possivelmente melhorada ou uma duplicata , que geralmente é o objetivo de um concorrente ou hacker.[22]

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[22]. 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.[22]

Dentre as diversas razões para a engenharia reversa encontramos:[27][28][29]:

  • Cópia: A Engenharia Reversa tem sido constantemente aplicada para a reprodução de produtos. No entanto, a utilização desta técnica em um objeto patenteado, acaba por infringir a referida patente. Neste sentido, se apenas uma parte do componente é patenteado ou o item não possui patente, a duplicação é um meio lícito.[30] (ver: Pirataria moderna). A técnica de Engenharia Reversa utilizada para a reprodução de produtos acelera  o processo de desenvolvimento e promove o bem-estar do consumidor ao prover uma gama de produtos similares com preço competitivo. Ainda, consequente redução do preço final dos produtos desenvolvidos, sendo observada uma melhor prática concorrencial quando são respeitadas as patentes e os direitos de propriedade[31].
  • Economizar dinheiro: Descobrir o que cada componente eletrônico pode prevenir o usuário de comprar outro produto
  • Reaproveitamento: Objetos obsoletos são reutilizados de forma diferente, porém de maneira útil.
  • Design: Empresas de produção e design aplicam a engenharia reversa ao processo de fabricação de produtos.
  • Interface: Engenharia reversa pode ser usado quando necessário um sistema efetuar interface com outro sistema e como as negociações entra os dois sistemas deverão ser estabelecidos. Esses requisitos normalmente existem para interoperabilidade.
  • Espionagem militar ou comercial: Aprender sobre o produto do concorrente, adquirindo o protótipo para posterior análise. Isso pode resultar em desenvolvimento de produto semelhante, ou melhores contramedidas.
  • Melhorar deficiências de documentação: A engenharia reversa pode ser realizada quando a documentação de um sistema para a sua concepção, produção, operação ou manutenção possui deficiências e projetistas originais não estão disponíveis para melhorá-lo. Pode fornecer a documentação mais atual necessária para compreender o estado mais atual de um sistema de software.
  • Obsolescência: Circuitos integrados muitas vezes parecem ter sido projetados em sistemas proprietários, obsoletos, o que significa que a única maneira de incorporar a funcionalidade em nova tecnologia é a engenharia reversa do chip existente e, em seguida, reprojetá-lo.
  • Modernização de software: É geralmente necessária, a fim de compreender o estado de software existente ou legado, a fim de estimar adequadamente o esforço necessário para migrar conhecimento do sistema. Muito disso pode ser impulsionada por mudanças de requisitos funcionais, de conformidade ou de segurança.
  • Análise de segurança do produto: Para examinar como um produto funciona, quais são as especificações de seus componentes, estimar os custos e identificar o potencial de violação de patente. Aquisição de dados sensíveis por desmontar e analisar o projeto de um componente do sistema. Outra intenção pode ser a de remover proteção contra cópia, a evasão de restrições de acesso.
  • Resolução de falha: Para corrigir (ou às vezes para melhorar) o software que não é mais suportado por seus criadores (por exemplo, Abandonware).
  • Criação de duplicatas não licenciadas/aprovadas: Tais duplicatas são chamadas de clones no domínio da computação.
  • Fins acadêmicos/aprendizagem: Para fins de aprendizagem podem servir para compreender as questões-chave de um projeto mal sucedido e, posteriormente, melhorar o design.
  • Inteligência técnica do competidor: Entenda o que um concorrente está realmente fazendo, contra o que eles dizem que estão fazendo.

Sobreposição com a lei de patentes[editar | editar código-fonte]

Aspecto Legal[editar | editar código-fonte]

Estados Unidos[editar | editar código-fonte]

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.[32]

Ver também[editar | editar código-fonte]

Referências

  1. a b c Reverse Engineering: Technology of Reinvention. Autor: Wego Wang. CRC Press, 2010, pág. 08, (em inglês), ISBN 9781439806319 Adicionado em 29/02/2016.
  2. YouTube - vídeo: Tupolev Tu-4 NATO Code: Bull. (em inglês) Acessado em 01/07/2018.
  3. a b c O que é engenharia reversa?
  4. O que é engenharia reversa? - TecMundo
  5. MBA em gestão de segurança da informação - FIAP+
  6. Engenharia reversa - Universidade Federal Fluminense
  7. «How Does Reverse Engineering Work? | Engineering360». insights.globalspec.com. Consultado em 23 de julho de 2022 
  8. Villaverde, Alejandro F.; Banga, Julio R. (6 de fevereiro de 2014). «Reverse engineering and identification in systems biology: strategies, perspectives and challenges». Journal of The Royal Society Interface (91). 20130505 páginas. PMC PMC3869153Acessível livremente Verifique |pmc= (ajuda). PMID 24307566. doi:10.1098/rsif.2013.0505. Consultado em 23 de julho de 2022 
  9. Conhecer 2000 História: da Pré-história à Idade Média. Editora Nova Cultural, 1995, pág. 93. Adicionado em 20/03/2016.
  10. The Sea and Civilization: A Maritime History of the World. Autor: Lincoln Paine. Atlantic Books Ltd., 2014, (em inglês) ISBN 9781782393573 Adicionado em 20/03/2016.
  11. American Heritage History of Flight. Autor: Arthur Gordon. New Word City, 2015, (em inglês) ISBN 9781612308715 Adicionado em 09/04/2016.
  12. Fighting the Great War: A Global History. Autores: Michael S. NEIBERG & Michael S Neiberg. Harvard University Press, 2009, pág. 173, (em inglês) ISBN 9780674041394 Adicionado em 09/04/2016.
  13. a b Instruments of War: Weapons and Technologies That Have Changed History: Weapons and Technologies That Have Changed History. Autor: Spencer C. Tucker. ABC-CLIO, 2015, pág. 175, (em inglês), ISBN 9781440836558 Adicionado em 09/04/2016.
  14. The Encyclopedia of the Industrial Revolution in World History, Volume 3. Autor: Kenneth E. Hendrickson III. Rowman & Littlefield, 2014, pág. 777, (em inglês) ISBN 9780810888883 Adicionado em 20/03/2016.
  15. Armored Thunderbolt: The U.S. Army Sherman in World War II. Autor: Steve Zaloga. Stackpole Books, 2014, págs. 90-93, (em inglês) ISBN 9780811742443 Adicionado em 20/03/2016.
  16. Tupolev Tu-4: Soviet Superfortress. Autores: Yefim Gordon & Vladimir Rigmant. Midland Publishing Limited, 2002, págs. 8-10, (em inglês) ISBN 9781857801422 Adicionado em 20/03/2016.
  17. a b c Mossad: As Grandes Missões do Serviço Secreto Israelense. Autores: Bar-Zohar & Michael Misha. Digitaliza Conteudo, 2013, ISBN 9788565958127 Adicionado em 20/03/2016.
  18. IMDB. Steal the Sky. (em inglês) Acessado em 20/03/2016.
  19. Várady, Tamás; Martin, Ralph R; Cox, Jordan (1 de abril de 1997). «Reverse engineering of geometric models—an introduction». Computer-Aided Design. Reverse Engineering of Geometric Models (em inglês) (4): 255–268. ISSN 0010-4485. doi:10.1016/S0010-4485(96)00054-1. Consultado em 23 de julho de 2022 
  20. a b c d Chikofsky, E.J.; Cross, J.H. (janeiro de 1990). «Reverse engineering and design recovery: a taxonomy». IEEE Software (1): 13–17. ISSN 1937-4194. doi:10.1109/52.43044. Consultado em 23 de julho de 2022 
  21. a b Nelson, Michael L. (24 de março de 2005). «A Survey of Reverse Engineering and Program Comprehension». arXiv:cs/0503068. Consultado em 23 de julho de 2022 
  22. a b c d e f g Eilam, Eldad (2005). Reversing: secrets of reverse engineering. John Wiley & Sons. [S.l.: s.n.] ISBN 978-0-7645-7481-8 
  23. Technisches Museum - Mercedes W 196 Silver Arrow, 1954/55. (em inglês) Acessado em 29/02/2016.
  24. a b Chikofsky, E.; Cross, J. (1990). «Reverse engineering and design recovery: a taxonomy». IEEE Software. doi:10.1109/52.43044. Consultado em 23 de julho de 2022 
  25. Katoh, Masanobu; Band, Jonathan (2011). Interfaces on Trial 2.0. MIT Press: [s.n.] p. 136. ISBN 978-0-262-29446-1 
  26. Chikofsky, E.J.; Cross, J.H. (janeiro de 1990). «Reverse engineering and design recovery: a taxonomy». IEEE Software (1): 13–17. ISSN 1937-4194. doi:10.1109/52.43044. Consultado em 23 de julho de 2022 
  27. A cultura cracker e a engenharia reversa.
  28. Engenharia reversa e reengenharia
  29. Engenharia reversa - motivações - página 9
  30. SHARPLES, R.E. (2010). The efficiency of Reverse Engineering in the Design of the ORCA XI Autonomous Underwater Vehicle. [S.l.]: Dissertação (Bacharelado em Ciências) – Massachusetts Institute of Technology, USA 
  31. STEFANELLI, E. J.; INFANTOZZI, R.; VARGAS, M. M. & POLITANO, R (2010). Engenharia Reversa: Discussão sobre validade e legalidade desta prática. [S.l.: s.n.] 
  32. The section states: (f) Reverse Engineering.— (1) Notwithstanding the provisions of subsection (a)(1)(A), a person who has lawfully obtained the right to use a copy of a computer program may circumvent a technological measure that effectively controls access to a particular portion of that program for the sole purpose of identifying and analyzing those elements of the program that are necessary to achieve interoperability of an independently created computer program with other programs, and that have not previously been readily available to the person engaging in the circumvention, to the extent any such acts of identification and analysis do not constitute infringement under this title. (2) Notwithstanding the provisions of subsections (a)(2) and (b), a person may develop and employ technological means to circumvent a technological measure, or to circumvent protection afforded by a technological measure, in order to enable the identification and analysis under paragraph (1), or for the purpose of enabling interoperability of an independently created computer program with other programs, if such means are necessary to achieve such interoperability, to the extent that doing so does not constitute infringement under this title. (3) The information acquired through the acts permitted under paragraph (1), and the means permitted under paragraph (2), may be made available to others if the person referred to in paragraph (1) or (2), as the case may be, provides such information or means solely for the purpose of enabling interoperability of an independently created computer program with other programs, and to the extent that doing so does not constitute infringement under this title or violate applicable law other than this section. (4) For purposes of this subsection, the term 「interoperability」 means the ability of computer programs to exchange information, and of such programs mutually to use the information which has been exchanged.


Bibliografia[editar | editar código-fonte]

  • Uma Pesquisa de Engenharia Reversa e Programa de Compreensão. Michael L. Nelson, 19 de abril de 1996, ODU CS 551 - Pesquisa de Engenharia de Software.
  • Yurichev, Dennis, "Uma Introdução à engenharia reversa para Iniciantes". Livro Online:http://yurichev.com/writings/RE_for_beginners-en.pdf (em inglês)
  • Eilam, Eldad (2005).Invertendo: Secrets of Reverse Engineering.Wiley Publishing.p.595.ISBN0-7645-7481-7.
  • Raja, Vinesh; Fernandes, Kiran J. (2008) Engenharia Reversa - Uma Perspectiva Industrial. Springer.p.242.ISBN978-1-84628-855-5. (em inglês)

Ligações externas[editar | editar código-fonte]