Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CodeCut — Um plugin Ghidra para localizar limites de arquivos de objeto. | Kitploit
Ferramentas/GitHubGitHub/jhuapl/codecut
Análise EstáticaEngenharia ReversaAnálise de BináriosAprendizado de Máquina
GitHubjhuapl/codecut

CodeCut

Um plugin Ghidra para localizar limites de arquivos de objeto.

Ver Repositório
13123há 7 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Plugin CodeCut para Ghidra

Plugin Ghidra para GUI DeepCut / CodeCut

Teoria de Funcionamento

O CodeCut permite que um usuário atribua funções a arquivos de objeto no Ghidra e, em seguida, interaja com o binário no nível do arquivo de objeto. As funções são atribuídas a arquivos de objeto definindo o campo Namespace no banco de dados do Ghidra. O DeepCut tenta estabelecer limites iniciais de arquivos de objeto que o usuário pode então ajustar usando a janela da Tabela CodeCut.

Por Que Isso É Útil?

A maioria dos binários tem origem em múltiplos arquivos de código-fonte. Ao fazer engenharia reversa, analistas de RE frequentemente desenvolvem uma noção de quais funções estão relacionadas e, portanto, provavelmente pertenciam ao mesmo arquivo-fonte. O CodeCut permite que o analista desenvolva uma hipótese como "Acho que este bloco de funções são funções do SO." Agora, se houver funções inexploradas nessa região, elas aparecerão na desmontagem e na descompilação como OS::FUN_XXXXXXXX em vez de apenas FUN_XXXXXXXX. Isso leva a uma compreensão mais rápida de para que as funções podem ser usadas quando vistas em contexto.

Instalação do Plugin

Siga os procedimentos normais de instalação de extensões do Ghidra. Copie o zip da extensão CodeCut e DeepCut para $GHIDRA_INSTALL_DIR/Extensions e, em seguida, na janela principal do Ghidra, selecione File -> Install Extensions e marque as caixas CodeCut e DeepCut. O Ghidra informará que precisa ser reiniciado. Agora que o Ghidra exige apenas que os plugins correspondam à versão base em major/minor e não em versões de patch, esperamos lançar apenas versões pares de major/minor.

NOTA: Após reiniciar e carregar uma janela CodeBrowser, o Ghidra informará que encontrou novos plugins e perguntará se você deseja configurá-los. Apenas o CodeCut aparece nesta janela. Isso ocorre porque o DeepCut é um analisador "one-shot" (ele ainda está instalado).

Configurando Caminhos Nativos do Python e Dependências Python

Tanto o CodeCut quanto o DeepCut dependem da extensão nativa PyGhidra e não são compatíveis com Jython. O CodeCut usa Python nativo para adivinhar nomes de módulos. A inferência do modelo do DeepCut é executada em Python nativo.

Dependências Nativas do Python

CodeCut:

  • nltk

DeepCut:

  • torch
  • torch-geometric
  • networkx
  • scipy

Para instalar as dependências, execute:

root@kitploit:~
pip install nltk
pip install torch torch-geometric networkx scipy

usando a instalação do Python vinculada ao seu PyGhidra.

Executando a Análise DeepCut

O DeepCut é melhor executado como um analisador one-shot após a análise automática inicial. Selecione Analysis -> One Shot -> Deepcut. Depois que o DeepCut for executado, você pode visualizar os resultados observando o campo Namespace na visualização Symbol Table.

Usando o CodeCut

Depois que o DeepCut é executado, você pode interagir no nível do arquivo de objeto com a visualização CodeCut Table. Selecione Window -> CodeCut Table para exibir a tabela. A tabela CodeCut é essencialmente um conjunto combinado de tabelas de símbolos, uma para cada módulo.

Você pode fazer o CodeCut adivinhar os nomes dos módulos (com base em referências de strings) escolhendo Analysis -> Guess Module Names na janela da Tabela CodeCut. Isso é útil se o seu executável alvo tiver muitas strings de depuração. O script de adivinhação de nomes tenta encontrar nomes de arquivos-fonte primeiro e, em seguida, recorre a strings (incluindo bigramas e trigramas) que são repetidas várias vezes.

Você pode dividir/combinar arquivos de objeto clicando com o botão direito em um objeto e escolhendo Split Namespace Here / Combine Namespaces. Você pode mover funções entre arquivos de objeto (alterando os limites dos arquivos de objeto) arrastando e soltando-as.

Exportando para C Recompilável

O CodeCut contém duas opções para exportar um módulo completo ou um subintervalo de um módulo como C recompilável sob o menu Export quando você clica com o botão direito em um módulo na tabela CodeCut. Esse recurso é marcado como EXPERIMENTAL e não é bem testado.

O Grafo do CodeCut

O CodeCut agora tem uma opção de grafo para visualizar interações / hierarquia dos módulos dentro de um binário. Adicione namespaces à visualização de grafo clicando com o botão direito em uma função na Tabela CodeCut e escolhendo Add Namespace to Graph. Você pode remover módulos do grafo clicando com o botão direito e escolhendo Show Namespaces in Graph Filter.

Limitações

Cuidado Onde Você Clica

Embora pareça que você pode clicar com o botão direito nos nomes dos módulos no lado direito, o CodeCut está na verdade prestando atenção em qual função está destacada na tabela. Então, por exemplo, se você tiver uma função em object3 destacada e clicar com o botão direito na caixa cinza object2 à esquerda e clicar em Combine/Split ou Rename Namespaces, o CodeCut executará a operação a partir da função que você destacou em object3.

Peculiaridades do Intervalo de Endereços

O CodeCut tenta ordenar os namespaces pelo seu endereço inicial. O CodeCut pode parecer listar os módulos fora de ordem, no entanto, isso geralmente se deve a irregularidades de desmontagem do Ghidra. Por exemplo, digamos que temos um mapa de memória que se parece com:

root@kitploit:~
object2:  0x00010000 - 0x00018000
object3:  0x00018004 - 0x00020000
...
object50: 0x00480000 - 0x00480a00

Digamos que a função em 0x00480000 faz um branch ou salto para um endereço 0x00016008. Este deveria ser um novo ponto de entrada de função, mas se apenas uma função o utiliza, o Ghidra pode não rotulá-lo como um ponto de entrada de função e simplesmente considerá-lo parte de FUN_00480000. Isso significa que o intervalo real de object50 é 0x00016008 - 0x00480a00. E assim, object50 aparecerá entre object2 e object3 na tabela. O CodeCut envia os intervalos dos módulos para o log de aplicação do Ghidra para ajudar na depuração disso. Nesse caso, definir 0x00016008 como uma função fará com que os limites de object50 sejam os valores corretos e object50 aparecerá no lugar certo na tabela.

Definindo Funções Posteriormente

Funções que são definidas após a execução da análise DeepCut são, por padrão, adicionadas ao namespace Global. No futuro, planejamos adicionar um recurso que as adicione automaticamente ao namespace mais próximo, ou fornecer um mecanismo para atribuir mais facilmente funções individuais diretamente a um namespace específico.

Compilação

Instruções específicas de compilação são fornecidas nas subpastas DeepCut e CodeCut.

Baixar ferramenta