前言:
- 在iOS移動端開發(fā)中很多時候在考慮安全問題的時候只是單純的請求體加密吟税,但是在一個用戶量級很大的App上就會考慮到App安全問題比較全面,比如代碼防反編譯姿现,請求體多層次加密肠仪,帶三方支付的App會考慮簽名驗證問題备典,金額校驗等等安全策略异旧,廢話不多說下面簡單給大家講解下iOS代碼混淆防止反編譯。
分幾個步驟如下:
- 1.腳本文件為sh類型,創(chuàng)建好之后導入工程目錄下提佣。
- 2.工程內(nèi)創(chuàng)建pch文件導入腳本
- 3.工程內(nèi)創(chuàng)建pist寫入要混淆的方法關(guān)鍵字
- 4.配置Build Phase吮蛹,在工程Build Phase中添加執(zhí)行腳本路徑進行操作,執(zhí)行confuse.sh腳本拌屏。
腳本文件為sh類型,創(chuàng)建好之后導入工程目錄下潮针。
腳本文件代碼:
#!/usr/bin/env bash TABLENAME=symbols SYMBOL_DB_FILE="symbols" STRING_SYMBOL_FILE="func.list.plist" HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h" export LC_CTYPE=C #維護數(shù)據(jù)庫方便日后作排重 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 "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
創(chuàng)建pch文件導入腳本內(nèi)HEAD_FILE所定義的.h文件名
#ifndef Prefix_pch #define Prefix_pch #import "codeObfuscation.h" // Include any system framework and library headers here that should be included in all compilation units. // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
#endif /* Prefix_pch */
創(chuàng)建pist寫入方法名關(guān)鍵字
配置Build Phase,在工程Build Phase中添加執(zhí)行腳本路徑進行操作倚喂,執(zhí)行confuse.sh腳本每篷。
方法名中關(guān)鍵字寫入上述所說的plist中
編譯查看結(jié)果,直接build务唐,混淆腳本會在編譯前運行雳攘,進行字符隨機替換,并且每次build的隨機字符不同枫笛。
GitHub下載地址:https://github.com/QQ396368888/The-iOS-code-confusion.git