虽然iOS系统相比于其余手机操做系统相对安全,可是这个安全并非绝对的,我一直相信,道高一尺魔高一丈。此文想以实际例子出发,告诉你们,如何去反编译一个app,而且从某个角度来讲,iOS没有传说中的“安全”。程序员
这里只最简单的结论给你们,具体原理以及工具的详细使用,请各位自行Google,为何这么作呢,由于我想用最简单的语言,让没有汇编基础的同窗也能明白。算法
首先,告诉你们一个不幸的消息,上架至App Store的app,被apple加密了。因此标题才是“有条件”才能进行反编译,使人欣喜的是,在debug下产生的ipa或者是release下的ipa包或者是渠道包(各类应用市场能下的ipa包)都能直接反编译。sass
固然,引言已经说了,道高一尺魔高一丈,就算是被apple加密的ipa,其实也是能够反编译的,只不过相对麻烦罢了。
来来来,给大家几个工具,就能够解掉apple的加密了。安全
因为AppCrackr被不少开发者吐槽,这个傻瓜式的解密会严重致使盗版泛滥,因此这个工具已经很很差用了。
这里就不展现demo了,感受若是把App Store上的东西反编译出来发到网上去,我感受个人程序员生涯可能就要到头了。app
这里会介绍两个工具class-dump和Hopper Disassembler。
首先,先撸一个最简单的app来作小白鼠。下载地址(包含二进制文件&dump结果)
看图,就是这样,我只改了ViewController这个类。ide
由代码能够看出,我就写了两个方法testClassDump和testHideClassDump,后者没有声明在.h中(ps:我想试验这样能不能被反编译到)。工具
ok,前戏都作完了,能够开始干活了。加密
咱们run一下工程,而后打开Products文件夹下的DecompilingTest.app所在目录,显示包内容,拿到二进制文件。操作系统
而后我是复制到桌面,而后执行下述命令,便可拿到工程中的.h文件。debug
OK,获得下述结果,咱们看看拿到的ViewController.h里面,能拿到什么方法
事实证实,没有声明的方法也被dump出来了。
下一步咱们要作的就是看看能不能拿到这两个方法的具体实现了,接下来咱们用Hopper Disassembler来试试。
Hopper Disassembler的用法很简单,只要将二进制文件拖进去就好了。看看拖进去以后的结果。
此时心中一万头草泥马飞奔而过,what's the fk!!一堆汇编语言宝宝看不懂啊。(固然那个ret应该是return的意思我猜)
Don't worry!点右上角的if(b)f(x);按钮,咱们能看到这个方法的伪代码,大部分的时候咱们能从伪代码中看出咱们须要的信息。
结果以下:
至此,两个方法都被反编译出来了!!
这里须要注意,就算方法没有声明在.h中,也能被dump,以后就能被反编译了。
说了这么多,咱们预防呢,是否是须要像Java的同样加上各类复杂的混淆呢。
其实我以为大可没必要,自己反编译成本就很大,代码这么多,一个个反编译过来是在蛋疼,就算有伪代码也须要理解,并且有些代码就算有伪代码也很难理解。
只要作好核心代码,作好混淆就好了,好比涉及到密码,核心算法。
没有绝对安全的系统,也没有***破不掉的系统,全部须要的只是时间而已。