mahaloz
A talk I did on this at Reverse Con (clipped to the important part): https://youtu.be/VP29biKLoSw?t=891
Many of these decompilers can infer what optimizations occurred by hints/patterns that are left behind.
This can be fundamentally different at times from LLMs, which have shown a degradation on unique architectures. I still believe the best approach will be a mixed method. Get 80% of the way there with traditional methods, and take the last 20% (which is the hardest) home with LLMs.
Based on today's results, IDA Pro is ahead by 15 percentage points, which would mean, statistically, IDA Pro will recover perfect source code for 15% more functions than Ghidra on average.
Kuna is originally Ghidra ported to Rust, but it has changed quite a bit since. The results shown in the screenshot on the site are not a feature in Ghidra, which includes the Switch layout and some of the variable simplification. It's from Ghidra, previously talked about here [1].
> It would be cool to see agentic interpretation of function and variable names.
On DecBench, which I also created last week, you can see just that for Codex and Claude when given only assembly [2]. They dominate, but also have some significant recall problems.
> Why not train an LLM to be a decompiler instead of make one
Over the last two decades, this has been attempted _many_ times [3]. To date, there has been no successful project/paper that can compete with traditional decompilers on fundamental metrics. I speculate this is due to their inability to abstract the many-to-one mapping of optimization to code. This can change, but I desired to take a different approach.
If frontier labs continue to get better, they will become the de facto decompilation users. Why not get LLMs to help LLMs? Design a core decompiler that helps them more than others :).
[1]: https://www.youtube.com/watch?v=VP29biKLoSw
[2]: https://decbench.com/leaderboard/?dataset=sample-set
[3]: https://decompilation.wiki/fundamentals/neural-decompilation...
Decompile binaries to Rust, not C
As well as the research history (slated to be updated in a few days): https://mahaloz.re/dec-progress-2024
Do LLMs Help Humans Reverse Engineer Software?
Paper link: https://www.zionbasque.com/files/papers/dec-synergy-study.pd... Challenges code: https://github.com/mahaloz/dec-synergy-study
However, I also acknowledge that AI can solve many pattern-based problems well. I think a considerable value can be extracted from AI by focusing in on micro decisions in the decompiler process, like variable types, as recent work has.
The Decompilation Wiki: categorized knowledge on decompilation
I feel that without a justification for dropping previously established metrics by the peer review process, you weaken your new metrics. However, I still think this is an interesting paper. It just could be made more legit by thoroughly reading/citing previous work in the area and building an argument for why you may go against it.
[1]: https://net.cs.uni-bonn.de/fileadmin/ag/martini/Staff/yakdan... [2]: https://rev.ng/downloads/asiaccs-2020-paper.pdf [3]: https://www.usenix.org/system/files/sec23winter-prepub-301-b...
We even do this in the angr decompiler, found here: https://github.com/angr/angr/blob/8e48d001e18a913ecd4ed2e995...
Synchronizing Ida, Ghidra, and Binja with BinSync
There is still much more to do, but it's in a state that is usable. Try it out :). I would also love feedback. As a PhD student, this is my first larger design of a software architecture.
Simple bugs still exist in Netgear routers (WAN-Side One-Click)
Show HN: Interactive symbols from your decompiler to your debugger
https://github.com/mahaloz/decomp2dbg
It works on Ghidra, Binja, IDA, and angr-dec. Currently, gdb is the only debugger supported -- best with GEF.
Ty ty, I'll be sure to give credit where credit is due. Ofc Robert Xiao worked on this, lol.