Dogbolt Decompiler Explorer
(dogbolt.org)- 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
1 comentarios
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.
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.
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.
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.
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.
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.
[1] https://docs.binary.ninja/dev/bnil-overview.html
[2] https://riverloopsecurity.com/blog/2019/05/pcode/ ejemplo
¿Hay algún tutorial de descompiladores bueno y detallado para alguien que no es especialista?
Podríamos meter la salida de dogbolt en godbolt.
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.
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.