iOS 安全探索:字符串加密

前言

一個項(xiàng)目中的明文字符串不計(jì)其數(shù)吻商,但是有一些是程序的敏感信息的話如果不進(jìn)行加密和混淆處理,反編譯者就會很容易找到我們的敏感信息糟红。拿到這些敏感信息之后就很容易分析我們的程序艾帐,業(yè)務(wù)邏輯進(jìn)而做一些可能對我們不是很友好的事情,所以一些敏感明文字符串還是有必要做一下加密盆偿,讓敏感信息更加安全柒爸。特別是對于我們金融類的APP開發(fā)。

反編譯工具

這里介紹幾個常用的:

(1)class-dump

主要用來反編譯一個庫文件或者app的方法名事扭、屬性等聲明(即.h文件捎稚,強(qiáng)大的是反編譯出來的.h不僅僅包含頭文件中的聲明,.m中的function方法名稱也同樣能夠反編譯出來)求橄。

(2)IDA

主要用來反編譯庫文件的實(shí)現(xiàn)(當(dāng)然方法聲明同樣能夠反編譯出來今野,用class-dump主要是更加形象,有針對性)罐农,這個反編譯工具非常強(qiáng)大能夠?qū)⒑瘮?shù)的實(shí)現(xiàn)及邏輯關(guān)系条霜、流程統(tǒng)統(tǒng)顯示出來,弊端就是反編譯出來的內(nèi)容為匯編語言涵亏,需要一定匯編基礎(chǔ)的才能看懂蛔外。看起來比較頭疼溯乒。

(3)Hopper Disassembler

與IDA功能相似,主要功能都是反編譯查看方法的實(shí)現(xiàn)豹爹,這個軟件的功能相對于IDA來說裆悄,可讀性要強(qiáng)很多,反編譯出來的內(nèi)容類似于匯編與OC的運(yùn)行時的結(jié)合體臂聋,相對比較容易看出方法的具體實(shí)現(xiàn)光稼。本次也是采用此工具進(jìn)行驗(yàn)證。

代碼混淆

在探索明文字符串加密之前先來了解一下代碼混淆:

  1. 方法名混淆(對關(guān)鍵的類孩等、方法艾君,命名成與真實(shí)意圖無關(guān)的名稱)
  • 創(chuàng)建shell腳本
  • 聲明要替換的方法名列表
  • 生成對應(yīng)的轉(zhuǎn)義之后的無序字符串
  1. 邏輯混淆(添加無用又不影響邏輯的代碼片段,迷糊逆向人員)
  2. 類名方法名混淆(例如:ios-class-guard

Warning!!! 前方高能

Guideline 2.3.1 - Performance
We discovered that your app contains hidden features. Specifically, It would be appropriate to remove all code obfuscation and selector mangling or to explain in detail the purpose of its inclusion before resubmitting for review.

據(jù)說從17年開始蘋果拒審代碼混淆的APP肄方。所以項(xiàng)目整體代碼的混淆目前感覺意義不大冰垄。

第三方加固

第三方的服務(wù)(例如:網(wǎng)易云易盾)這類的加固成效如何不太清楚,這里拿出來給個參考权她,畢竟沒用過虹茶,可能是否選用要看公司的決策了逝薪。

iOS應(yīng)用加固

第三方明確說明了加固中使用了代碼混淆,不知道是使用什么黑科技混淆的蝴罪,肯定不是跑腳本的方式董济,好奇寶寶可以研究一下~~

字符串加密調(diào)研和嘗試

對于被砸殼的二進(jìn)制文件,逆向分析人員分析代碼有一條重要線索要门,也就是被硬編碼的明文字符串虏肾。比如說,你的 app 被人抓包了欢搜,某些數(shù)據(jù)請求接口也被人發(fā)現(xiàn)了封豪,那么很簡單,逆向人員可以直接拷貝特征比較明顯的字符串到 hopper 中搜索狂巢,通過查看該字符串被引用的地方撑毛,可以很快的找到相應(yīng)的邏輯代碼。對于這一步的防范唧领,需要做的就是對硬編碼的明文進(jìn)行加密藻雌。

使用靜態(tài)內(nèi)連 C 函數(shù)
  • inline函數(shù)避免了普通函數(shù)的,在匯編時必須調(diào)用call的缺點(diǎn)。
  • 取消了函數(shù)的參數(shù)壓棧斩个,減少了調(diào)用的開銷胯杭,提高效率。所以執(zhí)行速度確比一般函數(shù)的執(zhí)行速度要快受啥。

定義:

UIKIT_STATIC_INLINE NSString *testScheme() {
    return @"testtesttesttest";
}

static inline NSString * testName() {
    return @"test";
}

使用:

@"appId": testRrd(),
@"scheme" : testScheme()

結(jié)果:

使用靜態(tài)內(nèi)聯(lián)函數(shù)加密后反編譯

很明顯明文字符串還是很容易暴露出來~~
方案PASS做个!

Swift 安全性更高
  • 越獄開源社區(qū)對反編譯 Swift 的支持也不是很即時。
  • 一些反編譯工具并不支持反編譯含有 Swift 的二進(jìn)制文件(例如:class-dump)滚局。
  • 能夠反編譯 Swift 的工具也表現(xiàn)出 Swift 更安全的一面居暖。

我對同樣邏輯的同樣代碼(只是語法不同)的 OC 和 Swift 方法(方法中包含明文字符串)進(jìn)行了測試:

OC 反編譯結(jié)果
Swift 反編譯結(jié)果

上面對比明顯可以看出 OC 經(jīng)過反編譯之后暴露出來的信息更能多,并且明文字符串顯而易見藤肢。
但是如果 Swift 方法添加了對 OC 的支持(@objc)也會使安全性降低太闺。

@objc Swift 方法

現(xiàn)階段 Swift 相對 OC 來說更安全一些,等 Swift 日趨穩(wěn)定嘁圈,以及越獄開源社區(qū)的逐漸支持省骂,可能這一點(diǎn)優(yōu)勢可能就不明顯了。

UAObfuscatedString

有個開源代碼可以用最住,UAObfuscatedString钞澳,這個開源混淆代碼寫出來的字符串是以點(diǎn)語法的方式連接起來。

語法:

@"url" : NSMutableString.string.w.w.w.dot.b.a.i.d.u.dot.c.o.m

測試混淆結(jié)果:

使用 UAObfuscatedString 后反編譯

UAObfuscatedString 是通過 Category 和 Extension 來實(shí)現(xiàn)這種點(diǎn)語法拼接字符串涨缚,存在比較明顯的規(guī)律轧粟,外加它是開源的可能安全性不是很高,如單從加密的角度去使用這個開源庫感覺意義不大。

使用異或加密

原理:通過位運(yùn)算的 ^ 異或運(yùn)算符把字符串與一個指定的值進(jìn)行運(yùn)算逃延,從而改變字符串中每個字符的值览妖,這樣就可以得到一個加密后的字符串;當(dāng)把加密后的字符串作為程序輸入內(nèi)容后揽祥,異或運(yùn)算會把加密后的字符串還原為原有字符串的值讽膏。

使用:

@"key" : testMethod()
// Key 可以是0~255的Int
#define XORKEY 0xC9

static void XOREncrypt(unsigned char *str, unsigned char key) {
    unsigned char *p = str;
    while (((*p) ^= key) != '\0') {
        p++;
    }
}

static id testMethod(void) {
    unsigned char str[] = {(XORKEY ^ 'e'), (XORKEY ^ 'n'), (XORKEY ^ 'c'), (XORKEY ^ 'r'),
        (XORKEY ^ 'y'), (XORKEY ^ 'p'), (XORKEY ^ 't'), (XORKEY ^ '\0')};
    XOREncrypt(str, XORKEY);
    static unsigned char result[7];
    memcpy(result, str, 7);
    return [[NSString alloc] initWithFormat:@"%s", result];
}

使用異或加密后反編譯

這里將字符用函數(shù)指針成員的形式存儲,反編譯后拄丰,只留下了地址府树,去掉了明文字符串直接暴露的風(fēng)險(xiǎn)。

參考鏈接

https://www.hopperapp.com

iOS安全攻防(二十三):Objective-C代碼混淆

ios-class-guard

UAObfuscatedString

https://nianxi.net

https://danleechina.github.io/ios-app-security-reinforce/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末料按,一起剝皮案震驚了整個濱河市奄侠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌载矿,老刑警劉巖垄潮,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異闷盔,居然都是意外死亡弯洗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門逢勾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牡整,“玉大人,你說我怎么就攤上這事溺拱√颖矗” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵迫摔,是天一觀的道長沐扳。 經(jīng)常有香客問我,道長句占,這世上最難降的妖魔是什么迫皱? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮辖众,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘和敬。我一直安慰自己凹炸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布昼弟。 她就那樣靜靜地躺著啤它,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上变骡,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天离赫,我揣著相機(jī)與錄音,去河邊找鬼塌碌。 笑死渊胸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的台妆。 我是一名探鬼主播翎猛,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼接剩!你這毒婦竟也來了切厘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤懊缺,失蹤者是張志新(化名)和其女友劉穎疫稿,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹃两,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遗座,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了怔毛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片员萍。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拣度,靈堂內(nèi)的尸體忽然破棺而出碎绎,到底是詐尸還是另有隱情,我是刑警寧澤抗果,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布筋帖,位于F島的核電站,受9級特大地震影響冤馏,放射性物質(zhì)發(fā)生泄漏日麸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一逮光、第九天 我趴在偏房一處隱蔽的房頂上張望代箭。 院中可真熱鬧,春花似錦涕刚、人聲如沸嗡综。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽极景。三九已至察净,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盼樟,已是汗流浹背氢卡。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晨缴,地道東北人译秦。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像喜庞,于是被迫代替她去往敵國和親诀浪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,093評論 1 32
  • 讀書筆記|《我的價(jià)值觀》潘石屹著 作者簡介潘石屹延都,SOHO中國有限公司董事長雷猪、聯(lián)合創(chuàng)始人。一位被看作當(dāng)今中國最活躍...
    燕平說閱讀 188評論 0 1
  • 上一章 K城 甜成和甜小磊在家中將與甜心糕點(diǎn)所有業(yè)務(wù)往來的大小企業(yè)晰房,包括這幾年被解雇的人都查了一遍求摇,甜小苼所有的同...
    九仙月閱讀 255評論 0 1
  • 當(dāng)下中國有三種人:官人、學(xué)人殊者、農(nóng)人与境。新教育如果只有官人和學(xué)人,永遠(yuǎn)不能成功猖吴,新教育需要農(nóng)人摔刁,需要把兩條腿深...
    呂寨小學(xué)李帥洛閱讀 201評論 0 0
  • 前幾天看到一個街訪共屈,就是調(diào)查女生會不會跟一個沒車沒房的人結(jié)婚,讓我頗有感觸党窜。街訪中的很多女生都會講不會跟...
    顏瀟晨閱讀 480評論 0 0