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

05-04 00:40