iOS源碼混淆


出于對(duì)自己生產(chǎn)出代碼的尊重,要對(duì)其負(fù)責(zé),保護(hù)她的隱私,不被別人發(fā)現(xiàn)。我們希望在開發(fā)時(shí)一直保留清晰可讀的程序代碼,方便自己。同時(shí),希望編譯出來(lái)的二進(jìn)制包含亂七八糟的混淆后的程序代碼,惡心他人。

不講了,發(fā)現(xiàn)完全控制不住自己,直接上問題。

iOS源碼混淆

  • 強(qiáng)項(xiàng)目安全性
  1. 使用classdump對(duì)原程序進(jìn)行dump,可以dump出所有源程序的函數(shù)所有信息:源程序所有函數(shù)類型,變量全部泄露。(下期在分享一下如何對(duì)源程序進(jìn)行dump)在安全性的角度來(lái)講,該項(xiàng)目已經(jīng)處于高風(fēng)險(xiǎn)階段了。比如:銀行的客戶端,交易平臺(tái)等等。

  2. 首先需要得到兩個(gè)文件 confuse.sh 和 func.list,

1)打開終端:cd -> 你工程的路徑
2)創(chuàng)建兩文件:touch -> confuse.sh and fund.list

  1. 打開工程加入剛創(chuàng)建好的兩個(gè)文件


    addfile.png
  1. 當(dāng)打開confuse.sh文件,里面并沒有內(nèi)容,里面是一個(gè)腳本文件,在最下面
  1. 在.pch中添加代碼
#ifdef __OBJC__     
#import//添加混淆作用的頭文件
#import"codeObfuscation.h" 
#endif  

6.添加Run Script

$PROJECT_DIR/confuse.sh
run script.jpg
  1. 添加腳本權(quán)限,confuse.sh這個(gè)腳本默認(rèn)的權(quán)限是關(guān)閉的,打開終端到當(dāng)前文件路徑下,添加命令行$:
 chmod 755 confuse.sh
  1. 現(xiàn)在開始源碼的混淆,打開func.list


    func.png

如上圖所示,現(xiàn)在要混淆ViewDragController的方法,將這些方法名稱粘出來(lái)貼到func.list中。如下圖:


funclist.png

OK,這個(gè)時(shí)候已經(jīng)大功告成了,咱們驗(yàn)證一下結(jié)果。

funcend.png

ps:這里有點(diǎn)局限性,大型項(xiàng)目只能對(duì)相對(duì)重要的方法、屬性進(jìn)行混淆,全部混淆工作量很大,當(dāng)然這也是一個(gè)優(yōu)點(diǎn)。

感謝閱讀!?。?/p>

confuse.sh腳本內(nèi)容


TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="func.list"
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
export LC_CTYPE=C

#維護(hù)數(shù)據(jù)庫(kù)方便日后作排重
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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??本文內(nèi)容 一)為什么要進(jìn)行代碼混淆 二)代碼混淆的兩種方法(①宏替換 ②腳本實(shí)現(xiàn)替換)本文github地址,敬請(qǐng)...
    wg689閱讀 5,403評(píng)論 17 65
  • APP 一般經(jīng)常做的網(wǎng)絡(luò)參數(shù)加密解密,加密方法有base64、MD5、AES、RSA、DES等加密方法、這些加密一...
    flyrees閱讀 1,328評(píng)論 1 3
  • 該方法只能針對(duì)有.m.h的類進(jìn)行混淆,靜態(tài)庫(kù)等只有.h文件的沒法進(jìn)行混淆 代碼混淆,剛剛看到是不是有點(diǎn)懵逼,反正我...
    laitys閱讀 688評(píng)論 0 12
  • 該方法只能針對(duì)有.m.h的類進(jìn)行混淆,靜態(tài)庫(kù)等只有.h文件的沒法進(jìn)行混淆 代碼混淆,剛剛看到是不是有點(diǎn)懵逼,反正我...
    freesan44閱讀 13,112評(píng)論 12 25
  • class-dump 可以很方便的導(dǎo)出程序頭文件,不僅讓攻擊者了解了程序結(jié)構(gòu)方便逆向,還讓著急趕進(jìn)度時(shí)寫出的欠完善...
    無(wú)灃閱讀 660評(píng)論 1 0

友情鏈接更多精彩內(nèi)容