Radare 0.9.9

June 6, 2015

Today, we’re releasing a new version of radare2, the 0.9.9, codename Almost There. Since you might be a bit too lazy to read every single commit, we’re going to highlight some cool new features!

Numbers

Thanks to more than 50 contributors who issued something like 1700 commits, here is what changed:

$ git checkout 0.9.9 && git diff 0.9.8 --shortstat  
 839 files changed, 156490 insertions(+), 18885 deletions(-)

{pancake} I would like to give a special thanks to all the new contributors that made this release possible. You can find a complete list of them in the AUTHORS file. I am still the main developer, architect and maintainer of the project, but thanks to the increased popularity of the project i’m starting to delegate some tasks and handle the development from a better perspective, teaching newcomers, priorizing features, enforcing the testsuite and much more.

Console

As you know, the current recommended way to use radare2 is its CLI interface. This is why we’re doing our best to polish it. Our Windows user will be delighted to know that radare2 now works great on their platform, and has almost reached feature-parity with real operating systems, with ground-breaking features like arrow-keys support or ^C to issue SIGTERM.

Most of the w32 enhacements were done by Skuater, who fixed and tested some bugs in the windbg plugin, implemented support for FPU and MMX registers on Windows and Linux-x86-3264, enhaced the console input to work almost as well as in linux.

One of our core-contributors happens to be a truecolor fanatic, so now radare2 can support all 16,777,216 colors!

Among various console improvements, you’ll find the new variables scr.wheelspeed and scr.responsive to improve navigation.

We know that the learning curve for radare2 is super-steep, and we’re sorry about this. The good news is that we checked that documentation was available for every single command, and wrote it where it was missing! You can as usual append ? to your commands to get documentation about them.

New architectures

i4004

Let’s go back in time to 1971. At this time, Intel released the first general purpose programmable microprocessor on the market, the i4004

i4004 CPU

It was a blazing-fast CPU, 740 kHz, able to directly address 640 bytes of RAM! So now, 34 years later, radare2 supports this CPU.

LH5801

While we’re back in time, did you know that we’re supporting the good old LH5801?

pocket computer

It’s a 8bit CPU that was used in the first pocket computer!

z80

The previous z80 disassembler was under GPL, had comments in German (Like LibreOffice and systemd!), was huge and a pain to maintain. Thanks to condret, we now have a clean, correct, LGPL-licenced z80 disassembler which is 75% smaller!

Pebble

If you have a pebble watch, you can now disassemble applications with radare2!

Analysis improvement

Added two alternative analysis loops with several levers to tune some options like skipping nops at the begining of the function, detect functions by following calls, handle local variables, ELF PLT and Thumb detection are now supported for ARM and ARM64; local-flags/function-labels are also back for every supported architecture.

PE relocations are now displayed in a sexy way: PE RELOC PE RELOC 2

There is (basic) support for CRIS analysis Cris anal

Also, can you spot Dalvik-related enhancements?

Commands changes

We changed some commands (for good), but since they were cryptic, you probably never used it before, so you won’t even notice the changes. If you do, we would appreciate your feedback.

We also added a new ones, mostly subcommands of p. Can you find them? ;)

Fixing bugs

Thanks to the amazing work of maijin, we now have our (ever-growing) testsuite running on travis to avoid regressions!

Also, jvoisin had fun fixing 75% of our coverity issues, bringing the current total to less than 150!

We also fixed bugs found by shellcheck, cppcheck, valgrind, and more!

ESIL

Remember ESIL? Our IL. Come on.

Anyway, condret has been working hard on it, mainly working in the specs and gamebody support. Nighterman has added features for x86 emulation, pancake for arm and mips and dkreuter for i8051… Emulation, here we come!

Also, congrats to sushant94 for his implementation of an ESIL to REIL translator and dkreuter for his ESIL implementation for 8051! Not bad for a first contribution, heh?

Search

We already wrote about it, but crowell added regular-expressions support to the rop-gadget finder. Also please note that the separator is now ;, and that you must quote the whole command when you use it.

Some people are using radare2 instead of binwalk to run libmagic on unknown files. This is why we optimized a bit the speed and efficiency of the /m command.

ASCII graphs

Remember when we bragged about the awesome ASCII-graph support in radare2? Well, today, thanks to r0nk, we’ll brag again:

Graphs now have awesome colours by default: Graph colours

Of course, colours are supported in the minigraph too!

Coloured minigraph

We’ve got two display mode for graphs edges. You can switch between them with the e key.

Graph edge styles

Teaching

Radare2 is not only used to reverse exotic binaries, or craft ingenious exploits : it’s also used to teach computer science!

Radare2 comes with almost 250 fortunes, and while we think that they are super-fun, some might actually be offensive, or ill-suited for formal presentations. This is why we split them: you can now set cfg.fortunetype to tips, fun, nsfw, or any combination of them. We hope that this will help you to avoid awkward situations while doing a presentation ;)

Since not everyone is fluent with weird instructions set, radare2 comes with an asm.pseudo option, to show instructions in a more obvious way.

You can also try our proto-alpha-preprod decompiler with pdc:

decompiler

Debugger

WinDBG

TheLemonMan added support for WinDBG, the ring-0 debugger of Windows. This means that you can not only debug drivers with radare2, but also virtual machines. Imagine, breaking, modifying and stepping Windows, with radare2!

WinDBG support

Tracing

Thanks to earada, tracing is now working much better and can be displayed in the ascii-art and web graphs.

tracing

Web interface

We already said a lot about our new web interface, by pwntester, but I’m quite sure that you can’t have enough of it:

  • a miminap
  • massive speedup
  • interactive graphs
  • even more contextual menu
  • hexdump
  • projects support
  • type-edition
  • variables renaming
  • debugger support
  • tracing

tracegraph

r2pipe

Since radare2 is a fast-moving target, instead of using traditional-bindings, the recommended way to call radare2 from a foreign language is to use r2pipe, which is roughly an API to communicate with an instance of radare2 using HTTP, PIPEs, TCP sockets or STDIO to run r2 commands and get the output in a string.

We’d like to take this opportunity to remind you that you just have to add j to every single command to get the output in JSON. If you’re parsing raw radare2 input by yourself, you’re going to have a bad time.

Currently, we have stable and mature support for Python (2+3), Go and NodeJS; but also support D, C#, Java, Ruby, Perl, Vala, NewList, Shellscript, Rust…

Packages for r2pipe are available from the python pip, ruby gem, and node.js npm package managers.

r2pipe offers a simple interface for running r2 commands over a pipe, tcp or http connection and get the output in a plain string or a JSON object. Also it have been integrated with rlang, so you can run those scripts from the shell like if it was a plain r2 script:

r2 -i stuff.py /bin/ls
[0x8040580]> . stuff.py

Misc

Most of the radare developers are using vim, but some of us prefer emacs. This is why there are now vim and emacs keybindings in visual mode!

Thanks to Aaron Puchert, we’ve got a new assembler for x86, cleaner, and more efficient! But we are still using the x86.nz assembler plugin which supports more instructions, and bear in mind that you can also use the x86.olly or x86.as.

Ok, what’s next?

It depends of what you’re going to implement of course! Now that we have a fantastic testsuite, it’s way easier to contribute. The next release should focus on improving the debugging capabilities, but since we’re an open-source project, it depends what our contributors are up to.

Misc

Build

Thanks to pancake, build time have been reduced (especially on Windows, where you can expect a 30% reduction!). This is why it only takes 3m37s to build radare2 from git on the UbuntuPhone.

The android application has been updated, you can now build radare2 :

  • on iOS 8.3 and its simulator
  • on latest OSX statically
  • without GPL plugins

TV

Did you know that radare2 was shown on a national (spanish) TV chain thanks to Gabriel Gonzalez from IOActive.

By the way, if you’re using radare2 at work, we’ll be delighted if you let us know about ;)

Bonus screenshots

Edge style comparison Comparison of the two edge styles.

R2 3D logo Awesome stereograms!

Mazda Of course radare2 runs on your Mazda! Yes, it’s a car :)