Fonte da imagem: pixabay.com

Python é uma linguagem de alto nível. Embora muitos de vocês possam pensar, é uma linguagem de programação, não é. É uma linguagem de script. Não chega nem perto do código ou do idioma da máquina. Então, o que torna o python tão interessante? Se você tem alguma experiência em pentesting ou teve uma conversa com muitos especialistas em segurança da Web ou analisadores de malware, eles sempre sugerem o python como idioma principal para desenvolver malwares ou explorações.

Enquanto algumas pessoas podem preferir C, C ++ ou perl, eu pessoalmente votaria em python. O motivo é que não é apenas útil como ferramenta para escrever um programa, mas também é útil quebrá-lo.

O que é engenharia reversa?

Engenharia reversa é um conceito muito amplo. Não se pode realmente defini-lo com sintaxes simples. O conceito adequado de Engenharia Reversa é dividir um código em partes mais simples, entendê-lo, modificá-lo e aprimorá-lo de acordo com nosso próprio objetivo e, em seguida, remontá-lo para atender às nossas necessidades. Para simplificar um pouco, deixe-me dar alguns exemplos comuns extremos.

Vamos dar um exemplo de um telefone celular Android. Os fabricantes criam uma ROM de estoque e a vendem para seus consumidores. Mas na maioria das vezes, ele contém muitos bloatware e fica lento. Portanto, existem pessoas em sites como XDA e androidcentral que fazem engenharia reversa na ROM, aprimoram e tornam a prova de lag. Um exemplo prático seria o CyanogenMod Rom.

Mas este foi apenas um exemplo para fazer você entender o que é. A engenharia reversa tem o mesmo conceito, mas é muito complicado que apenas modifica uma ROM.

Compilação e Python

Se você possui experiência em Python, sabe que, ao escrever um script python, seja um vírus, carga útil, trojan ou qualquer que seja o arquivo, ele funcionará apenas em computadores nos quais o python está instalado. Então, digamos, eu escrevi um excelente trojan de computador que pode ignorar qualquer antivírus e começo a implantá-lo em um sistema Windows, mas se o sistema Windows não tiver o interpretador python instalado, ele não funcionará. Portanto, é necessário compilar todos os arquivos do script python escrito em um executável e depois implantá-lo no sistema Windows.

Executáveis ​​em engenharia reversa do Windows

Agora você sabe que precisamos compilar scripts python para rodar no Windows, você também deve saber que é necessário um compilador que converta scripts python em um executável. Sim existe. O nome dele é Py2exe. Py2exe é um instalador simples que converte scripts python em programas independentes do Windows. Agora, há também outra ferramenta que converte os executáveis ​​do Windows gravados em python em scripts python. Seu nome é Pyinstaller Exe Rebuilder.

Pyinstaller exe rebuilder é uma ferramenta para recompilar / fazer engenharia reversa de executáveis ​​gerados pelo pyinstaller sem ter acesso ao código-fonte. Quando você inicia o EXE - ele é descompactado na memória. Isso inclui os arquivos .pyc (código python que é convertido em bytecode). Basicamente, o que ferramentas como pyinstaller e py2exe fazem são bibliotecas e dependências de pacotes juntas, para que você possa executar o EXE 'autônomo' sem precisar fazer o download ou preparar a máquina com um intérprete python.

Há também outro kit de ferramentas que o leva muito perto do código-fonte. O nome é PyRetic, que significa Bytecode do Python com Engenharia Reversa. Este kit de ferramentas permite levar um objeto da memória de volta ao código-fonte, sem precisar acessar o bytecode diretamente no disco. Isso pode ser útil se os pyc dos aplicativos no disco forem ofuscados de várias maneiras.

Cursos recomendados

  • Treinamento em Java Hibernate
  • Treinamento de certificação on-line no Java Spring
  • Programa WordPress
  • Treinamento de certificação em Ruby

Engenharia reversa da maneira mais difícil

Agora, a parte acima é fácil de entender e praticamente faz isso quando você adquire o conhecimento básico em python. Mas nem sempre é esse o caso. Às vezes, você não possui nenhuma documentação ou comentário no script python, e também existem arquivos para você entender sozinho. Agora, há um livro incrível dessa parte, mas não vou me concentrar muito nisso.

O nome do livro é "Trabalhando efetivamente com o código legado". O livro é independente do python ou de qualquer outra linguagem e fornecerá uma idéia para a engenharia reversa em quase qualquer idioma. O foco principal, ao tentar entender um pedaço de código, é a razão pela qual você deseja entendê-lo.

Se você deseja fazer engenharia reversa do código para modificá-lo ou portá-lo, a abordagem para ambos seria bem diferente. Assim, instrumentar o código legado, com baterias e andaimes de testes e rastreamento / registro é o caminho crucial no longo e árduo caminho para entender e modificar com segurança e responsabilidade.

Ferramentas de engenharia reversa

Agora, há outro método para facilitar as coisas, que você pode seguir e seguir as etapas acima. Existe um site chamado Epydoc. Neste site, irá verificar o código e criar alguma documentação para ele. O resultado não será tão bom quanto a documentação original, mas pelo menos lhe dará uma idéia de como funciona exatamente. E, ao fazer isso, você pode começar a escrever sua própria documentação e, depois de escrever parcialmente o documento, poderá gerar novamente o documento parcial restante do site para a parte restante.

Você pode até usar a ferramenta IDE para analisar o código. Isso normalmente fornece a conclusão do código, mas, o mais importante, nesse caso, permite clicar com o botão direito do mouse em uma variável para ver de onde ela vem. Isso realmente acelera as coisas quando você deseja entender o código de outras pessoas.

Além disso, você precisa aprender um depurador. Em partes complicadas do código, você precisará percorrê-las em um depurador para ver o que o código realmente faz. O Pythons pdb funciona, mas muitos IDEs possuem depuradores integrados, o que facilita a depuração. O PyReverse do Logilab e o PyNSource de Andy Bulka também são úteis para a geração de diagrama UML.

Há um processo para produzir o modelo de classe UML a partir de uma determinada entrada do código-fonte. Com isso, você pode reverter um instantâneo de sua base de código para classes UML e formar o diagrama de classes ainda mais. Ao incluir o conteúdo do código no modelo visual UML, isso ajuda os programadores ou engenheiros de software a revisar uma implementação, identificar possíveis bugs ou deficiências e procurar possíveis melhorias.

Além disso, os desenvolvedores podem reverter uma biblioteca de códigos como classes UML e construir um modelo com elas, como reverter uma estrutura de coleção genérica e desenvolver sua própria estrutura estendendo a genérica. Neste capítulo, veremos o inverso instantâneo do Python.

Objetos e Primers

Para entender completamente o funcionamento interno do Python, é preciso primeiro familiarizar-se com a forma como o Python compila e executa o código. Quando o código é compilado no Python, o resultado é um objeto de código. Um objeto de código é imutável e contém todas as informações necessárias ao intérprete para executar o código. Uma instrução de código de byte é representada como um valor de um byte opcode seguido de argumentos quando necessário. Os dados são referenciados usando um índice em uma das outras propriedades do objeto de código.

Uma string de código de bytes é assim:

\ x64 \ x02 \ x64 \ x08 \ x66 \ x02

O código de bytes Python opera em uma pilha de itens. Uma extensão mais empreendedora seria tentar descompilar o código de bytes em código-fonte Python legível, completo com nomes de objetos e funções. O código Python pode ser distribuído em formato binário, utilizando o módulo marshal. Este módulo fornece a capacidade de serializar e desserializar objetos de código usando as funções de armazenamento e carregamento.

O formato binário mais comumente encontrado é um arquivo Python compilado (.pyc) que contém um número mágico, um carimbo de data e hora e um objeto serializado. Esse tipo de arquivo geralmente é produzido pelo interpretador Python como um cache do objeto compilado para evitar a necessidade de analisar a fonte várias vezes. Essas técnicas dependem da facilidade de acesso ao código de bytes e às informações de tipo.

Com o código de byte de um objeto de código, a lógica do código pode ser modificada ou mesmo substituída por completo. A extração de informações do tipo pode ajudar na compreensão do design do programa e na identificação de objetivos de função e objeto.

A ofuscação e o fortalecimento do código de byte do aplicativo sempre serão uma corrida entre os implementadores e aqueles que desejam quebrá-lo. Para tentar se defender da recuperação do código de bytes, o primeiro passo lógico é encontrar uma solução de tradução em tempo de execução.

As propriedades de um objeto de código podem ser armazenadas em qualquer formato assinado, criptografado ou ofuscado que seja ofuscado ou traduzido durante o tempo de execução e usado para instanciar um novo objeto. Pode-se até mudar a maneira como as pesquisas de nome de variável funcionam no intérprete para ofuscar as informações de nomenclatura. Ao adicionar uma camada de conversão entre a pesquisa dos nomes reais e os nomes no código-fonte, um desenvolvedor pode reduzir ainda mais as tentativas de reversão.

Conclusão

Agora, depois de ler tudo isso, você pode sentir a necessidade de experimentar algumas das tarifas por aí. Então, aqui estão algumas ferramentas que podem ajudá-lo a fazer a engenharia reversa no seu código python:

  1. Paimei
  1. Sulley
  1. A coleção Carrera
  1. PyEmu
  1. IDAPython
  1. ImmDbg

Todos esses são ótimos pedaços de código, mas o que realmente os torna excelentes é quando são usados ​​juntos. Lembre-se de que essa lista não é de forma alguma, apenas as que eu mais uso e acho que mostram como a flexibilidade do python pode tornar uma tarefa tão complexa, como a engenharia reversa, gerenciável.

Artigos recomendados

Aqui estão alguns artigos que ajudarão você a obter mais detalhes sobre a Engenharia Reversa com Python, basta acessar o link.

  1. 25 perguntas e respostas mais surpreendentes da entrevista em Python
  2. Introdução ao Python e Django para desenvolvimento Web
  3. Quais são os benefícios e limitações do uso de Python?
  4. Carreiras em Python
  5. Ferramentas de engenharia reversa