iOS源代码加密

1.概述

本文的主要介绍iOS源代码加密Xcode插件的使用方式,阅读者需具备iOS开发经验,否则使用可能存在困难。

2.切换安全编译器

Build Setting -> Build Options -> Compiler for C/C++/Objective-C中选择KiwiSec LLVM (Version) "1-6"

3.设置加密参数

切换安全编译器后,必须设置相应的参数,否则加密无效果,参数设置位置在Targets -> Build Settings -> Apple LLVM(Version) - CustomFlags中设置,如下图

1-31

如果是Swift项目,参数设置位置在Targets -> Build Settings -> Swift Compiler - Custom Flags —> Other Swift Flags中设置【如果混编OC代码,需同时设置Targets -> Build Settings -> Apple LLVM(Version) - CustomFlags】,如下图所示

1-32

加密参数说明

标识 作用 描述
-kce-fla 控制流平坦化 将每一个basic block分开然后用switch statment来进行运行流程的控制;取值范围是0~5,默认为0无效果,推荐3
-kce-bcf 虚假控制流 复制原方程里的basic block并且混入无用的指令,在方程开始开始部位加入条件转移指令,变成多个basic block分支;取值范围是0~99,默认为0无效果,推荐30
-kce-bcf-fla-chance 随机混淆比例 设置-kce-bcf-fla-chance=15,表示随机混淆15%可混淆的函数【无需指定标签】。 取值范围是0~100,默认为0不混淆,推荐15
-kce-filter 过滤文件 设置-kce-filter=1.cpp,2.cpp,表示不对1.cpp和2.cpp进行混淆加密。注意设置时用英文逗号,隔开
__attribute__((optnone)) 指定标签 自定义指定需要混淆的方程,便于对核心代码进行混淆加密
-kce-str 字符串加密 设置-kce-str=1,表示当前项目的明文字符串进行加密保护。默认为1开启,Unity和Swift项目默认关闭
-kce-use-unity Unity开关 设置-kce-use-unity=1,表示当前为Unity项,如果是Unity项目,不设置会编译异常。默认为0非Unity项目
-kce-use-swift Swift开关 设置-kce-use-swift=1,表示当前为Swift项目,如果是Swift项目,不设置会编译异常。默认为0非Swift项目

注意说明:Unity项目必须设置-kce-use-unity=1,Swift项目必须设置-kce-use-swift=1

可对比混淆前后可执行文件的大小,或使用IDA Pro分析实际混淆效果[参数越大,编译时间更长,如果编译时等待时间过长,建议调整参数后重新编译]

4.指定函数加密

如果需要明确指定函数进行代码混淆,在其函数头部添加标签__attribute__((optnone))

C/C++代码:

int main(int argh,char **argv) __attribute__((optnone)){
    printf(“Hello,World!”);
    return 0;
}

Objective-C代码:

- (void) __attribute__((optnone)) didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

5. 关闭bitcode选项

在Build Settings中设置Enable Bitcode为No,否则编译报错

6. 编译项目

以上步骤配置完成后即可按照Xcode的正常编译流程编译项目,相关代码将会自动进行混淆编译

7. 加密效果参考

混淆效果参考

如遇问题请联系我们的客服或技术支持,官方QQ群:201898448

results matching ""

    No results matching ""