几维安全iOS编译器产品注意事项!
安装iOS编译器
1.确保已安装Xcode
2.解压kiwisec-obfuscator-xcode-XXXX.zip文件
3.将文件夹KiwiSecSet.xcplugin拷贝到目录/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins下,如图1所示:
图1
4.重启Xcode(完全退出)
5.检查是否安装成功,出现编译器选项即为安装成功:
图2
2. 编译器使用
2.1. 关键词解释
-kce-fla | 横向膨胀 | 将每一个basic block 分开然后用switch statment来进行运行流程的控制 |
-kce-bcf | 纵向膨胀 | 复制原方程里的basic block并且混入无用的指令,在方程开始启示部位加入条件转移指令以已有两个basic block为分支 |
__attribute__((optnone)) | 标签 | 指定方程打上标签后会保证被混淆 |
2.2. 设置选择几维安全编译器
在”Build Setting->Build Options->Compiler for C/C++/Objective-C”中选择KiwiSec LLVM (Version);
2.3. 设置混淆强度
混淆强度调整选项为Xocde中指定-kce-fla和-kce-bcf,强度以数值大小向上增强(默认强度为-kce-fla=1 -kce-bcf=50)。
主要CFlags和C++Flags都要设置
-kce-fla=xx(上限为5)
-kce-bcf=xx(上限为99)
如图:3
图3
如果找不到参考下面设置方式
图4
2.4. 指定函数强制混淆
强制指定函数混淆,打标签后的函数必定混淆,混淆强度默认是-kce-fla=3,-kce-bcf=99(无法更改),在需要混淆的函数头部加上标签__attribute__((optnone)):
2.4.1. 函数声明:
C/C++ 示例:
int main(int argh,char **argv) __attribute__((optnone)){
printf(“Hello,World!”);
return 0;
}
Object-C 示例:
- (void) __attribute__((optnone)) didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
3. 注意事项
1.注意关闭项目的bitcode选项
2.注意不要修改默认Xcode目录路径,标准路径为/Applications/Xcode.app/Contents/…….,如果修改为类似/Applications/Xcode9.app/Contents,会导致找不到编译器。
3.如果出现C++链接问题,如图5:
图5
请在链接标签上面进行设置:-lstdc++,如图6:
图6
4.如果加密的是静态库,请在使用该静态库的项目里面链接clang-lib目录下的libclangrt.all.a静态库保证不出现链接问题,如图7:
图7
5.如果出现:
/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/KiwiSecSet.xcplugin/Contents/kiwisec/clang: Permission denied
或者
/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/KiwiSecSet.xcplugin/Contents/clang: Permission denied
请给设置clang具有可执行权限,到clang目录下执行chmod 744 clang
4. 卸载编译器
删除目录
/Application/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins下的KiwiSecSet.xcplugin之后重启Xcode即可
5. 编译效果图
混淆前:
混淆后:
上一篇: 比特网专访几维安全CEO范俊伟