Ollvm环境配置 及 初步使用
笔者环境:
虚拟机:系统: ubuntu22.04
分配内存:9G
分配空间:800G
分配CPU: 8核
本身没有任何Cmake,g++版本
换源
其实本身是挂了梯子的,但是换个源处理可以能更好
sudo vim /etc/apt/sources.list
开头添加这些源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

更新
sudo apt update && sudo apt upgrade -y
安装Cmake
sudo apt-get install cmake -y
安装gcc8 g++8
sudo apt-get install gcc-8 g++-8 -y
本身虚拟机无版本,无需做将版本处理。
若有版本冲突,可参考文末别的师傅的博文。
安装好之后可以看看版本

下载LLVM源码
git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git
如果没git的话自行查阅git下载方法。
修改LLVM源码
本身为char,修改为uint8_t

编译安装LLVM
首先在obfuscator同级目录打开命令行,输入
mkdir build
效果

然后cd进build
cd build/
Cmake拉进来
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF ../obfuscator/
make
make
sudo make install
sudo make install
这个过程会比较长,而且我在编译过程当中碰到了很多很多警告,最后只要进入bin里面有这四个

就能用
测试
进入这里的目录

./clang --version
有如下信息应该是没啥问题了

Ollvm初探
装好了我们就来看个效果吧。
自己整了个简单的脚本
调用一个函数 函数里面计算0到15的累加和
#include <stdio.h>
int calculateSum();
int main() {
int sum = calculateSum();
printf("0 到 15 的累加和为: %d\n", sum);
return 0;
}
int calculateSum() {
int sum = 0;
for (int i = 0; i <= 15; ++i) {
sum += i;
}
return sum;
}
我们先最简单编译一下
无操作
clang test.cpp -o test1
main

函数

眉清目秀
尝试控制流平坦化
main因为代码很简单 没啥变化
主要在函数里

尝试指令替代

没啥大变化,但是如果仔细观察的话,还是可以看到多了一些xor,sub指令
尝试虚假控制流

这块我最近在研究,是标准的bcf样式。
读的vae师傅的虚假控制流源码解读,后面也会写一篇自己的学习心得。
本篇参考 https://blog.csdn.net/weixin_51732593/article/details/126707046 https://blog.csdn.net/qq_37507251/article/details/119523584