iOS安全攻防(二十二):static和被裁的符號表

發表於2014-04-10

為了不讓攻擊者理清自己程式的敏感業務邏輯,於是我們想方設法提高逆向門檻。
本文就介紹一個防禦技巧————利用static關鍵字裁掉函式符號。

原理

如果函式屬性為 static ,那麼編譯時該函式符號就會被解析為local符號。
在釋出release程式時(用Xcode打包編譯二進位制)預設會strip裁掉這些函式符號,無疑給逆向者加大了工作難度。

驗證

寫個demo驗證一下上述理論,以一段建立Button的程式碼為例,對應補充一個static版本。

再來看一下反編的結果,對於createBtn()方法,我們可以得到它的虛擬碼:

函式名雖然面目全非,但是基本操作還是清晰的。

對於static_createBtn()方法呢,我們已經無法看到它任何直觀的有價值資訊了。

侷限

當然這種方法也有侷限性。正如你所知道的,static函式,只在本檔案可見。

打破侷限

怎麼讓別的檔案也能調到本檔案的static方法呢?
在本檔案建造一個結構體,結構體裡包含函式指標。把static函式的函式指標都賦在這個結構體裡,再把這個結構體丟擲去。
這樣做的好處是,既隱藏了函式程式碼也豐富了呼叫方式。

 

相關文章