最近項目做了安全檢查,得分有點低,主要就是因為代碼沒有混淆。
最近研究代碼混淆,顧記錄一下整個經過。
混淆原理
同網上大部分一樣,把類名、常量、變量等生成一串隨機字符串。
第一步:在相應的項目工程下新建一個confuse.sh 和 func.list文件
$ cd /Users/xx/Desktop/xxx
$ touch confuse.sh
$ touch func.list
第二步:將新建的兩個文件拖到項目工程中,並配置confuse.sh腳本
把這兩個文件拖入工程中,並在Build Prases 中添加腳本,如下圖

第三步:把下面代碼復制到confuse.sh 中
#!/usr/bin/env bash
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="$PROJECT_DIR/func.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 CodeObfuscation_h
#define 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
第四步,修改權限
chmod 755 confuse.sh
第五步,pch 中,導入文件
#import "CodeObfuscation.h"
如果沒有的話,就新建一個,並配置好 pch 路徑
編譯一下
如果報錯"CodeObfuscation.h" file not found
把 pch 文件中這一句注釋掉,再次編譯;
//#import "CodeObfuscation.h"
然后 把這一句打開,再次編譯即可;
第六步,把需要混淆的類和變量名寫入 func.list 文件中

編譯就可以看到

恭喜,已經成功了!
參考文章:
https://www.jianshu.com/p/5b6cbbe79e78
https://www.jianshu.com/p/f3ad9c107757
