iOS安全–使用static inline方式編譯函數(shù),防止靜態(tài)分析

我們知道一般的函數(shù)調(diào)用都會通過call的方式來調(diào)用,這樣讓攻擊很容易對一個函數(shù)做手腳,如果是以inline的方式編譯的會,會把該函數(shù)的code拷貝到每次調(diào)用該函數(shù)的地方。而static會讓生成的二進(jìn)制文件中沒有清晰的符號表,讓逆向的人很難弄清楚邏輯。
下面我們來看看一個普通函數(shù)及其反匯編代碼:

編譯,反匯編結(jié)果如下:


Snip20150118_6

這樣可以很明顯的看到isValidate的調(diào)用,而且很容易使用斷點+commands的方法讓其始終返回1.
下面使用inline的方式來編譯:

int isValidate(int id) __attribute__ ((always_inline));

編譯,反匯編結(jié)果如下:


Snip20150118_7

在每次調(diào)用的時候都會把代碼拷貝一次。
再來看看static inline的方式來編譯的反匯編代碼:

現(xiàn)在沒有符號表了。

本文鏈接:http://www.blogfshare.com/ioss-static-inline.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容