OLLVM(Obfuscated LLVM)是一種用於LLVM中間表示(Intermediate Representation)的反混淆技術,它通過一系列轉換來增加代碼的複雜性和難以理解性。OOLLVM的主要組成部分包括:
BCF (Block Copy and Fill): 創建一個假的代碼塊,該塊克隆了一個真實存在的代碼塊,並隨機替換了一些指令。然後,通過一個永遠為真的條件分支到這個克隆的塊,但確保這個克隆的塊不會被執行。
FLA (Control Flow Flattening): 將所有的基本塊用switch-case結構包裹起來,每個基本塊執行完畢後都會重新賦值switch變數。對於存在分支的塊,使用select指令,並跳轉回switch結構的起始代碼塊(分發器),根據switch變數的值來決定執行下一個基本塊。
SUB (Substitution): 通過將一條運算指令替換為多條等價的運算指令,來增加指令序列的長度和複雜性。
SPLIT (Basic Block Splitting): 利用隨機數產生分割點,將一個基本塊分割為兩個部分,並使用絕對跳轉來連線這兩個部分。這樣做的目的是增加控制流的複雜性。
通過這些技術,OLLVM能夠有效地提高LLVM代碼的混淆級別,使得反編譯後的代碼更加難以理解和分析。