Diaphora has many of the most common program diffing (bindiffing) techniques you might expect, like:
- Diffing assembler.
- Diffing control flow graphs.
- Porting symbol names and comments.
- Addig manual matches.
- Similarity ratio calculation.
- Batch automation.
- Call graph matching calculation.
- Dozens of heuristics based on graph theory, assembler, bytes, functions’ features, etc…
However, Diaphora has also many features that are unique, not available in any other public tool. The following is a non extensive list of unique features:
- Parallel diffing.
- Pseudo-code based heuristics.
- Pseudo-code patches generation.
- Ability to port structs, enums and typedefs.
- Diffing pseudo-codes (with syntax highlighting!).
- Scripting support (for both the exporting and diffing processes).
It’s also actively maintained, and the following is a list of the features that are ‘in the making’:
- Support for compilation units (finding and diffing compilation units).
- Direct integration with Pigaios.
- ‘Machine Learning’ based techniques so reverse engineers can teach Diaphora what is a good match or a bad one, and how to search for more.