一、基本概念
1.1、什么是加固
加固是为了增加应用的安全行,防止应用被破解、盗版、二次打包、注入、反编译等
1.2、常见的加固方式有
- 数据加密(字符串、网络数据、敏感数据等)
- 应用加壳(二进制加密)
- 代码混淆(类名、方法名、代码逻辑等)
二、代码混淆
2.1、为什么混淆
iOS
程序可以通过class-dump
、Hopper
、IDA
等获取类名、方法名、以及分析程序的执行逻辑。如果进行代码混淆,可以加大别人的分析难度。
2.2、iOS
的代码混淆方案
源码的混淆
- 类名
- 方法名
- 协议名
三、源码的混淆 - 通过宏定义混淆方法名、类名
3.1、注意点
- 不能混淆系统方法
- 不能混淆init开头的等初始化方法
- 混淆属性时需要额外注意set方法
- 如果xib、storyboard中用到了混淆的内容,需要手动修正
- 可以考虑把需要混淆的符号都加上前缀,跟系统自带的符号进行区分
特别注意:混淆过多可能会被AppStore拒绝上架,需要说明用途
四、工具使用
4.1、MJCodeObfuscation
4.2、ios-class-guard
4.2.1、说明
- 它是基于
class-dump
的扩展 - 用
class-dump
扫描出可执行文件中的类名、方法名、属性名等并做替换,会更新xib
和storyboard
的名字等等
4.2.2、用法
$ brew install ios-class-guard
$ ios-class-guard [options] <mach-o-file>
4.2.3、常用参数
-
--sdk-root <path>
:用于指定SDK
路径,如果是模拟器SDK
,一般路径就是
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk
-
--sdk-ios
:相当于指定SDK
路径为真机设备SDK
-
-X <path>
:用于指定xib
、storyboard
所在目录,它会递归搜索 -
-O <path>
:生成的混淆头文件路径 -
-m <path>
:符号映射表(默认是symbols.json
)
4.2.4、使用
$ ios-class-guard --sdk-root Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk -X xxx/Base.lproj -O test.h -m symbols.json
网友评论