Aplicações de engenharia reversa após ofuscação

1. Introdução


Esta publicação tem como objetivo estudar algumas técnicas de engenharia reversa. Todos os materiais são apresentados apenas para fins informativos e não se destinam a ser utilizados para qualquer ganho pessoal.


Assunto da pesquisa


Como exemplo, estudaremos o código da documentação do Atomineer Pro (daqui em diante APD). Este é um plug-in para o Visual Studio projetado para gerar automaticamente comentários nos códigos-fonte. Primeiro, instale este plugin e verifique seu funcionamento. A versão gratuita possui um período de teste e várias restrições de uso durante esse período. Portanto, ao adicionar comentários ao arquivo, o usuário recebe uma mensagem informando que durante o dia você pode processar apenas 10 arquivos

Mensagem 1
imagem

Quando você tenta processar o projeto inteiro, o utilitário exibe uma caixa de diálogo avisando que este comando não está disponível.

Mensagem 2
imagem

Vamos começar


Primeiro, procure no diretório da extensão instalada e localize apenas uma biblioteca dinâmica. Nós precisamos disso. A primeira coisa que faremos é enviá-lo para o descompilador dotPeek do JetBrains.

dotPeek
imagem

Como você pode ver na tela, a biblioteca passou por um ofuscador, as variáveis ​​e métodos foram renomeados e têm nomes como a, b, c, d ... é disso que precisamos. Estávamos procurando exatamente isso. Vamos ver o que pode ser feito.

Parte 1


A primeira coisa que vem à mente é encontrar a linha, mas como a funcionalidade de pesquisa não está no dotPeek, vamos por um caminho diferente. Descompilamos a biblioteca com o ildasm.exe padrão dos Microsoft SDKs. A saída receberá apenas um arquivo de texto. Nele, procuramos o texto da mensagem “ Modo de teste. Por favor, note que o seu ... "

arquivo de texto
imagem

Encontrou um método
Família .method escondeu bool estático e () cil gerenciado
Que pertence à classe CmdDocThisScope. Agora, de volta ao dotPeek.

Título de spoiler
imagem

Então, o que temos. Encontramos um método que exibe uma mensagem de avaliação do APD e, dependendo da condição, retorna verdadeiro ou falso. Encontramos todos os lugares a partir dos quais esse método é chamado

pesquisa de chamadas
imagem

Apenas dois pontos de chamada foram encontrados e esses são os métodos CmdDocThisFile :: ce CmdDocThisScope :: c.

encontrado
imagem

Pelo nome das classes e pelo código do construtor, é óbvio que as classes são responsáveis ​​pelos itens de menu, e a virtualidade do método “c” indica que este é o manipulador de eventos para selecionar o item de menu correspondente pelo usuário (Essas informações serão úteis para nós). É fácil adivinhar que, se o método retornar true, o comando será executado, mesmo que ele mostre uma caixa de diálogo com um aviso.

No início do método CmdDocThisScope :: e, a variável f é incrementada. Abra a janela "IL View" e encontre o código de comando:

IL View


A Wikipedia possui um artigo que descreve essas instruções .

Em seguida, encontre esse método no arquivo da biblioteca APD. Faremos isso usando a ferramenta IDA. Na janela com as funções, encontraremos nosso método e veremos o código já familiar.

IDA


Tendo selecionado a instrução ldsfld, encontramos sua representação binária na janela Hex View

Visão hexadecimal


A descrição da equipe confirma que encontramos o lugar certo.

Wiki


Uma análise mais aprofundada do código desse método e as etapas subsequentes estão além do escopo deste artigo.

Parte 2


Agora, como pesquisadores já experientes, encontramos uma chamada para o diálogo com a mensagem " O comando 'Documentar tudo no projeto' está disponível apenas na versão completa ... ". Este método é CmdDocThisProject :: c

CmdDocThisProject :: c


A classe CmdDocThisProject é responsável pelo comando "Process Project", o método "c" é virtual. E contém apenas uma coisa - é uma chamada para o diálogo com uma mensagem. Sem condições, sem verificações. A pesquisa do código-fonte nos leva ao método CmdDocThisProject :: i, que tem o que esperamos em CmdDocThisProject :: c. Agora, na IDA, podemos encontrar facilmente os métodos necessários e aprender as instruções do CIL


Conclusão


Resta dizer que o artigo deliberadamente deixou manchas brancas para seu estudo independente.

Source: https://habr.com/ru/post/pt444886/


All Articles