2 puntos por GN⁺ 2023-12-05 | 1 comentarios | Compartir por WhatsApp
  • Dogbolt es un Decompiler Explorer que permite subir binarios y comparar en un solo lugar los resultados de varios decompiladores
  • Los archivos subidos están limitados a menos de 2 MB, y se indica que los binarios subidos se conservan
  • Ofrece muestras para poder ver cómo funciona sin tener que subir un archivo propio
  • Entre las herramientas conectadas se incluyen angr, BinaryNinja, Boomerang, dewolf, Ghidra, Hex-Rays, RetDec, Snowman, entre otras
  • El nombre de cada herramienta enlaza a su sitio web o repositorio, por lo que se puede consultar la información de la herramienta mientras se ven los resultados comparados

Condiciones para subir binarios

  • Dogbolt ofrece un flujo en el que el usuario sube un archivo binario para revisar los resultados de decompilación
  • El tamaño del archivo debe ser menor a 2 MB
  • Se muestra un aviso de que los binarios subidos se conservan, junto con un enlace a las FAQ

Se puede revisar primero con muestras

  • Hay una lista de muestras que se pueden revisar sin subir un archivo propio
  • Las muestras están preparadas para ver lado a lado los resultados de varios decompiladores

Herramientas de decompilación conectadas

1 comentarios

 
GN⁺ 2023-12-05
Opiniones en Hacker News
  • Quiero decir que agradezco que quien lo publicó haya esperado hasta esta semana. Probablemente sea por el efecto de haber sido cubierto recientemente en C++ Weekly, y es buen material: https://www.youtube.com/watch?v=h3F0Fw0R7ME
    Hasta la semana pasada tenía problemas graves de rendimiento, pero ahora la cola (https://dogbolt.org/queue) en general se ve bastante bien. Salvo por algunos cuellos de botella largos en ciertos descompiladores, funciona con bastante fluidez, y Josh y Glenn han hecho un gran trabajo mejorándolo: https://github.com/decompiler-explorer/decompiler-explorer/c...

  • Artículo relacionado: Decompiler Explorer - https://news.ycombinator.com/item?id=32079227 - julio de 2022, 82 comentarios

  • Durante mi investigación doctoral, especialmente cuando trabajaba en deep learning para código ofuscado, de verdad habría necesitado esto.
    Al comienzo de los experimentos, Ghidra no se llevaba bien con el multiprocesamiento y tenía muchos datos que procesar, así que me pasé a angr. Tal vez también habría sido posible con Ghidra, pero hacer lo mismo con angr era mucho más fácil. También me gusta el nombre. Aunque quiero señalar que Compiler Explorer es el nombre del proyecto y Godbolt es el apellido del autor, pero si ya estamos en la etapa de usar Godbolt como verbo, parece que ese barco ya zarpó.

  • Me gustaría que existiera una herramienta similar para explorar el levantamiento de binarios a varias representaciones intermedias (IR). Por ejemplo, Ghidra p-code y sleigh, LLVM Machine IR, Qemu TCG, ese tipo de cosas.

    • Cuando se parte de un binario completo, las representaciones intermedias normalmente no son adecuadas para que una persona revise fragmentos pequeños. Creo que ese enfoque funcionaría bien solo con fragmentos muy pequeños de ensamblador.
      BNIL, el conjunto de lenguajes intermedios en varias etapas sobre el que se basa Binary Ninja, también podría ser interesante. Se puede ver expuesto en la UI o la demo de cloud.binary.ninja.
    • Qemu traduce el binario a una representación intermedia y luego trabaja sobre ella. Valgrind hace lo mismo, y una herramienta de optimización llamada bolt, relacionada con Facebook, usa la misma idea.
  • Ya que salió el tema de los descompiladores, me pregunto si elegir Binary Ninja sería una opción segura. He oído que IDA es el estándar, pero también es caro para alguien que quiere hacer ingeniería inversa como hobby.

    • El descompilador de Binja en general está bien. No es tan maduro como IDA o Ghidra, pero no es un mal descompilador.
      Personalmente, creo que la mayor ventaja de Binja es su lenguaje intermedio (IL). El IL de alto nivel cumple el rol de descompilador, pero también ofrece IL de bajo y medio nivel como etapas entre el ensamblador y el código fuente. Si el resultado del descompilador se ve raro, mirar el IL ayuda a entender mejor qué está pasando, y el IL en sí es mucho más legible que el ensamblador puro, así que uno termina usándolo mucho. En otras plataformas casi no hay una función equivalente adecuada. Ghidra e IDA también tienen cada uno un IL, pero frente al IL legible para humanos de Binja, se parecen más a algo legible para máquinas.
    • Hoy en día, IDA Free tiene casi todas las funciones de Pro si solo vas a trabajar con x86_64 en Windows/Linux: https://hex-rays.com/ida-free/
      Lo que falta es scripting en Python, y eso sí es una diferencia bastante grande. Aun así, es difícil quejarse tratándose de una herramienta gratuita. IDA y Ghidra tienen fortalezas y debilidades distintas, además de plugins de la comunidad diferentes, así que probablemente convenga usar ambos.
    • Honestamente, simplemente usa Ghidra. Tiene sus quirks particulares, pero es bastante bueno y es open source. Si es suficiente para la NSA, probablemente también sea suficiente para usarlo como hobby.
  • Muy bueno. Últimamente estoy trabajando en un proyecto de emulador e implementando mi propio desensamblador, y no dejo de pensar en cómo convertir patrones de código máquina a una forma generalizada y luego transformarlos en pseudocódigo parecido a C.
    Por eso últimamente me dan muchas ganas de hacer mi propio descompilador de juguete.

  • ¿Hay algún tutorial de descompiladores bueno y detallado para alguien que no es especialista?

    • Parece que hay demanda. ¿Alguien podría señalar una dirección que sirva como referencia?
  • Podríamos meter la salida de dogbolt en godbolt.

    • Es traducción automática para código máquina. En teoría debería llegar a un punto fijo.
    • También se podría entrenar un LLM con aprendizaje por refuerzo para que restaure el código original.
  • Al ver esto, parece que casi no habría hecho falta convencer a otras empresas. Se habrán dado cuenta de que el tamaño pequeño de los binarios y la comparación con competidores se traducen en más negocio.
    Parece una solución pequeña ideal para clasificar problemas entre servicios y comparar soluciones.

    • De hecho, esa fue la lógica. Las dos principales soluciones comerciales incluidas, Binary Ninja y Hex-Rays, cubren todos los costos de hosting. Como dato, soy uno de los cofundadores de Vector 35, la empresa que creó Binary Ninja.
      Los costos no son especialmente bajos. Ejecutar descompiladores consume bastantes recursos de cómputo y, en particular, cuesta decir que algunos descompiladores sean eficientes.
  • Ojalá lo hubiera visto cuando lo publicaron el año pasado. Es realmente genial y muy práctico.