iOS代碼混淆

代碼易讀字符串混淆

混淆分許多思路曹体,比如:

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

2)易讀字符替換

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

1.首先切換到我們的項(xiàng)目目錄下,我這里是統(tǒng)一放在了Resource文件夾中响牛,創(chuàng)建兩個(gè)文件(圖1):

confuse.sh: 存放混淆的腳本

func.list:? ? ? 需要混淆的方法、變量名

圖1

此時(shí)在Resource文件夾中生成了以上兩個(gè)文件,將其導(dǎo)入項(xiàng)目中:

然后打開confuse.sh文件妆兑,添加以下腳本(圖2):

圖2

#!/usr/bin/env bash

TABLENAME=symbols

SYMBOL_DB_FILE="symbols"

#LSJDemo切換為自己的項(xiàng)目名稱

STRING_SYMBOL_FILE="$PROJECT_DIR/Demo/Resource/func.list"

CONFUSE_FILE="$PROJECT_DIR/Demo"

HEAD_FILE="$PROJECT_DIR/Demo/Resource/codeObfuscation.h"

exportLC_CTYPE=C

#取以.m或.h結(jié)尾的文件以+號(hào)或-號(hào)開頭的行 |去掉所有+號(hào)或-號(hào)|用空格代替符號(hào)|n個(gè)空格跟著<號(hào) 替換成 <號(hào)|開頭不能是IBAction|用空格split字串取第二部分|排序|去重復(fù)|刪除空行|刪掉以init開頭的行>寫進(jìn)func.list

#grep -h -r -I? "^[-+]" $CONFUSE_FILE? --include '*.[mh]' |sed "s/[+-]//g"|sed "s/[();,: *\^\/\{]/ /g"|sed "s/[ ]*$STRING_SYMBOL_FILE

#維護(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 -base6464| tr -cd'a-zA-Z'|head -c16

}

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

2.配置Phases

? ? TARGETS ---> Build Phases ---> Run Script,如(圖3):

圖3

在里面添加 $PROJECT_DIR/Demo/Resource/confuse.sh 毛仪,這句命令的意思的應(yīng)用每次啟動(dòng)的時(shí)候搁嗓,都會(huì)先去跑我們confuse.sh 腳本

然后編譯,發(fā)現(xiàn)報(bào)錯(cuò)箱靴,如(圖4):

圖4

解決方法:切換到工程目錄下腺逛,輸入命令行 chmod 755 confuse.sh 給我們的腳本本間授權(quán),如(圖5):

圖5

此時(shí)衡怀,我們?cè)倬幾g一下項(xiàng)目棍矛,然后在工程目錄下,我們會(huì)多出一個(gè)codeObfuscation.h文件抛杨,如(圖6):

圖6

這里面是用來裝混淆前 —> 混淆后的代碼對(duì)比

同樣把這個(gè)文件拉到項(xiàng)目中够委,我們?cè)俳ㄒ粋€(gè)PCH文件來引入這個(gè)文件,那么整個(gè)項(xiàng)目都可以實(shí)現(xiàn)怖现,宏的替換了慨绳。如(圖7):

圖7

然后打開PCH文件,導(dǎo)入頭文件真竖,如(圖8):

圖8

3.混淆的變量脐雪、方法名:

我想混淆以下變量、方法名恢共,這里我想測(cè)試變量战秋,把腳本文件中的必須是方法的限制去掉了,如(圖9):

圖9

那么打開 func.list 文件讨韭,一一把名稱打進(jìn)去脂信,如(圖10):

圖10

然后點(diǎn)擊編譯癣蟋,這樣子我們需要混淆的代碼就已經(jīng)混淆成功了。但是也不會(huì)影響到我們的閱讀狰闪。這里是通過宏定義來修改的疯搅,左側(cè)是混淆前,右側(cè)是混淆后埋泵,如(圖11):

圖11

注意:

1幔欧、 系統(tǒng)的方法

2、XIB中拖線的控件名

這些都不能用這個(gè)方法混淆丽声,因?yàn)闀?huì)導(dǎo)致運(yùn)行的時(shí)候出錯(cuò)礁蔗。

參考

念茜女神http://blog.csdn.net/yiyaaixuexi/article/details/29201699

附反編譯:

1.1 Class-Dunp 簡(jiǎn)介

Class-Dump是一款可以導(dǎo)出頭文件的命令行工具,改程序用于檢查objective - c運(yùn)行時(shí)信息存儲(chǔ)在Mach-O文件雁社,它生成類的聲明,類別和協(xié)議浴井。

1.2 Class-Dump 下載地址

http://stevenygard.com/projects/class-dump/

1.3 安裝

雙擊.dmg 文件打開,把里面的文件拖到? ? /usr/local/bin? 目錄下霉撵,因?yàn)槭切薷牧讼到y(tǒng)的路徑磺浙,所以需要輸入本機(jī)的密碼,這樣就可以在終端使用 class-dump 命令了徒坡。

1.4 使用

注意這里dump的是應(yīng)用后綴是.app而不是.ipa:

然后打開終端屠缭,輸入命令

class-dump -H XXX.app -o XXX

圖12

-H 后面的內(nèi)容為需要dump的 .app 文件路徑

-o 后面的內(nèi)容為輸出的頭文件保存路徑

因?yàn)槲沂潜4娴阶烂娴模缘让顖?zhí)行完成之后崭参,我就可以在桌面上找到Dump這個(gè)名字的文件夾了呵曹,并且里面已經(jīng)裝滿了我們想要的頭文件了:

圖13

打開ViewController.h,已經(jīng)是混淆過的代碼了

圖14

2.1 什么是Hopper

Hopper Disassembler是Mac上的一款二進(jìn)制反匯編器何暮,基本上滿足了工作上的反匯編的需要奄喂,包括偽代碼以及控制流圖(Control Flow Graph),支持ARM指令集并針對(duì)Objective-C的做了優(yōu)化海洼。

2.2 下載地址

官網(wǎng)地址:https://www.hopperapp.com

2.3 使用

這個(gè)工具的強(qiáng)大之處跨新,在于二進(jìn)制文件在它面前,基本是毫無遮掩的坏逢,所有函數(shù)名域帐,方法名,代碼邏輯結(jié)構(gòu)是整,你都可以一覽無遺肖揣。

鏈接:2.1 什么是Hopper

Hopper Disassembler是Mac上的一款二進(jìn)制反匯編器,基本上滿足了工作上的反匯編的需要浮入,包括偽代碼以及控制流圖(Control Flow Graph)龙优,支持ARM指令集并針對(duì)Objective-C的做了優(yōu)化。

2.2 下載地址

官網(wǎng)地址:https://www.hopperapp.com

2.3 使用

這個(gè)工具的強(qiáng)大之處事秀,在于二進(jìn)制文件在它面前彤断,基本是毫無遮掩的野舶,所有函數(shù)名,方法名宰衙,代碼邏輯結(jié)構(gòu)平道,你都可以一覽無遺。

鏈接:iOS簡(jiǎn)單逆向之:Class-Dump供炼、Hopper - 簡(jiǎn)書

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末一屋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子劲蜻,更是在濱河造成了極大的恐慌陆淀,老刑警劉巖考余,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件先嬉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡楚堤,警方通過查閱死者的電腦和手機(jī)疫蔓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來身冬,“玉大人衅胀,你說我怎么就攤上這事∷煮荩” “怎么了滚躯?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嘿歌。 經(jīng)常有香客問我掸掏,道長(zhǎng),這世上最難降的妖魔是什么宙帝? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任丧凤,我火速辦了婚禮,結(jié)果婚禮上步脓,老公的妹妹穿的比我還像新娘愿待。我一直安慰自己,他們只是感情好靴患,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布仍侥。 她就那樣靜靜地躺著,像睡著了一般鸳君。 火紅的嫁衣襯著肌膚如雪访圃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天相嵌,我揣著相機(jī)與錄音腿时,去河邊找鬼况脆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛批糟,可吹牛的內(nèi)容都是我干的格了。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼徽鼎,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼盛末!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起否淤,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤悄但,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后石抡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檐嚣,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年啰扛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嚎京。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隐解,死狀恐怖鞍帝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情煞茫,我是刑警寧澤帕涌,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站续徽,受9級(jí)特大地震影響蚓曼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炸宵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一辟躏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧土全,春花似錦捎琐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至概页,卻和暖如春籽御,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工技掏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铃将,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓哑梳,卻偏偏與公主長(zhǎng)得像劲阎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸠真,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • 前言 什么悯仙!我們的代碼拿去安全掃描啦?什么吠卷!還掃描出來問題啦锡垄?什么!源碼都別看到啦祭隔? 居于上一篇文章iOS簡(jiǎn)單逆向...
    甘邦閱讀 18,116評(píng)論 24 40
  • 前言: 在iOS移動(dòng)端開發(fā)中很多時(shí)候在考慮安全問題的時(shí)候只是單純的請(qǐng)求體加密货岭,但是在一個(gè)用戶量級(jí)很大的App上就會(huì)...
    退役程序猿閱讀 6,213評(píng)論 2 17
  • 一. 為什么要代碼混淆? 系統(tǒng)安全性很高是iOS一大特征序攘,上傳到appstore的應(yīng)用茴她,雖然已經(jīng)被系統(tǒng)加密寻拂,但并非...
    突刺刺閱讀 1,531評(píng)論 1 0
  • 該方法只能針對(duì)有.m.h的類進(jìn)行混淆程奠,靜態(tài)庫(kù)等只有.h文件的沒法進(jìn)行混淆 代碼混淆,剛剛看到是不是有點(diǎn)懵逼祭钉,反正我...
    iLeooooo閱讀 533評(píng)論 0 0
  • 寶寶:媽媽,我想去吃昨天你不讓我吃的牛仔骨垮卓。 媽媽:你腮腺炎還沒好垫桂,不能吃太油膩的。 寶寶:可是你說太大份要爸爸來...
    瑛紅閱讀 226評(píng)論 0 0