iOS符号表裁剪

提高产品安全性

Tom 创建于 2017-2-9

最新发表:


Jedis的简单使用

数据加速

你可能感兴趣的内容:


对MVVM、VIPER的简单理解

什么样的需求使用哪种模式


体验XCode9中的Swift

Swift与OC混合编译

iOS符号表裁剪

开发好的SDK,编译好的静态库和动态库,在发布之前都需要做一些处理。虽然对未来的错误定位增加了一些难度,但这些问题都可以在QA验证的时候逐一排查。尽可能保证在发布之前,不留下严重的问题。

裁掉符号的作用,主要是增加逆向工程的难度,静态库的安全性较差,动态库安全性较好。iOS 10的出现,现在都可以直接发布动态库,以后逐渐取代静态库的功能。

符号表针对不同的库有不同的裁剪的方式:

静态库

调试的符号加混淆

Strip -S [file]

除此之外,还可以在项目配置的时候就不要生成调试符号

大部分无关的符号加混淆

Strip -x [file]

加完混淆以后,一些符号会变成看不出来的一堆英文及数字

LCxx

动态库

在工程配置里设置对应的排除符号文件

在文件里添加需要排除的符号,例如

_testFunc
_test2Func

清理工程重新编译,编译完,部分符号彻底消失

有些符号是无法删掉的

1、通过动态库链接没有处理过的第三方静态库 2、你想暴露给开发者使用的接口对应的符号表 3、引用系统API对应的符号表,例如:

_socket
_OBJC_CLASS_$_UIApplication

最后

裁剪完成,执行这个命令,不想暴露出去的符号就找不到了

nm -j [file]