代碼混淆&反編譯

花了小半天的時間整了下代碼混淆以及反編譯...看了那么多帖子很多都是講的模糊兩可茫孔,基本都是要在自己去琢磨琢磨巩趁。默默的自己補一篇文章吧亦歉,新手少走點彎路哈须误。
代碼混淆主要就是不讓自己暴露在.h文件中的代碼讓別人隨便看,增加點安全性旭绒。當然鸟妙,還可以遮羞,嘿嘿~代碼風格寫的不好防止被看到挥吵。

1重父、安裝class-dump

先用終端檢測一下是否存在

class-dump

安裝的就不講了,推薦一篇帖子寫的很贊的哈忽匈,class-dump在本文中主要是用來反編譯房午。

2、創(chuàng)建文件

隨意位置創(chuàng)建一個文件夾丹允,反正最后是需要將整個文件夾添加到工程進去的郭厌。
終端命令:

cd 文件夾路徑
touch confuse.sh    //用于存放腳本
touch func.list     //用于存放需要混淆的變量或者函數

將文件夾添加到工程,并新建.h文件: codeObfuscation.h用于存放混淆前后的代碼(宏定義) 以及pch文件:PrefixHeader.pch
注意:有的人喜歡把codeObfuscation.h雕蔽、PrefixHeader.pch一次性用終端創(chuàng)建了折柠,但是對應的頭需要另外自己寫個人嫌麻煩,還是比較喜歡直接在工程里面直接創(chuàng)建哈批狐。
配置PrefixHeader.pch文件:
導入#import "codeObfuscation.h"扇售,以及設置pch文件的prefixHeader文件路徑

pch文件路徑配置.png

3、confuse.sh腳本

TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
#修改成相應的文件路徑
STRING_SYMBOL_FILE="$PROJECT_DIR/Ninety/Confuse/func.list"
#修改成相應的文件路徑
CONFUSE_FILE="$PROJECT_DIR/Ninety"
HEAD_FILE="$PROJECT_DIR/Ninety/Confuse/codeObfuscation.h"
export LC_CTYPE=C
#取以.m或.h結尾的文件以+號或-號開頭的行 |去掉所有+號或-號|用空格代替符號|n個空格跟著<號 替換成 <號|開頭不能是IBAction|用空格split字串取第二部分|排序|去重復|刪除空行|刪掉以init開頭的行>寫進func.list
#注意:需要將zyg換成你自己的函數前綴
#注意:如果需要自動混淆的請加上對應的前綴,如果只是混淆部分的又沒有前綴承冰,請注釋此部分代碼嘱根,否則只會混淆帶有前綴的函數
# 也就是所謂的自動混淆了,如果不需要就請注釋掉巷懈,如果是自動混淆就沒法混淆變量该抒,只能混淆函數
#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 "/^zyg_/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 codeObfuscation_h
#define 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

請注意看腳本的內容,里面的路徑例如func.list顶燕、codeObfuscation.h的路徑需要修改成相應自己工程的文件路徑
以及腳本里面凑保,修改codeObfuscation.h的代碼,也需要修改成相應的文件名

腳本中注意部分#grep請細看那邊的解釋涌攻,有詳細注明所謂的自動混淆欧引、以及混淆變量

注意:如果沒有修改成相應的文件路徑或者文件名的話 在編譯的時候會報錯:***/no such file or dictory之類的錯誤,反正就是找不到func.list恳谎、codeObfuscation.h文件

5芝此、配置confuse.h路徑

配置路徑就看圖吧,如果沒有配置項目沒法編譯直接報錯哈因痛。


confuse.h路徑.png

當然這邊也需要授權婚苹,下文會講到。

6鸵膏、配置需要混淆的函數或者變量

func.list將需要混淆的函數或者變量放進去膊升,如圖:


混淆的函數或者變量.png

7、confuse.sh文件授權

完成以上操作后谭企,發(fā)現編譯或者運行后廓译,報錯(貼個網絡圖,別介意懶得再運行自己的工程):


未授權錯誤.png

confuse.sh沒有權限债查,那就給他授權哈非区,打開終端,進入confuse.sh文件夾:

cd 存放confuse.sh的文件夾路徑
ls -l confuse.sh    //可以先查看下confuse.sh的權限
chmod a+x confuse.sh    // 給權限盹廷,a是指所有人
//chmod 755 confuse.sh 用此命令給權限也是可行的

運行成功后的混淆

看圖征绸,不說話。


運行成功圖.png

當然也可以查看codeObfuscation.h文件速和,每次運行混淆后的方法名都不一樣

codeObfuscation.h.png

8歹垫、calss-dump反編譯

將需要反編譯的ipa文件解壓(歸檔),獲取到Payload文件夾颠放,顯示包內容找到項目名的文件,如圖:


反編譯的文件.png

打開終端:

class-dump -H /Users/zhouyonggui/Desktop/Ninety\ 2018-07-17\ 17-07-43/Payload/Ninety.app/Ninety  -o /Users/zhouyonggui/Desktop/Confuse 

注意-H需要大寫 對應的后面是需要反編譯的文件路徑吭敢;-o需要小寫哈碰凶,后面跟著反編譯后需要存放的文件路徑

總結

總的就講這些吧,demo暫時沒有后面會上次,因為我直接把代碼混淆直接做到項目上欲低,現在懶...就沒弄demo了哈哈辕宏。如果在做代碼混淆的時候有問題可以留言,互相學習哈砾莱。
順便附上參考的連接瑞筐,都寫的很不錯哈,也很類似只是有些沒有說明:
iOS 代碼混淆基本處理
iOS安全攻防(二十三):Objective-C代碼混淆
iOS代碼混淆----自動
iOS代碼混淆
iOS class-dump反編譯和代碼混淆
class-dump最新安裝方法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末腊瑟,一起剝皮案震驚了整個濱河市聚假,隨后出現的幾起案子,更是在濱河造成了極大的恐慌闰非,老刑警劉巖膘格,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異财松,居然都是意外死亡瘪贱,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門辆毡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菜秦,“玉大人,你說我怎么就攤上這事舶掖∨缁В” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵访锻,是天一觀的道長褪尝。 經常有香客問我,道長期犬,這世上最難降的妖魔是什么河哑? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮龟虎,結果婚禮上璃谨,老公的妹妹穿的比我還像新娘。我一直安慰自己鲤妥,他們只是感情好佳吞,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棉安,像睡著了一般底扳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贡耽,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天衷模,我揣著相機與錄音鹊汛,去河邊找鬼。 笑死阱冶,一個胖子當著我的面吹牛刁憋,可吹牛的內容都是我干的。 我是一名探鬼主播木蹬,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼至耻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了镊叁?” 一聲冷哼從身側響起尘颓,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎意系,沒想到半個月后泥耀,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡蛔添,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年痰催,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迎瞧。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡夸溶,死狀恐怖,靈堂內的尸體忽然破棺而出凶硅,到底是詐尸還是另有隱情缝裁,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布足绅,位于F島的核電站捷绑,受9級特大地震影響,放射性物質發(fā)生泄漏氢妈。R本人自食惡果不足惜粹污,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望首量。 院中可真熱鬧壮吩,春花似錦、人聲如沸鸭叙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蚀浆,卻和暖如春搜吧,著一層夾襖步出監(jiān)牢的瞬間市俊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工摆昧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绅你。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓伺帘,卻偏偏與公主長得像忌锯,于是被迫代替她去往敵國和親伪嫁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內容

  • 移動互聯網時代偶垮,安卓應用被反編譯已經不是什么新鮮事了张咳。iOS系統(tǒng)安全性非常高,很少出新漏洞似舵,但是在各位工程師的不懈...
    蝸牛非牛閱讀 5,363評論 1 16
  • iOS表面上看來是比android安全的多的脚猾,在網絡上針對android的加密保護也比iOS多得多,但是這并不意味...
    張囧瑞閱讀 6,214評論 7 30
  • APP 一般經常做的網絡參數加密解密砚哗,加密方法有base64龙助、MD5、AES蛛芥、RSA提鸟、DES等加密方法、這些加密一...
    flyrees閱讀 1,236評論 1 3
  • ??本文內容 一)為什么要進行代碼混淆 二)代碼混淆的兩種方法(①宏替換 ②腳本實現替換)本文github地址,敬請...
    wg689閱讀 5,137評論 17 65
  • 一. 為什么要代碼混淆仅淑? 系統(tǒng)安全性很高是iOS一大特征称勋,上傳到appstore的應用,雖然已經被系統(tǒng)加密漓糙,但并非...
    突刺刺閱讀 1,529評論 1 0