OLLVM(以DES.c为示例进行测试)

https://blog.csdn.net/m0_72827793/article/details/135850403
之前学了DES算法,刚好用作示例进行测试一下OLLVM
OLLVM(以DES.c为示例进行测试)_第1张图片
本代码来自https://blog.csdn.net/zytjulie/article/details/123095529

clang -emit-llvm -S DES.c -o DES.ll
clang -emit-llvm -S DES.c -o des.ll -mllvm -sub -mllvm -fla -mllvm -bcf -mllvm -split

这里我生成DES.ll和des.ll
LLVM IR 中间曾面的语言
-mllvm -sub -mllvm -fla -mllvm -bcf -mllvm -split
这条命令
进行了指令替换
平坦化
虚假流控制
以及基本块切割,默认值是3
OLLVM(以DES.c为示例进行测试)_第2张图片
这两个不够直观

clang DES.c -o DES
clang DES.c -o des -mllvm -sub -mllvm -fla -mllvm -bcf -mllvm -split

我们生成可执行文件,放入IDA中
OLLVM(以DES.c为示例进行测试)_第3张图片
OLLVM(以DES.c为示例进行测试)_第4张图片
OLLVM(以DES.c为示例进行测试)_第5张图片

基本块分割即将一个基本块分割为等价的若干个基本块,在分割后的基本块之间加上无条件跳转

OLLVM(以DES.c为示例进行测试)_第6张图片
控制平坦化混淆目的是将原始的顺序执行的控制流图转换为一个看似在同一层次的基本块之间循环执行的控制流图,从而提升逆向工程分析者在静态分析中的难度
OLLVM(以DES.c为示例进行测试)_第7张图片
OLLVM 虚假控制流算法的实现基于 FunctionPass
OLLVM(以DES.c为示例进行测试)_第8张图片
不透明谓词是指一个由随机数生成的逻辑表达式,用于控制程序的执行流程。不透明谓词的特点是难以理解和预测,因此可以有效地降低逆向工程的难度。

不透明谓词的具体形式可以是任意的逻辑表达式,例如:

  • 简单的逻辑运算,例如 x == 1y > 0 等。
  • 复杂的逻辑运算,例如 x && y || z!(x && y) 等。
  • 包含随机数的逻辑运算,例如 x == random()y > random() * 100 等。

不透明谓词的生成可以使用以下方式:

  • 使用随机数生成。
  • 使用算法生成。

使用随机数生成不透明谓词是最简单的方法。在这种情况下,不透明谓词的值是随机的,因此难以理解和预测。

使用算法生成不透明谓词可以生成具有特定特性的不透明谓词。例如,可以生成不透明谓词的值具有特定的分布,或者不透明谓词的值与程序的逻辑相关联。

不透明谓词可以用于控制程序的执行流程,从而增加逆向工程的难度。例如,可以使用不透明谓词来控制程序的跳转、循环等。

在 OLLVM 虚假控制流算法中,不透明谓词用于控制程序的跳转。在生成元余基本块 1 时,算法会使用一个不透明谓词来控制程序的执行流程。如果不透明谓词的值为真,则将跳转到元余基本块 1;如果不透明谓词的值为假,则将继续执行原始基本块 1。

你可能感兴趣的:(LLVM,学习)