一、创建敏感字符文件
1、在终端进入当前项目目录
2、创建文件:
touch codeConfusion.list
3、文件添加到项目:Xcode-菜单栏-File-Add Files To 项目名称
4、编辑内容,即写入需要混淆的函数名等,如:
showMessage
clear
randomTime
二、创建混淆脚本文件
1、在终端进入当前项目目录
2、创建脚本文件:
touch codeConfusion.sh
3、编辑脚本文件内容:
# !/usr/bin/env bash
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="codeConfusion.list" #
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
export LC_CTYPE=C
# 维护数据库方便日后作排重
createTable()
{
echo "create table $TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE
}
insertValue()
{
echo "insert into $TABLENAME values('$1' ,'$2');" | sqlite3 $SYMBOL_DB_FILE
}
query()
{
echo "select * from $TABLENAME where src='$1';" | sqlite3 $SYMBOL_DB_FILE
}
ramdomString()
{
openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16
}
rm -f $SYMBOL_DB_FILE
rm -f $HEAD_FILE
createTable
touch $HEAD_FILE
echo '#ifndef Demo_codeObfuscation_h
#define Demo_codeObfuscation_h' >> $HEAD_FILE
echo "//confuse string at `date`" >> $HEAD_FILE
cat "$STRING_SYMBOL_FILE" | while read -ra line; do
if [[ ! -z "$line" ]]; then
ramdom=`ramdomString`
echo $line $ramdom
insertValue $line $ramdom
echo "#define $line $ramdom" >> $HEAD_FILE
fi
done
echo "#endif" >> $HEAD_FILE
sqlite3 $SYMBOL_DB_FILE .dump
4、添加脚本文件到项目:Xcode-菜单栏-File-Add Files To 项目名称
5、配置脚本:项目-TARGETS-Build Phases-添加:New Run Script Phase-Run Script-$PROJECT_DIR/codeConfusion.sh
6、编译运行,生成文件:codeObfuscation.h
四、创建pch文件
1、新建文件:Xcode-菜单栏-File-New-File-iOS-Other-PCH File
2、配置文件:
pch文件配置项目-TARGETS-Build Settings-All, Combined-Apple LLVM 9.0 - Language
(1)Precompile Prefix Header设置"YES"
(2)Prefix Header设置"$(PROJECT_DIR)/项目名称/pch文件名称"
3、导入头文件:#import "codeObfuscation.h"
五、注意事项
1、代码混淆脚本内容,需要设置混淆字符文件xxx.list,同时要设置生成混淆对应文件的头文件名称;
2、混淆脚本生成的混淆对应的文件要导入pch文件;
3、编译运行时的错误处理:
(1)错误提示:
/Users/macintosh/Library/Developer/Xcode/DerivedData/DemoCodeConfusion-fzzudaajuuktdjczivfrbzpaktgy/Build/Intermediates.noindex/DemoCodeConfusion.build/Debug-iphonesimulator/DemoCodeConfusion.build/Script-DF73E46C20EA2C7300A02295.sh: line 2: /Users/macintosh/Desktop/zsy/code/iOS/demo/DemoCodeConfusion/codeConfusion.sh: Permission denied
(2)解决:
查看执行权限:
ls -l /目录/codeConfusion.sh
修改执行权限:
chmod a+x /目录/codeConfusion.sh
4、定义变量和方法时避免雷同系统属性和方法,以免造成代码混淆后编译运行异常
网友评论