1、在項目中創建一個 CodeObfuscation
文件夾
2、在 CodeObfuscation
文件夾下創建 codeObfuscation.h
頭文件
image.png
3、在 CodeObfuscation
文件夾下創建 confuse.sh
image.png
在 confuse.sh
文件中添加以下代碼
TABLENAME=symbols
SYMBOL_DB_FILE="$PROJECT_DIR/TestDemo/CodeObfuscation/symbols"
#TestDemo切換為自己的項目名稱
STRING_SYMBOL_FILE="$PROJECT_DIR/TestDemo/CodeObfuscation/func.list"
#CONFUSE_FILE="$PROJECT_DIR/TestDemo"
HEAD_FILE="$PROJECT_DIR/TestDemo/CodeObfuscation/codeObfuscation.h"
export LC_CTYPE=C
#取以.m或.h結尾的文件以+號或-號開頭的行 |去掉所有+號或-號|用空格代替符號|n個空格跟著<號 替換成 <號|開頭不能是IBAction|用空格split字串取第二部分|排序|去重復|刪除空行|刪掉以init開頭的行>寫進func.list
#grep -h -r -I "^[-+]" $CONFUSE_FILE --include '*.[mh]' |sed "s/[+-]//g"|sed "s/[();,: *^/{]/ /g"|sed "s/[ ]*</</"| sed "/^[ ]*IBAction/d"|awk '{split($0,b," "); print b[2]; }'| sort|uniq |sed "/^$/d"|sed -n "/^dt_/p" >$STRING_SYMBOL_FILE
#維護數據庫方便日后作排重,以下代碼來自念茜的微博
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
#這里修改為創建的 `.h` 頭文件
echo '#ifndef TestDemo_codeObfuscation_h
#define TestDemo_codeObfuscation_h' >> $HEAD_FILE
echo "http://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、新建一個 Empty 文件,命名為 func.list
image.png
5、將 codeObfuscation.h
添加到 .pch
文件中
image.png
6、在 TARGETS 中添加 Run Script
image.png
將 confuse.sh
的路徑添加到 Run Script 中
image.png
$PROJECT_DIR/TestDemo/CodeObfuscation/confuse.sh
以上完成后,點擊 Run
運行程序。
運行后可能會出現無權限錯誤
image.png
解決方法:
1、打開終端, cd 到
CodeObfuscation
文件夾2、輸入
sudo chmod 777 confuse.sh
,更改文件權限為可讀可寫可運行,輸入本機密碼,回車即可。回到 Xcode , 重新運行項目,即可成功。
在 func.list
中加入要混淆的方法名,運行程序
混淆的方法
混淆后
混淆成功后,點擊 Jump to Definition
可以跳轉到 codeObfuscation.h
中
混淆成功后可以跳轉到codeObfuscation中