OLLVM移植到LLVM14

一、前言

由于OLLVM只支持到版本4后就不再更新了,然而LLVM已经更新到了版本18了。故本文主要目的是将OLLVM移植到LLVM14上。这里参考了https://github.com/buffcow/ollvm-project。

根据项目中的提交记录,可以将修改分为三步:

  • 移植ollvm/obfuscator/lib/Transforms/Obfuscation目录(移植ollvm的Obfuscation的*.cpp)。
  • 移植ollvm/obfuscator/include/llvm/Transforms/Obfuscation目录(移植ollvm的Obfuscation的*.h)。
  • 修改LLVM源码,使移植代码生效。

二、移植Obfuscation中的*.cpp

建议直接将该项目中的这部份复制过去。如果移植的是ollvm的源码,还需要修改这些代码中CryptoUtils.h库的引用:

1
2
3
#include "llvm/CryptoUtils.h"
改成
#include "llvm/Transforms/Obfuscation/CryptoUtils.h"

三、移植Obfuscation中的*.h

建议直接将该项目中的这部份复制过去。如果移植的是ollvm的源码,同样也需要修改这些代码中CryptoUtils.h库的引用。

四、移植代码生效

这里跟着上面的步骤对LLVM源码进行修改就行。(不要复制该项目中的PassManagerBuilder.cpp源码,版本之间可能有微小的变化从而导致编译报错)

五、编译LLVM

执行如下指令

1
2
sudo cmake -S llvm -B build -G Ninja -DLLVM_ENABLE_PROJECTS="clang" -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF -DLLVM_ENABLE_NEW_PASS_MANAGER=OFF
sudo cmake --build build -j7

线程数视自己的虚拟机的处理器数量而定。

六、测试

测试代码:

在LLVM项目目录下的build/bin目录下,进行样例测试来检查OLLVM是否移植成功:

注意,是./clang,不是clang,否则如果当前系统环境存在clang,则不会调用当前目录下的clang。

拖入IDA中,其控制流图如下:

可见OLLVM成功的移植到了LLVM14中!


参考:

https://github.com/buffcow/ollvm-project

从LLVM到OLLVM学习笔记 | Whitebird’s Home (whitebird0.github.io)


OLLVM移植到LLVM14
http://example.com/2024/04/17/LLVM and OLLVM/OLLVM移植到LLVM14/
作者
gla2xy
发布于
2024年4月17日
许可协议