使用指令碼對程式碼混淆
一、建立敏感字元檔案
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、配置檔案:
專案-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、定義變數和方法時避免雷同系統屬性和方法,以免造成程式碼混淆後編譯執行異常