iOS 代碼混淆(swift版)


最近項目做了安全檢查,得分有點低,主要就是因為代碼沒有混淆。

最近研究代碼混淆,顧記錄一下整個經過。

混淆原理

同網上大部分一樣,把類名、常量、變量等生成一串隨機字符串。

第一步:在相應的項目工程下新建一個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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM