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!
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…
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%.
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!