2 pontos por GN⁺ 2023-12-05 | 1 comentários | Compartilhar no WhatsApp
  • O Dogbolt é um Decompiler Explorer que permite enviar um binário e comparar em um só lugar os resultados de vários descompiladores
  • O arquivo enviado é limitado a menos de 2 MB, e há um aviso informando que os binários enviados são armazenados
  • Também há amostras para que seja possível ver como funciona sem precisar enviar um arquivo diretamente
  • As ferramentas integradas incluem angr, BinaryNinja, Boomerang, dewolf, Ghidra, Hex-Rays, RetDec e Snowman
  • Cada nome de ferramenta leva ao site ou repositório, permitindo consultar as informações da ferramenta enquanto compara os resultados

Condições para upload de binários

  • O Dogbolt oferece um fluxo em que o usuário envia um arquivo binário para verificar os resultados da descompilação
  • O tamanho do arquivo deve ser inferior a 2 MB
  • Também é exibido um aviso de que os binários enviados são armazenados, junto com um link para o FAQ

É possível verificar primeiro com amostras

  • Há uma lista de amostras que pode ser consultada sem enviar diretamente um arquivo
  • As amostras foram organizadas para permitir observar lado a lado os resultados de vários descompiladores

Ferramentas de descompilação integradas

1 comentários

 
GN⁺ 2023-12-05
Opiniões no Hacker News
  • Quero dizer obrigado a quem publicou por ter esperado até esta semana. Provavelmente é efeito de ter sido abordado recentemente no C++ Weekly, e é um bom material: https://www.youtube.com/watch?v=h3F0Fw0R7ME
    Até a semana passada, havia problemas sérios de desempenho, mas agora a fila (https://dogbolt.org/queue) parece estar em geral ok. Tirando alguns gargalos longos em que certos decompiladores ficam acumulados, está rodando bem liso, e Josh e Glenn vêm fazendo ótimas melhorias: https://github.com/decompiler-explorer/decompiler-explorer/c...

  • Post relacionado: Decompiler Explorer - https://news.ycombinator.com/item?id=32079227 - julho de 2022, 82 comentários

  • Durante minha pesquisa de doutorado, especialmente quando trabalhava com deep learning para código ofuscado, eu realmente teria precisado disso
    No começo dos experimentos, o Ghidra não se dava bem com multiprocessamento e havia muitos dados para processar, então migrei para o angr. Talvez fosse possível fazer com Ghidra também, mas era muito mais fácil fazer a mesma coisa com angr. Também gosto do nome. Só queria apontar que Compiler Explorer é o nome do projeto e Godbolt é o sobrenome do autor, mas, se já chegamos ao ponto de usar Godbolt como verbo, esse navio já zarpou

    • Eu sei. Da mesma forma, o repositório no GitHub na verdade também é Decompiler Explorer: https://github.com/decompiler-explorer/decompiler-explorer/
    • Fico curioso para saber se houve um bom avanço em desofuscação ou decompilação de código de máquina usando técnicas de aprendizado de máquina
  • Seria bom ter uma ferramenta parecida para explorar lifting de binários para várias representações intermediárias (IR). Por exemplo, Ghidra p-code e sleigh, LLVM Machine IR, Qemu TCG etc.

    • Quando se começa a partir de um binário inteiro, representações intermediárias em geral não são adequadas para uma pessoa examinar pequenos trechos. Acho que esse tipo de abordagem só funciona bem para fragmentos muito pequenos de assembly
      O BNIL, o conjunto de várias camadas de linguagens intermediárias no qual o Binary Ninja se baseia, também pode ser interessante. Dá para ver a forma exposta na UI ou na demo do cloud.binary.ninja
    • O Qemu traduz binários para uma representação intermediária e então trabalha sobre ela. O Valgrind também faz isso, e uma ferramenta de otimização chamada bolt, relacionada ao Facebook, usa a mesma ideia
  • Já que o assunto são decompiladores, fico curioso se escolher o Binary Ninja seria uma opção segura. Ouvi dizer que o IDA é o padrão, mas também é caro para quem quer fazer engenharia reversa como hobby

    • O decompilador do Binja é, em geral, bom. Não é tão maduro quanto IDA ou Ghidra, mas não é um decompilador ruim
      Pessoalmente, acho que a maior vantagem do Binja é sua linguagem intermediária (IL). A IL de alto nível funciona como decompilador, mas também há ILs de baixo e médio nível como etapas entre assembly e código-fonte. Se o resultado do decompilador fica meio estranho, olhar a IL ajuda a entender melhor o que está acontecendo; e a própria IL é muito mais legível que assembly puro, então você acaba usando bastante. Em outras plataformas, quase não há recursos equivalentes de verdade. Ghidra e IDA também têm uma IL cada, mas elas são mais voltadas para leitura por máquina do que para leitura humana, em comparação com a IL legível do Binja
    • Hoje em dia, o IDA Free tem quase todos os recursos do Pro se você só trabalha com x86_64 no Windows/Linux: https://hex-rays.com/ida-free/
      O que falta é scripting em Python, o que faz uma diferença bem grande. Ainda assim, como ferramenta gratuita, é difícil reclamar. IDA e Ghidra têm pontos fortes e fracos e plugins da comunidade diferentes, então provavelmente é melhor usar ambos
    • Sinceramente, é só usar o Ghidra. Ele tem suas quirks, mas é bem bom e open source. Se é suficiente para a NSA usar, provavelmente também é suficiente para uso como hobby
  • Muito bom. Recentemente, trabalhando em um projeto de emulador, estou implementando meu próprio disassembler, e fico pensando o tempo todo em como transformar padrões de código de máquina em uma forma generalizada e depois convertê-los para pseudocódigo parecido com C
    Por isso, ultimamente tenho muita vontade de criar meu próprio decompilador de brinquedo

  • Existe algum tutorial de decompiladores bom e detalhado para não especialistas?

    • Parece haver demanda. Alguém poderia indicar um caminho para referência?
  • Dá para pegar a saída do dogbolt e colocar no godbolt

    • É tradução automática para código de máquina. Em teoria, deveria chegar a um ponto fixo
    • Também daria para treinar um LLM com aprendizado por reforço para restaurar o código original
  • Vendo isso, acho que eles quase nem precisaram convencer outras empresas. Devem ter percebido que binários pequenos e comparações com concorrentes levam a mais negócios
    Parece uma pequena solução perfeita para classificar problemas entre serviços e comparar soluções

    • Na prática, a lógica foi essa mesmo. As duas principais soluções comerciais incluídas, Binary Ninja e Hex-Rays, bancam todos os custos de hospedagem. Para constar, sou um dos cofundadores da Vector 35, criadora do Binary Ninja
      O custo não é exatamente baixo. Rodar decompiladores consome bastante recurso computacional, e é difícil dizer que alguns deles sejam eficientes
  • Queria ter visto quando foi postado no ano passado. É realmente incrível e muito prático