# Ghidra

## O que é?

O Ghidra é uma ferramenta open source para a engenharia reversa feita pela agência de segurança nacional dos EUA (NSA) e disponibilizada para o público em 2019.

A ferramenta pode ser baixada pelo [site oficial ](https://ghidra-sre.org/)ou pelo [github](https://github.com/NationalSecurityAgency/ghidra), onde parte do código se encontra.

Uma das grandes vantagens do Ghidra é a ferramenta de *decompile*, que permite que seja visualizado um código "descompilado" de um binário. Essa ferramenta suporta diversas arquiteturas nativamente e existem alguns plugins para adicionar suporte de outras.

Usualmente os binários que serão analisados vão ser das linguagens C/C++, mas também é possível analisar por exemplo binários escritos em Golang, análise que funciona melhor caso tenha plugins específicos para isso.

O Ghidra funciona tanto para Linux como para Windows (p/ Mac também), sem alterações significativas no seu funcionamento básico.

## Criando um novo Projeto

A tela inicial do ghidra é algo semelhante à tela a seguir:

![](https://1857820393-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2BqbbxnmfvPTRrxNQc%2F-M8kSrubWndbCy8wSMdd%2F-M8kUbQDjP682VBICT_V%2Fimage.png?alt=media\&token=7fd9059a-59b2-43a2-8220-4a14d1e4d78d)

Para criar um novo projeto basta selecionar a opção de novo projeto e criar um não compartilhado (dado que a versão compartilhada é feita para ser usada por múltiplos usuários simultaneamente em um servidor), escolher um nome, caminho e criar.

Vai ser criada uma pasta, então você arrasta um binário ou o importa (tecla de atalho i). O formato tende a ser identificado automaticamente, então basta confirmar as seleções, onde uma nova tela vai abrir com diversas informações sobre os metadados do executável. Abra o codebrowser (ou clique 2 vezes no executável) e vá para a tela inicial.

Quando iniciar, clique em analisar para que seja possível obter informações do binário de forma automática. Recomendamos dar uma olhada em cada uma das opções e tentar entender o que elas significam, mas para um uso básico basta deixar tudo na opção padrão.

Uma das janelas mais importantes do programa encontra-se na esquerda, que é onde estarão listadas as funções. Procure pela main ou por funções interessantes, quando selecionar a função que quiser ela automaticamente vai aparecer na tela.

![Janela de símbolos, onde encontram-se as funções](https://1857820393-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2BqbbxnmfvPTRrxNQc%2F-M8kSrubWndbCy8wSMdd%2F-M8kWLcGQX4LxR83yVAb%2Fimage.png?alt=media\&token=4ea098de-08dd-4ccf-965f-e7040244453c)

![O disassembly na tela da esquerda e o código decompilado na tela da direita](https://1857820393-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2BqbbxnmfvPTRrxNQc%2F-M8kSrubWndbCy8wSMdd%2F-M8kWjqmgfIq8EWuy5Eg%2Fimage.png?alt=media\&token=1b61f132-79fe-4c45-bec2-8d30ab227e9e)

As hotkeys estarão na cheatsheet abaixo, mas já saiba que as mais importantes agora no início são L, que serve para renomear objetos selecionados e Ctrl+L, para ajeitar um tipo. (Por exemplo representar várias variáveis seguidas como um vetor)

Clicando duas vezes em uma função entra-se no código dela e Alt+Left volta para o local anterior.\
Caso queira desfazer alguma operação, o clássico Ctrl+Z é utilizado.

## Cheatsheet

Abaixo estão algumas imagens de um cheatsheet (uma "colinha") com as hotkeys mais importantes.

### Load/Import

Essa tabela apresenta as hotkeys para criar, abrir e salvar projetos, além de importar e exportar binários.

![Load Project](https://i.imgur.com/OBrbE8a.png)

### Navegação

Essas são as hotkeys para se movimentar pelo código. (menção pra Alt+Left/Right para voltar ou avançar para locais onde estava anteriormente)

![Navigation](https://i.imgur.com/kYmuMpU.png)

### Marcação (Markup)

Essas hotkeys são muito importantes para deixar o código mais organizado e legível, alterar nome e tipo de variáveis pode deixar um trecho de código bem mais claro.

![Markup1](https://i.imgur.com/YqylOj9.png) ![Markup2](https://i.imgur.com/8e3xSW9.png)

### Pesquisa/Busca

Essas hotkeys são utilizados para fazer buscas no programa, tanto no código (texto), quanto na memória.

![Search](https://i.imgur.com/npi0O8u.png)

### Ajuda/Configurações

Essas são as hotkeys para alterar configurações do ghidra, além da hotkey para o *Help*, que tem informações e explicações de como utilizar o ghidra.

![Help](https://i.imgur.com/OOKxuXA.png)

Link do Cheatsheet completo: <https://ghidra-sre.org/CheatSheet.html>
