Engenharia inversa
MachinesEdit
Como a concepção assistida por computador (CAD) se tornou mais popular, a engenharia inversa tornou-se um método viável para criar um modelo virtual 3D de uma peça física existente para utilização em CAD 3D, CAM, CAE, ou outro software. O processo de engenharia inversa envolve a medição de um objecto e depois a sua reconstrução como modelo 3D. O objecto físico pode ser medido utilizando tecnologias de digitalização 3D como CMMs, scanners laser, digitalizadores de luz estruturados, ou digitalização industrial por TC (tomografia computorizada). Só os dados medidos, geralmente representados como uma nuvem de pontos, carecem de informação topológica e de intenção de desenho. Os primeiros podem ser recuperados através da conversão da nuvem de pontos numa malha de face triangular. A engenharia inversa visa ir além da produção de tal malha e recuperar a intenção do desenho em termos de superfícies analíticas simples, quando apropriado (planos, cilindros, etc.), bem como possivelmente superfícies NURBS para produzir um modelo CAD de representação de limites. A recuperação de um tal modelo permite modificar um desenho para satisfazer novos requisitos, gerar um plano de fabrico, etc.
A modelação híbrida é um termo vulgarmente utilizado quando a modelação NURBS e paramétrica são implementadas em conjunto. A utilização de uma combinação de superfícies geométricas e de forma livre pode proporcionar um método poderoso de modelação 3D. Áreas de dados de forma livre podem ser combinadas com superfícies geométricas exactas para criar um modelo híbrido. Um exemplo típico disto seria a engenharia inversa de uma cabeça de cilindro, que inclui características de fundição freeform, tais como jaquetas de água e áreas maquinadas de alta tolerância.
A engenharia inversa é também utilizada pelas empresas para trazer a geometria física existente para ambientes de desenvolvimento de produtos digitais, para fazer um registo digital 3D dos seus próprios produtos, ou para avaliar os produtos dos concorrentes. É utilizada para analisar como um produto funciona, o que faz, que componentes tem; estimar custos; identificar potenciais infracções de patentes; etc.
engenharia de valores, uma actividade relacionada que também é utilizada pelas empresas, envolve a desconstrução e análise de produtos. Contudo, o objectivo é encontrar oportunidades de redução de custos.
SoftwareEdit
Em 1990, o Institute of Electrical and Electronics Engineers (IEEE) definiu (software) engenharia inversa (SRE) como “o processo de análise do sistema asubject para identificar os componentes do sistema e as suas inter-relações e para criar representações do sistema de outra forma ou a um nível superior de abstracção” em que o “sistema sujeito” é o produto final do desenvolvimento de software. A engenharia inversa é um processo de exame apenas, e o sistema de software em consideração não é modificado, que de outra forma seria reengenharia ou reestruturação. A engenharia inversa pode ser executada a partir de qualquer fase do ciclo do produto, não necessariamente do produto final funcional.
Existem dois componentes na engenharia inversa: redocumentação e recuperação do design. A redocumentação é a criação de uma nova representação do código informático, para que seja mais fácil de compreender. Entretanto, a recuperação do design é a utilização de dedução ou raciocínio a partir do conhecimento geral ou da experiência pessoal do produto para compreender plenamente a funcionalidade do produto. Também pode ser visto como “andar para trás ao longo do ciclo de desenvolvimento”. Neste modelo, o resultado da fase de implementação (sob a forma de código fonte) é retroengenharia de volta à fase de análise, numa inversão do modelo tradicional de cascata. Outro termo para esta técnica é compreensão do programa. A Conferência de Trabalho sobre Engenharia Inversa (WCRE) tem sido realizada anualmente para explorar e expandir as técnicas de engenharia inversa. A engenharia de software assistida por computador (CASE) e a geração de código automatizado contribuíram grandemente no campo da engenharia inversa.
p>Tecnologia anti-tamper como a ofuscação é utilizada para dissuadir tanto a engenharia inversa como a reengenharia de software proprietário e sistemas de software. Na prática, emergem dois tipos principais de engenharia inversa. No primeiro caso, o código fonte já está disponível para o software, mas aspectos de nível superior do programa, que talvez estejam mal documentados ou documentados mas já não são válidos, são descobertos. No segundo caso, não há código fonte disponível para o software, e quaisquer esforços no sentido de descobrir um possível código fonte para o software são considerados como engenharia inversa. A segunda utilização do termo é mais familiar para a maioria das pessoas. A engenharia inversa de software pode fazer uso da técnica de desenho de sala limpa para evitar a violação dos direitos de autor.
Em nota relacionada, o teste da caixa negra na engenharia de software tem muito em comum com a engenharia inversa. O testador tem normalmente a API mas tem como objectivo encontrar bugs e características não documentadas ao esmagar o produto a partir do exterior.
Outros objectivos da engenharia inversa incluem auditoria de segurança, remoção de protecção contra cópia (“cracking”), contornar restrições de acesso frequentemente presentes na electrónica de consumo, personalização de sistemas incorporados (tais como sistemas de gestão de motores), reparações internas ou retrofits, permitindo características adicionais em hardware “aleijado” de baixo custo (tais como alguns conjuntos de chips de placas gráficas), ou mesmo a mera satisfação da curiosidade.
Software binárioEditar
Engenharia inversa binária é executada se o código fonte de um software não estiver disponível. Este processo é por vezes denominado engenharia inversa de código, ou RCE. Por exemplo, a descompilação de binários para a plataforma Java pode ser realizada através da utilização de Jad. Um caso famoso de engenharia inversa foi a primeira implementação não IBM da BIOS de PC, que lançou a histórica indústria compatível com IBM PC que tem sido a plataforma de hardware de computador predominantemente dominante durante muitos anos. A engenharia inversa de software está protegida nos EUA pela excepção de utilização justa na lei dos direitos de autor. O software Samba, que permite aos sistemas que não correm sistemas Microsoft Windows partilhar ficheiros com sistemas que o correm, é um exemplo clássico de engenharia inversa de software, uma vez que o projecto Samba teve de reverter informação inédita sobre como a partilha de ficheiros Windows funcionava para que os computadores que não correm Windows o pudessem emular. O projecto Wine faz a mesma coisa para a API do Windows, e o OpenOffice.org é uma das partes que o faz para os formatos de ficheiros Microsoft Office. O projecto ReactOS é ainda mais ambicioso nos seus objectivos ao esforçar-se por fornecer compatibilidade binária (ABI e API) com os actuais sistemas operativos Windows do ramo NT, o que permite que software e controladores escritos para Windows funcionem num software livre de engenharia inversa (GPL) de sala limpa. O WindowsSCOPE permite a engenharia inversa de todo o conteúdo da memória ao vivo de um sistema Windows, incluindo uma engenharia inversa gráfica de nível binário de todos os processos em execução.
Um outro exemplo clássico, se não bem conhecido, é que em 1987 a Bell Laboratories fez a engenharia inversa do sistema Mac OS System 4.1, originalmente em execução no Apple Macintosh SE, para que pudesse executá-lo nas suas próprias máquinas RISC.
Técnicas de software binárioEditar
A engenharia reversa de software pode ser realizada por vários métodos. Os três principais grupos de engenharia reversa de software são
- Análise através da observação da troca de informação, mais prevalente na engenharia reversa de protocolo, que envolve a utilização de analisadores de barramento e sniffers de pacotes, tais como para aceder a um barramento de computador ou ligação a uma rede de computadores e revelar os dados de tráfego sobre os mesmos. O comportamento do autocarro ou da rede pode então ser analisado para produzir uma implementação autónoma que imita esse comportamento. Isto é especialmente útil para os condutores de dispositivos de engenharia inversa. Por vezes, a engenharia inversa em sistemas incorporados é grandemente assistida por ferramentas deliberadamente introduzidas pelo fabricante, tais como portas JTAG ou outros meios de depuração. No Microsoft Windows, depuradores de baixo nível como o SoftICE são populares.
- Desmontagem utilizando um desmontador, o que significa que a linguagem de máquina em bruto do programa é lida e compreendida nos seus próprios termos, apenas com a ajuda de mnemónicos de linguagem de máquina. Funciona em qualquer programa de computador mas pode demorar bastante tempo, especialmente para aqueles que não estão habituados a usinar o código da máquina. O Desassembler interactivo é uma ferramenta particularmente popular.
- Descompilação utilizando um descompilador, um processo que tenta, com resultados variáveis, recriar o código fonte em alguma linguagem de alto nível para um programa disponível apenas em código de máquina ou bytecode.
Classificação de softwareEditar
Classificação de software é o processo de identificação de semelhanças entre diferentes binários de software (como duas versões diferentes do mesmo binário) utilizado para detectar relações de código entre amostras de software. A tarefa era tradicionalmente feita manualmente por várias razões (tais como análise de patches para detecção de vulnerabilidades e violação de direitos de autor), mas agora pode ser feita de forma algo automática para grandes números de amostras.
Este método está a ser utilizado principalmente para tarefas de engenharia inversa longas e completas (análise completa de um algoritmo complexo ou de uma grande peça de software). Em geral, a classificação estatística é considerada um problema difícil, o que também é verdade para a classificação de software, e tão poucas soluções/ferramentas que lidam bem com esta tarefa.
Código fonteEditar
Um número de ferramentas UML refere-se ao processo de importação e análise de código fonte para gerar diagramas UML como “engenharia inversa”. Ver Lista de ferramentas UML.
Embora UML seja uma abordagem para fornecer “engenharia inversa”, os avanços mais recentes em actividades de normas internacionais resultaram no desenvolvimento do Modelo de Metamodelo de Descoberta do Conhecimento (KDM). A norma fornece uma ontologia para a representação intermédia (ou abstracta) das construções de linguagem de programação e as suas inter-relações. Uma norma do Object Management Group (a caminho de se tornar também uma norma ISO), o KDM começou a tomar posse na indústria com o desenvolvimento de ferramentas e ambientes de análise que podem fornecer a extracção e análise do código fonte, binário e byte. Para a análise do código fonte, a arquitectura de normas granulares do KDM permite a extracção de fluxos de sistemas de software (dados, controlo e mapas de chamadas), arquitecturas, e conhecimento da camada empresarial (regras, termos e processo). A norma permite a utilização de um formato de dados comum (XMI), permitindo a correlação das várias camadas de conhecimento do sistema para análise detalhada (tal como causa raiz, impacto) ou análise derivada (tal como extracção do processo empresarial). Embora os esforços para representar as construções linguísticas possam ser intermináveis devido ao número de línguas, à evolução contínua das línguas do software, e ao desenvolvimento de novas línguas, a norma permite a utilização de extensões para apoiar o conjunto alargado de línguas, bem como a evolução. O KDM é compatível com UML, BPMN, RDF, e outras normas que permitem a migração para outros ambientes e, assim, alavancar o conhecimento do sistema para esforços como a transformação do sistema de software e a análise da camada empresarial.
ProtocolosEditar
Protocolos são conjuntos de regras que descrevem formatos de mensagens e a forma como as mensagens são trocadas: a máquina de estado do protocolo. Assim, o problema da engenharia inversa de protocolo pode ser dividido em dois sub-problemas: o formato da mensagem e a engenharia inversa da máquina de estado.
Os formatos de mensagem têm sido tradicionalmente concebidos de forma inversa através de um tedioso processo manual, que envolvia a análise de como as implementações de protocolo processam as mensagens, mas uma investigação recente propôs uma série de soluções automáticas. Tipicamente, as abordagens automáticas agrupam as mensagens em clusters utilizando várias análises de clustering, ou emulam a implementação do protocolo traçando o processamento da mensagem.
Há menos trabalho na engenharia inversa de máquinas de estado dos protocolos. Em geral, as máquinas-estado de protocolo podem ser aprendidas através de um processo de aprendizagem offline, que observa passivamente a comunicação e tenta construir a máquina-estado mais geral aceitando todas as sequências de mensagens observadas, e aprendizagem online, que permite a geração interactiva de sequências de sondagem de mensagens e a escuta de respostas a essas sequências de sondagem. Em geral, a aprendizagem offline de pequenas máquinas de estado é conhecida por ser NP-completa, mas a aprendizagem online pode ser feita em tempo polinomial. Uma abordagem automática offline foi demonstrada por Comparetti et al. e uma abordagem online por Cho et al.
p>Outros componentes de protocolos típicos, como funções de encriptação e hash, também podem ser automaticamente concebidos de forma inversa. Tipicamente, as abordagens automáticas traçam a execução de implementações de protocolos e tentam detectar buffers na memória que retêm pacotes não encriptados.
Circuitos integrados/cartões inteligentesEdit
A engenharia inversa é uma forma invasiva e destrutiva de analisar um cartão inteligente. O atacante utiliza produtos químicos para gravar camada após camada do cartão inteligente e tira fotografias com um microscópio electrónico de varrimento (SEM). Esta técnica pode revelar a parte completa de hardware e software do “smart card”. O maior problema para o atacante é trazer tudo para a ordem certa para descobrir como tudo funciona. Os fabricantes do cartão tentam esconder chaves e operações, misturando posições de memória, tais como por barramento.
Em alguns casos, é até possível anexar uma sonda para medir tensões enquanto o cartão inteligente ainda está operacional. Os fabricantes do cartão utilizam sensores para detectar e prevenir esse ataque. Esse ataque não é muito comum porque requer um grande investimento em esforço e equipamento especial que geralmente só está disponível para os grandes fabricantes de chips. Além disso, o retorno deste ataque é baixo, uma vez que outras técnicas de segurança são frequentemente utilizadas, tais como contas-sombra. Ainda é incerto se os ataques contra cartões chip-e-PIN para replicar dados de encriptação e depois quebrar PINs proporcionariam um ataque rentável à autenticação multifactorial.
A engenharia inversa total prossegue em várias etapas principais.
O primeiro passo após as imagens terem sido tiradas com um SEM é coser as imagens, o que é necessário porque cada camada não pode ser capturada por um único disparo. Um SEM precisa de varrer a área do circuito e tirar várias centenas de imagens para cobrir a camada inteira. A costura de imagens tira como entrada várias centenas de imagens e produz uma única imagem devidamente sobreposta da camada completa.
P>Próximo, as camadas costuradas precisam de ser alinhadas porque a amostra, após a gravura, não pode ser colocada exactamente na mesma posição em relação à SEM de cada vez. Por conseguinte, as versões costuradas não se sobreporão da forma correcta, como no circuito real. Normalmente, seleccionam-se três pontos correspondentes, e aplica-se uma transformação com base nisso.
Para extrair a estrutura do circuito, as imagens alinhadas e costuradas precisam de ser segmentadas, o que destaca o circuito importante e separa-o do fundo desinteressante e dos materiais isolantes.
Finalmente, os fios podem ser rastreados de uma camada para a outra, e a lista de rede do circuito, que contém toda a informação do circuito, pode ser reconstruída.
Aplicações militaresEditar
p>A engenharia reversa é frequentemente utilizada por pessoas para copiar tecnologias, dispositivos, ou informações de outras nações que tenham sido obtidas por tropas regulares nos campos ou por operações de inteligência. Foi frequentemente utilizada durante a Segunda Guerra Mundial e a Guerra Fria. Aqui estão exemplos bem conhecidos da Segunda Guerra Mundial e mais tarde:
- Jerry can: As forças britânicas e americanas repararam que os alemães tinham latas de gasolina com um design excelente. Eles fizeram cópias invertidas dessas latas, que eram popularmente conhecidas como “latas de Jerry”
- Panzerschreck: Os Alemães capturaram uma bazuca americana durante a Segunda Guerra Mundial e fizeram uma engenharia inversa para criar o Panzerschreck maior.
- Tupolev Tu-4: Em 1944, três bombardeiros B-29 americanos em missões sobre o Japão foram forçados a aterrar na União Soviética. Os soviéticos, que não tinham um bombardeiro estratégico semelhante, decidiram copiar o B-29. Em três anos, tinham desenvolvido o Tu-4, uma cópia quase perfeita.
- radar SCR-584: copiado pela União Soviética após a Segunda Guerra Mundial, é conhecido por algumas modificações – СЦР-584, Бинокль-Д.
- foguete V-2: Documentos técnicos para o V-2 e tecnologias relacionadas foram capturados pelos Aliados ocidentais no final da guerra. Os americanos concentraram os seus esforços de engenharia inversa através da Operação Paperclip, que levou ao desenvolvimento do foguetão PGM-11 Redstone. Os soviéticos utilizaram engenheiros alemães capturados para reproduzir documentos e planos técnicos e trabalharam a partir do hardware capturado para fazer o seu clone do foguetão, o R-1. Assim começou o programa soviético do pós-guerra, que levou ao R-7 e ao início da corrida espacial.
- míssil K-13/R-3S (nome do relatório da NATO AA-2 Atoll), uma cópia soviética de engenharia inversa do AIM-9 Sidewinder, foi possível após um AIM-9B de Taiwan ter atingido um MiG-17 chinês sem explodir em Setembro de 1958. O míssil ficou alojado dentro da estrutura, e o piloto voltou à base com o que os cientistas soviéticos descreveriam como um curso universitário de desenvolvimento de mísseis.
- Também durante a Segunda Guerra Mundial, cientistas britânicos analisaram e derrotaram uma série de sistemas de radionavegação cada vez mais sofisticados utilizados pela Luftwaffe para realizar missões de bombardeamento guiado durante a noite. As contramedidas britânicas ao sistema foram tão eficazes que em alguns casos, os aviões alemães foram conduzidos por sinais para aterrar nas bases da RAF desde que acreditavam ter regressado ao território alemão.
míssil BGM-71 TOW: Em Maio de 1975, as negociações entre o Irão e a Hughes Missile Systems sobre a co-produção dos mísseis TOW e Maverick estagnaram devido a desacordos na estrutura de preços, tendo a subsequente revolução de 1979 terminado todos os planos para tal co-produção. O Irão foi mais tarde bem sucedido na engenharia inversa do míssil e agora produz a sua própria cópia, o Toophan.li>China inverteu muitos exemplos de hardware ocidental e russo, desde aviões de caça a mísseis e carros HMMWV, tais como o MiG-15 (que se tornou o J-7) e o Su-33 (que se tornou o J-15). Análises mais recentes do crescimento militar da China apontam para as limitações inerentes à engenharia inversa para sistemas de armas avançados. Durante a Segunda Guerra Mundial, criptógrafos polacos e britânicos estudaram máquinas de encriptação de mensagens “Enigma” alemãs capturadas para pontos fracos. O seu funcionamento foi então simulado em dispositivos electromecânicos, “bombas”, que experimentaram todas as configurações de encriptação possíveis das máquinas “Enigma” que ajudaram à quebra de mensagens codificadas que tinham sido enviadas pelos Alemães.
Redes GenéticasEdit
Conceitos de engenharia reversa foram aplicados também à biologia, especificamente à tarefa de compreender a estrutura e função das redes reguladoras de genes. Eles regulam quase todos os aspectos do comportamento biológico e permitem às células levar a cabo processos fisiológicos e respostas a perturbações. Compreender a estrutura e o comportamento dinâmico das redes de genes é, portanto, um dos maiores desafios da biologia de sistemas, com repercussões práticas imediatas em várias aplicações que estão para além da investigação básica. Há vários métodos de engenharia reversa de redes reguladoras de genes, utilizando a biologia molecular e métodos de ciência de dados. Foram geralmente divididos em seis classes:
- Os métodos de coexpressão baseiam-se na noção de que se dois genes exibem um perfil de expressão semelhante, podem estar relacionados embora nenhuma causa possa ser simplesmente inferida a partir da coexpressão.
- Os métodos de motivo de sequência analisam os promotores de genes para encontrar domínios específicos de ligação ao factor de transcrição. Se um factor de transcrição for previsto para ligar um promotor de um gene específico, uma ligação reguladora pode ser colocada como hipótese.
- Os métodos Chromatin ImmunoPrecipitation (ChIP) investigam o perfil genómico de ligação de factores de transcrição escolhidos para inferir as suas redes genéticas a jusante.
- Os métodos de ortologia transferem o conhecimento das redes genéticas de uma espécie para outra.
- Métodos de literatura implementam mineração de texto e pesquisa manual para identificar ligações de redes genéticas putativas ou experimentalmente comprovadas.
- Métodos de complexos transcritores aproveitam a informação sobre interacções proteína-proteína entre factores de transcrição, alargando assim o conceito de redes genéticas para incluir complexos reguladores transcritores.
Fiabilidade das redes de genes é testada por experiências de perturbação genética seguidas de modelização dinâmica, com base no princípio de que a remoção de um nó da rede tem efeitos previsíveis no funcionamento dos restantes nós da rede.As aplicações da engenharia inversa das redes de genes vão desde a compreensão dos mecanismos da fisiologia vegetal até ao destaque de novos alvos para a terapia anticancerígena.
Sobreposição com a lei de patentesEditar
A engenharia inversa aplica-se principalmente à compreensão de um processo ou artefacto em que a forma da sua construção, utilização, ou processos internos não foi clarificada pelo seu criador.
Os itens patenteados não têm de ser objecto de engenharia inversa para serem estudados, pois a essência de uma patente é que os inventores fornecem eles próprios uma revelação pública detalhada, e em troca recebem protecção legal da invenção que está envolvida. No entanto, um artigo produzido ao abrigo de uma ou mais patentes poderia também incluir outra tecnologia que não esteja patenteada e não seja divulgada. De facto, uma motivação comum da engenharia inversa é determinar se o produto de um concorrente contém violação de patente ou violação de direitos de autor.