为什么没有看到iOS app 做代码混淆?

最近看完了<<逆向工程>>,感觉收获很多,研究了几个app例如微信这种大型app之后,发现一个问题:

从这几个app的symbol、label经常可以很容易的猜到方法的作用,使逆向变的更加容易。

那么问题来了?为什么它们都没有做代码混淆?这不应该是成本最低的防逆向方式吗?

应为你写IOS程序发布到APP商店是需要审核的,苹果官方审核你这个APP是否使用非正常代码。所以苹果官方不允许你加密。加密后则不会审核通过。

不对,苹果官方是不管你加不加密的,不然那些银行、支付的东西,要全是明文,不分分钟被■■的节奏?
@chengyang 我觉得一方面原因是代码混淆技术没有普及,一方面是大多数App,只有核心功能需要混淆,不需要全文件混淆,不然运行过程中的内存加解密也是一大开销

技术没有普及,,,或者说普遍现象

挖个坟,实际上最大的原因是影响出错的调试,拿到CrashLog之后难以对应源代码

是的,不过可以弄个map文件,

不止那个问题。事实上IR层的混淆本身就很容易出错,这点造成了app里可能存在大量潜在的bug。
而通过之前群里我们提到过的方案,现有的ir层混淆某种程度上可以被一定的还原。
Probably pointless after all

是的,原来也看过一些LLVM IR的混淆,不过没产品敢用。

据我了解,苹果确实如狗神说的不管你加不加密,个人认为一个是ios加密工具未普及,还没有平民化的加密工具,市面上基本都要收费,而且效果未知。其次ios代码混淆只能在视觉上无法猜测到方法功能,变量作用,在ida这种神器下其实保护只能说有限。再者混淆加密过多可能会带来cpu和内存、空间的开销和占用,影响用户体验。

ps:很多应用会把核心代码用c来写,内部多用指针,可以增加逆向难度。加壳其实保护也不太大,苹果商店的壳还不是被脱的光光的,毕竟可以内存dump