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 |
|
三、移植Obfuscation中的*.h
建议直接将该项目中的这部份复制过去。如果移植的是ollvm的源码,同样也需要修改这些代码中CryptoUtils.h库的引用。
四、移植代码生效
这里跟着上面的步骤对LLVM源码进行修改就行。(不要复制该项目中的PassManagerBuilder.cpp源码,版本之间可能有微小的变化从而导致编译报错)
五、编译LLVM
执行如下指令
1 |
|
线程数视自己的虚拟机的处理器数量而定。
六、测试
测试代码:
在LLVM项目目录下的build/bin目录下,进行样例测试来检查OLLVM是否移植成功:
注意,是./clang
,不是clang
,否则如果当前系统环境存在clang,则不会调用当前目录下的clang。
拖入IDA中,其控制流图如下:
可见OLLVM成功的移植到了LLVM14中!
参考:
OLLVM移植到LLVM14
http://example.com/2024/04/17/LLVM and OLLVM/OLLVM移植到LLVM14/