Ivory IT - O Futuro é agora!

Ivory IT - Soluções em tecnologia

Conhecimento é para
ser compartilhado!

para baixo

Temas de interesse:

Engenharia Reversa: como usá-la no desenvolvimento de software?

A engenharia reversa de software possui diversas finalidades, como facilitar a manutenção de sistemas legados e encontrar bugs ou exploits em um programa.
Você já parou para pensar como é feito o trabalho em empresas antivírus? Ou como os desenvolvedores conseguem encontrar e corrigir bugs e falhas de segurança nos programas?

Para esses e muitos outros casos, o trabalho envolve aspectos da engenharia reversa de software, prática baseada em um método secular que busca refazer o passo a passo do desenvolvimento em busca de uma melhor compreensão do funcionamento interno de um produto.

Neste artigo você vai descobrir:

O que é engenharia reversa de software?

A engenharia reversa é um processo que utiliza a razão dedutiva para entender como funciona um dispositivo, sistema ou produto, tendo a princípio poucas informações disponíveis a respeito do seu funcionamento interno. Dentro do universo da tecnologia, então, a engenharia reversa de software é um método para recuperar o design, requerimentos e funções de um programa, através da análise de seu código.

A reengenharia de software, como também é conhecida a prática, é utilizada para uma série de finalidades, a exemplo de:

  • facilitar o trabalho de manutenção de sistemas legados, tornando-os mais compreensíveis e produzindo as documentações necessárias;
  • criar produtos novos, mais baratos e compatíveis do que os atualmente disponíveis no mercado;
  • fazer uma ponte entre informações de diferentes sistemas ou bases de dados;
  • descobrir requisitos não documentados em softwares de prateleira;
  • e também como uma ferramenta de aprendizado para programadores.

Como funciona a engenharia reversa de software?

Para entender como funciona a engenharia reversa de software, é preciso antes compreender como qualquer programa ou aplicação é feito.

Um software é sempre escrito em uma linguagem de programação, como Javascript ou C#. Essa linguagem é legível para outros programadores, mas para ser compreendida pela máquina, ela precisa ser traduzida por um software de programação chamado compilador. É o compilador que converte o código de programação nos “uns” e “zeros” do código binário.

Então, para fazer a reengenharia de software, é preciso reconverter o código binário compilado em um formato mais compreensível para humanos. Isso é feito através de uma ferramenta chamada decompilador, mas hoje em dia já existem soluções como o Computer-aided software engineering (CASE) e outras ferramentas que automatizam a geração de código, facilitando bastante o trabalho da engenharia reversa.

De um modo geral, existem dois componentes nesse trabalho: a redocumentação e a recuperação de design.

  • redocumentação é a criação de uma nova versão do código de programação, normalmente com o intuito de torná-la mais simples, eficiente e/ou fácil de entender. 
  • recuperação de design é o uso da razão dedutiva, a partir de conhecimentos técnicos e da experiência com o produto, visando com isso fazer um caminho reverso pelo seu ciclo de desenvolvimento para entender sua funcionalidade por completo. Na recuperação de design, é feita uma reengenharia do código escrito para retorná-lo à etapa de análise de requisitos, em uma inversão do tradicional método de desenvolvimento em Cascata (Waterfall).

Quais as 5 melhores ferramentas para engenharia reversa de software?

1. x64dbg

x64dbg é, de longe, uma das ferramentas mais completas e sofisticadas para engenharia reversa de software. Com excelente interface gráfica e escrito em código aberto, ele é voltado à programas feitos para Windows, incluindo uma série de funções como decompilação, visualização de código-fonte e suporte para plugins.

2. Bytecode Viewer

Bytecode Viewer é uma ferramenta de reengenharia de software especializada em Java e aplicativos Android (APK). Além de análise de código, ele permite a decompilação dos arquivos, oferecendo uma janela para entender o funcionamento interno dos programas.

3. dnSpy

dnSpy é a melhor ferramenta para engenharia reversa de software em .NET Framework. Com ótimo design e atualizações frequentes, suas funcionalidades são bastante abrangentes, permitindo decompilação, reconstrução e edição de binários .NET.

4. HIEW

Além de um editor hexadecimal, permitindo modificar qualquer arquivo binário, o HIEW possui seu próprio compilador e decompilador, com suporte para formatos como Windows EXE, Linux ELF e ARM.

5. Sandboxie

Sandboxie não é utilizado para editar ou decompilar código, mas ainda assim pode ser uma ferramenta essencial para realizar a reengenharia de software com segurança. Ele cria uma máquina virtual pela qual você pode acessar códigos potencialmente maliciosos, como malwares, sem colocar o seu computador em risco. Assim, o Sandboxie permite compreender esses softwares e encontrar maneiras de combatê-los, sendo portanto uma excelente ferramenta para desenvolvedores de soluções antivírus.

FAQ: Engenharia Reversa de Software

Ainda tem dúvidas sobre como funciona a reengenharia de software? Confira as respostas para algumas perguntas frequentes!

A engenharia reversa de software é ilegal?

Depende. Existem casos legais e ilegais de engenharia reversa de software, sendo necessário portanto analisar as circunstâncias em que a prática ocorre.

Um exemplo legal é fazer adaptações e variações de um software-livre ou open source, como os navegadores Google Chrome e Microsoft Edge, que são ambos baseados no Chromium. Outro exemplo legal de reengenharia de software é converter um driver disponível apenas para Windows em uma versão para Linux, visando com isso permitir que os consumidores utilizem propriamente suas máquinas em diferentes sistemas operacionais.

Mas se a prática estiver explicitamente proibida nos termos e usos do software em questão, ou se a reengenharia tiver um objetivo claramente malicioso, como a pirataria, então sim, esses são casos de usos ilegais da engenharia reversa.

Como garantir uma engenharia reversa de software legal?

Existe um método chamado “clean room” (sala limpa) para recriar um software por completo de forma completamente legal. Um caso famoso dessa técnica envolveu a empresa Phoenix Technologies, que buscou produzir uma BIOS que fosse compatível com computadores IBM.

Primeiro, um time de engenheiros na Phoenix estudou profundamente a BIOS da própria IBM, descrevendo tudo que ela fazia sem utilizar ou referenciar qualquer parte do código original.

Em seguida, um segundo time da empresa, sem nenhum conhecimento prévio do software original da IBM, começou a desenvolver uma BIOS do zero, a partir das especificações do primeiro time.

O resultado foi uma BIOS que, apesar de possuir um código diferente, em termos operacionais seu funcionamento era idêntico ao software proprietário da IBM. Assim, utilizando esse método “clean room”, mesmo que algumas seções do código fossem extremamente similares, a Phoenix não cometeu uma violação de direitos autorais da IBM.

Quais profissões trabalham com engenharia reversa de software?

Existem diversas profissões que utilizam a engenharia reversa de software como uma ferramenta de trabalho. Alguns exemplos disso são:

  • Analistas de malware, que trabalham principalmente em desenvolvedoras de soluções antivírus.
  • Hackers éticos, que possuem certificações específicas, como CEH, para encontrar falhas de segurança em softwares corporativos.
  • Desenvolvedor de exploits, que vasculham um software em busca de erros e bugs.
  • Desenvolvedores de Kernel, profissionais especializados nas chamadas “camadas de baixo nível”, programando as interfaces entre hardware e software.

Com isso, a gente fica por aqui! Ficou com dúvidas? É só escrever nos comentários desse texto.

E para continuar por dentro do universo de desenvolvimento de software, não deixe de se inscrever na newsletter da Ivory!