相关开源分支项目
- hikari版本
https://gitee.com/sweetear/Hikari - goron改版ollvm(结合ollvm和hikari的版本)
https://gitee.com/sweetear/goron - ollvm改版
https://gitee.com/r6/ollvm
编译过程
上面几个项目都是llvm的几个分支,选择哪个项目作为你的混淆器的编译取决于个人,本篇基于ollvm改版项目,最大适配Xcode11。编译环境如下:
cmake: 3.17.2
ninja: 1.10.0
Gcc: 9.3.0
Xcode: Version 12.4 (12D4e)
macOS Catalina: 10.15.7
下载代码
git clone https://gitee.com/r6/ollvm
从ollvm新建build文件夹,生成makefile
cd ollvm
mkdir ninja_build
cd ninja_build
执行build命令
cmake -G "Ninja" -DLLDB_CODESIGN_IDENTITY='' -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_APPEND_VC_REV=on -DLLDB_USE_SYSTEM_DEBUGSERVER=YES -DLLVM_CREATE_XCODE_TOOLCHAIN=on -DCMAKE_INSTALL_PREFIX=~/Library/Developer/ ../llvm
注意-DCMAKE_BUILD_TYPE=MinSizeRel,这个只是debug包,如需要发布包,可以Release,具体自己看编译llvm选项
经过漫长的等待,在~/Library/Developer/下面会生成toolchains。
LLVM10.0.0svn.xctoolchain
使用toolchains编译iOS应用
新建一个demo
验证加固能力,用以上的addFunc来验证。
在Xcode --> Toolchains --> 选择我们编译的toolchain来编译。不加任何编译选项编译:
好像直接报错了,google了一下,原因是index这个选项没有实现,那我们直接在buildsettings关掉它就好了。
Build Settings --> Enable Index-While-Building Functionality --> NO
把这个选项设置为NO,编译成功!
添加编译选项
添加编译选项到Other CFlag开启混淆!
-mllvm -sub -mllvm -bcf -mllvm -fla -mllvm -split
完美编译成功!开启bitcode也能编译过去
把产物放到IDA里面 看看是否正常混淆