依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

限时开通VIP永久会员,可免费下载所有附件
查看: 19|回复: 0

利用OLLVM编译windows驱动

[复制链接] 主动推送

1万

主题

1万

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11645
发表于 5 天前 | 显示全部楼层 |阅读模式
利用OLLVM编译windows驱动
环境搭建
OLLVM的坑多的离谱,所以请100%按照本文搭建。
  • 开发工具选择:VS2017社区版。VS2019别想了,编译应用层还行,驱动折磨死人。
  • LLVM版本:12.0.0 。
  • OLLVM版本:来自大佬的仓库:https://github.com/0x3f97/ollvm-12.x 。可以自己按照方法编译或者下载我这边提供的编译好的文件。不推荐自己编译,如果非要自己来,不要用VS2019!!!。
所有文件下载地址
链接:https://pan.baidu.com/s/1JJuWIypPmZa86kD2_QSkVQ?pwd=xz60
提取码:xz60
--来自百度网盘超级会员V99999999999999的分享
环境安装
  • 下载网盘里的VS2017安装,这步就不用说了。
  • 安装网盘里的WDK。
  • 安装网盘里的VS2017插件:llvm.vsix。
  • 安装网盘里的LLVM-12.0.0-win64。一直下一步即可,环境变量一会自己配置。
  • 解压网盘里的OLLVM.zip至LLVM安装目录,全部覆盖。
  • 将网盘里的zlib.dll复制到LLVMin目录中,这是clang-cl的运行必需库。
系统环境变量
在系统变量中加两个变量:LLVMInstallDir、LLVMToolsVersion。分别是LLVM根目录及 12.0.0

利用OLLVM编译windows驱动

利用OLLVM编译windows驱动

VS工具集配置
找到PlatformToolsets目录,直接搜就行,找到X64路径的那个版本(如果你是其他平台驱动就找对应平台的)。

利用OLLVM编译windows驱动

利用OLLVM编译windows驱动


复制一份WindowsKernelModeDriver10.0。

利用OLLVM编译windows驱动

利用OLLVM编译windows驱动


修改复制后的WindowsKernelModeDriver10.0中的Toolset.props及Toolset.targets,具体如下:
  • Toolset.props
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <ropertyGroup>
        $(VCTargetsPath)Platforms$(Platform)PlatformToolsets 141Toolset.props
        $(VCTargetsPath)Platforms$(Platform)PlatformToolsets 142Toolset.props
        $(VCTargetsPath)Platforms$(Platform)PlatformToolsetsllvmToolset.props

      
      

      
      

  • 利用OLLVM编译windows驱动

    利用OLLVM编译windows驱动
  • Toolset.targets
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <ropertyGroup>
        $(VCTargetsPath)Platforms$(Platform)PlatformToolsets 141Toolset.targets
        $(VCTargetsPath)Platforms$(Platform)PlatformToolsets 142Toolset.targets
        $(VCTargetsPath)Platforms$(Platform)PlatformToolsetsllvmToolset.targets

      

      
      
      
      

    利用OLLVM编译windows驱动

    利用OLLVM编译windows驱动

写个demo
随便创建个driver项目,vs的配置这样弄:
  • 常规

    • 平台工具集选你复制后的WindowsKernelModeDriver10.0
  • LLVM:Use lld-link 选为否。否则编译时候会提示各种参数错误。
  • C/C++

    • 命令行

      • 从父级或项目默认设置继承 取消勾选!!!
      • 其他选项:
        1
        -mno-sse -mno-mmx -D__CUDACC__ -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH -mllvm -sobf -mllvm -bcf -mllvm -bcf_prob=99 -mllvm -bcf_loop=1 -mllvm -sub -mllvm -sub_loop=5 -mllvm -fla -mllvm -split_num=5 -mllvm -aesSeed=DEADBEEFDEADCODEDEADBEEFDEADCODE



  • 连接器

    • 常规
      • 启用增量链接:否
      • 将连接器警告视为错误:否
    • 清单文件
      • 生成清单:否
      • 调试:全部清空。不过对于驱动没啥作用,清空就完事了。
    • 高级
      • 设置校验和:是。 这是默认的,但是确认一下。

  • 其余正常开发驱动时怎么设置就怎么设置,C/C++部分去掉继承后就不用再设置其他的了。

然后正常编译就行了。

利用OLLVM编译windows驱动

利用OLLVM编译windows驱动

利用OLLVM编译windows驱动

利用OLLVM编译windows驱动

利用OLLVM编译windows驱动

利用OLLVM编译windows驱动




OLLVM参数
  • sobf:开启字符串加密
  • bcf_prob:每个基本代码块的混淆概率,拉到100就行。
  • bcf_loop:每个函数的混淆次数。写多少都行
  • sub_loop:这个东西影响编译速度与编译后的文件大小,不宜过大。1、2、3都行。
弱外部定义冲突
如果开启了字符串加密,确保所有源码文件中不要出现两个内容完全相同的字符串即可,如果相同字符串在两个地方用到了,要么写一个函数去返回,要么extern。

利用OLLVM编译windows驱动

利用OLLVM编译windows驱动

下面这个会报错:
1
2
3
4
5
6
7
8
EXTERN_C NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) {
    //代码
    char * gjg1 = "dasdasdasdasda";
    char * gjg2 = "dasdasdasdasda";
    DbgPrintEx(77, 0, gjg1);
    DbgPrintEx(77, 0, gjg2);
    return STATUS_UNSUCCESSFUL;
}

下面这个则不会报错
1
2
3
4
5
6
7
8
EXTERN_C NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) {
    //代码
    char * gjg1 = "dasdasdasdasda";
    char * gjg2 = "dasdasdasdasda1";
    DbgPrintEx(77, 0, gjg1);
    DbgPrintEx(77, 0, gjg2);
    return STATUS_UNSUCCESSFUL;
}

下面这个也不会报错
1
2
3
4
5
6
7
8
9
10
11
12
char * fuck(){
    return "dasdasdasdasda";
}

EXTERN_C NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) {
    //代码
    char * gjg1 = fuck();
    char * gjg2 = fuck();
    DbgPrintEx(77, 0, gjg1);
    DbgPrintEx(77, 0, gjg2);
    return STATUS_UNSUCCESSFUL;
}



相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员5折;永久VIP免费
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|小黑屋|依星资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2024-10-28 16:55

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表