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
Ponce — Vencedor do concurso de plugins da IDA 2016! Execução Simbólica a um clique de distância! | Kitploit
Ferramentas/GitHubGitHub/illera88/ponce
Engenharia ReversaDepuradoresAnálise de MalwareCTFAnálise de Binários
GitHubillera88/ponce

Ponce

Vencedor do concurso de plugins da IDA 2016! Execução Simbólica a um clique de distância!

Ver Repositório
1.6k85há 1 anoRevisado 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
Site

Build for Windows Build for OSX Build for Linux

Ponce

Ponce (pronunciado [ 'poN θe ] pon-they ) é um plugin do IDA Pro que fornece aos utilizadores a capacidade de realizar análise de contaminação (taint analysis) e execução simbólica sobre binários de forma fácil e intuitiva. Com o Ponce, está a um clique de obter todo o poder da execução simbólica de ponta. Totalmente escrito em C/C++.

Porquê?

A execução simbólica não é um conceito novo na comunidade de segurança. Existe há muitos anos, mas só por volta de 2015 é que projetos open source como o Triton e o Angr foram criados para responder a esta necessidade. Apesar da disponibilidade destes projetos, os utilizadores finais são muitas vezes deixados a implementar casos de uso específicos por si próprios.

Respondemos a estas necessidades criando o Ponce, um plugin IDA que implementa execução simbólica e análise de contaminação dentro do desassemblador/debugger mais utilizado por engenheiros reversos.

Instalação

O Ponce funciona com binários x86 e x64 em qualquer versão do IDA >= 7.0. Instalar o plugin é tão simples como copiar os ficheiros apropriados das últimas builds para a pasta plugins\ no seu diretório de instalação do IDA.

Certifique-se de que utiliza o binário do Ponce compilado para a sua versão do IDA para evitar incompatibilidades.

Suporte de SO

O Ponce funciona nativamente no Windows, Linux e OSX!

Casos de uso

  • Desenvolvimento de exploits: O Ponce pode ajudá-lo a criar um exploit de forma muito mais eficiente, pois o desenvolvedor de exploits pode ver facilmente que partes da memória e que registos controla, bem como possíveis endereços que podem ser aproveitados como gadgets ROP.
  • Análise de malware: Outra utilização do Ponce relaciona-se com código malicioso. Analisar os comandos que uma determinada família de malware suporta é facilmente determinado ao simbolizar um comando simples conhecido e negando todas as condições onde o comando está a ser verificado.
  • Reversão de protocolos: Um dos usos mais interessantes do Ponce é a possibilidade de reconhecer números mágicos (magic numbers), cabeçalhos ou mesmo protocolos inteiros necessários para entrada de utilizador controlada. Por exemplo, o Ponce pode ajudá-lo a listar todos os argumentos aceites para um binário de linha de comandos ou extrair o formato de ficheiro necessário para um analisador de ficheiros específico.
  • CTF: O Ponce acelera o processo de engenharia reversa de binários durante CTFs. Como o Ponce está totalmente integrado no IDA, não precisa de se preocupar com o tempo de configuração. Está pronto a ser utilizado!

O plugin será executado automaticamente, guiando-o pela configuração inicial na primeira vez que for executado. A configuração será guardada num ficheiro de configuração, para que não tenha de se preocupar novamente com a janela de configuração.

Modos de utilização

  • Motor de contaminação (Tainting engine): Este motor é utilizado para determinar, a cada passo da execução do binário, que partes da memória e registos são controláveis pela entrada do utilizador.
  • Motor simbólico: Este motor mantém um estado simbólico dos registos e de parte da memória a cada passo no caminho de execução de um binário.

Exemplos

Negar e injetar uma condição

No próximo gif podemos ver a utilização da contaminação automática e como podemos negar uma condição e injetá-la na memória durante a depuração:

  • Selecionamos o motor simbólico e definimos a opção para simbolizar argv.
  • Identificamos a condição que precisa de ser satisfeita para ganhar o crackMe.
  • Negamos e injetamos a solução sempre que um byte da nossa entrada é verificado contra a chave.
  • Finalmente, obtemos a chave elite que foi injetada na memória e, portanto, alcançamos o código Win.

O código fonte do crackme pode ser encontrado aqui

crackmexor_negate_and_inject

Usando o motor de contaminação para rastrear entrada controlada pelo utilizador

Neste exemplo podemos ver o uso do motor de contaminação com o cmake. Estamos:

  • A passar um ficheiro como argumento para o cmake para que ele o analise.
  • Selecionamos que queremos usar o motor de contaminação.
  • Contaminamos o buffer que ```fread()```` lê do ficheiro.
  • Retomamos a execução sob controlo do debugger para ver onde a entrada contaminada é movida.
  • O Ponce renomeará as funções contaminadas. Estas são as funções sobre as quais o utilizador tem influência, não as funções simplesmente executadas.

cmake_tainting_fread

Usar Negar, Injetar e Restaurar

No próximo exemplo estamos a usar o motor de snapshot:

  • A passar um ficheiro como argumento.
  • Selecionamos que queremos usar o motor simbólico.
  • Contaminamos o buffer que ```fread()```` lê do ficheiro.
  • Criamos um snapshot na função que analisa o buffer lido do ficheiro.
  • Quando uma condição é avaliada, negamo-la, injetamos a solução na memória e restauramos o snapshot com ela.
  • A solução será "válida", satisfazendo assim as condições existentes.

fread_test_negate_restore_inject O código fonte do exemplo pode ser encontrado aqui

Utilização

Nesta secção listaremos as diferentes opções do Ponce, bem como os atalhos de teclado:

  • Aceder à configuração e às janelas de contaminação/simbólica: Edit > Ponce > Show Config (Ctl+Shift+P e Ctl+Alt+T)

2016-09-15 11_39_08-configuracion

  • Ativar/Desativar o rastreio do Ponce (Ctl+Shift+E)

2016-09-15 11_31_34-

  • Simbolizar/contaminar um registo (Ctl+Shift+R)

2016-09-15 11_32_32-

  • Simbolizar/contaminar memória. Pode ser feito a partir da IDA View ou da Hex View (Ctl+Shift+M)

2016-09-15 11_32_52-ida - testproject idb testproject exe c__users_default default-pc_documents_vi2016-09-15 11_33_10-taint _ symbolize memory range

2016-09-15 12_09_11-inicio

  • Resolver fórmula (Ctl+Shift+S)

2016-09-15 11_35_11-

  • Negar e Injetar (Ctl+Shift+N)

2016-09-15 11_34_44-

  • Negar, Injetar e Restaurar Snapshot (Ctl+Shift+I)

2016-09-15 11_47_19-

  • Criar Snapshot de Execução (Ctl+Shift+C)

2016-09-15 11_37_40-

  • Restaurar Snapshot de Execução (Ctl+Shift+S)

2016-09-15 11_38_10-

  • Eliminar Snapshot de Execução (Ctl+Shift+D)

2016-09-15 11_38_23-

  • Executar Nativo (Ctl+Shift+F9)

2016-09-15 12_07_10-

Triton

O Ponce depende do Triton framework para fornecer semântica, análise de contaminação e execução simbólica. O Triton é um fantástico projeto Open Source patrocinado pela Quarkslab e mantido principalmente por Jonathan Salwan com uma biblioteca rica. Gostaríamos de agradecer e apoiar o trabalho do Jonathan com o Triton. És demais! :)

Construção

Desde o Ponce v0.3 que mudámos o processo de compilação para usar CMake. Com isto unificamos a forma como a configuração e construção acontece para Linux, Windows e OSX. Agora suportamos fornecer feedback no pseudocódigo sobre instruções simbólicas ou de contaminação. Para esta funcionalidade funcionar, precisa de adicionar hexrays.hpp à sua pasta include do IDA SDK. O hexrays.hpp pode ser encontrado em plugins/hexrays_sdk/ no seu caminho de instalação do IDA. Se não adquiriu o decompilador hex-rays, pode ainda assim construir o Ponce usando -DBUILD_HEXRAYS_SUPPORT=OFF. Usamos Github actions como nosso ambiente de CI. Consulte os ficheiros de action se quiser perceber como o processo de construção acontece.

FAQ

Porquê o nome Ponce?

Juan Ponce de León (1474 – Julho de 1521) foi um explorador e conquistador espanhol. Descobriu a Florida nos Estados Unidos. O plugin IDA ajudá-lo-á a descobrir, explorar e, esperemos, conquistar os diferentes caminhos num binário.

O Ponce pode ser usado para analisar binários do Windows, OS X e Linux?

Sim, pode usar nativamente o Ponce no IDA para Windows ou anexar remotamente a uma máquina Linux ou OS X e usá-lo. Na próxima versão do Ponce suportaremos nativamente o Ponce para as versões do IDA para Linux e OS X.

Quantas instruções por segundo o Ponce consegue processar?

Nos nossos testes, conseguimos processar 3000 instruções por segundo. Planeamos usar o tracer PIN que o IDA oferece para aumentar a velocidade.

Algo não está a funcionar!

Abra uma issue, resolveremos ASAP ;)

Adoro o teu projeto! Posso colaborar?

Claro! Por favor, faça pull requests e trabalhe nas issues abertas. Pagaremos com cervejas pela ajuda ;)

Limitações

A execução concólica e o Ponce têm alguns problemas:

  • Carregamento/escrita de memória simbólica: Quando o índice usado para ler um valor de memória é simbólico, como em x = array[symbolic_index], surgem alguns problemas que podem levar à perda do rasto da entrada controlada pelo utilizador contaminada/simbolizada.

  • O Triton não funciona muito bem com instruções de ponto flutuante.

  • A execução concólica apenas analisa as instruções executadas. Isso significa que o rastreio simbólico é perdido em casos como o seguinte:

    root@kitploit:~
    int check(char myinput)  // Input é simbólico/contaminado
    {
    int flag = 0;
    if (myinput == 'A')  // Esta condição é simbólica/contaminada
      flag = 1
    else
      flag =- 1;
    return flag; // flag não é simbólico/contaminado!
    }
    

Autores

  • Alberto Garcia Illera (@algillera) [email protected]
  • Francisco Oca (@francisco_oca) [email protected]
Baixar ferramenta