Papers for

software reverse engineers

Papers whose findings have a practical use for this group, as judged from the abstract. Open a paper to read what it means in practice.

Neural decompilation improves vulnerability detection in executable programs

VulDec: Vulnerability Detection in Binaries via Neural Decompilation

Abstract: Automated vulnerability detection in binary executables is challenging due to the lack of source code and the limited semantic information available at the assembly level. Despite significant progress in machine-learning-based code analysis, the field still lacks methodologies and large, high-quality datasets that provide vulnerable code jointly at assembly- and source-level with precise vulnerability labels. To address this gap, we introduce VulDec, consisting of (i) a new large-scale, carefully curated dataset aligning real-world Assembly-C function pairs with detailed CWE annotations across multiple architectures, and (ii) the first end-to-end framework that leverages neural decompilation for binary vulnerability detection. Tuned LLM-based neural decompilers trained on our dataset achieve strong source-level recovery across architectures (Edit Similarity of approximately 56%, BLEU-4 of approximately 43%), while our tuned LLM-based detectors reach a macro F1-score of 0.61 on an in-distribution realistic test set (3% vulnerability rate). Our findings provide evidence that neural decompilation offers a powerful alternative to conventional low-level binary representations, facilitating robust binary vulnerability detection.

Sat 24 OctCryptography and SecurityMachine LearningSoftware Engineering
The gist
Finding security problems in software when only the machine code is available is hard because this code is low-level and hard to understand. The authors created a big dataset that matches machine code with the original source code and highlights where vulnerabilities occur. They trained neural network models to turn machine code back into source code and then detect vulnerabilities with reasonable accuracy. Their work shows that turning machine code back into source code helps find security issues better than looking at the low-level code alone.
Open → 2610.33716v1

Faultless checks code accuracy for neural decompilers with new method

Faultless: A Program Equivalence Technique for Validating and Evaluating Neural Decompilers

Abstract: Neural decompilers are machine learning models which perform the process of decompilation, lifting code from a lower-level language to a higher one. Neural decompilers offer substantial utility relative to traditional deterministic decompilers because they can probabilistically recover information discarded during lowering, like variable names, types, and control flow structuring. However, they can also make mistakes, producing code that is not equivalent to the original, making it difficult to trust their output. In this work, we introduce Faultless, a program equivalence technique for performing translation validation on neural decompilers. Faultless compares code produced by a deterministic decompiler, which has stronger correctness properties, with that of a neural decompiler. Faultless is also useful for model evaluation, a highly related task, in which the neural decompilers' prediction is compared with a reference solution. Neural decompilation introduces significant challenges to the task of program equivalence which existing techniques are not equipped to handle, including limited extrafunctional context and systematic semantic inconsistencies in decompiled code. Faultless takes a static symbolic execution-based approach with an execution model and memory model designed to handle these challenges.

Mon 28 SeptProgramming LanguagesCryptography and SecuritySoftware Engineering
The gist
Turning low-level computer code back into readable, high-level code is tricky and neural decompilers try to do this with machine learning. But they can make mistakes, which makes trusting their output hard. The authors present Faultless, a technique that compares code from a trusted traditional tool with code from a neural decompiler to see if they mean the same thing. It uses symbolic execution, a way to analyze code paths, to handle differences and errors common in neural decompiled code.
Open → 2609.34089v1

Echo improves source code recovery from optimized binaries with trusted feedback

Echo: Learning-based Matching Decompilation using Trusted Back Translation

Abstract: Neural decompilers can recover readable and recompilable source code from binaries, but their predictions remain difficult to trust. Matching decompilation addresses this problem by searching for source code whose recompiled assembly exactly matches the target, providing stronger evidence of correctness. However, exact matching remains challenging for optimized binaries under unknown compilation configurations. We present Echo, a matching decompilation system based on trusted back-translation. Our key insight is to use compilation not only for verification, but also as trusted feedback to guide iterative search. Echo first uses a domain-specific model to generate candidate programs and compilation configurations. It recompiles these candidates, measures assembly-level similarity, and synthesizes promising code-configuration pairs. Remaining mismatches are then progressively repaired using rule-based rewriting, neural refinement, and reasoning-based refinement. We evaluate Echo on function-level benchmarks and the Mirai malware binary. Compared with the strongest baseline, Echo produces 2.43x more exact matches on average and achieves the highest structural similarity to ground-truth source code. On Mirai, Echo matches 2.75x and 7.4x as many functions as GPT-5.6 and Codex, respectively.

Wed 16 SeptCryptography and SecurityArtificial Intelligence
The gist
Turning machine code back into human-readable source code is very hard, especially when the code is optimized or compiled in unknown ways. The authors introduce Echo, a system that not only guesses possible source codes but also checks them by compiling back and comparing to the original machine code. Echo uses this feedback to fix differences step-by-step, making the recovered source code more accurate and trustworthy. Tests show Echo performs better than previous systems, matching more functions exactly and producing source code closer to the original.
Open → 2609.18706v1

Memorization floor reveals limits of ai code refinement gains

A Memorization Floor for LLM Refinement of Decompiled Code

Abstract: We introduce a memorization floor: a within-item control separating what LLM refinement of decompiler output recovers from its input from what it recovers from its prior. Refine a function, then refine it again from an input whose identifiers have been destroyed, and measure what survives. Because the comparison is within-item, corpus difficulty cannot contribute; it costs twenty API calls. Applied to functions written after our analysis plan was committed, so no released model could have memorized them, it reports two things. Recovery is real: refined output sits +0.072 to +0.137 above an arm-matched permutation null built from its own output vocabulary. But it does not depend on the input we ablate: destroying the input's dataflow changes the naming gain by +0.001 (95% CI [-0.026, +0.026]), and removing type prefixes or permuting names changes it by no more. A second refiner from another vendor, registered in advance and given byte-identical inputs, reproduces this -- twelve contrasts, two models, twelve nulls. Readability stays at ceiling throughout, so a reader is given no signal. The null is bounded, not absolute: contributions under 0.056 are invisible, and the ablation leaves operations intact, so naming from those alone remains a competing reading. No registered hypothesis was confirmed, and we report the five instrument failures behind that in full, including a reassembly harness biased against the treated arm and an equivalence checker we registered without checking it worked on our inputs.

Tue 15 SeptSoftware Engineering
The gist
Improving decompiled computer code using large language models (LLMs) may seem promising, but the authors found that much of what these models add comes from memorizing patterns rather than understanding the input code. By destroying the input's identifying features and testing the model’s ability to recover names, they showed that the improvements don't rely on the input itself. This suggests that current LLM refinements of decompiled code might not truly understand or improve the code as much as hoped. The study carefully tested multiple models and conditions, but no strong benefits based on input code were confirmed.
Open → 2609.17236v1