type
status
date
slug
summary
tags
category
icon
password
以前走过很多坑,花掉了很多时间,希望读到此篇文章的读者能尽早走出这个无底洞,学习一路顺风
OLLVM 简单概述
OLLVM 介绍 Obfuscator-LLVM(简称 OLLVM)是 2010 年 6 月由瑞士西部应用科学大学 (HEIG-VD) 的信息安全小组发起的一个项目。这个项目的目的是提供一个 LLVM 编译套件的开源分支,能够通过代码混淆和防篡改提供更高的软件安全性。
OLLVM 提供了三种经典的代码混淆:
- 控制流平坦化 Control Flow Flattening
- 虚假控制流 Bogus Control Flow
- 指令替代 Instruction Subsititution
环境准备
- ubuntu
- docker
- ollvm
安装 Docker
或者下面这个命令
Pull Docker 容器
容器官方地址:
然后写这个容器的大佬也写了一个编译脚本
这个shell脚本有一个地方需要加一个东西,下面会写到,为了我以后方便搭建我fork了一份仓库,加了一句,附上地址
docker-ollvm
thestar0 • Updated Aug 25, 2023
下载 OLLVM 源码
官方项目地址:
obfuscator
obfuscator-llvm • Updated Sep 19, 2024
下载工作完成,检查一下是不是有这两个文件夹,左边为编译脚本,右边为 OLLVM 源码
打补丁
去左边那个编译脚本文件夹,vim 打开里面的
ollvm-build.sh
文件在 150 行加上下面这一句最后再编译 OLLVM 编译命令
我这里是
编译时间看电脑性能,这里有个小 tips,编译的时候把虚拟机内存开大一点,多加几个 cpu 我一般编译几个小时,耐心等待 编译完成后在 obfuscator/build_release 文件夹内找到编译好的二进制文件。
创建软链接
在 obfuscator/build_release 目录执行指令创建软链接:
验证
输入 clang –version 指令确定安装是否完成
OLLVM 基本用法
控制流平坦化 (Control Flow Flattening)
可用选项:
- -mllvm -fla : 激活控制流平坦化
- -mllvm -split : 激活基本块分割
- -mllvm -split_num=3 : 指定基本块分割的数目,这里一个基本款会被分割成 3 个基本块后再进行控制流平坦化混淆
示例:
注意事项:
注意在编译时可能出现 stddef. h 和 stdarg. h 头文件不存在的错误,可以使用locate stddef. h
和locate stdarg. h
指令找到这两个头文件的位置,然后复制到 /usr/include/ 或 /usr/local/include 目录下。(我复制到/usr/include/ 就没报错了)
虚假控制流 (Bogus Control Flow)
可用选项:
- -mllvm -bcf : 激活虚假控制流
- -mllvm -bcf_loop=3 : 混淆次数,这里一个函数会被混淆 3 次,默认为 1
- -mllvm -bcf_prob=40 : 每个基本块被混淆的概率,这里每个基本块被混淆的概率为 40%,默认为 30%
示例:
指令替换 (Instruction Substitution)
可用选项:
- -mllvm -sub : 激活指令替代
- -mllvm -sub_loop=3 : 混淆次数,这里一个函数会被混淆 3 次,默认为 1
示例: