static和被裁的符號表

2021-07-23 22:07:38 字數 758 閱讀 4508

為了不讓攻擊者理清自己程式的敏感業務邏輯,於是我們想方設法提高逆向門檻。

本文就介紹乙個防禦技巧————利用static關鍵字裁掉函式符號。

如果函式屬性為 static ,那麼編譯時該函式符號就會被解析為local符號。

在發布release程式時(用xcode打包編譯二進位制)缺省會strip裁掉這些函式符號,無疑給逆向者加大了工作難度。

寫個demo驗證一下上述理論,以一段建立button的**為例,對應補充乙個static版本。

[objc]view plain

copy

id createbtn()  

static

id static_createbtn()    

再來看一下反編的結果,對於createbtn()方法,我們可以得到它的偽**:

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

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

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

怎麼讓別的檔案也能調到本檔案的static方法呢?

在本檔案建造乙個結構體,結構體裡包含函式指標。把static函式的函式指標都賦在這個結構體裡,再把這個結構體丟擲去。

這樣做的好處是,既隱藏了函式**也豐富了呼叫方式。

未解決符號表,匯出符號表和位址重定向表

讓我們總結一下 編譯器把乙個cpp編譯為目標檔案的時候,除了要在目標檔案裡寫入cpp裡包含的資料和 還要至少提供3個表 未解決符號表,匯出符號表和位址重定向表。未解決符號表提供了所有在該編譯單元裡引用但是定義並不在本編譯單元裡的符號及其出現的位址。匯出符號表提供了本編譯單元具有定義,並且願意提供給其...

符號表的作用和地位

在編譯程式中符號表用來存放語言程式中出現的有關識別符號的屬性資訊,這些資訊集中反映了識別符號的語義特徵屬性。在詞法分析及語法在分析過程中不斷積累和更新表中的資訊,並在詞法分析到 生成的各階段,按各自的需要從表中獲取不同的屬性資訊。不論編譯策略是否分趟,符號表的作用和地位是完全一致的。收集符號屬性 上...

符號表的作用和地位

在編譯程式中符號表用來存放語言程式 現的有關識別符號的屬性資訊,這些資訊集中反映了識別符號的語義特徵屬性。在詞法分析及語法在分析過程中不斷積累和更新表中的資訊,並在詞法分析到 生成的各階段,按各自的需要從表中獲取不同的屬性資訊。不論編譯策略是否分趟,符號表的作用和地位是完全一致的。收集符號屬性 上下...