lipo是管理Fat文件的工具,可以查看平台列表,提取、重新打包
dreamdeMac-mini:test dream$ lipo -info libtest001.a
Architectures in the fat file: libtest001.a are: armv7 arm64
lipo -thin 提取出ARM64平台文件
dreamdeMac-mini:test dream$ lipo -thin arm64 libtest001.a -output libtest001.ar m64
ar -t 查看:
dreamdeMac-mini:test dream$ ar -t libtest001.arm64
__.SYMDEF
7zAes-9CC0839951E86BC.o
...
使用 ar -x 解包
dreamdeMac-mini:arm64 dream$ ar -x ../libtest001.arm64
dreamdeMac-mini:arm64 dream$ ls
7zAes-9CC0839951E86BC.o LzmaEnc-A77677D9F23EB2B0.o
...
打包使用 ar -r 命令
重打包成FAT文件使用 lipo -create
可 man lipo 查看 -create 参数使用
解决问题
使用o-llvm的代码混淆方案。但目前项目静态库大致分成两部分,一部分是开源的加密压缩库,一部分自己编码的加密库,由于压缩算法那块实现逻辑比较复杂,混淆后会大大影响程序执行效率,同时对代码逻辑保护起不到任何作用,因些只需单独将自己编码的加密库混淆。
翻阅了一些资料,Xcode不能单独给.a的某个.o文件设置编译选项,也可能没找着材料。
因此通过 lipo 的方式,替换掉里面开源库的 .o 为未混淆版本。
步骤以下:
-
lipo 拆包
lipo -thin armv7 xxx.a -output xxx.armv7
lipo -thin arm64 xxx.a -output xxx.arm64
-
ar 解包
ar -x xxx.armv7
ar -x xxx.arm64
-
ar 打包
ar -r xxx.armv7 *.o
ar -r xxx.arm64 *.o
-
lipo 打包
lipo -create xxx.armv7 xxx.arm64 -output xxx.a