Hopper Disassembler

The MacOS X Dedicated Disassembler, Decompiler and Debugger

1 note

Hopper SDK Advances

I’m working hard to make the public SDK available ASAP.

Hopper disassembling an Amiga executable!

At the moment, it is possible to write plugins to add support for custom file format or CPU. A tutorial will be wrote to explain how to write a plugin that loads Amiga Hunk files, and another to explain how to write a plugin to add basic support of the Motorola 68000 CPU.

Stay tuned!

4 notes

Hopper Disassembler v3

At last, it’s almost here!

I’ve worked like crazy to improve the current version of Hopper. This version represents a lot of things for me. It will be the very first version released since I decided to become an independent developer.

I’ve tried to summarize in this post, all the information that comes to my mind, however, I might have forgotten a few points. Feel free to contact me with any questions!

New Features

One of the major new features will unfortunately remain invisible; Indeed, most of the existing code have been rewrote, and Hopper is now far more easier to maintain. This is the huge benefit from the transition from a spare time project to a real commercial product!

A Whole New Core

The refactoring process allowed me to prepare a very important upcoming feature: the core is no longer dependent on a specific processor! My final goal is to be enable developers to write their own CPU support for instance. A private SDK is almost ready, and I’ll do my best to make it public as soon as possible.

The refactoring allowed me to clearly identify some analysis mistakes. Hopper is now far more accurate when it proceeds to its first auto analysis! The analysis is faster, and Hopper now recognizes more kinds of procedures than before. Also, it handles stack variables directly accessed with the RSP register for instance, rather than only relying on RBP.

The first new processor to appear in Hopper is the awaited AArch64. At this time, you can disassemble binaries targetting this processor, but cannot decompile them yet. This feature will come later in a free update.

The file loaders have been improved: for instance, the Mach-O loader now correctly handles segments and sections. It handles the relocations and the external symbols in a more proper way. And it’ll even comment the Mach-O header, and the Objective-C sections for you, providing tons of useful information on classes, protocols, categories… The ELF loader has been improved as well.

With this new version, you can now tell Hopper how to handle some switch / case constructions: in most cases, Hopper is able to find switch statements by itself, but sometimes, when it’s too difficult, it might not. Now, when you see instructions like jmp REGISTER, you can click on the Set Switch/Case Hint button of the inspector, and tell to Hopper where to find the jumptable, its size, and the kind of values will be found there! Hopper can now display a list of problems encountered during the analysis.

My favorite feature: the unlimited undo / redo. It seems so common to find such a feature in software we use everyday, but it was really difficult to implement something like that into Hopper, but the benefit justifies the cost! And I can say that it really changes the way you work with a tool like Hopper.

Hopper now features an hexadecimal editor. This editor is very basic, but it does the job. And, it even works with the undo / redo feature…

On the long list of the little enhancements, you will find that you can now select arbitrary text, not just the whole line as in the past. You can transform an area directly into ARM or Thumb code, without the need to use the toggle. You can still jump at a given address, and also at a given offset in the file. The find dialog has been enhanced to be able to proceed to case insensitive searches, and to be more Mac friendly (you can for instance use Cmd+E to select the text you want, and directly do Cmd+G). And a final one: Hopper can now load your dSYM debug files.

A Refined UI

The user interface has been greatly enhanced thanks to the new inspector panel, which appears on the right side of the main window. This panel will gives you tons of contextual information on the area you are exploring. From there, you’ll be able to set comments, change the appearance of the operands of an instruction, see the list of references to and from an instruction, and so on…

A great new feature is the new tag system. You can now create arbitrary tags, and put them either on an address, a basic block of a procedure, or on the whole procedure. To illustrate its benefits, Hopper now automatically creates a set of tags when it parses an executable. For instance, it will create an entry point tag on each addresses that will be called by the system during the loading process of the binary (the main entry point itself, in addition to all the addresses declared in the various MOD_INIT/MOD_TERM sections), and also tags each implementation of each method within Objective-C classes! This makes it really convenient to navigate through the methods of a program written in Objective-C! You can now also give colors to addresses, which is very convenient to quickly visualize the code!

I brought back a feature in the control flow graph view: you can now move the basic blocks, or even have squared arrows instead of the default spline arrows.

The "Bad" News

Unfortunately, these news comes along with some bad ones…

The price…

Hopper was first developed in my spare time, whilst I was working for another company on a totally different product. In the beginning, I decided to opt for the French status of auto-entrepreneur, which allowed me to continue to work on both projects, without paying too much tax. A few months back, I left my job, and had to change my status for the standard SARL scheme; and now, it means that taxes are simply three times higher than before. This is why I had to raise the price of Hopper…

So, there will be two kind of licenses:

  • the Personal License which is equivalent to the license scheme of Hopper v2: the license you buy is owned by you, and you can install it on any computer you own (physical or virtual). This is the choice you should make if you’re a hobbyist, or an independent developer. This license will be sold $89, or 65€ per user.
  • The Computer License which is tied to the hardware; in this case, anyone who has access this specific computer is allowed to use Hopper. This license scheme is clearly intended more for the companies. This license will be sold $169, or 125€ per computer.

Please note that the product is exactly the same in both cases, and there are absolutely no restrictions for commercial or professional use of Hopper for any of the two license schemes.

The supported platforms…

Disclaimer: this is not a definitive choice…

Today, I’m all alone to write the code, the website, handle the sales, the structure, and everything else… this is a huge amount of work! Really!

For the third version of Hopper, I really wanted to improve the user experience. I had a lot of ideas that I couldn’t implement in the OS X version, only because it would be too difficult to reproduce under Linux and Windows; and, from a purely technical point of view, the Hopper’s core is written in Objective-C, which is not a big issue under Linux, but a real problem for the Windows version. I finally came to the conclusion that it was not possible to continue that way…

This is why only OS X will receive the v3 upgrade at this time. A Linux version may come later this year. Unfortunately, the Windows version is unlikely to be released anytime soon… see EDIT note below

But, it does not mean that I won’t be working on the Linux and Windows versions anymore! I’ll continue to fix, and (slightly) improve Hopper v2.

And, to be perfectly clear, I already started to work on my own Objective-C runtime for Windows… If this project comes to life, I’ll release its source code on GitHub, and port Hopper v3 to Windows…

EDIT 0200PM: a solution is being discussed with the maintainer of the ObjFW project… Maybe the Windows version will remain finally…

The Mac AppStore

Disclaimer: this is not a definitive choice either…

I really appreciate the fact that the store allowed me to distribute a program and rapidly gain visibility, but now, it has become very difficult to distribute a program like Hopper on the MAS. There are too many restrictions, the main one being the sandboxing mechanism, obviously…

And what about the Apple tax… When one buys a copy of Hopper on the MAS, I give approximately 40 to 45% of the price to Apple (30% of the price without VAT).

This is why I will not distribute Hopper Disassembler v3 in the Mac AppStore initially. If too many users feel the need to see Hopper distributed in the MAS, I’ll reconsider my decision.

About the current users

As I promised to do so, here is the deal: once Hopper v3 will be online, a new menu item will appear in your copy of Hopper v2 (if your version of Hopper v2 is up to date, ie at least 2.8.8. The menu is updated only once a day, so, if it does not show up, just try again in 24 hours). The system will validate your license, send it to my server, and generate a promotional code for Hopper v3; the price depends on the purchase date of Hopper v2. This is a completely automatic process, and here is how it works:

  • if you purchased Hopper for Mac after (including) january 1st 2014 00:00 GMT, you’ll receive a promotional code for a FREE copy of Hopper v3.
  • if you purchased your version between (including) November 1st 2013 00:00 GMT and (excluding) January 1st 2014, you’ll receive a discount of 75% on Hopper v3.
  • if you purchased before November 1st 2013 00:00 GMT, you’ll receive a discount of 50%.

Final Word

I hope that I successfully gave a better understanding about the current status of the project. And now, the obligatory ETA :)

Hopper Disassembler v3 for Mac is planned to be released on February 14th 2014 at 01:00 PM GMT.

See you soon!

0 notes

Hopper 2.8.1

A new version of Hopper is available!

This version focus essentially on stability, and the Python interpreter enhancement.

Here is the mandatory changelog:

  • entire rewrite of the Python part, resulting in a more stable application,
  • added Python functions and classes (Procedure BasicBlock),
  • warn the user if an action is about to delete a customized procedure,
  • fix presentation issues in the debugger window (memory view),
  • fix issues with the side bar not being refreshed when a label changes its name,
  • you can now define the working directory and arguments of the debugged program,
  • the three versions of Hopper now shares more code,
  • many bug fixes and little enhancements…

0 notes

Hopper 2.7.16 is now available!

Here is the changelog:

All platforms:

  • fix an issue with the decompiler where some variables was wrongly removed,
  • fix an issue while disassembling the “movsxd” instruction,
  • fix an issue with instructions which read bytes from memory with a displacement > 256,
  • fix an issue with label names in decompiler,
  • better recognition of switch/case,
  • unified search window.

Linux and Windows:

  • GDB backend (but only for OS X remote executables at the moment! Linux server is on its way…),
  • Color schemes and fonts.

0 notes

Good news, the pseudo-code window will no more be modal. And more: the window is now editable :)

1 note

Working on Linux and Windows versions!

My next goal is to bring these versions to the same level than the OS X version.

At the moment, the preferences window has been completed with color schemes:

The work on the GDB backend as been started, and I’m able to control a Mac GDB server from a Linux computer! The backend is still at its early age, but things are taking form!

1 note

Hopper 2.7.14

The very first update of Hopper has just been released! (and submitted to Apple for review, for the Mac App Store customers)

This version is very important for me, as this is the first one since I turned (almost) full time on Hopper. The fact is that I have to develop some other side project at the moment, just because Hopper is not sufficient for me to eat, but it’s taking the right way! I have more time to develop, more time to track bugs and add new features, and that’s great!

Here is the changelog:

  • Add shortcuts to navigation items, like “Next Code”, “Next Unexplored”,
  • Change some behavior for easier navigation,
  • Improve the ARM decompilation (handles ARM conditional instructions),
  • Added a control to easily change EFLAGS value in the debugger,
  • Can now open a document from command line under Windows and Linux,
  • Windows users can now choose the installation path of Hopper,
  • Fix some issue while parsing ELF32 files,
  • Fix PageUp/PageDown keys under Windows and Linux,
  • Fix some crashes in the decompiler,
  • Fix some memory leaks,
  • Fix some graphical issues with custom fonts on OS X,
  • Small various improvements.

1 note

It has been a while since the last time I updated this blog!
Many things have changed since then, and I have some good news for you.
The first one (and, by far, the most important, at least, for me :)) is that Hopper will become my full time job! That’s right, from the end of the next month, I’d be able to spent as much time as I want on developing Hopper. I expect things to go really faster!
The second one is that Hopper now features a new view: on top of the method names, you’ll now find a selector that let you choose if you want to display the list of labels, or the list of strings (ASCII and Unicode) contained in the binary. This makes searching strings really faster!

It has been a while since the last time I updated this blog!

Many things have changed since then, and I have some good news for you.

The first one (and, by far, the most important, at least, for me :)) is that Hopper will become my full time job! That’s right, from the end of the next month, I’d be able to spent as much time as I want on developing Hopper. I expect things to go really faster!

The second one is that Hopper now features a new view: on top of the method names, you’ll now find a selector that let you choose if you want to display the list of labels, or the list of strings (ASCII and Unicode) contained in the binary. This makes searching strings really faster!

1 note

And because OS X and Linux is not enough, here is the Windows version of Hopper. This is exactly the same code than the Linux version…
Some of you asked me if the OS X version will become a Qt version too, and the answer is NO, NEVER :) Hopper will always be a native Cocoa application on OS X!

And because OS X and Linux is not enough, here is the Windows version of Hopper. This is exactly the same code than the Linux version…

Some of you asked me if the OS X version will become a Qt version too, and the answer is NO, NEVER :) Hopper will always be a native Cocoa application on OS X!

0 notes

Many features has been implemented in Hopper for Linux: most of the interactions of the OS X version are available on Linux. I still have to port the GDB backend, but I’m pretty happy to see this version advancing so fast…

Still no ETA, nor beta program yet, sorry, but I’m sure it will not take too much time before the first beta will be available…

BTW, Hopper 2.6.3 for OS X is on its way, fixing its bunch of bugs…