OLLVM环境搭建-编译x86指令集可执行程序-Ubuntu 20.04

总耗时两周成功搭建OLLVM,越坑无数,记录一下过程。

主要参考:

跟着铁头干混淆2 ubuntu20.04 编译 ollvm4.0 - 移动安全王铁头 - 博客园 (cnblogs.com)

LLVM初探 - 先知社区 (aliyun.com)

能找到的资料中,对OLLVM的搭建大多依赖于NDK去编译so文件,我的目的是编译x86指令集可执行文件。

相关工具的版本信息如下:

 

 

 

 

下载 ollvm 4.0代码

git clone -b llvm-4.0  https://github.com/obfuscator-llvm/obfuscator.git 

 参考教程,需要对源码进行修改

ollvm目录/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h

690行char修改为uint8_t,参考教程中写错成uint_8

 690   Expected<std::vector<uint8_t>> readMem(char *Dst, JITTargetAddress Src,
                                      uint64_t Size) {
    // Check for an 'out-of-band' error, e.g. from an MM destructor.
    if (ExistingError)
      return std::move(ExistingError);

    return callB<ReadMem>(Src, Size);
  }

  

之后在源码文件的同级目录下

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF ../obfuscator/
make -j7

 make -j7 在编译过程中反复出现虚拟机卡死情况,在多种尝试后确定问题是因为编译中的内存不够

 需要增加交换分区,在实验中增加了4G的swap,主要参考是  如何在Ubuntu上增加swap交换空间_Linux教程_Linux公社-Linux系统门户网站 (linuxidc.com)

耗时两周最终100%编译成功

 

 

后续的过程不再配置NDK,直接在bin目录下编译源程序即可。

网上的资料中大多给出的使用方法是:

1、控制流扁平化

clang -mllvm -fla test.c -o test1

2、指令替换

clang -mllvm -sub test.c -o test2

3、控制流伪造

clang -mllvm -bcf test.c -o test

 而我会报错:

 

该错误网上找不到解决办法,在github项目的提问中最终发现蛛丝马迹

解决方法为:

在bin目录下应该这样编译程序:

./clang -mllvm -fla test.c -o test1

 将clang作为一个程序执行即可成功完成混淆

 

posted @ 2021-11-30 08:59  re0juren  阅读(947)  评论(0编辑  收藏  举报