2 Punkte von GN⁺ 2023-12-05 | 1 Kommentare | Auf WhatsApp teilen
  • Dogbolt ist ein Decompiler Explorer, mit dem sich durch das Hochladen einer Binärdatei mehrere Decompiler-Ergebnisse an einem Ort vergleichen lassen
  • Hochgeladene Dateien sind auf unter 2 MB begrenzt; außerdem wird darauf hingewiesen, dass hochgeladene Binärdateien gespeichert werden
  • Es werden Beispiele bereitgestellt, damit sich die Funktionsweise auch ohne eigenes Hochladen von Dateien ansehen lässt
  • Zu den angebundenen Tools gehören angr, BinaryNinja, Boomerang, dewolf, Ghidra, Hex-Rays, RetDec und Snowman
  • Die Namen der einzelnen Tools sind mit der Website oder dem Repository verlinkt, sodass sich beim Vergleich der Ergebnisse die Tool-Informationen direkt ansehen lassen

Bedingungen für den Upload von Binärdateien

  • Dogbolt bietet einen Ablauf, bei dem Nutzer Binärdateien hochladen und die Decompiler-Ergebnisse prüfen können
  • Die Dateigröße muss unter 2 MB liegen
  • Es wird zusammen mit einem FAQ-Link darauf hingewiesen, dass hochgeladene Binärdateien gespeichert werden

Zuerst mit Beispielen prüfen

  • Es gibt eine Liste von Beispielen, die sich auch ohne direktes Hochladen einer Datei ansehen lassen
  • Die Beispiele sind dafür gedacht, mehrere Decompiler-Ergebnisse nebeneinander zu betrachten

Angebundene Decompiler-Tools

1 Kommentare

 
GN⁺ 2023-12-05
Meinungen auf Hacker News
  • Ich möchte der Person, die das gepostet hat, dafür danken, dass sie bis diese Woche gewartet hat. Vermutlich hängt das mit der jüngsten Folge von C++ Weekly zusammen, und es ist gutes Material: https://www.youtube.com/watch?v=h3F0Fw0R7ME
    Noch letzte Woche gab es erhebliche Performance-Probleme, aber jetzt sieht die Queue (https://dogbolt.org/queue) größtenteils in Ordnung aus. Abgesehen von einigen längeren Engpässen bei manchen Decompilern läuft es ziemlich reibungslos, und Josh und Glenn haben hervorragende Verbesserungen vorgenommen: https://github.com/decompiler-explorer/decompiler-explorer/c...

  • Verwandter Beitrag: Decompiler Explorer - https://news.ycombinator.com/item?id=32079227 - Juli 2022, 82 Kommentare

  • Während meiner Promotion hätte ich das wirklich gut gebrauchen können, besonders als es um Deep Learning für obfuskierten Code ging.
    Zu Beginn der Experimente harmonierte Ghidra nicht gut mit Multiprocessing, und wegen der großen Datenmengen bin ich auf angr umgestiegen. Vielleicht wäre es auch mit Ghidra möglich gewesen, aber dieselbe Aufgabe mit angr zu erledigen war deutlich einfacher. Der Name gefällt mir auch. Allerdings möchte ich anmerken, dass Compiler Explorer der Projektname ist und Godbolt der Nachname des Autors; aber wenn man Godbolt schon wie ein Verb verwendet, ist der Zug wohl abgefahren.

    • Weiß ich. Ebenso heißt auch das GitHub-Repository tatsächlich Decompiler Explorer: https://github.com/decompiler-explorer/decompiler-explorer/
    • Ich frage mich, ob es mit Machine-Learning-Methoden nennenswerte Fortschritte bei der Deobfuskierung oder Decompilierung von Maschinencode gegeben hat.
  • Es wäre schön, ein ähnliches Tool zu haben, mit dem man Binary Lifting in verschiedene Intermediate Representations (IR) erkunden kann. Zum Beispiel Ghidra p-code und sleigh, LLVM Machine IR oder Qemu TCG.

    • Wenn man von einem vollständigen Binary ausgeht, ist eine Intermediate Representation normalerweise nicht gut dafür geeignet, dass Menschen kleine Ausschnitte betrachten. Das dürfte nur bei sehr kleinen Assembly-Schnipseln gut funktionieren.
      Auch BNIL, das Bündel mehrerer Intermediate-Language-Stufen, auf dem Binary Ninja basiert, könnte interessant sein. In der UI von cloud.binary.ninja oder in der Demo kann man sehen, wie es offengelegt wird.
    • Qemu übersetzt Binaries in eine Intermediate Representation und arbeitet dann darauf. Valgrind macht das ebenfalls, und ein mit Facebook verbundenes Optimierungstool namens bolt nutzt dieselbe Idee.
  • Wo wir gerade bei Decompilern sind: Ich frage mich, ob Binary Ninja eine sichere Wahl wäre. Ich habe gehört, dass IDA der Standard ist, aber für jemanden, der Reverse Engineering als Hobby betreiben will, ist es auch teuer.

    • Der Binja-Decompiler ist insgesamt ziemlich ordentlich. Er ist nicht so ausgereift wie IDA oder Ghidra, aber kein schlechter Decompiler.
      Persönlich sehe ich den größten Vorteil von Binja in seiner Intermediate Language (IL). Die High-Level-IL übernimmt die Rolle des Decompilers, aber zwischen Assembly und Source gibt es auch Low-Level- und Mid-Level-IL. Wenn das Decompiler-Ergebnis etwas merkwürdig ist, kann man anhand der IL besser nachvollziehen, was passiert, und die IL selbst ist deutlich lesbarer als reines Assembly, sodass man sie häufig nutzt. Auf anderen Plattformen gibt es kaum eine wirklich entsprechende Funktion. Ghidra und IDA haben zwar jeweils auch eine IL, aber sie sind im Vergleich zu Binjas menschenlesbarer IL eher maschinenlesbar.
    • IDA Free bietet heutzutage fast alle Pro-Funktionen, wenn man nur x86_64 unter Windows/Linux betrachtet: https://hex-rays.com/ida-free/
      Was fehlt, ist Python-Scripting, und das ist schon ein ziemlich großer Unterschied. Trotzdem ist es schwer, sich über ein kostenloses Tool zu beschweren. IDA und Ghidra haben unterschiedliche Stärken und Schwächen sowie unterschiedliche Community-Plugins, daher ist es wahrscheinlich am besten, beide zu verwenden.
    • Ehrlich gesagt: Nimm einfach Ghidra. Es hat seine eigenen Quirks, ist aber ziemlich gut und Open Source. Wenn es gut genug für die NSA ist, ist es wahrscheinlich auch gut genug fürs Hobby.
  • Sehr schön. Ich arbeite gerade an einem Emulator-Projekt und implementiere selbst einen Disassembler; dabei frage ich mich ständig, wie man Maschinencode-Muster in eine verallgemeinerte Form überführt und dann in C-ähnlichen Pseudocode umwandelt.
    Deshalb habe ich im Moment große Lust, selbst einen Spielzeug-Decompiler zu bauen.

  • Gibt es ein gutes, ausführliches Decompiler-Tutorial, das auch für Nicht-Experten geeignet ist?

    • Nachfrage scheint es zu geben. Kann jemand eine Richtung nennen, an der man sich orientieren kann?
  • Man könnte die Ausgabe von dogbolt einfach in godbolt einspeisen.

    • Das ist maschinelle Übersetzung für Maschinencode. Theoretisch sollte man einen Fixpunkt erreichen.
    • Man könnte ein LLM per Reinforcement Learning darauf trainieren, den ursprünglichen Code wiederherzustellen.
  • Wenn ich das sehe, musste man andere Firmen vermutlich kaum noch überzeugen. Sie dürften erkannt haben, dass kleine Binary-Größen und Vergleiche mit der Konkurrenz zu mehr Geschäft führen.
    Es wirkt wie eine kleine Lösung, die ideal ist, um Probleme zwischen Services einzuordnen und Lösungsansätze zu vergleichen.

    • Genau das war tatsächlich die Argumentation. Die beiden wichtigsten enthaltenen kommerziellen Lösungen, Binary Ninja und Hex-Rays, tragen sämtliche Hosting-Kosten. Zur Einordnung: Ich bin einer der Mitgründer von Vector 35, dem Unternehmen hinter Binary Ninja.
      Die Kosten sind nicht gerade niedrig. Decompiler auszuführen benötigt ziemlich viel Rechenleistung, und insbesondere einige Decompiler kann man kaum als effizient bezeichnen.
  • Schade, dass ich es nicht gesehen habe, als es letztes Jahr gepostet wurde. Wirklich cool und sehr praktisch.