Skip to content
This repository has been archived by the owner on Sep 7, 2020. It is now read-only.
JohnDMcMaster edited this page Nov 14, 2010 · 16 revisions

UVNet Universal Decompiler: open source by force

This project is currently funded by the generous donation of Sean O’Sullivan through the RPI Center for Open Source Software (RCOS). Thanks!

Ultimately I would like to produce a re-targettable generic decompiler. ie, try to give a crude output for a simple architecture, but also have the ability to tune it for more reasonable output by writing target specific code. In the short term, I will focus on a graphical interactive disassembly environment and the underlying engine.

This application is primarily targeted at embedded platforms. These typically have relatively simple instruction sets that can be easily represented by a simple opcode configuration file. One of the research goals is to try to develop this rapid support model and is implemented in the plugin “uvdasm”. This approach will not be fast or as accurate, but the idea is to try to make new architectures easy to support for at least some basic analysis. The current implementation is in a crude text format and will probably be moved to JSON if/when I work on it some more.

FLIRT support is also under way. Pattern files can be generated from libbfd (binutils) using the uvdbfd plugin and .sig files can be generating using uvpat2sig. Compression and decompression is not supported, but would likely not be hard to implement. The disassembly engine doesn’t currently integrate well with using them for recognition yet, but this should be something useful by itself since you can export them for use in IDA or OllyDbg.

A Qt user interface is in development, but I need to learn how to make custom Qt widgets for it to be effective. Since I have a plugin architecture, this should also work as a UI for other disassembly / reverse engineering libraries as well if plugins are written for them.

For the brave, highly experimental Python bindings are now available. They will likely need quite a bit more polishing to be effective though. I’ll be trying to use them for a library recognition research project as a way to test them out. This will hopefully iron out at least the biggest blocking issues.

Clone this wiki locally