对于iOS开发者来说,逆向工程是最为实用的技术之一。例如,工程师可以逆向系统API,在自己的App里使用一些文档中没有提及的私有功能,还可以逆向一些经典软件,学习借鉴它们的技术和设计。
1. 逆向系统API
工程师编写的软件之所以能够运行在操作系统中,提供各种各样的功能,是因为操作系统本身已经内嵌了这些功能,软件只是对其进行重新组合罢了。众所周知,能在App Store上架的App的功能十分有限,在苹果公司严格的审核制度下,绝大多数App的实现都源于公开的开发文档,而不能使用诸如发短信、打电话等文档中不涉及的功能。如果你的软件面向Cydia,那么不采用非公开功能将会导致软件丧失极大的竞争力。如果你的软件想拥有文档里没有提及的非公开功能,最有效的途径就是逆向iOS系统API,还原系统实现相应功能的代码,并应用到自己的软件中。
2. 借鉴别的软件
逆向工程最受欢迎的应用场合就是“借鉴”他人的软件功能。对于App Store上的大多数App来说,其技术实现并不复杂,巧妙的创意和良好的运营才是其成功的关键。如果只是单纯借鉴其功能,那么采用逆向工程来还原代码,费时费力,性价比低,不如从头开发一个功能类似的软件省时省力,性价比高。但是,当我们不知道App中的某个功能是如何实现的时候,逆向工程就能起到关键性的作用。这种情况在大量使用私有函数的Cydia软件中尤其常见,比如2013年3月面世的,号称iOS上第一款通话录音软件的Audio Recorder,它是闭源软件,但足够有趣,此时使用iOS逆向工程技术就能够对它了解一二。
有些老牌软件的架构设计合理,代码工整规范,实现得非常优雅。我们没有他们那样深厚的技术功底和人才储备,想要借鉴他们使用的高级技术,却又求学无门。在这种情况下,逆向工程就是解决问题的金钥匙。通过逆向那些软件,可以从App中把它们的设计思路抽象出来为我所用,从而提高自己App的精致程度。比如,WhatsApp的稳定性、健壮性出类拔萃,如果我们自己要编写一个IM类App,通过逆向工程技术学习WhatsApp的整体架构与设计思路将是非常有益的。