1. 程式人生 > >使用指令碼對程式碼混淆

使用指令碼對程式碼混淆


一、建立敏感字元檔案

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、定義變數和方法時避免雷同系統屬性和方法,以免造成程式碼混淆後編譯執行異常