Chapter 5 Objective-C related iOS reverse engineering
In previous chapters we have already introduced the fundamental knowledge and tool
usage in iOS reverse engineering. Now, you should be able to satisfy your curiosity by playing
with private methods and develop some mini tweaks. However, since you’ve come so far, I
believe you have a strong delving spirit and truly want to improve your programmatic ability. If
so, it’d be better for you to try something more challenging. Well, starting from this chapter,
iOS reverse engineering will enter polar night, and you’ll have to face the most arcane yet
magical hieroglyphics in the programming world. Take a deep breath first, and then ask
yourself, “Is iOS reverse engineering a right choice for me?” After finishing this chapter,
hopefully you will get the answer.
Next, we’ll meet the first advanced challenge in iOS reverse engineering: reading ARM
assembly. According to the previous chapters, you have already got the idea that Objective-C
code would become machine code after compiling, and then will be executed directly by CPU.
It is overwhelming work to read machine code let alone write them. However, it’s lucky that
there is assembly, which bridges Objective-C code with machine code. Even though the
readability of assembly is not as good as Objective-C, it’s much better than machine code. If you
can crash this hard nut, congratulations, you have the talents to be a reverse engineer.
Conversely, if you cannot, AppStore may suit you better.
6.1 Introduction to ARM assembly
ARM assembly is a brand new language to most iOS developers. If your major in college is
computer related, you may already have some impression about assembly. Actually, assembly is
too esoteric for most college students; we’re nervous and uncomfortable dealing with it. Is
assembly really too hard to learn? Yes, it’s obscure and difficult to understand. On the other
6