iOS混淆调研-基于llvm

关于iOS混淆-基于llvm

在此之前,你需要先了解 llvm

源码: https://github.com/microsoft/llvm
文档: https://releases.llvm.org/11.0.1/docs/index.html
在巨人的肩膀上:https://www.zhihu.com/column/llvm-clang (帮助我们快速了解,对于基础不好且没有大量时间阅读源码的你)

关于混淆:

一: o-llvm

目前市面上大部分的混淆,都是基于o-llvm 基础修改实现的。
ollvm源码:https://github.com/obfuscator-llvm/obfuscator.git
目前支持的版本为llvm-4.0版本,有其他pull最高可以支持到8.0,尚未对8.0的pull进行测试。手动配置也是先用cmake编译,build目录下编译成功“clang4.0”可执行文件即视为编译成功。
配置可以参考:https://www.cnblogs.com/exchen/p/10352687.html

二:Hikari

1.Giuhub

https://github.com/HikariObfuscator/Hikari/releases

2.版本支持:

hikari也是基于o-llvm基础修改实现的,目前支持llvm-8.0版本,xcode11和xcode10版本.并且支持了非bitcode模式。

3.安装包

安装包:https://mega.nz/file/m4ciGKya#JiTib0ax6N10htUmmkFicNjYtL0ZnwU2F_HRhMcRaqY

密码:StarNightSnow

源码:https://codeload.github.com/HikariObfuscator/Hikari/zip/20200504

4.源码编译说明

参考:https://github.com/HikariObfuscator/Hikari/wiki/Compile-&-Install

4.1安装工具:
 Cmake: brew install cmake

 Ninja: brew install ninja
4.2 执行命令
    git clone --recursive -b release_80 https://github.com/HikariObfuscator/Hikari.git Hikari && cd Hikari && git submodule update --remote --recursive && cd ../ && mkdir Build && cd 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/ ../Hikari && ninja &&ninja install-xcode-toolchain && git clone https://github.com/HikariObfuscator/Resources.git ~/Hikari && rsync -a --ignore-existing /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ ~/Library/Developer/Toolchains/Hikari.xctoolchain/ && rm ~/Library/Developer/Toolchains/Hikari.xctoolchain/ToolchainInfo.plist
4.3 命令解释

(1)创建Hikari 文件夹,下载git代码,创建 Hikari 同级目录build文件夹,用来存放cmake编译后的产物

 $ git clone --recursive -b release_80 https://github.com/HikariObfuscator/Hikari.git Hikari  
 $ cd Hikari   
 $ git submodule update --remote --recursive 
 $ cd ../ 
 $ mkdir Build 
 $ cd Build 

(2)使用cmake编译源码,-DLLDB_CODESIGN_IDENTITY='' 舍弃lldb配置;-DCMAKE_BUILD_TYPE=MinSizeRel 工程编译生成的版本类型(Debug , Release , RelWithDebInfo 和 MinSizeRel )MinSizeRel :与release模式相比,此模式更加倾向于最小代码编译优化,而不是速度优先。 后面几个参数都是cmake的一些编译配置。一般来说在build的bin目录下生成了clang可执行文件就是成功

   $ 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/ ../Hikari 

(3)使用 ninja 安装 toolchain

  $ ninja 
  $ ninja install-xcode-toolchain 

(4)下载资源文件到用户目录下

   $ git clone https://github.com/HikariObfuscator/Resources.git ~/Hikari 

(5)把Xcode.app/xctoolchain下的文件copy到Library/Developer/Toolchains/Hikari.xctoolchain下,copy过程忽略同名文件,只更新Hikari.xctoolchain下不存在文件,一些其他编译文件等。注意这里的路径Xcode.app需要修改自己实际的xcode命名,绝对路径

    $  rsync -a --ignore-existing /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ ~/Library/Developer/Toolchains/Hikari.xctoolchain/ 

(6)移除多copy过来的ToolchainInfo.plist文件

    $  rm ~/Library/Developer/Toolchains/Hikari.xctoolchain/ToolchainInfo.plist
4.4 使用

作者: https://github.com/HikariObfuscator/Hikari/wiki/Usage
(作者的wiki非常清楚,尽可能全部阅读,如果英文不好可以在谷歌浏览器打开用中文模式阅读)
简书用户链接: https://www.jianshu.com/p/1219b5a84ad2 <--有图有真相

详情:
在 Build Settings -> Other C Flags 中加入混淆标记

 -mllvm -enable-bcfobf 启用伪控制流

 -mllvm -enable-cffobf 启用控制流平坦化

 -mllvm -enable-splitobf 启用基本块分割

 -mllvm -enable-subobf 启用指令替换

 -mllvm -enable-acdobf 启用反class-dump

 -mllvm -enable-indibran 启用基于寄存器的相对跳转,配合其他加固可以彻底破坏IDA/Hopper的伪代码(俗称F5)

-mllvm -enable-strcry 启用字符串加密

 -mllvm -enable-funcwra 启用函数封装

 -mllvm -enable-allobf 依次性启用上述所有标记
4.5 其他说明参考wiki:https://github.com/HikariObfuscator/Hikari/wiki
4.6其他参考:

https://www.jianshu.com/p/9fc7776cce9b

https://blog.csdn.net/deft_mkjing/article/details/84943381

4.8 删除-如果想移除
截屏2021-01-21 下午7.29.25.png

三: 关于ipa混淆

1.bitcode:必须打开,都是基于bitcode的中间文件进行混淆

2.关于bitcode:

http://xelz.info/blog/2018/11/24/all-you-need-to-know-about-bitcode/

3.过程

1.解析iPA、.xcarchive、.a、等各种格式
2.提取Xar: xar -d - -f input
3.解析Xml:用python的ET.fromstring(xmlfile)去解析
4.提取所有的.o文件、提取所有的clang 的编译命令和ld的链接命令参数
5.给每个.o加上混淆参数生成混淆后的.o
6.链接生成最终的混淆后的iPA

以前使用开启bitcode的.a静态库进行测试,可以获取到所有的.o文件,首先从.a文件的二进制文件中分离出需要的架构arm64架构对应的二进制文件,再使用ar命令获取它包含的所有.o即.m文件。因为必须开启bitcode,目前没有继续看这个方向。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容