勵志

勵志人生知識庫

ollvm混淆

OLLVM是一個針對LLVM的代碼混淆工具,旨在增加對逆向工程的難度。它通過在LLVM的中間表示(IR)層進行操作,利用LLVM框架的不同前端語言和目標平台的支持,實現對多種語言的混淆。OLLVM提供了幾種混淆方式,包括指令替換(sub)、控制流平坦化(fla)和控制流偽造(bcf),以及對單個函式的混淆。

指令替換(sub):將一些簡單的運算複雜化,但這種方式容易被代碼最佳化給去除。

控制流平坦化(fla):通過使用switch case結構包裹所有的真實塊,並重新賦值switch var,使得控制流變得複雜。

控制流偽造(bcf):克隆一個真實塊並隨機替換其中的一些指令,然後用一個永遠為真的條件建立一個分支,使得克隆後的塊不會被執行。

OLLVM的混淆操作不僅增加了逆向工程的難度,也使得對混淆後的代碼進行還原變得複雜。儘管存在一些還原OLLVM混淆的腳本和思路,如通過識別並標記BCF塊、Fla環節產生的控制流塊,以及使用模糊測試來覆蓋更多的分支,但這些方法並不能保證完全還原混淆前的代碼。特別是在編譯器最佳化後,混淆的特徵可能會變得模糊,使得還原更加困難。因此,OLLVM通過其設計有效地增加了軟體保護的安全性。