代碼混淆技術包括:
詞法轉換:詞法轉換算法是一類原理簡單、實現容易的轉換算法。程序的設計原則一般是要求對程序中用到的對象、函數與變量用易懂的方式進行命名,這樣會給攻擊者提供分析的資源和線索。詞法變換的原理就是通過對函數和變量名稱進行變換,使其違背見名知義的軟件工程原則,從而達到增大攻擊難度的目的。常用的變換規則有標識符交換、隨機字符串替換等。
流程轉換:流程轉換算法是對程序的運行流程進行轉換,使攻擊者無法掌握程序真正的運行流程,從而達到混淆的目的。流程轉換算法包括兩個部分,一部分是設計不透明謂詞,另一部分是設計改變程序流程的方法。流程轉換算法關鍵在于不透明謂詞的設計。不透明謂詞是一種混淆者可知而攻擊者卻難以判斷其值的結構。由于攻擊者無法獲知真實的原代碼,通過不透明謂詞這種結構,能方便、有效地構造轉換算法來對程序的流程進行混淆。流程轉換算法增加了程序的復雜度,其抵抗攻擊的能力非常強,但同時帶來的開銷也很大。
靜態數據動態生成:利用函數或子程序對靜態數據進行動態生成的方式混淆,能增加程序復雜度。將需要混淆的靜態數據利用函數或者子程序替代并分散嵌入各控制塊后,算法的強度與彈性能大大提升。在應用中適當地選擇混淆數據能有效增強算法的性能,可以防止對程序中所有靜態數據混淆而增加開銷,也不會造成僅對關鍵數據混淆而給攻擊者提供有效提示。
數組結構轉換:對數組的混淆方式包括將數組拆分為幾個子數組、合并幾個數組為一個、增加或減少數組的維度等。合并數組增加了程序的復雜度,拆分數組在合并數組的基礎上還增加了復雜度,而改變數組維度在這兩者之上還增加了復雜度。單獨使用一種轉換方式抵抗攻擊的性能較弱,將上述方式有效組合能大大加強抵抗攻擊的強度。
代碼流混淆:通過改變代碼的控制流程,改變了代碼的方向。這意味著盡管最終結果是相同的,但要弄清楚代碼為什么朝著某個方向或前進的方向要花費更多的時間。可以通過更改程序執行語句的順序,通過插入任意跳轉指令來更改控制圖以及將樹狀條件構造轉換為平面切換語句來執行編程中的控制流混淆。
類繼承轉換:通過對類設計結構以及類繼承關系進行混淆,可以隱藏類的設計結構以及類之間的繼承關系反映出來的程序設計思路,能有效達到抵抗攻擊的目的。類繼承轉換方法主要有合并類、分割類以及類型隱藏等。類繼承轉換提高了程序的復雜度,給程序帶來的額外開銷也很小。
數據存儲空間轉換:對數據空間位置的隨機化增加了攻擊者獲取有效信息的難度,可以避免設計者對數據以符合邏輯的方式存儲給攻擊者提供攻擊的線索與資源。這類轉換算法增加的復雜度較少,但抵抗攻擊的能力很強,具有單向性,同時算法開銷很小,通常與其他的混淆算法組合使用。
地址混淆:某些源代碼混淆安全工具使用的這項技術會更改程序數據和代碼的地址,從而導致不可預測性并使其難以利用。構建應用程序時,混淆算法會將內存中某些代碼和數據的絕對位置以及不同數據項之間的相對距離隨機化。這不僅減少了成功攻擊的可能性,還意味著即使黑客在一個應用程序或設備上成功,他們也將無法在其他應用程序或設備上復制它,從而降低了對程序進行反向工程的好處。
混淆代碼的定期更新:該技術通過定期發布經過混淆的軟件的更新來主動防止攻擊,從而阻止了黑客破解系統的企圖。通過偶爾用新混淆的實例替換現有軟件,攻擊者被迫放棄其現有分析。最后,突破混淆安全性的努力超過了所獲得的價值。
Objective-C消息調用和元數據混淆:源代碼混淆工具(例如蠻犀安全的應用程序屏蔽解決方案)以兩種方式混淆Objective-C代碼。首先,它們混淆了源代碼中包含的純文本消息調用,以確保它們不易于閱讀和編輯。其次,它們對一些Objective-C元數據進行加密,以從靜態分析工具中隱藏敏感信息,例如類別,類,方法,協議,類屬性和實例變量的名稱,以及方法參數及其類型。僅在加載混淆的應用程序時,才在運行時解密加密的數據。
回答所涉及的環境:聯想天逸510S、Windows 10。
代碼混淆技術包括:
詞法轉換:詞法轉換算法是一類原理簡單、實現容易的轉換算法。程序的設計原則一般是要求對程序中用到的對象、函數與變量用易懂的方式進行命名,這樣會給攻擊者提供分析的資源和線索。詞法變換的原理就是通過對函數和變量名稱進行變換,使其違背見名知義的軟件工程原則,從而達到增大攻擊難度的目的。常用的變換規則有標識符交換、隨機字符串替換等。
流程轉換:流程轉換算法是對程序的運行流程進行轉換,使攻擊者無法掌握程序真正的運行流程,從而達到混淆的目的。流程轉換算法包括兩個部分,一部分是設計不透明謂詞,另一部分是設計改變程序流程的方法。流程轉換算法關鍵在于不透明謂詞的設計。不透明謂詞是一種混淆者可知而攻擊者卻難以判斷其值的結構。由于攻擊者無法獲知真實的原代碼,通過不透明謂詞這種結構,能方便、有效地構造轉換算法來對程序的流程進行混淆。流程轉換算法增加了程序的復雜度,其抵抗攻擊的能力非常強,但同時帶來的開銷也很大。
靜態數據動態生成:利用函數或子程序對靜態數據進行動態生成的方式混淆,能增加程序復雜度。將需要混淆的靜態數據利用函數或者子程序替代并分散嵌入各控制塊后,算法的強度與彈性能大大提升。在應用中適當地選擇混淆數據能有效增強算法的性能,可以防止對程序中所有靜態數據混淆而增加開銷,也不會造成僅對關鍵數據混淆而給攻擊者提供有效提示。
數組結構轉換:對數組的混淆方式包括將數組拆分為幾個子數組、合并幾個數組為一個、增加或減少數組的維度等。合并數組增加了程序的復雜度,拆分數組在合并數組的基礎上還增加了復雜度,而改變數組維度在這兩者之上還增加了復雜度。單獨使用一種轉換方式抵抗攻擊的性能較弱,將上述方式有效組合能大大加強抵抗攻擊的強度。
代碼流混淆:通過改變代碼的控制流程,改變了代碼的方向。這意味著盡管最終結果是相同的,但要弄清楚代碼為什么朝著某個方向或前進的方向要花費更多的時間。可以通過更改程序執行語句的順序,通過插入任意跳轉指令來更改控制圖以及將樹狀條件構造轉換為平面切換語句來執行編程中的控制流混淆。
類繼承轉換:通過對類設計結構以及類繼承關系進行混淆,可以隱藏類的設計結構以及類之間的繼承關系反映出來的程序設計思路,能有效達到抵抗攻擊的目的。類繼承轉換方法主要有合并類、分割類以及類型隱藏等。類繼承轉換提高了程序的復雜度,給程序帶來的額外開銷也很小。
數據存儲空間轉換:對數據空間位置的隨機化增加了攻擊者獲取有效信息的難度,可以避免設計者對數據以符合邏輯的方式存儲給攻擊者提供攻擊的線索與資源。這類轉換算法增加的復雜度較少,但抵抗攻擊的能力很強,具有單向性,同時算法開銷很小,通常與其他的混淆算法組合使用。
地址混淆:某些源代碼混淆安全工具使用的這項技術會更改程序數據和代碼的地址,從而導致不可預測性并使其難以利用。構建應用程序時,混淆算法會將內存中某些代碼和數據的絕對位置以及不同數據項之間的相對距離隨機化。這不僅減少了成功攻擊的可能性,還意味著即使黑客在一個應用程序或設備上成功,他們也將無法在其他應用程序或設備上復制它,從而降低了對程序進行反向工程的好處。
混淆代碼的定期更新:該技術通過定期發布經過混淆的軟件的更新來主動防止攻擊,從而阻止了黑客破解系統的企圖。通過偶爾用新混淆的實例替換現有軟件,攻擊者被迫放棄其現有分析。最后,突破混淆安全性的努力超過了所獲得的價值。
Objective-C消息調用和元數據混淆:源代碼混淆工具(例如蠻犀安全的應用程序屏蔽解決方案)以兩種方式混淆Objective-C代碼。首先,它們混淆了源代碼中包含的純文本消息調用,以確保它們不易于閱讀和編輯。其次,它們對一些Objective-C元數據進行加密,以從靜態分析工具中隱藏敏感信息,例如類別,類,方法,協議,類屬性和實例變量的名稱,以及方法參數及其類型。僅在加載混淆的應用程序時,才在運行時解密加密的數據。
回答所涉及的環境:聯想天逸510S、Windows 10。