iOS 對(duì)源代碼進(jìn)行混淆

前言:該方法只能針對(duì)有.m.h類進(jìn)行混淆返顺,靜態(tài)庫等只有.h文件的沒法進(jìn)行混淆

正文:

代碼混淆,剛剛看到是不是有點(diǎn)懵逼蔓肯,反正我是最近才接觸到這么個(gè)東西遂鹊,因?yàn)橹皩?duì)于代碼和APP,只需要實(shí)現(xiàn)功能就好了蔗包,根本沒有考慮什么安全問題秉扑。

而這一次應(yīng)用交付時(shí),客戶進(jìn)行安全評(píng)估提出一個(gè)問題:

使用classdump對(duì)原程序進(jìn)行dump调限,可以dump出所有源程序的函數(shù)所有信息:源程序所有函數(shù)類型舟陆,變量全部泄露。這樣的話耻矮,讓攻擊者秦躯,也就是黑客們了解了程序結(jié)構(gòu)方便逆向。

因?yàn)樵诠こ讨旭勺埃覀冞@些變量或函數(shù)命名都是有一定可讀性的踱承,例如跟用戶名相關(guān)的,那一般里面會(huì)有 userName哨免,跟密碼相關(guān)的一般會(huì)有 passWord茎活,這樣定義也是為了我們自己代碼可讀性更強(qiáng),我們修改的時(shí)候才更加的方便琢唾。但是我們相信载荔,這么個(gè)定義法,我們只是希望方便我們自己采桃,我們可不希望方便黑客們?nèi)テ平馕覀兊腁PP懒熙。

那我們先來看看用這個(gè)所謂的classdump 對(duì)原程序進(jìn)行 dump丘损,究竟用 dump 出些什么東西來:


dump

哇~所有的 .h 文件

.h文件全暴露了,那點(diǎn)開的話工扎,你里面的函數(shù)名号俐,屬性名也一樣清清楚楚:


.h文件

屬性、函數(shù)

驚了個(gè)呆定庵,那為了防止這樣全裸,這時(shí)候我們就需要用到代碼混淆了踪危。

大概什么個(gè)意思呢蔬浙?簡單點(diǎn)講,就是把你的這些個(gè)用戶名和函數(shù)名弄得沒有可讀性贞远,比如你的用戶名的變量名定義為 userName畴博,那你自己用肯定是正常的,如果黑客們 dump 出來的這個(gè)變量名會(huì)變成 abcd 或 1234 蓝仲,這樣他也就不清楚你這是用來干嗎的了俱病。

第一、在工程項(xiàng)目路徑中建立一個(gè)confuse.sh袱结、一個(gè)func.list文件

先打開終端亮隙,然后 cd 到你的項(xiàng)目工程路徑下:


工程路徑

創(chuàng)建兩個(gè)文件

這時(shí)候我們打開這個(gè)工程文件夾,可以看到垢夹,這兩個(gè)文件已經(jīng)創(chuàng)建好了


創(chuàng)建

我們創(chuàng)建的兩個(gè)文件

打開工程溢吻,把剛才創(chuàng)建的兩個(gè)文件加進(jìn)去,右鍵你的項(xiàng)目藍(lán)色標(biāo)志果元,然后選擇 Add Files to...:


添加到工程中

添加進(jìn)去了:


添加進(jìn)入了

成功添加

點(diǎn)擊 confuse.sh 促王,發(fā)現(xiàn)還是空白的,什么都沒有而晒,現(xiàn)在要在這上面加上代碼了:


粘貼

需要添加的源代碼見附錄1,(無須修改蝇狼,直接粘貼)

第二、在 .pch 文件中添加代碼

不要跟我說你的工程沒有 .pch 文件倡怎,如果真沒有迅耘,自行百度,這應(yīng)該算是標(biāo)配诈胜,常識(shí)來的豹障。

#ifdef __OBJC__

//添加混淆作用的頭文件(這個(gè)文件名是腳本confuse.sh中定義的,不要去修改)

#import"codeObfuscation.h"

#endif

寫到這里焦匈,編譯的時(shí)候是不是發(fā)現(xiàn)報(bào)錯(cuò)啦血公?剛才的 .pch 文件里面的添加的代碼居然報(bào)錯(cuò)了:


wrong

報(bào)錯(cuò)了!

不要慌缓熟,先把那句報(bào)錯(cuò)的先給注釋掉:


先注釋掉報(bào)錯(cuò)的這一行代碼

然后我們繼續(xù)往下走累魔!

第三摔笤、配置Build Phase

1:添加

Run Script


加好

添加Run Script

2:配置好 Run Script,添加命令:$PROJECT_DIR/confuse.sh


confuse.sh

配置好Run Script

然后再回到終端垦写,同樣先 cd 到工程目錄下吕世,接著我們要打開剛才 .sh 這個(gè)腳本文件的運(yùn)行權(quán)限,因?yàn)槟J(rèn)是沒有這個(gè)權(quán)限的梯投,在終端輸入以下指令:chmod 755 confuse.sh


終端

打開運(yùn)行權(quán)限

回車命辖,搞定,回到我們的工程分蓖,先 command + b 編譯一下工程尔艇,然后再把我們剛剛注釋掉的那句代碼解開:


解開

打開剛剛被我們注釋掉的代碼

再次 command + b 編譯,現(xiàn)在是不是編譯通過啦么鹤?剛剛報(bào)錯(cuò)的终娃,現(xiàn)在解決了!

基本上就搞定了蒸甜,剩下的就是添加上我們想要混淆的變量名或函數(shù)名

第四棠耕、在? func.list 文件里,寫入待混淆的函數(shù)名

如果像下面這幾個(gè)屬性跟函數(shù):


he?

需要混淆的屬性跟函數(shù)名

那么就這在 fun.list 就這么列出來就好了:


混淆

列出需要混淆的

大功告成柠新!現(xiàn)在 command + b 運(yùn)行一下窍荧,然后在哪里看結(jié)果呢,請(qǐng)看這里:


結(jié)果

運(yùn)行結(jié)果

可能這么看有點(diǎn)麻煩恨憎,那來個(gè)簡單一點(diǎn)的:


簡單

查看

哈哈搅荞,你會(huì)發(fā)現(xiàn),多了好多宏定義框咙,其實(shí)就是我們剛才的字段來的:


喲西

到這一步咕痛,你的簡單代碼混淆就算成功了。下圖分別是沒有混淆和混淆之后的代碼效果喇嘱。


dump混淆


壞事

最后需要,現(xiàn)所示的里并不一定明代混淆成功,只能明你的腳本運(yùn)行成功,.pch文件中一定要導(dǎo)#import "codeObfuscation.h"最好對(duì)自己混淆的代碼 打包成ipa進(jìn)行dump,查看你混淆的頭文件的函數(shù)名是不是隨機(jī)的字符串了.


【參考文章】

作者:wg689

鏈接:http://www.reibang.com/p/e3c408df3603

來源:簡書

附錄1:

#!/usr/bin/env bash TABLENAME=symbolsSYMBOL_DB_FILE="symbols"STRING_SYMBOL_FILE="func.list"HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"export LC_CTYPE=C #維護(hù)數(shù)據(jù)庫方便日后作排重createTable(){echo "create table$TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE} insertValue(){echo "insert into $TABLENAMEvalues('$1' ,'$2');" | sqlite3 $SYMBOL_DB_FILE} query(){echo "select * from $TABLENAMEwhere src='$1';" | sqlite3 $SYMBOL_DB_FILE} ramdomString(){openssl rand -base64 64 | tr -cd'a-zA-Z' |head -c 16}???????????????????????????? rm -f $SYMBOL_DB_FILErm -f $HEAD_FILEcreateTable touch $HEAD_FILEecho '#ifndef Demo_codeObfuscation_h#define Demo_codeObfuscation_h'>> $HEAD_FILEecho "http://confuse string at`date`" >> $HEAD_FILEcat "$STRING_SYMBOL_FILE"| while read -ra line; doif [[ ! -z "$line" ]];thenramdom=`ramdomString`echo $line $ramdominsertValue $line $ramdomecho "#define $line$ramdom" >> $HEAD_FILEfidoneecho "#endif" >>$HEAD_FILEsqlite3 $SYMBOL_DB_FILE .dump

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茉贡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子者铜,更是在濱河造成了極大的恐慌腔丧,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件作烟,死亡現(xiàn)場離奇詭異愉粤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拿撩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門衣厘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事影暴〈戆睿” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵型宙,是天一觀的道長撬呢。 經(jīng)常有香客問我,道長妆兑,這世上最難降的妖魔是什么魂拦? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮搁嗓,結(jié)果婚禮上晨另,老公的妹妹穿的比我還像新娘。我一直安慰自己谱姓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布刨晴。 她就那樣靜靜地躺著屉来,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狈癞。 梳的紋絲不亂的頭發(fā)上茄靠,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音蝶桶,去河邊找鬼慨绳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛真竖,可吹牛的內(nèi)容都是我干的脐雪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恢共,長吁一口氣:“原來是場噩夢啊……” “哼战秋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起讨韭,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤脂信,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后透硝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狰闪,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年濒生,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了埋泵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡罪治,死狀恐怖秋泄,靈堂內(nèi)的尸體忽然破棺而出琐馆,到底是詐尸還是另有隱情,我是刑警寧澤恒序,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布瘦麸,位于F島的核電站,受9級(jí)特大地震影響歧胁,放射性物質(zhì)發(fā)生泄漏滋饲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一喊巍、第九天 我趴在偏房一處隱蔽的房頂上張望屠缭。 院中可真熱鬧,春花似錦崭参、人聲如沸呵曹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奄喂。三九已至,卻和暖如春海洼,著一層夾襖步出監(jiān)牢的瞬間跨新,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工坏逢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留域帐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓是整,卻偏偏與公主長得像肖揣,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浮入,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 該方法只能針對(duì)有.m.h的類進(jìn)行混淆许饿,靜態(tài)庫等只有.h文件的沒法進(jìn)行混淆 代碼混淆,剛剛看到是不是有點(diǎn)懵逼舵盈,反正我...
    laitys閱讀 627評(píng)論 0 12
  • 該方法只能針對(duì)有.m.h的類進(jìn)行混淆陋率,靜態(tài)庫等只有.h文件的沒法進(jìn)行混淆 代碼混淆,剛剛看到是不是有點(diǎn)懵逼秽晚,反正我...
    freesan44閱讀 12,976評(píng)論 12 25
  • APP 一般經(jīng)常做的網(wǎng)絡(luò)參數(shù)加密解密瓦糟,加密方法有base64、MD5赴蝇、AES菩浙、RSA、DES等加密方法、這些加密一...
    flyrees閱讀 1,236評(píng)論 1 3
  • class-dump 可以很方便的導(dǎo)出程序頭文件劲蜻,不僅讓攻擊者了解了程序結(jié)構(gòu)方便逆向陆淀,還讓著急趕進(jìn)度時(shí)寫出的欠完善...
    無灃閱讀 576評(píng)論 1 0
  • 前言: 在iOS移動(dòng)端開發(fā)中很多時(shí)候在考慮安全問題的時(shí)候只是單純的請(qǐng)求體加密,但是在一個(gè)用戶量級(jí)很大的App上就會(huì)...
    退役程序猿閱讀 6,205評(píng)論 2 17