Checkson / blog

Checkson个人博客
12 stars 3 forks source link

HikariObfuscator操作手册 #16

Open Checkson opened 5 years ago

Checkson commented 5 years ago

Hikari Obfuscator

Hikari Obfuscator 是一款出色的代码编译混淆器,作用在xcode的build阶段,若使用不当可能会影响App性能

简介

源码地址

Hikari比Obfuscator-LLVM有一些额外的自定义构建通道和(希望不是)bug。测试是通过在作者的项目WallpaperKit上运行Hikari来完成的。

安装

安装详情

前置条件

安装前,先确认自己的系统已经安装了以下的软件,主要是用来辅助编译Hikari。

另外,你的编译Hikari的环境,应该具有常用的Unix实用程序,例如:

ar — archive library builder
bzip2 — bzip2 command for distribution generation
bunzip2 — bunzip2 command for distribution checking
chmod — change permissions on a file
cat — output concatenation utility
cp — copy files
date — print the current date/time
echo — print to standard output
egrep — extended regular expression search utility
find — find files/dirs in a file system
grep — regular expression search utility
gzip — gzip command for distribution generation
gunzip — gunzip command for distribution checking
install — install directories/files
mkdir — create a directory
mv — move (rename) files
ranlib — symbol table builder for archive libraries
rm — remove (delete) files and directories
sed — stream editor for transforming output
sh — Bourne shell for make build scripts
tar — tape archive for distribution generation
test — test things in file system
unzip — unzip command for distribution checking
zip — zip command for distribution generation

macOS 快速安装

git clone -b release_70 https://github.com/HikariObfuscator/Hikari.git Hikari && mkdir Build && cd Build && cmake -G "Ninja" -DLLDB_CODESIGN_IDENTITY='' -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_APPEND_VC_REV=on -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

ps:如果在内网环境,应该先把Hikari库和Resources先拉到本地,再执行以上的命令,注意按需修改。按照步骤走,一般编译安装阶段不会出错的。

安装常见问题

Hikari应用

官方文档

改变工具链

打开xcode -> 点击左上角的Xcode菜单 -> 选择下拉菜单中的Toolchains -> 选择扩展菜单中的Hikari

ps:能在ToolChains看到Hikari选项,证明Hikari安装成功了。

用法

xcode项目配置切换到Build Settings

混淆规则

官方解释

-enable-allobf   # 启用所有混淆
-enable-bcfobf   # 启用伪控制流
-enable-cffobf   # 启用控制流扁平化
-enable-splitobf # 启用基本块拆分  
-enable-subobf   # 启用指令替换
-enable-acdobf   # 启用反类转储机制  
-enable-indibran # 启用基于寄存器的相对跳转,配合其他加固可以彻底破坏IDA/Hopper的伪代码(俗称F5)
-enable-strcry   # 启用字符串加密
-enable-funcwra  # 启用函数包装器

这里的混淆规则都是随机的,默认为30%。我们也可以自定义随机概率:

-mllvm -enable-allbcf -mllvm -bcf_prob=5

提交到appStore

官方做法

常见问题

脚本打包命令

xcodebuild OTHER_CPLUSPLUSFLAGS='$(inherited) $(OTHER_CFLAGS) ${mix_rule}' \
-project ${project_file} \
-target ${target_name} \
-configuration Debug \
-arch armv7 arm64 \
COMPILER_INDEX_STORE_ENABLE=NO \
ENABLE_BITCODE=NO \
GCC_OPTIMIZATION_LEVEL=0 \
TOOLCHAINS=Hikari

参数配置简单的解释如下:

参数 解释
OTHER_CPLUSPLUSFLAGS 混淆配置 -mllvm -enable-funcwra
COMPILER_INDEX_STORE_ENABLE 编译时是否索引 NO / YES
ENABLE_BITCODE bitcode NO / YES
GCC_OPTIMIZATION_LEVEL 编译时是否优化 NO / YES
TOOLCHAINS 选择编译器 Xcode10.1 / Hikari

混淆配置详解

1. 不加入任何混淆规则配置

在不设置混淆配置的时候,编译器Xcode 10.1和Hikari性能表现相同。

2. -enable-strcry (启用字符串加密)

3. -enable-bcfobf (启用伪控制流)

4. -enable-cffobf (启用控制流扁平化)

5. -enable-splitobf (启用基本块拆分)

6. -enable-subobf (启用指令替换)

7. -enable-acdobf (启用反类转储机制)

8. -enable-indibran (启用基于寄存器的相对跳转)

会报错,报错信息:

ld: symbol(s) not found for architecture armv7
clang-7: error: linker command failed with exit code 1 (use -v to see invocation)

9. -enable-funcwra (启用函数包装器)

会报错,报错信息:

ld: 61210 duplicate symbols for architecture armv7
clang-7: error: linker command failed with exit code 1 (use -v to see invocation)

10. -enable-allobf (启用所有混淆规则)

会报错,报错信息:

clang-7: error: unable to execute command: Killed: 9
clang-7: error: clang frontend command failed due to singal (use -v to see invocation)
TaeYoona commented 3 months ago

合着没啥用 都是严重影响或者crash

Checkson commented 3 months ago

是的,现在估计这个东西已经过时了,你如果要做马甲包或者Xcode工程加固的,要另寻他路。