Engenharia Reversa #1 — Início de uma grande aventura

Leonardo Marciano
7 min readJul 2, 2017

--

Você com certeza já quis ser um hacker/cracker, depois que assistiu Mr Robot ficou super animado para revolucionar o mundo com linhas de código ou até mesmo invadir o sistema de sua escola e mudar suas notas.

Para iniciar nossa aventura de hacker, irei introduzir para você a engenharia reversa, más afinal o que é isso?

I’m Hackermen

A engenharia reversa é o processo de levar um binário compilado e tentar recriar (ou simplesmente entender) a forma original do programa. Um programador inicialmente escreve um programa em uma linguagem de alto nível, como C ++, C#, Java ou Visual Basic (A.k.a Delphi, Pascal, Assembly). Como o computador não fala essas línguas, o código que o programador escreveu é montado de uma maneira que a maquina consiga traduzir, ao qual um computador fala. Este código é chamado de binário, ou o idioma da maquina. Eles não são muito amigáveis, e muitas vezes requer uma grande quantidade de poder cerebral para descobrir exatamente o que o programador tinha em mente.

Para que é utilizada a engenharia reversa?

A engenharia reversa pode ser aplicada em muitas áreas da ciência da computação, mas aqui estão algumas categorias genéricas;

  1. Tornar possível interagir com o código legado (onde você não possui código fonte original).
  2. Romper a proteção contra cópia (ou seja, envie para seus amigos e economize alguns $$).
  3. Estudos sobre virii e malware.
  4. Avaliação da qualidade e robustez do software.
  5. Adicionar funcionalidades ao software existente

A primeira categoria é Código de engenharia reversa para interagir com binários existentes quando o código-fonte não esta acessível… Não vou discutir isso, pois é chato.

A segunda você provavelmente já conhece, que é a quebra do sistema de validação do software, basicamente é remover ou alterar a forma de autenticação para obter o software de graça… Iremos entrar a fundo nesta área

A terceira são os estudos sobre virii e malwares, a engenharia reversa é necessária pois muitos dos programadores de exploits/malwares não descrevem como chegaram a realizar tal, e como conseguir isso(a menos que eles sejam realmente idiotas)…

Este é um campo bastante emocionante, mas requer uma grande quantidade de conhecimento. Não vamos discutir isso até mais tarde.

A quarta categoria é avaliar a segurança e as vulnerabilidades do software. pense em Sistemas Operacionais Windows, a engenharia reversa é usada para garantir que o sistema não contenha nenhuma vulnerabilidade, falhas de segurança e, francamente, para tornar tão difícil quanto possível permitir que crackers quebrem sua segurança.

A categoria final é adicionar funcionalidade ao software existente. Pessoalmente, acho que esta é uma das mais divertidas.
Não gosta dos gráficos usados no seu software de web design? Mude-os. Deseja adicionar um item de menu para criptografar seus documentos no seu processador de texto favorito? Adicione-o. Quer irritar seus colegas de trabalho? edite o ERP deles!

Qual conhecimento é necessário?

Como você provavelmente pode adivinhar, uma grande quantidade de conhecimento é necessário para ser um engenheiro reverso eficaz.
Felizmente, não é necessário um grande conhecimento para “começar” a engenharia reversa, e é aí que eu espero entrar. Dito isto, para se divertir com a reversão e obter algo desses tutoriais você deve, pelo menos, ter uma compreensão básica de como o fluxo do programa funciona (por exemplo, você deve saber o que é um if… então a declaração faz, o que é uma matriz e, pelo menos, visto um programa de Olá Mundo).
Em segundo lugar, entender a sintaxy de Assembly e python é altamente sugerido; más isso você vai aprender durante nossos tutoriais…
Em algum momento você quer se tornar um guru da ASM para realmente saber o que está fazendo, então é sempre bom replicar o explicado para entender o passo-a-passo!

Muito do seu tempo será dedicado a aprender a usar ferramentas. Essas ferramentas são inestimáveis ​​para um Engenheiro reverso, mas também requer aprender atalhos, falhas e idiossincrasias de cada ferramenta. Finalmente, A engenharia reversa exige uma quantidade significativa de experimentação; Tentando com diferentes Compiladores / protetores / esquemas de criptografia, aprendendo sobre programas originalmente escritos em linguagens de programação de diferentes idiomas (mesmo Delphi), decifrando truques de engenharia anti-reversa … a lista continua e continua. No fim deste tutorial adicionei uma seção de “leitura adicional” com algumas fontes sugeridas. Se você realmente quer ser bom na reversão, sugiro que faça algumas leituras adicionais.

Que tipos de ferramentas são utilizadas?

Existem muitos tipos diferentes de ferramentas usadas na reversão. Muitas são específicas dos tipos de proteção que deve ser superado para reverter um binário. Há também várias que apenas facilitam a vida do inversor. E então alguns são o que eu considero os itens “básicos” — aqueles que você usa regularmente. Em sua maior parte, as ferramentas se encaixam
Em algumas categorias:

  1. Disassemblers:

Os ‘desmontadores’ tentam levar os códigos do idioma da máquina no binário e exibi-los de forma mais amigável, eles também extrapolam dados, como chamadas de função, variáveis passadas e cadeias de texto.

Para iniciar, vamos utilizar o IDA(Pode ser instalado gratuitamente, você consegue encontrar em https://www.hex-rays.com/)

2. Debuggers:

Os depuradores são o pão e amanteiga para engenheiros reversos. Eles primeiro analisam o binário, bem como um ‘disassembler debuggers’, então, permite que o inversor repasse o código, executando uma linha por vez e
Investigando os resultados. Isso é inestimável para descobrir como funciona um programa. Alguns depuradores permitem que algumas instruções no código sejam alteradas e depois sejam executadas novamente com essas mudanças no local.
Exemplos de depuradores são Windbg e Ollydbg. Eu quase exclusivamente uso Ollydbg (http://www.ollydbg.de/),
A menos que seja debatido os binários do modo kernel, mas chegaremos a isso mais tarde.

3. Editores Hex:

Os editores Hex permitem visualizar os bytes reais em um binário e alterá-los. Eles também fornecem pesquisa para bytes específicos, salvar seções de um binário em disco e muito mais. Existem muitos editores hexadecimais gratuitos…
Não vamos usá-los muito nesses tutoriais, mas às vezes eles são inestimáveis.

4. PE e editores de recursos:

Cada binário projetado para ser executado em uma máquina Windows (e Linux para esse assunto) tem uma seção muito específica de dados no início, que informa o sistema operacional como configurar e inicializar o programa. Ele conta ao sistema operacional quanto memória irá exigir, o que é compatível com a DLL e com o qual o programa precisa pedir emprestado alguma função, Informações sobre caixas de diálogo e tal. Isso é chamado de executável portátil e todos os programas projetados para ser executado no Windows, precisam ter um.

No mundo da engenharia reversa, esta estrutura de bytes torna-se muito importante, pois dá ao inversor informações sobre o binário. Eventualmente, você quer (ou precisa) mudar essa informação,

Há uma infinidade de visualizadores e editores de PE. Eu uso o CFF Explorer
(Http://www.ntcore.com/exsuite.php) e LordPE
(Http://www.woodmann.com/collaborative/tools/index.php/LordPE), mas você pode se sentir livre para usar o que você se sente confortável.

5. Monitores e analisadores de sistemas

Ao reverter programas, às vezes é importante (e ao estudar virii e malware) para ver o que muda um aplicativo para o sistema; Existem chaves de registro criadas? Existem arquivos .ini? São processos que são criados de maneira separadas?, talvez para frustrar o engenheiro reverso da aplicação? Exemplos de ferramentas de monitoramento do sistema são procom, regshot e process
Feed RSS…
Vamos discutir isso mais tarde no tutorial.

6. Diversas ferramentas e informações

Existem ferramentas que vamos pegar ao longo do caminho, como scripts, descambiamentos, identificadores de embaladores, etc. Também em
Esta categoria é um tipo de referência para a API do Windows. Esta API é enorme e às vezes complicada.
É extremamente útil na engenharia reversa para saber exatamente o que as funções estão fazendo.

7. Gatinhos fofinhos ou cervejas

Agora que você já sabe do básico, vamos botar a mão na massa !

Mesmo que comecemos com pouca experiencia, queria dar-lhe pelo menos um pouco de Reversion neste primeiro tutorial. Incluí um visualizador / editor de recursos neste tutorial!
Chamado XN Resource Editor. É freeware. Basicamente, este programa permite que você veja a seção de recursos em um arquivo .exe, bem como modificar esses recursos. Você pode se divertir muito com ele.

Vamos lá

Primeiro, execute o XN. Clique no ícone de carregamento em cima e clique em Vá até Windows\System32\ e carregue calc.exe
(Você é o local padrão do Windows pode variar.) Você deve ver um monte de pastas disponíveis:

Agora, clique na opção de menu “Científico”. O campo Legenda deve mudar para “&Scientific”. É para dizer-lhe qual é o “Hot-Key”, neste caso ‘S’. Se, em vez disso, queríamos que o ‘e’ fosse o Hot-key, seria assim “Sci & entific”. Então, não gosta do built-in hot-key para calc? Só mudar!

Mas vamos fazer algo diferente: No campo Legenda, substitua o &Scientific por “&Nerd”.
Isso agora mudará a opção de menu para “Nerd” e usará o hot-key ’N’ (Eu olhei através das outras opções para garantir que não exista nenhuma ligação de Hot-Key com a letra N). Você deve fazer isso por todos os
Entradas de menu. Agora, vá até Arquivo (no recurso XN) e escolha “Salvar como …” Guarde sua nova versão do calc
Para um nome diferente (e, de preferência, um local diferente) e depois executá-lo.

Oh men! funcionou!

Claro, você não precisa parar por aí, eu mesmo alterei a ordem dos números da calculadora

Vou fazer isso com todos da área de contabilidade

Como você pode ver, o céu é o limite!

Ao decorrer do tutorial vamos quebrar a criptografia do WannaCry, desbloquear iPhones, e até mesmo inserir senhas novas em roteadores sem ter nenhum acesso ao mesmo, sente-se e venha conferir!

Próximo post: Engenharia Reversa #2 — Introdução ao Olly Debug

Leita também:

https://www.amazon.com.br/Art-Assembly-Language-Randall-Hyde-ebook/dp/B003SNK99I — A arte da linguagem Assembly

Te vejo na próxima!

Creditos:

Leonardo Marciano

Tuts4

R4nd0m

--

--

Leonardo Marciano

Nós sempre nos definimos pela capacidade de superar o impossível. Steemit: @lstark