如何使用LLVM编译Windows驱动(混淆&Asm)
前言关于使用llvm编译驱动
主要用处 内联汇编 & 混淆 混淆效果&内联汇编
混淆前代码 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| #include "DriverEntry.h"
static VOID DriverUnload(_In_ PDRIVER_OBJECT DriverObject)
{
UNREFERENCED_PARAMETER(DriverObject);
return;
}
EXTERN_C NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObj, IN PUNICODE_STRING pRegistryString)
{
UNREFERENCED_PARAMETER(pRegistryString);
ULONG64 _Rax = 0;
for (size_t i = 0; i < 10; i++)
{
DPRINT("Test");
}
__asm
{
mov _Rax, rax
}
DPRINT("Rax = %x", _Rax);
pDriverObj->DriverUnload = DriverUnload;
return STATUS_UNSUCCESSFUL;
}
|
混淆后IDA F5
如何使用LLVM编译Windows驱动(混淆&Asm)
2.安装LLVM插件3.修改WDK配置1.打开PlatformToolsets目录
我的: 1
| D rogram Files (x86)Microsoft Visual Studio9EnterpriseMSBuildMicrosoftVC160PlatformsdPlatformToolsets
| 2.复制WindowsKernelModeDriver10.0并重命名
如下
如何使用LLVM编译Windows驱动(混淆&Asm)
3.修改WindowsKernelModeDriver10.0_LLVM中的配置Toolset.props 1
2
| $(VCTargetsPath)Platforms$(Platform)PlatformToolsetsllvmToolset.props
|
如何使用LLVM编译Windows驱动(混淆&Asm)
Toolset.targets 1
2
| $(VCTargetsPath)Platforms$(Platform)PlatformToolsetsllvmToolset.targets
|
如何使用LLVM编译Windows驱动(混淆&Asm)
4.配置项目- 平台工具集 选择 WindowsKernelModeDriver10.0_LLVM
如何使用LLVM编译Windows驱动(混淆&Asm)
- 选择了我们上面修改的工具及 这里就会出现 LLVM 选项 我们这里只需要 Clang-cl 其他全选否(vs2017 有三个选项)
如何使用LLVM编译Windows驱动(混淆&Asm)
- 关闭Qspectre 缓解
如何使用LLVM编译Windows驱动(混淆&Asm)
- c/c++ 命令行 从父级或项目默认设置继承 取消勾选
5. 可选- 使用带混淆的llvm 比如 ollvm 或者 goron 等其他可以在
c/c++ 命令行 其他选项 添加混淆选项 以下是goron的混淆选项1
| -mllvm -irobf-cse -mllvm -irobf-indbr -mllvm -irobf-icall -mllvm -irobf-indgv -mllvm -irobf-cff
|
如何使用LLVM编译Windows驱动(混淆&Asm)
- 6. 项目地址
- 里面包括修改好的项目 以及 修改好的编译器配置
项目地址
|