文章总结: 本文详细分析了一款利用BYOVD(自带易受攻击驱动程序)技术实现一键kill火绒安全软件工具的内部机制。文章通过逆向工程剖析了工具的完整流程,包括如何通过进程名定位火绒核心组件hipsdeamon、释放并加载带有合法签名的漏洞驱动、以及通过IOCTL控制码(0x80002010用于注册白名单,0x80002048用于终止进程)与驱动通信,最终调用ZwTerminateProcess函数结束目标进程。作者提供了从逆向分析到自主编写利用代码的完整思路,并成功演示了攻击效果。
综合评分: 65
文章分类: 逆向分析,免杀,恶意软件,终端安全,应急响应
一键 Kill 火绒?加了星球只给工具不给代码怎么办?
原创
Re Re
蜂鸟安全
2026年4月12日 22:41 广东
在小说阅读器读本章
去阅读
点击上方蓝字·关注蜂鸟安全
01、免责声明
本文所涉及的技术、思路和工具仅用于安全测试和防御研究,严禁将其用于非法入侵或其它攻击他人系统以及盈利等目的,一切后果由操作者自行承担。
02、目录
- 前言
- 工具逆向
- 驱动逆向
03、前言
很多师傅在加入一些知识星球拿到像一键 kill 火绒这类工具的时候想知道工具是怎么写的但是别人又不愿意公开工具代码怎么办。当然是逆向啦,这种工具是最好分析的。
kill 杀软的方式有 3 环 kill 的也有 0 环 kill 的,但是绝大部分都是利用签名的驱动漏洞在 0 环 kill 的,3 环 kill 的话其实也是利用用户层上一些高权限进程上的漏洞来实现的,这类是比较少的。漏洞驱动有个专业的名词叫做 BYOVD。因为这类驱动自带合法签名,它可以绕过强制驱动签名等安全机制,直接进入内核空间,由于访问控制不当导致攻击者可以直接利用它们。
BYOVD 又分为多种类型
- 强杀进程型 BYOVD,通常用来结束杀毒软件;
- 任意内存读写型 BYOVD,通常用来进行提权操作,比如替换进程的 Token 为 System Token 从而实现提权,微软的 AFD.sys 就爆出过好几个这种提权洞;
- 强制卸载型 BYOVD,……
- 当然了远不止我上面说的这三种,感兴趣的师傅可以自行了解
这篇文章就以一款工具为例,从逆向分析工具到获取驱动,再对驱动进行逆向然后自己写工具!!!
文章并不会泄露工具和驱动相关的敏感信息,只提供一个思路,师傅们不用私下找我要!!!
04、工具逆向
老规矩,拿到工具第一眼先分析有无壳,有壳的话进行脱壳。不要怕不好脱,这种工具本身就是为了方便用的,谁给你上强壳啊。
一般情况下,和驱动通信需要用到驱动命名空间的前缀,通常是 \.\xxx,但是写到代码中需要转义处理,所以通常会硬编码写成:\\.\xxx,直接字符串搜索前缀就好了。
通过这种方法可以快速定位到工具核心的代码位置,接着就可以分析代码逻辑了。
如下图所示,先创建进程快照,通过进程名获取目标进程 PID,通过代码不难看出进程名为 HipsDeamon,这正是火绒的一个核心组件
接着获取程序自身 pid,判断是否以管理员权限运行,如果是则释放资源,这个就是释放驱动的地方,也就是说这个程序在运行过程中会把漏洞驱动释放在同目录下。
如下图所示
接着就是加载驱动和对驱动的利用了
在程序执行完成后会调用 DeleteFileW 删除释放的驱动文件
到此整个工具的核心流程就分析完了,漏洞驱动也拿到了,接着就可以逆向分析驱动然后自己写代码。
05、驱动逆向
既然是用来结束任意进程的,那么大概率是用 ZwTerminateProcess函数,如下图所示定位到函数位置
交叉引用查看谁调用了这个函数,如下图所示有两个函数调用了 killprocess
需要找到存在 IOCTL 控制码的调用位置,sub_1400104E8 调用了 killprocess,可以看到传进去两个参数都是 DWORD 类型的,上面已经分析过了,a1 里面是包含要 kill 的进程 PID 的,通过这里可知在构造数据缓冲区的时候需要有两个 DWORD 类型的成员,后续会讲到,接着交叉引用查找。
如下图所示就定位到了,IOCTL 控制码是 0x80002048
但是一般都是会有调用条件的,还需要往上翻看代码,看看需要什么条件
分析一下上图代码的意思:
1.首先调用 PsGetCurrentProcessId 函数获取和这个驱动通信的进程的 PID 存储在 v6 中;
2.CurrentStackLocation 存储用户请求信息,其中就包括了用户传给驱动的 IOCTL 码,用户控制驱动执行哪部分分支;取出的 IOCTL 控制码存储在 v9 中;
3.接着判断 v9 的值是否等于 0x80002010 (-2147475440 十六进制表示正是 0x80002010);
4.如果 v9 不等于 0x80002010,就进行权限验证,看看 PID 是否注册在白名单内,如果不在就无权发送 IOCTL 码。
说明要通过 IOCTL 控制码 0x80002048 调用 killprocess 需要有权限。但是 “判断 v9 的值是否等于 0x80002010” 经过分析 0x80002010 控制码对应的代码如下
这个分支是用来将 PID 注册进白名单的,并且不会进行权限校验,所以在利用这个驱动的时候,先传入 0x80002010 控制,将自身进程 PID 传入并注册进白名单,传入 0x80002048 控制码去 killprocess。
这部分分析完了,接着要继续找设备名和符号链接了,如下图所示,其中 sub_140010518 是派遣函数,内部就是上面分析的根据 IOCTL 控制码执行不同分支。
都分析完成后就可以写代码了
当然了这里只是演示,代码肯定没有像原工具那样比较自动化,这种写法还需要我们手动启动驱动服务
运行程序,如下图所示,成功 kill 火绒
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:蜂鸟安全 Re Re《一键 Kill 火绒?加了星球只给工具不给代码怎么办?》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论