標籤:開頭 conf 公司 iba 引用 script sele aqi efi
最近接觸銀行類項目,對app安全才有了些認識...比較尷尬,除了之前經常做的網路參數加密解密,以及防止資料重放之外,還提到了防範反編譯的風險,其實Apple算比較安全的了,反編譯過來也就看到.h檔案....但把代碼混淆還是會比較好些。
一、在項目根目錄下建立confuse.sh 和 gbFunc.list 檔案
說明:
confuse.sh 檔案在編譯過程中會執行gbFunc.list 用於自動混淆代碼時,存放過濾出來需要混淆的方法名
touch confuse.sh
touch gbFunc.list
二、建立GBConfuse.h
說明:
GBConfuse.h 是在自動混淆代碼時,將會把自動產生的字串定義成宏,存放在此檔案,也便於查看。
注意:需要把.h檔案移到專案檔外,因為放專案檔中,到時被反編譯過來,還是能得到GBConfuse.h裡面的東西的,就能通過比對,得到方法。(後面用class-dump反編譯過來就明白了...)
三、在confuse.sh中添加如下代碼
#!/usr/bin/env bash
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
#func.list路徑
STRING_SYMBOL_FILE="$PROJECT_DIR/GBFunc.list"
#專案檔路徑
CONFUSE_FILE="$PROJECT_DIR/Safedemo"
#Confuse.h路徑
HEAD_FILE="$PROJECT_DIR/GBConfuse.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 "/^GBSAFE_/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
#這裡也要做修改
echo ‘#ifndef GBConfuse_h
#define CodeConfuse‘ >> $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
需要修改的代碼在於檔案路徑:
四、添加 Run Script
五、添加 PCH 檔案
六、在ViewController中添加以"GBSAFE_"為首碼的測試方法
七、測試
運行報錯如下:
原因是.sh檔案沒有許可權,所以需要去開啟許可權。
在confuse.sh檔案目錄下,執行命令:
chmod 755 confuse.sh
運行成功!
先打包一個.ipa安裝包進行測試!
先不進行代碼混淆:
把.ipa檔案類型改成.zip,解壓得到.app檔案
建立Hear檔案夾用於儲存反編譯後得到的檔案:
用class-dump進行反編譯
class-dump -H 要破解的可執行檔路徑 -o 破解後的標頭檔存放路徑
得到沒有進行代碼混淆的檔案:
可以看到都是項目中一些.h檔案,開啟可以看到完整的方法名....
然後客戶說測試公司說不安全...
需要進行代碼混淆...
在PCH檔案中,引用GBConfuse.h:
重新打包..就可以得到混淆後的.ipa..
下面就是混淆後的結果。
總結:
其實,原理應該就是在編譯過程中,把需要混淆的代碼產生隨機字串進行替換....
iOS開發/App安全/代碼自動混淆筆記