Objective-C 代碼混淆

class-dump 可以很方便的導出程序頭文件邢锯,不僅讓攻擊者了解了程序結(jié)構(gòu)方便逆向彼城,還讓著急趕進度時寫出的欠完善的程序給同行留下笑柄。 所以候生,我們迫切的希望混淆自己的代碼。

混淆的常規(guī)思路

混淆分許多思路绽昼,比如:

1)花代碼花指令唯鸭,即隨意往程序中加入迷惑人的代碼指令

2)易讀字符替換 等等

防止 class-dump 出可讀信息的有效辦法是易讀字符替換。

Objective-C 的方法名混淆

混淆的時機

我們希望在開發(fā)時一直保留清晰可讀的程序代碼硅确,方便自己目溉。 同時,希望編譯出來的二進制包含亂七八糟的混淆后的程序代碼菱农,惡心他人缭付。

因此,我們可以在 Build Phrase 中設定在編譯之前進行方法名的字符串替換循未。

混淆的方法

方法名混淆其實就是字符串替換陷猫,有 2 個方法可以,一個是 #define的妖,一個是利用 tops绣檬。

利用 #define 的方法有一個好處,就是可以把混淆結(jié)果合并在一個 .h 中嫂粟,在工程 Prefix.pch 的最前面 #import 這個 .h 娇未。不導入也可以編譯、導入則實現(xiàn)混淆星虹。

單段的 selector 零抬,如 func: ,可以通過 #define func 來實現(xiàn)字符串替換搁凸。

多段的 selector媚值,如 a:b:c: ,可以通過分別 #define a 护糖、b褥芒、c 來實現(xiàn)字符串替換。

我的混淆工具

我寫了個簡易的混淆腳本嫡良,主要思路是把敏感方法名集中寫在一個名叫 func.list 的文件中锰扶,逐一 #define 成隨機字符,追加寫入 .h 寝受。

腳本如下:

#!/usr/bin/env bash

TABLENAME=symbols

SYMBOL_DB_FILE="symbols"

STRING_SYMBOL_FILE="func.list"

HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"

export LC_CTYPE=C

#維護數(shù)據(jù)庫方便日后作排重

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


操作步驟

1.將混淆腳本 confuse.sh 放到工程目錄下 mv confuse.sh your_proj_path/

2.修改 Prefix.pch

打開 Xcode坷牛,修改 XXX-Prefix.ch ,添加混淆頭文件:


#ifdef __OBJC__? ? ? #import#import//添加混淆作用的頭文件(這個文件名是腳本confuse.sh中定義的)

#import "codeObfuscation.h"

#endif

3.配置 Build Phase

在工程 Build Phase 中添加執(zhí)行腳本操作很澄,執(zhí)行 confuse.sh 腳本京闰,如圖:

4.創(chuàng)建函數(shù)名列表 func.list 颜及,寫入待混淆的函數(shù)名,如:

-(void)sample;

-(void)seg1:(NSString *)string seg2:(NSUInteger)num;

就這樣寫:

sample

seg1

seg2

并將文件放置于與 confuse.sh 腳本同級

mv func.list your_proj_path/

5.編譯查看結(jié)果

直接 build蹂楣,混淆腳本會在編譯前運行俏站,進行字符隨機替換,并且每次 build 的隨機字符不同痊土,如圖:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肄扎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赁酝,更是在濱河造成了極大的恐慌犯祠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酌呆,死亡現(xiàn)場離奇詭異衡载,居然都是意外死亡,警方通過查閱死者的電腦和手機肪笋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門月劈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人藤乙,你說我怎么就攤上這事〔涯梗” “怎么了坛梁?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長腊凶。 經(jīng)常有香客問我划咐,道長,這世上最難降的妖魔是什么钧萍? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任褐缠,我火速辦了婚禮,結(jié)果婚禮上风瘦,老公的妹妹穿的比我還像新娘队魏。我一直安慰自己,他們只是感情好万搔,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布胡桨。 她就那樣靜靜地躺著,像睡著了一般瞬雹。 火紅的嫁衣襯著肌膚如雪昧谊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天酗捌,我揣著相機與錄音呢诬,去河邊找鬼涌哲。 笑死,一個胖子當著我的面吹牛尚镰,可吹牛的內(nèi)容都是我干的膛虫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钓猬,長吁一口氣:“原來是場噩夢啊……” “哼稍刀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起敞曹,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤账月,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后澳迫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體局齿,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年橄登,在試婚紗的時候發(fā)現(xiàn)自己被綠了抓歼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡拢锹,死狀恐怖谣妻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卒稳,我是刑警寧澤蹋半,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站充坑,受9級特大地震影響减江,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捻爷,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一辈灼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧也榄,春花似錦巡莹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棵介,卻和暖如春钉鸯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背邮辽。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工唠雕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贸营,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓岩睁,卻偏偏與公主長得像钞脂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捕儒,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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

  • 注:原文---念茜的博客 class-dump可以很方便的導出程序頭文件冰啃,不僅讓攻擊者了解了程序結(jié)構(gòu)方便逆向,還讓...
    richar_閱讀 528評論 0 0
  • 參考原文:iOS安全攻防(二十三):Objective-C代碼混淆 混淆本質(zhì)就是進行宏替換刘莹,讓別人使用class-...
    耳獨閱讀 667評論 0 0
  • 前言: 在iOS移動端開發(fā)中很多時候在考慮安全問題的時候只是單純的請求體加密阎毅,但是在一個用戶量級很大的App上就會...
    退役程序猿閱讀 6,205評論 2 17
  • 1.終端 cd Desktoptouch confuse.sh 隨便找個編輯器打開 confuse.sh文件〉阃洌拷貝...
    客三消閱讀 1,965評論 2 50
  • 然后將混淆腳本寫入confuse.sh文件里面 !/usr/bin/env bash TABLENAME=symb...
    莼藍Oo閱讀 1,524評論 2 1