基于开源 Obfuscator-LLVM方案

下载安装最新版本 Obfuscator-LLVM,目前3.6.1

$ git clone -b llvm-3.6.1 https://github.com/obfuscator-llvm/obfuscator.git

$ mkdir build

$ cd build

$ cmake -DCMAKE_BUILD_TYPE:String=Release ../obfuscator/

$ make -j5

将build/bin加入环境变量

$vim ~/.bash_profile

export PATH=/Users/dream/ollvm/build/bin:$PATH

$source ~/.bash_profile

配置Xcode,当前版本 7.1

基于现有插件修改如下:

$ cd /Applications/Xcode-beta.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/

$ sudo cp -r Clang\ LLVM\ 1.0.xcplugin/ Obfuscator.xcplugin

$ cd Obfuscator.xcplugin/Contents/

$ sudo plutil -convert xml1 Info.plist

$ sudo vim Info.plist

修改文件内容(修改前->修改后)

<string>com.apple.compilers.clang</string> -> <string>com.apple.compilers.obfuscator</string>

<string>Clang LLVM 1.0 Compiler Xcode Plug-in</string> -> <string>Obfuscator Xcode Plug-in</string>

接下来修改Info.plist

$ sudo plutil -convert binary1 Info.plist

$ cd Resources/

$ sudo mv Clang\ LLVM\ 1.0.xcspec Obfuscator.xcspec

$ sudo vim Obfuscator.xcspec

修改为:

Identifier = "com.apple.compilers.llvm.clang.1_0"; -> Identifier = "com.apple.compilers.llvm.obfuscator.3_6_1";

Name = "Apple LLVM 7.0"; -> Name = "Obfuscator 3.6.1";

Description = "Apple LLVM 7.0 compiler"; -> Description = "Obfuscator 3.6.1";

Vendor = Apple; -> Vendor = HEIG-VD;

Version = "7.0"; -> Version = "3.6.1";

ExecPath = "clang"; -> ExecPath = "/Users/dream/ollvm/build/bin/clang";

接下来修改显示:

$ cd English.lproj/

$ sudo mv Apple\ LLVM\ 7.0.strings "Obfuscator 3.6.1.strings"

$ sudo vim Obfuscator\ 3.6.1.strings

修改为:

"Name" = "Apple LLVM 7.0"; -> "Name" = "Obfuscator 3.6.1";

"Description" = "Apple LLVM 7.0 Compiler"; -> "Description" = "Obfuscator 3.6.1";

"Version" = "7.0"; -> "Version" = "3.6.1";

"Vendor" = "Apple"; -> "Vendor" = "HEIG-VD";

重启Xcode,Build Options里面,可以设置Compiler for C/C++/Objective-C为Obfuscator 3.6.1, 在CustomFlags中自行添加 flag:

-mllvm -sub -mllvm -fla -mllvm -bcf

解决几个问题

编译时出错,提示信息如下:

clang-3.6: error: unknown argument: '-gmodules'

clang-3.6: error: unknown argument: '-fembed-bitcode-marker'

Command /Users/dream/ollvm/build/bin/clang failed with exit code 1

在 Build Settings中搜索并修改:

-gmodules: Obfuscator 3.6.1 - Code Generation: Generate Debug Symbols: 原来yes,改成no

-fembed-bitcode-marker: Build Option: Enable Bitcode: 原来yes,改成no

补充

---

2016年10月28日18:56:14

目前该方法兼容最新版xcode:8.0

转载于:https://www.cnblogs.com/gm-201705/p/9864071.html

iOS 静态库代码混淆方案相关推荐

  1. ios静态库和代码同名_使用一个代码库开始制作NativeScript iOS和Android应用程序

    ios静态库和代码同名 Users can choose whatever operating system they prefer, but every operating system use d ...

  2. ios 静态库冲突的解决办法

    参考:http://www.cnblogs.com/machao/p/5288460.html ios 静态库冲突的解决办法 最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的 ...

  3. ios 静态库合成_iOS : 静态库(.framework)合并

    如果写了一个Framework,根据Build时选择的机器类型,会分为模拟器Framework和真机Framework,两者是不能混用的. 此时可以通过配置一个Run Script,在Script中使 ...

  4. iOS静态库和动态库

    iOS静态库和动态库 静态库和动态库是什么,以及它们的区别,详细介绍可参考博文:iOS里的动态库和静态库,里面讲的很详细. 静态库动态库的区别 内容来源自:iOS动态库与静态库 静态库和动态库是相对编 ...

  5. ios开发 c语言打包.a文件,【转】IOS静态库a文件制作流程

    原文网址:http://www.jianshu.com/p/3439598ea61f 1.新建Cocoa Touch Static Library工程 新建工程 2.Xcode的参数设置 " ...

  6. 编译-C++支持iOS静态库的脚本学习

    这是一个编译C++库,支持iOS静态库的一个脚本.仅供研究学习的. #!/bin/bashPLATFORMPATH="/Applications/Xcode.app/Contents/Dev ...

  7. iOS静态库.a文件制作和导入使用

    iOS静态库.a文件制作: 1.新建Cocoa Touch Static Library工程 新建工程 - 选择iOS-FrameWork&Libary,选择 Cocoa Touch Stat ...

  8. ios 静态库合成_iOS链接原理解析与应用实践

    在iOS App开发中,程序的链接是由Xcode中自带的LLVM来帮助我们完成的,程序员们也因此更注重业务逻辑的编写.但其实了解链接的原理能让我们对iOS的底层有更深层次的认识,也有助于我们从底层原理 ...

  9. 编译-speex For iOS静态库

    这篇文章只为记录,学习编译C++静态库的文章.对编译结果不做追究. 最新的Demo 这两天在折腾语音的东西,实现类似微信上对讲机的功能,做了两个Demo,一种使用lib-amr库用amr格式实现的,这 ...

最新文章

  1. python英文翻译-Python运算符-局部英文翻译版
  2. 全民直播CTO张云龙:已全面迁移至阿里云
  3. [置顶]WebService学习总结(4)——第三方webService服务调用
  4. 一文了解自然语言处理神经史(上)
  5. netty系列之:使用UDP协议
  6. MySQL Cluster 4个数据节点压力测试--mysqlslap工具压400W写
  7. 字符串匹配——枚举法
  8. [原创]java WEB学习笔记54:Struts2学习之路--- 编写Struts2 的第一个程序,HelloWord,简述 package ,action,result...
  9. 【转-Andrew_qian】stm32中断嵌套全攻略
  10. 数据结构上机实践第八周项目8-稀疏矩阵的三元组表示的实现及应用
  11. springboot新版本(2.1.0)、springcloud新版本(Greenwich.M1)实现链路追踪的一些坑
  12. 计算机图形(Computer Graphics)经典书籍推荐(1)
  13. java代码转python代码_如何实现Java代码转换成python代码
  14. PS-怎么使用参考线?
  15. Java项目:ssm实验室设备管理系统
  16. mac重装系统时显示未能与服务器,mac出现您的磁盘未能分区怎么办-bootcamp磁盘未能分区解决方法 - 河东软件园...
  17. 学习进制及数据在计算机中的表示
  18. MCU 8080规格LCD屏斜线问题——Tear功能
  19. [Linux]-堡垒机/跳板机作用、登陆异常处理
  20. K8S——存储ConfigMap

热门文章

  1. 缓存一致性(MESI)
  2. jQuery知识点笔记-常用方法
  3. C++ leetcode 21. 合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
  4. 模拟电路技术之基础知识(八)
  5. 第八周实践项目3 顺序串一些算法操作
  6. OpenCV中矩阵的归一化*(Normalize函数)
  7. Robert算子的运用
  8. 多协程实例讲解(四 Python)
  9. c语言虚函数是什么,C语言中什么函数不能声明为虚函数?
  10. php ci ajax用户登录,使用jQuery和CI显示AJAX调用数据库的数据