4

Are there any decompilers that generate pseudo-code that is interactive? By interactive, I mean you can select a variable and rename it. Or you can select a function call and rename the function. Or you can select an instruction in the disassembly and it will take you to the equivalent line in the pseudo-code.

I know that the HexRays plugin for IDA Pro can do this but are there any alternatives that also have this interactive functionality?

I am looking for an interactive decompiler (meaning the output should be C-like pseudocode) - not an interactive disassembler.

6 Answers 6

9

Short answer: No, there is no other interactive decompiler, at least not for native codes.

Long answer: The Hex-Rays decompiler was created with the idea of interactiveness while all the other decompilers for native code that I know (I'm not talking about Java or .NET) were created as batch tools. The closest to a half interactive decompiler is Snowman, but is not really interactive (unless selecting which function you want to decompile when using the IDA Plugin is considered interactiveness.)

There is a toy "decompiler" (if the name is appropriate, as it's more a translator to pseudo-C than anything else) in Hopper but is neither interactive.

Boomerang, REC, and all the other abandoned decompiler projects that I know, were created either as command line batch tools or had a GUI just to let you select a binary.

So, as said at the beginning: the only interactive decompiler for native codes is the Hex-Rays one.

PS: I don't know why people is not focusing in the question instead of proposing their favourite tools... A disassembler is not an interactive decompiler.

1

The plasma project seems to have an interactive decompiler: https://github.com/joelpx/plasma

From the documentation:

$ plasma -i tests/server.bin
>> v main # or v 0xFFFFFF (replace 0xFFFFFF with the address of the function)
# You are now in visual mode. Press P to define the function. Then press TAB to decompile the function into pseudocode.
# You can hover over a variable using your arrows keys and press R to rename a variable. You can press X to see all xrefs to the variable.
0

Radare2 seems to meet your requirements. It's a command line program, there's no GUI available (but there is a visual mode). It takes a bit of getting used to, I'd recommend the radare2 book to start out.

2
  • You can use the Bokken frontend for radare if a UI is a must: bokken.re/index.html
    – Necrolis
    Jul 19, 2016 at 23:38
  • @Necrolis I thought I remembered there being a GUI for radare2, but I didn't see it in a Google search. Thanks! In general though, the CLI will be more powerful of course. Jul 20, 2016 at 0:51
0

Another interesting alternative to IDA is Medusa, its not fully complete, but may server your needs.

However, its sounds as though you are actually after the decompiler side of things, more than just a labeled CFG, in which case you might want to look at snowman. x64dbg has a plugin that wraps snowman that might do what you need. You can also try REC, though I have never fiddled with it.

0

There are some interesting decompilers from this list: http://www.capstone-engine.org/showcase.html

0

I have been there, I have made the quest. Use vivisect . Contribute to it! I do have binary ninja (signed up for a beta tester) and I have to say: It is nowhere near as functional as vivisect. Binja only has a better graph layout and few more extras on the IL side. That's all. Vivisect had the goal of becoming IDA replacement. And is damn close. However a lot of work is still to be done.

Not the answer you're looking for? Browse other questions tagged or ask your own question.