注:原文---念茜的博客
為了不讓攻擊者理清自己程序的敏感業(yè)務(wù)邏輯这难,于是我們想方設(shè)法提高逆向門檻仔燕。
本文就介紹一個(gè)防御技巧-------利用static關(guān)鍵字裁掉函數(shù)符號(hào)造垛。
原理
如果函數(shù)屬性為 static ,那么編譯時(shí)該函數(shù)符號(hào)就會(huì)被解析為local符號(hào)晰搀。
在發(fā)布release程序時(shí)(用Xcode打包編譯二進(jìn)制)默認(rèn)會(huì)strip裁掉這些函數(shù)符號(hào)五辽,無(wú)疑給逆向者加大了工作難度。
驗(yàn)證
寫個(gè)demo驗(yàn)證一下上述理論外恕,以一段創(chuàng)建Button的代碼為例杆逗,對(duì)應(yīng)補(bǔ)充一個(gè)static版本。
再來(lái)看一下反編的結(jié)果吁讨,對(duì)于createBtn()方法髓迎,我們可以得到它的偽代碼:
函數(shù)名雖然面目全非峦朗,但是基本操作還是清晰的建丧。
對(duì)于static_createBtn()方法呢,我們已經(jīng)無(wú)法看到它任何直觀的有價(jià)值信息了波势。
局限
當(dāng)然這種方法也有局限性翎朱。正如你所知道的,static函數(shù)尺铣,只在本文件可見拴曲。
打破局限
怎么讓別的文件也能調(diào)到本文件的static方法呢?
在本文件建造一個(gè)結(jié)構(gòu)體凛忿,結(jié)構(gòu)體里包含函數(shù)指針澈灼。把static函數(shù)的函數(shù)指針都賦在這個(gè)結(jié)構(gòu)體里,再把這個(gè)結(jié)構(gòu)體拋出去店溢。
這樣做的好處是叁熔,既隱藏了函數(shù)代碼也豐富了調(diào)用方式。