iOS-代碼簡單混淆

這里生成混淆代碼的方法我們通過shell腳本來實現(xiàn),同時我們需要一個文檔來寫入我們需要進行混淆的方法名或是變量名。

  • 打開終端,cd到文件所在目錄,使用
touch confuse.sh
touch func.list
  • 寫入shell腳本
#!/bin/bash

# 這是Shell腳本,如果不懂shell,自行修煉:http://www.runoob.com/linux/linux-shell.html

# 以下使用sqlite3進行增加數(shù)據(jù),如果不了解sqlite3命令,自行修煉:http://www.runoob.com/sqlite/sqlite-tutorial.html

#數(shù)據(jù)表名
TABLENAME="CodeObfuscationOC"

#數(shù)據(jù)庫名
SYMBOL_DB_FILE="CodeObfuscation.db"

#要被替換的方法列表文件 Demo是項目名稱
STRING_SYMBOL_FILE="$PROJECT_DIR/recorder/func.list"

#被替換后的宏定義在此文件里
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/CodeObfuscation.h"

#維護數(shù)據(jù)庫方便日后做bug排查
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
}

#生成隨機16位名稱
randomString()
{
openssl rand -base64 64 | tr -cd 'a-zA-Z' | head -c 16
}

#刪除舊數(shù)據(jù)庫文件
rm -f $SYMBOL_DB_FILE

#刪除就宏定義文件
rm -f $HEAD_FILE

#創(chuàng)建數(shù)據(jù)表
createTable

#touch命令創(chuàng)建空文件,根據(jù)指定的路徑
touch $HEAD_FILE
echo '#ifndef CodeObfuscation_h
#define CodeObfuscation_h' >> $HEAD_FILE
echo "http://confuse string at `date`" >> $HEAD_FILE

#使用cat將方法列表文件里的內(nèi)容全部讀取出來,形成數(shù)組,然后逐行讀取,并進行替換
cat "$STRING_SYMBOL_FILE" | while read -ra line;
do
if [[ ! -z "$line" ]]
then
random=`randomString`
echo $line $random

#將生成的隨機字符串插入到表格中
insertValue $line $random

#將生成的字符串寫入到宏定義文件中,變量是$HEAD_FILE
echo "#define $line $random" >> $HEAD_FILE
fi
done
echo "#endif" >> $HEAD_FILE
sqlite3 $SYMBOL_DB_FILE .dump
  • 添加run script命令
    js.png

    然后添加$PROJECT_DIR/recorder/confuse.sh

  • 給腳本授權(quán)

接下來還是在我們項目的文件夾下,通過終端給我們的腳本賦予最高權(quán)限

chmod 777 confuse.sh
  • 添加預(yù)編譯文件pch并配置好pch文件路徑(不再贅述)
  • 生成CodeObfuscation.h文件

這時候我們編譯一下代碼,會發(fā)現(xiàn)項目中多出了一個CodeObfuscation.h文件(如果沒有,可到項目文件夾中找,我的就是在文件夾里找到的- -,然后拖進項目)。這個文件就是替換方法名的文件,我們在PCH文件中引入他。

  • 在func.list中添加準備替換的方法名

在項目中點開之前拖進來的func.list文件,然后在里面加入自己想要混淆的方法名或者變量名,\color{red}{注意:方法名和系統(tǒng)方法名不要相同}

add_Timer
removeTimer
testName
  • 結(jié)果

編譯之后

#ifndef CodeObfuscation_h
#define CodeObfuscation_h
//confuse string at Thu Feb  6 10:15:57 CST 2020
#define add_Timer JgljUNExphlljzLU
#define removeTimer twZJFmYFQxcUaXFU
#define testName UGxeiEiyWEpdbgTa
#endif

看到 CodeObfuscation有這種變化,恭喜你,已經(jīng)代碼混淆成功。即使通過class-dump反編出來的,也只是一堆亂碼。

  • 需要注意的幾點

\color{red}{不可以混淆iOS中的系統(tǒng)方法;}
\color{red}{不可以混淆iOS中init等初始化方法;}
\color{red}{不可以混淆xib的文件,會導(dǎo)致找不到對應(yīng)文件;}
\color{red}{不可以混淆storyboard中用到的類名;}
\color{red}{混淆有風(fēng)險,有可能會被App Store以2.1大禮包拒掉。}

雖然比較繁瑣,但是親測有效,有問題可以寫留言,對諸位有幫助的話我心甚慰!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 混淆原理 代碼編譯階段將符號(方法名、屬性名等)替換成隨機生成的字符串 長話短說,直接上步驟。 混淆步...
    開心的小嬌閱讀 624評論 2 2
  • iOS表面上看來是比android安全的多的,在網(wǎng)絡(luò)上針對android的加密保護也比iOS多得多,但是這并不意味...
    張囧瑞閱讀 6,278評論 7 30
  • 目的 為了進一步增加應(yīng)用的安全性,防止我們的應(yīng)用程序很容易的被攻擊者分析、破解、重打包,提高攻擊者逆向分析應(yīng)用的難...
    miracle洛洛閱讀 4,454評論 3 21
  • 混淆原理 代碼編譯階段將符號(方法名、屬性名等)替換成隨機生成的字符串 長話短說,直接上步驟。 混淆集成步驟 步驟...
    權(quán)宜平和閱讀 41,497評論 68 110
  • 最近在聽徐文兵老師的《中醫(yī)太美之黃帝內(nèi)經(jīng)》,講述了很多的行醫(yī)經(jīng)歷和對黃帝內(nèi)經(jīng)的解釋。其中老師聊到有一次為病人看病,...
    秋秋小Q閱讀 99評論 0 0

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