首页
社区
课程
招聘
[原创]编写驱动加载程序
发表于: 2019-2-27 23:25 19246

[原创]编写驱动加载程序

2019-2-27 23:25
19246

最近想自己写个驱动加载程序。(平常用的加载程序不能拖动选择文件)
于是梳理一下驱动加载的两种方法

需要的函数:
通过OpenSCManager函数打开SCM,获取其句柄
通过CreateService函数利用SCM句柄创建一个服务
通过ControlService传入的标志位安装启动服务等等。

两步安装驱动:

这两个函数做完后,核心的安装就完成了。
启动驱动

控制状态,停止驱动

卸载驱动

在返回结果异常的判断GetLastError()中,加入了几个常见的判断

代码比较长,先贴一下安装代码,其余的可以在附件查看

效果(目标平台win10)
最后和普通的monitor加载的效果是一样的。

这个是RootKits的技术。
ZwSetSystemInformation函数是个未公开的函数,调用38号则会加载驱动。
原型如下

我们需要手动获取函数的地址
RtlInitUnicodeString,ZwSetSystemInformation

这种方法的特性是比较简便隐秘,相比上一个方法不会在进程中主动查找服务管理器等敏感API。但是,这种方法没有提供卸载的特性,驱动加载后,只能通过重启系统来卸载。

最后,代码也贴在github一份。

 
 
SC_HANDLE sh = OpenSCManager(
  NULL,   // 机器名称,NULL表示本机.
 NULL,     // 设备管理器数据库,NULL表示默认值
  SC_MANAGER_ALL_ACCESS    // 打开的权限
);
SC_HANDLE m_hServiceDDK = CreateService(
        sh,//SCManager句柄
        DriverName.c_str(),//驱动服务名称
        DriverName.c_str(),//驱动服务显示名称
        SERVICE_ALL_ACCESS,//访问权限
        SERVICE_KERNEL_DRIVER,//服务类型(驱动程序)
        SERVICE_DEMAND_START,//启动方式(需要时启动,注册表驱动程序的Start值)
        SERVICE_ERROR_IGNORE,//错误忽略
        szFilePath,//驱动程序文件路径
        NULL,//加载组命令
        NULL,//TagId
        NULL,//依存关系
        NULL,//服务启动名
        NULL);//密码
BOOL WINAPI StartService(
      _In_     SC_HANDLE hService,
      _In_     DWORD     dwNumServiceArgs,
      _In_opt_ LPCTSTR   *lpServiceArgVectors
);
m_hServiceDDK = OpenService(sh, DriverName.c_str(), SERVICE_STOP);
    SERVICE_STATUS svcsta = { 0 };
    BOOL bRet = ControlService(m_hServiceDDK, SERVICE_CONTROL_STOP, &svcsta);

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

上传的附件:
收藏
免费 6
支持
分享
最新回复 (14)
雪    币: 6124
活跃值: (4656)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
2
其实@ZhuHuiBeiShadiao展示了一种效果非常好的“地下加载”的方式:https://github.com/ZhuHuiBeiShaDiao/NewHideDriverEx
最后于 2019-2-28 00:07 被黑洛编辑 ,原因:
2019-2-28 00:06
0
雪    币: 26
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
好几把厉害
2019-2-28 21:15
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错,来深信服工作么?  工作地点,长沙或者深圳。
2019-3-2 16:55
0
雪    币: 9142
活跃值: (1630)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
5
高手啊
2019-3-3 18:51
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
返回 错误代码577 可安装 无法启动;
有啥办法吗。。。。
2019-12-1 22:06
0
雪    币: 195
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
2019-12-2 08:32
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8

0

最后于 2020-8-18 15:26 被一曲沙丶天涯编辑 ,原因:
2020-3-26 14:28
0
雪    币: 49
活跃值: (261)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
留下脚印,方便查找
2021-1-9 20:13
0
雪    币: 1050
活跃值: (1132)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
2021-10-28 12:20
0
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
对于有inf文件的这种驱动,此方法有用么
2021-10-28 16:40
0
雪    币: 52
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
留个脚印,好牛逼的样子
2021-10-30 20:38
0
雪    币: 506
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
这个好像是隐藏已经加载的驱动吧?
2023-10-30 13:00
0
雪    币: 506
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
这个好像是隐藏已经加载的驱动吧?
2023-10-30 13:03
0
雪    币: 506
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
我回复二楼的为啥引用不了奇怪了是bug吗
2023-10-30 13:03
0
游客
登录 | 注册 方可回帖
返回
//