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