首页
论坛
课程
招聘
[原创]用Clang-LLVM编译Windows驱动
2020-6-26 13:46 3699

[原创]用Clang-LLVM编译Windows驱动

2020-6-26 13:46
3699

踩过的坑比较多,折腾了一周总算编译出能用的驱动了


源码:

	void DriverUnload(PDRIVER_OBJECT driver_object) {

	}

	NTSTATUS NTAPI DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryString)
	{
		UNREFERENCED_PARAMETER(pRegistryString);

		pDriverObject->DriverUnload = DriverUnload;

		return STATUS_SUCCESS;
	}

效果:



方法:安装VS-LLVM插件(工具->扩展和更新->LLVM Compiler Chain)



常规

配置类型:动态库(.dll)

平台工具集:LLVM

Windows SDK版本:看着设置,一般选最新

VC++目录 

包含目录 手动指定:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\版本号\include

C:\Program Files (x86)\Windows Kits\10\Include\SDK版本号\ucrt

C:\Program Files (x86)\Windows Kits\10\Include\SDK版本号\km\crt

C:\Program Files (x86)\Windows Kits\10\Include\SDK版本号\km

C:\Program Files (x86)\Windows Kits\10\Include\SDK版本号\shared

库目录 手动指定:

C:\Program Files (x86)\Windows Kits\10\lib\SDK版本号\km\x64

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\版本号\lib\x64

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\版本号\atlmfc\lib\x64

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\VS\lib\x64

C:\Program Files (x86)\Windows Kits\10\lib\SDK版本号\ucrt\x64

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\VS\UnitTest\lib

C:\Program Files (x86)\Windows Kits\10\lib\SDK版本号\um\x64

C:\Program Files (x86)\Windows Kits\NETFXSDK\版本号\lib\um\x64

C:\Program Files (x86)\Windows Kits\NETFXSDK\版本号\Lib\um\x64


C/C++


预处理器:


AMD64;_AMD64_;_WIN64;__WIN64_;_KERNEL_MODE;__x86_64__


代码生成:


Spectre缓解:否


运行库:MD


启用C++异常:否


链接器


输入


附加依赖项:

ntstrsafe.lib

netio.lib

ntoskrnl.lib

hal.lib

wmilib.lib

BufferOverflowK.lib


忽略特定默认库:

msvcrt.lib

libcmt.lib


清单文件


生成清单:否


系统


子系统:本机 (/SUBSYSTEM:NATIVE)


驱动程序:驱动程序 (/Driver)(选错此项会导致驱动无法正常卸载)


高级


入口点:DriverEntry


设置校验和:是 (/RELEASE)(选错此项会导致驱动无法正常加载)


坑1:不支持某些intrin

用clang编译时会提示找不到__writecr0  __readcr3 __readmsr之类内核常用指令


解决方法1:修改clang\xxx\include\intrin.h,封装未实现的intrin,用__asm__让其强行支持,比如

static __inline__ void __DEFAULT_FN_ATTRS
__writecr3(unsigned long long __cr3_val) {
  __asm__ ("mov %0, %%cr3" : : "q"(__cr3_val) : "memory");
}


解决方法2:MASM写.asm,封装成函数让链接器去链接


比如

; void __stdcall AsmWriteCR2(_In_ ULONG_PTR cr2_value);
AsmWriteCR2 PROC
    mov cr2, rcx
    ret
AsmWriteCR2 ENDP

坑2:不支持SEH

__try__except结构就别想用了

解决方法1:避免使用SEH,用不了就憋用了呗


解决方法2:把需要SEH的地方用MSVC编译成lib,再链接过去


[培训]12月3日2020京麒网络安全大会《物联网安全攻防实战》训练营,正在火热报名中!

最后于 2020-6-30 11:16 被hzqst编辑 ,原因:
收藏
点赞3
打赏
分享
最新回复 (16)
雪    币: 3414
活跃值: 活跃值 (274)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
blindtiger 活跃值 1 2020-6-26 16:14
2
0
表哥牛批
雪    币: 1250
活跃值: 活跃值 (267)
能力值: ( LV3,RANK:10 )
在线值:
发帖
回帖
粉丝
のばら 活跃值 2020-6-26 22:50
3
0
雪    币: 0
活跃值: 活跃值 (194)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
咖啡_741298 活跃值 2020-6-26 23:25
4
0
用vmp不香吗?
雪    币: 9193
活跃值: 活跃值 (1635)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
hzqst 活跃值 3 2020-6-27 10:25
5
0
咖啡_741298 用vmp不香吗?
vmp太拉跨了
雪    币: 260
活跃值: 活跃值 (162)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
asd 活跃值 2020-6-28 10:42
6
0
这个整好了 期待整llvm obfuscator
雪    币: 497
活跃值: 活跃值 (564)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Chords 活跃值 2020-6-28 13:20
7
3

直接修改官方的配置就行了....


坑就是 用stl很麻烦 然后就是大表哥说的cr8的问题


用的论坛的一份开源混淆https://bbs.pediy.com/thread-255224.htm

最后于 2020-6-28 13:31 被Chords编辑 ,原因:
雪    币: 1289
活跃值: 活跃值 (279)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
caolinkai 活跃值 2020-6-29 09:12
8
0
牛人
雪    币: 1289
活跃值: 活跃值 (279)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
caolinkai 活跃值 2020-6-30 09:26
9
0
hzqst vmp太拉跨了
VS-LLVM插件  哪里有下载的?没找到啊
雪    币: 7956
活跃值: 活跃值 (432)
能力值: ( LV6,RANK:87 )
在线值:
发帖
回帖
粉丝
Lixinist 活跃值 1 2020-6-30 09:42
10
0
别问,问就是牛排
雪    币: 9193
活跃值: 活跃值 (1635)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
hzqst 活跃值 3 2020-6-30 11:16
11
0
caolinkai VS-LLVM插件 哪里有下载的?没找到啊
工具->扩展和更新->LLVM Compiler Chain
雪    币: 1289
活跃值: 活跃值 (279)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
caolinkai 活跃值 2020-6-30 16:56
12
0
hzqst 工具->扩展和更新->LLVM Compiler Chain

请问大佬 clang-cl.exe  、lld-link.exe、llvm-lib.exe 这三个不是 LLVM Compiler Chain    插件附带的吗?搜索了 各个目录页没找到

最后于 2020-6-30 17:36 被caolinkai编辑 ,原因: 222222222
雪    币: 9193
活跃值: 活跃值 (1635)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
hzqst 活跃值 3 2020-6-30 17:59
13
0
caolinkai hzqst 工具->扩展和更新->LLVM Compiler Chain 请问大佬 clang-cl.exe&am ...

需要自己安装clang

最后于 2020-6-30 18:00 被hzqst编辑 ,原因:
雪    币: 1244
活跃值: 活跃值 (857)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风中小筑V 活跃值 2020-7-3 17:39
14
0
老铁666
雪    币: 388
活跃值: 活跃值 (135)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wowocock 活跃值 1 2020-7-3 18:26
15
0
编译的驱动出了问题,自己看DUMP能定位吗?
雪    币: 4054
活跃值: 活跃值 (282)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
如斯咩咩咩 活跃值 2020-7-12 10:32
16
0
表哥牛批
雪    币: 5836
活跃值: 活跃值 (534)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
黑洛 活跃值 1 2020-8-11 02:14
17
0

编译r3稍微复杂点的项目一堆错,还是观望一下。

最后于 2020-8-11 02:14 被黑洛编辑 ,原因:
游客
登录 | 注册 方可回帖
返回