OLLVM的全方位介紹

一、OLLVM混淆工具

OLLVM是一種針對LLVM框架的混淆器,通過改變代碼的結構和控制流程等方式來隱藏程序的真實邏輯,從而增加程序的安全性。

一般而言,混淆的目標包括:1) 使程序的靜態分析變得困難,增加逆向破解的難度;2) 對抗動態分析,如反調試和反病毒軟件等。

OLLVM的混淆層次可以分為三個:基本混淆、掩蓋混淆和複雜混淆。其中,掩蓋混淆指讓分析人員無法輕易地發現控制流程,使程序難以靜態分析;複雜混淆指在程序中添加大量虛假代碼,使逆向分析者需要大量時間來區分真偽代碼。

下面是一段基於Foo函數的基本混淆示例:

define i32 @Foo(i32 %0, i32 %1) {
entry:
  %add = add i32 %1, %0
  %cmp = icmp sgt i32 %add, 5
  %sub = sub i32 %add, 1
  %tobool = icmp ne i32 %add, 1337
  %sel = select i1 %cmp, i32 %sub, i32 %add
  %ret = select i1 %tobool, i32 0, i32 %sel
  ret i32 %ret
}

二、OLLVM技能

OLLVM不僅具有混淆功效,還有其他實用技能。

其中一項比較值得注意的技能是:增加對新硬件和新架構的支持。由於硬件和架構的升級變化不斷,因此需要保持對新型號的兼容性。如果沒有類似OLLVM這樣的框架,代碼的遷移或者編譯調試會非常繁瑣。

此外,OLLVM還支持目標平台的錯誤注入。這項技能的主要應用場景是:在程序執行的過程中,通過意外注入、修改,刻意製造錯誤,從而達到測試目的,可有效降低程序崩潰風險。

三、OLLVM台詞

由於OLLVM經常用於程序混淆,其名字也被玩弄了起來,如下:

1、Oblivious LLVM(不知道的LLVM)

2、Offensive LLVM(攻擊性的LLVM)

3、Onion LLVM(洋蔥式的LLVM)

4、Obfuscating LLVM(混淆的LLVM)

當然,這裡還有一些基於名字的“梗”(僅供娛樂):

1、LLVM is Everywhere, OLLeVM is Everywhere Also

2、Life is short, Use OLLeVM

3、Trust no one, trust OLLeVM

四、OLLVM加強

針對OLLVM的一些不足,研究者也開展了多項加強研究。

1、優化混淆策略,以更好地保護程序。例如,引入AST基於push/pull模型的控制流混淆,動態混淆等等。

2、增加正確性保證和安全性證明。是為了避免混淆過程中帶來的副作用,例如混淆後程序無法運行,或者在混淆後易受攻擊等問題。

3、為高階編譯器提供使用便利性。例如,加強對日常編程語言(如Python、Java、Rust、Go)的支持。

代碼示例

以下是一段基於OLLVM的混淆代碼示例:

int Foo(int a, int b)
{
    int c = a + b;
    c = c > 5 ? (c - 1) : c;
    c = c != 1337 ? c : 0;
    return c;
}

在經過OLLVM混淆後:

define i32 @Foo(i32 %0, i32 %1) {
entry:
  %add_1 = add i32 %1, %0
  %0x = and i32 %add_1, 0x7fffffff
  %shr_1 = ashr i32 %add_1, 31
  %add_2 = add i32 %0x, %shr_1
  %cmp = icmp sgt i32 %add_2, 5
  %sub = sub i32 %add_2, 1
  %0x_1 = and i32 %sub, 0x7fffffff
  %shr = ashr i32 %sub, 31
  %and = and i32 %shr, -4
  %tobool = icmp ne i32 %add_1, 1337
  %sel = select i1 %cmp, i32 %0x_1, i32 %and
  %ret = select i1 %tobool, i32 0, i32 %sel
  ret i32 %ret
}

可以看到,原有的代碼被修改,並添加了很多無實際意義的指令,增加了逆向破解的難度。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/280784.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-21 13:04
下一篇 2024-12-21 13:04

發表回復

登錄後才能評論