LLVM编译Windows驱动(goron/obfuscator)

Posted zhuhuibeishadiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LLVM编译Windows驱动(goron/obfuscator)相关的知识,希望对你有一定的参考价值。

1.LLVM安装:Download LLVM releases(用于编译混淆后替换bin)

        设置下环境变量:

        version见lib\\clang下的文件夹名

set LLVMInstallDir=C:\\Program Files\\LLVM
    set LLVMToolsVersion=12.0.0
    rem LLVMToolsVersion = name of the last subfolder in the path C:\\Program Files\\LLVM\\lib\\clang\\12.0.0

2.vs安装llvm插件

        2019:llvm2019 - Visual Studio Marketplace

        2017:LLVM Compiler Toolchain - Visual Studio Marketplace

3.修改WDK配置文件

        找到PlatformToolsets目录

        复制WindowsKernelModeDriver10.0并重命名WindowsKernelModeDriver10.0_LLVM

        修改Toolset.props

        

<PropertyGroup>
    <V141PropsFile>$(VCTargetsPath)\\Platforms\\$(Platform)\\PlatformToolsets\\v141\\Toolset.props</V141PropsFile>
    <V142PropsFile>$(VCTargetsPath)\\Platforms\\$(Platform)\\PlatformToolsets\\v142\\Toolset.props</V142PropsFile>
    <ClangPropsFile>$(VCTargetsPath)\\Platforms\\$(Platform)\\PlatformToolsets\\llvm\\Toolset.props</ClangPropsFile>
    
  </PropertyGroup>
  <Import Condition="Exists('$(ClangPropsFile)')" Project="$(ClangPropsFile)" />

  <Import Condition="!Exists('$(V142PropsFile)')" Project="$(V142PropsFile)" />
  <Import Condition="!Exists('$(V142PropsFile)')" Project="$(V141PropsFile)" />

         Toolset.targets

        

<PropertyGroup>
    <V141TargetsFile>$(VCTargetsPath)\\Platforms\\$(Platform)\\PlatformToolsets\\v141\\Toolset.targets</V141TargetsFile>
    <V142TargetsFile>$(VCTargetsPath)\\Platforms\\$(Platform)\\PlatformToolsets\\v142\\Toolset.targets</V142TargetsFile>
    <ClangTargetsFile>$(VCTargetsPath)\\Platforms\\$(Platform)\\PlatformToolsets\\llvm\\Toolset.targets</ClangTargetsFile>

  </PropertyGroup>
  
  <Import Project="$(WDKContentRoot)\\build\\WindowsDriver.common.targets" Condition="Exists('$(WDKContentRoot)\\build\\WindowsDriver.common.targets')"/>
  <Import Condition="Exists('$(ClangTargetsFile)')" Project="$(ClangTargetsFile)" />
  <Import Condition="!Exists('$(V142TargetsFile)')" Project="$(V142TargetsFile)" />
  <Import Condition="!Exists('$(V142TargetsFile)')" Project="$(V141TargetsFile)" />

4.平台工具集选择10.0_LLVM

选择完确认后重新打开属性页会出现LLVM,将Use lld-link设为否

 接着禁用spectre

 c/c++命令行 其他选项 从父级继承勾去掉

混淆命令见最后

现在工程环境已经ok了,

去编译带混淆的llvm替换官方的llvm工具

本文章使用

heroims/obfuscator at llvm-9.0 (github.com)

amimo/goron: Yet another llvm based obfuscator (github.com)

 选择其一即可,推荐goron

编译obfuscator使用mingw

1.Download | CMake (安装时直接选择添加PATH)

2.Downloads [mingw-w64](手动添加bin到PATH)

3.

git clone -b llvm-9.0.1 https://github.com/heroims/obfuscator
cd obfuscator
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -G "MinGW Makefiles" ../
mingw32-make.exe -j7

4.编译大概20分钟左右,编译完成后把bin目录的文件全部复制到官方下载的bin目录替换(编译成功bin目录必有clang.exe)

5.打开配置好的驱动工程文件 c/c++ 命令行 添加

-mllvm -bcf -mllvm -bcf_prob=73 -mllvm -bcf_loop=1 -mllvm -sub -mllvm -sub_loop=5 -mllvm -fla -mllvm -split_num=5 -mllvm -aesSeed=ABCDBEEFDEADDVBEDEADBEEFDEADERTG

具体意思见Features · obfuscator-llvm/obfuscator Wiki (github.com)

编译goron

使用vs2019或2017编译

git clone https://github.com/amimo/goron.git -b llvm-7.1.0
cd goron
mkdir build
cd build
cmake -DLLVM_ENABLE_PROJECTS=clang -G "Visual Studio XXXX" -A x64 -Thost=x64 ..\\llvm

xxxx根据你的vs版本,不知道名字先随便输一个错误的比如就xxx,会列出全部的名字,选择一个你有的vs版本名即可

vs开llvm.sln 有两个坑

1.找到LLVMMIPO和LLVMObfuscator工程

        分别在其预定义中添加ENDIAN_LITTLE定义

2.clangDaemon\\CodeComplete.h 用记事本打开编码保存为为UNICODE L1200

接着找到ALL_BUILD工程 编译release x64即可.过程大概30分钟左右

编译成功bin目录必有clang.exe,将bin目录的所有文件复制到官网的llvm bin目录替换

打开配置好的驱动工程.

c/c++命令行 其它选项添加

-mllvm -irobf-cse -mllvm -irobf-indbr -mllvm -irobf-icall -mllvm -irobf-indgv -mllvm -irobf-cff

具有意思见goron github说明

对于一些内联汇编指令不能使用,可以用.asm

参考:

[原创]如何使用LLVM编译Windows驱动(混淆&Asm)-编程技术-看雪论坛-安全社区|安全招聘|bbs.pediy.com

以上是关于LLVM编译Windows驱动(goron/obfuscator)的主要内容,如果未能解决你的问题,请参考以下文章

LLVM编译Windows驱动(goron/obfuscator)

在 Windows 上使用 CMake 和 MinGW 链接 LLVM 库

如何使用 LLVM 在 Windows 上为 ARM 编译 C++ 程序?

使用 LLVM 在 Windows 上的 QtCreator 编译中没有创建目标的规则

windows 7 x64用cmake,mingw32安装LLVM,编译时报错MemoryBuffer.cpp:381:25: error

编译器LLVM3.8发布