本文来源:vbirdbest的博客
1、在项目的根目录下新建2个文件,分别为 confuse.sh、func.list,并修改confuse.sh文件的权限,如下图
2、 新建.pch 文件
注意.pch文件的位置最好要放在 AppName 名字的文件夹下,.pch文件的位置会在confuse.sh中会使用到,如果.pch文件的位置放在其它地方那么需要修改confuse.sh文件中的某个变量的值
注意.pch文件的路径需要在Build Settings中配置一下
3、 编写confuse.sh
#!/usr/bin/env bash
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="func.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
confuse.sh 文件中定义了三个文件,注意func.list是在项目根目录下,而HEAD_FILE是在项目根目录下的项目名称下的路径,也就是.pch文件所在的路径,最好保持 codeObfuscation.h文件的路径和.pch文件的路径一致,如果路径一致,这个shell脚本不用做任何修改
4、 配置confuse.sh
选中Target—》Build Phases—> + —->New Run Script Phase
然后配置一下confuse.sh的路径
5、 在func.list中配置需要混淆哪些单词,只有配置了该单词才会混淆,可以配置多个,一行一个,可以把一些敏感的单词配置进去
6、Command + B 编译项目,如果正常的话,项目中会多出两个文件:symbols和 codeObfuscation.h,然后将codeObfuscation.h文件导入的.pch中,还需要在Building Setting 中配置Prefix Header的位置,debug和release都要
$(SRCROOT)/$(PROJECT_NAME)/PrefixHeader.pch
7、然后Command + B 编译项目,可以在Report navigator中看到一下内容,可以看到脚本中为func.list中的每个单词生成一个随机字符串
demo链接地址:https://download.csdn.net/download/ohyee2005/10365566