首页
社区
课程
招聘
[原创]如何使用LLVM编译Windows驱动(混淆&Asm)
发表于: 2020-10-18 16:29 15085

[原创]如何使用LLVM编译Windows驱动(混淆&Asm)

2020-10-18 16:29
15085

关于使用llvm编译驱动
主要用处 内联汇编 & 混淆

混淆前代码

混淆后IDA F5
图 1
图 2
这里我们使用的是 goron

这一步其实自己设置环境变量

LLVM 官方下载地址:LLVM

Vs2019 插件下载地址:llvm2019
Vs2017 插件下载地址:LLVM Compiler Toolchain
2017以下不支持

我的:

如下
图 3

Toolset.props

图 4

Toolset.targets

图 5

图 6

 
#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\n");
 
    }
    __asm
    {
        mov _Rax, rax
    }
    DPRINT("Rax = %x\n", _Rax);
 
    pDriverObj->DriverUnload = DriverUnload;
 
    return STATUS_UNSUCCESSFUL;
}
#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\n");
 
    }
    __asm
    {
        mov _Rax, rax
    }
    DPRINT("Rax = %x\n", _Rax);
 
    pDriverObj->DriverUnload = DriverUnload;

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 9
支持
分享
打赏 + 50.00雪花
打赏次数 1 雪花 + 50.00
 
赞赏  WangYe643932   +50.00 2022/08/29 感谢分享~
最新回复 (13)
雪    币: 6124
活跃值: (4661)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
2
mark
2020-10-18 19:13
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
vs2019 + wdk10 开发驱动,asm单独编写文件,混淆加壳用的vmp3.5
llvm没用过的飘过
2020-10-18 22:35
0
雪    币: 1750
活跃值: (1390)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
mark
2020-10-19 12:20
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
6666 不错。支持下
2020-10-19 16:44
0
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
前几天还研究来着,vc2008可用,但是在wdk7上替换然后编译了一大堆头文件错误出来就放弃咯。。收藏先
2020-10-21 11:40
0
雪    币: 1187
活跃值: (416)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
mark
2020-10-22 10:30
0
雪    币: 6977
活跃值: (1786)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
用llvm混淆驱动的方式我之前也尝试过,后来发现有个别当函数不支持,只编译了不包含这些函数的cpp,就没用了
2020-10-23 09:55
0
雪    币: 1519
活跃值: (2127)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
9
TopC 用llvm混淆驱动的方式我之前也尝试过,后来发现有个别当函数不支持,只编译了不包含这些函数的cpp,就没用了
writecr0这些吗,有办法解决
2020-10-24 00:19
0
雪    币: 2089
活跃值: (3933)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这个是OLLVM,不是LLVM。没必要搞什么OLLVM混淆,卡的不行,用户体验差,也保护不了任何逻辑。要保护逻辑可以上VMP,那个东西是给验证用的。
2020-10-24 17:13
0
雪    币: 6977
活跃值: (1786)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
Chords writecr0这些吗,有办法解决
是的,赐教一下
2020-10-26 13:04
0
雪    币: 711
活跃值: (253)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
mark 
2020-10-26 15:19
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
请问    “C:\Program Files\LLVM\bin\clang-cl.exe”已退出,代码为 1。 这个是什么情况呢????
2020-10-27 13:12
0
雪    币: 143
活跃值: (780)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
“C:\Program Files\LLVM\bin\clang-cl.exe”已退出,代码为 1 我也是
2022-6-19 14:05
0
游客
登录 | 注册 方可回帖
返回
//