首页
社区
课程
招聘
[原创]火绒剑粉碎文件的分析
2022-8-9 15:34 18458

[原创]火绒剑粉碎文件的分析

2022-8-9 15:34
18458

起因

上次我已经分析了火绒是如何杀死我们进程的,可是没想到哇,客户竟然还会使用文件粉碎机粉碎我们的文件,被逼无奈,我只能继续的分析一下火绒的粉碎文件的实现,我不得不说为什么它会很多的方式去粉碎文件,一个地方注意不到文件就会被删除。难受哇!
话不多说,我们现在看看火绒粉碎机是如何粉碎的文件。

分析过程

首先我们需要找一个很好的切入点去分析,还是从导入表入手,然后再gitHub上找一找别人是如何使用驱动删除文件。
驱动删除文件
图片描述
我们就从这个github上看到的删除文件看一下火绒驱动的导入表,还是经典的下断环节。
ida引用IoFileObjectType

 

winDBG开始下断点 图片描述

 

命中了第一个断点,还是原来的操作直接让函数返回失败(根据杀死进程的分析,火绒的驱动会使用多种方法去完成所需的功能,因此这个返回失败,它就会调用其他的驱动口,真的很恶心!)
图片描述
然后让第一个断点失效,我们看它还会调用哪个驱动的口。
图片描述
同样的步骤,我们去掉第二个命中的断点,
图片描述
我们又命中了第3个断点,我们依旧如此操作 图片描述
还是返回失败
图片描述 图片描述
貌似我们这样都返回失败了以后,我们的文件没有被删除。不过我之前这几个函数返回失败了以后,也依旧被删除了。
我们继续看看调用ZwQuerySystemInformation的地方,我已经下断确定过了,也会通过这里获取句柄信息,造成我们的文件被删除。
图片描述

修正一下

这两天主要就是拦截火绒的DEVICEIOCONTROL发现0x220044和0x228004就可以了,并不需要处理第一个函数和第四个函数,我也拦截了一下,其中,第一个函数会无数次的调用,并不会访问到我们强行粉碎的文件。

最后

还是研究如何拦截火绒的IO,当粉碎我们的文件的时候,我们就返回失败。好了,让一切归于平静。


[培训]《安卓高级研修班(网课)》月薪三万计划

最后于 2022-8-10 15:37 被lwl编辑 ,原因: 更新错误的地方
收藏
点赞9
打赏
分享
最新回复 (6)
雪    币: 1997
活跃值: (731)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Demons_k 2022-8-9 15:43
2
0
佬太强了
雪    币: 1367
活跃值: (2121)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
危楼高百尺 1 2022-8-9 16:04
3
0
怎么拦截火绒的IO啊
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
CaptainNeil 2023-1-12 18:18
4
0
hook火绒的DeviceIoControl确实可以防止文件粉碎,但是如何判断粉碎的是自己的文件还是别人的文件呢?
如果不能的话,那么会导致火绒的文件粉碎功能失效
雪    币: 1040
活跃值: (455)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
大煞笔 2023-1-13 15:45
5
0
居然没人用ZwSetInformationFile,这个强删文件也挺好用的
雪    币: 660
活跃值: (1405)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
lwl 2023-1-29 10:58
6
0
CaptainNeil hook火绒的DeviceIoControl确实可以防止文件粉碎,但是如何判断粉碎的是自己的文件还是别人的文件呢? 如果不能的话,那么会导致火绒的文件粉碎功能失效
它在IO通讯的时候,会上传文件的句柄,你获取一下它的文件路径,或者是上传文件的路径,你做一下匹配就行了
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
CaptainNeil 2023-1-30 10:57
7
0
DeviceIoControl 的入参是一个指针,数据结构是自己定义的,要怎么通过这个指针确定句柄呢
游客
登录 | 注册 方可回帖
返回