iOS 静态库代码混淆方案
基于开源 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 静态库代码混淆方案相关推荐
- ios静态库和代码同名_使用一个代码库开始制作NativeScript iOS和Android应用程序
ios静态库和代码同名 Users can choose whatever operating system they prefer, but every operating system use d ...
- ios 静态库冲突的解决办法
参考:http://www.cnblogs.com/machao/p/5288460.html ios 静态库冲突的解决办法 最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的 ...
- ios 静态库合成_iOS : 静态库(.framework)合并
如果写了一个Framework,根据Build时选择的机器类型,会分为模拟器Framework和真机Framework,两者是不能混用的. 此时可以通过配置一个Run Script,在Script中使 ...
- iOS静态库和动态库
iOS静态库和动态库 静态库和动态库是什么,以及它们的区别,详细介绍可参考博文:iOS里的动态库和静态库,里面讲的很详细. 静态库动态库的区别 内容来源自:iOS动态库与静态库 静态库和动态库是相对编 ...
- ios开发 c语言打包.a文件,【转】IOS静态库a文件制作流程
原文网址:http://www.jianshu.com/p/3439598ea61f 1.新建Cocoa Touch Static Library工程 新建工程 2.Xcode的参数设置 " ...
- 编译-C++支持iOS静态库的脚本学习
这是一个编译C++库,支持iOS静态库的一个脚本.仅供研究学习的. #!/bin/bashPLATFORMPATH="/Applications/Xcode.app/Contents/Dev ...
- iOS静态库.a文件制作和导入使用
iOS静态库.a文件制作: 1.新建Cocoa Touch Static Library工程 新建工程 - 选择iOS-FrameWork&Libary,选择 Cocoa Touch Stat ...
- ios 静态库合成_iOS链接原理解析与应用实践
在iOS App开发中,程序的链接是由Xcode中自带的LLVM来帮助我们完成的,程序员们也因此更注重业务逻辑的编写.但其实了解链接的原理能让我们对iOS的底层有更深层次的认识,也有助于我们从底层原理 ...
- 编译-speex For iOS静态库
这篇文章只为记录,学习编译C++静态库的文章.对编译结果不做追究. 最新的Demo 这两天在折腾语音的东西,实现类似微信上对讲机的功能,做了两个Demo,一种使用lib-amr库用amr格式实现的,这 ...
最新文章
- python英文翻译-Python运算符-局部英文翻译版
- 全民直播CTO张云龙:已全面迁移至阿里云
- [置顶]WebService学习总结(4)——第三方webService服务调用
- 一文了解自然语言处理神经史(上)
- netty系列之:使用UDP协议
- MySQL Cluster 4个数据节点压力测试--mysqlslap工具压400W写
- 字符串匹配——枚举法
- [原创]java WEB学习笔记54:Struts2学习之路--- 编写Struts2 的第一个程序,HelloWord,简述 package ,action,result...
- 【转-Andrew_qian】stm32中断嵌套全攻略
- 数据结构上机实践第八周项目8-稀疏矩阵的三元组表示的实现及应用
- springboot新版本(2.1.0)、springcloud新版本(Greenwich.M1)实现链路追踪的一些坑
- 计算机图形(Computer Graphics)经典书籍推荐(1)
- java代码转python代码_如何实现Java代码转换成python代码
- PS-怎么使用参考线?
- Java项目:ssm实验室设备管理系统
- mac重装系统时显示未能与服务器,mac出现您的磁盘未能分区怎么办-bootcamp磁盘未能分区解决方法 - 河东软件园...
- 学习进制及数据在计算机中的表示
- MCU 8080规格LCD屏斜线问题——Tear功能
- [Linux]-堡垒机/跳板机作用、登陆异常处理
- K8S——存储ConfigMap
热门文章
- 缓存一致性(MESI)
- jQuery知识点笔记-常用方法
- C++ leetcode 21. 合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
- 模拟电路技术之基础知识(八)
- 第八周实践项目3 顺序串一些算法操作
- OpenCV中矩阵的归一化*(Normalize函数)
- Robert算子的运用
- 多协程实例讲解(四 Python)
- c语言虚函数是什么,C语言中什么函数不能声明为虚函数?
- php ci ajax用户登录,使用jQuery和CI显示AJAX调用数据库的数据