首页
社区
课程
招聘
震惊! 他竟用这一招让杀软崩溃!
2020-6-15 17:21 8909

震惊! 他竟用这一招让杀软崩溃!

2020-6-15 17:21
8909

下一篇地址

 

目录

思路

利用W版文件函数创建超深路径目录,并在目录中沿途放置病毒,以测试各大杀软的文件扫描器。

源码

// 最大目录深度测试
// 用于测试扫描目录会不会崩溃

#include <windows.h>
#include <stdio.h>

wchar_t dirname[32767 + 1] = { LR"(\\?\C:\)" };
wchar_t virusname[32767 + 1] = { 0 };

//   \\?\c:\      32767 - 7 = 32760     32760 / 2 = 16380

int main(int argc, char** argv)
{
    for (int i = 0; i < 16380; ++i)
    {
        wcscat_s(dirname, LR"(a\)");
        if (CreateDirectoryW(dirname, NULL))
        {
            ;
            // printf("创建成功:%ls\n", dirname);
        }
        else
        {
            printf("创建失败:%ls 此时的i==%d\n", dirname, i);
            break;
        }
        wsprintfW(virusname, L"%svirus", dirname);
        if (CopyFileW(L"c:\\virus", virusname, TRUE))
        {
            printf("copy success! i==%d\n", i);
        }
        else
        {
            ;
            //DWORD dwerr = GetLastError();
            //printf("copy failed! %d \n", dwerr);
        }
    }
    system("pause");
    return 0;
}

运行代码生成测试环境:

...
copy success! i==491
copy success! i==492
copy success! i==493
copy success! i==494
copy success! i==495
copy success! i==496
copy success! i==497
copy success! i==498
copy success! i==499
copy success! i==500
copy success! i==501
copy success! i==502
copy success! i==503
copy success! i==504
copy success! i==505
copy success! i==506
copy success! i==507
创建失败: \\?\C:\a\a\a\a.......很多个\a  此时的i==16368

也就是说我用CopyFileW的方式可以复制文件到507深度的目录, 用CreateDirectoryW创建了16367深度的目录。c:\a目录下,一共有0~507共508个病毒。

 

508+16368 = 16876

各安全软件测试(2020-6-15下载的官方包)

扫描方式均采用自定义扫描C:\a 目录

360安全卫士

开始时内存:

 

扫了大概三分钟后:

 

 

然后我选择终止扫描:

 

 

可以看到都扫出来了。

360杀毒

某次测试中曾经出现过实时监控崩溃的弹窗。

 

 

 

 

检出项仅128个,后续的根据日志,似乎已经判定为病毒,不知为何不加进去。

 

360卫士和360杀毒是会一直往目录深处扫描下去的,所以内存使用会不断上升,扫描时间也较长。

火绒

扫描之前:

 

 

扫描开始十几秒后闪退,之后出现如下画面:

 

瑞星杀软V17试用版

扫描开始数秒后直接崩溃:

 

腾讯电脑管家

 

腾讯扫描了几秒钟就完成了扫描,扫了131级目录,可以看出它并不会再往深处继续扫描下去。

江民速智版V19

 

可以看出成功扫描出了我放置的全部病毒,不过因为完成地太快,不知道它是否扫描到了一万多层目录还是说在大于508层的某层直接停止扫描了。

 

不过当我点击查杀历史的时候:

 

 

好像直接崩溃了。

 

最终也能加载出来,不过很卡:

 

金山毒霸11

我点了自定义查杀后窗口会黑个几十秒:

 

 

 

可以看出成功地扫描出了我放置的全部病毒,并且还继续深入目录进行扫描。

 

另外较为神奇的是,他的内存占用并没有不断上升(kscan.exe):

 

 

之后因为扫描太久太难等了,我取消了继续扫描,选择直接处理,之后比较神奇的是日志部分:

 

 

居然威胁又变成了200个,我使用everything来看一看:

 

 

上下拉了下,果然没有virus了,都已经被删除了,看来日志部分是一个bug

 

下一篇地址


[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

最后于 2020-6-18 08:30 被boursonjane编辑 ,原因: 增加目录
收藏
点赞5
打赏
分享
最新回复 (26)
雪    币: 2854
活跃值: (2518)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iamasbcx 2020-6-15 19:06
2
0
不走寻常路
雪    币: 3307
活跃值: (3474)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
1行 1 2020-6-15 19:13
3
0
思路清奇的震惊党
雪    币: 65
活跃值: (261)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
计算机李白 2020-6-15 19:28
4
0
目录冗杂免杀思路
雪    币: 688
活跃值: (189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
flarejune 2020-6-15 23:32
5
0
做这个测试也真的是.....无聊...
以上测试都没问题,有的也是一些UI的问题,可能是文字太长了,处理渲染的时候卡顿.(现在杀软的UI一个比一个华丽...)
如果这种低级错误都无法处理好的话......真的是可以全公司的码农炒鱿鱼了.
路径问题导致无法删除,无法枚举这种手法,在WIN98时代流行吧.....现在都2020了.
而瑞星那个使用的是调试版的库,也是他妈的坑爹坑成狗了.
雪    币: 123
活跃值: (295)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xlshn 2020-6-15 23:33
6
0
这个BUG好改,但是改的范围会很大
雪    币: 495
活跃值: (147)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
养乐多A 2020-6-16 01:43
7
0
思路清奇
雪    币: 3018
活跃值: (1453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MsScotch 2020-6-16 09:58
8
0

试试 ESET,会有惊喜发现

最后于 2020-6-16 09:59 被MsScotch编辑 ,原因:
雪    币: 1448
活跃值: (579)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
船长可乐 2020-6-16 10:10
9
0
思路可行
雪    币: 7490
活跃值: (2694)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
netwind 13 2020-6-16 10:24
10
0
思路不错
雪    币: 5938
活跃值: (3745)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
yimingqpa 1 2020-6-16 10:26
11
0
 理论上是win32 api MAX_PATH的坑。
雪    币: 688
活跃值: (189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
flarejune 2020-6-16 10:54
12
1
MAX_PATH = 260 是DOS/98/95系统下面的最大路径长度,也是FAT32分区的最大路径长度,
而NTFS是支持32K长度的路径的,所以说,这种"BUG"理论上只会活在2000年之前.
而需要支持长路径名的话,在原路径前面加上"\\?\ "就可以了.
瑞星杀软报告buffer长度过短.这种错误,也只会存在C语言的程序里面(不爆栈已经偷笑了),支持自动管理内存的String是不怕长路径的.
雪    币: 204
活跃值: (911)
能力值: (RANK:1324 )
在线值:
发帖
回帖
粉丝
mratlatsn 10 2020-6-16 15:11
13
0
有栈溢出的话是不是能通过构造路径来劫持eip/rip了呢?
有stack cookie+ASLR+DEP的情况下仅仅一个栈溢出应该是不行,所以就让它崩溃吧
雪    币: 131
活跃值: (30)
能力值: (RANK:0 )
在线值:
发帖
回帖
粉丝
看穿了说不得 2020-6-17 13:01
14
0
这就是典型的邪门歪招.
雪    币: 4345
活跃值: (8524)
能力值: ( LV9,RANK:181 )
在线值:
发帖
回帖
粉丝
nevinhappy 2 2020-6-17 13:07
15
0
我曾经一招把CPU都搞死了!
雪    币: 2444
活跃值: (2894)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
boursonjane 2020-6-17 13:15
16
0
nevinhappy 我曾经一招把CPU都搞死了!
你也可以去发个帖子: “震惊! 男子竟然对CPU做出这种事”
雪    币: 3667
活跃值: (534)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
逻辑错误 1 2020-6-17 13:59
17
0
捅个马蜂窝, 然后溜了溜了...
雪    币: 920
活跃值: (1605)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wuxiwudi 2020-6-17 15:19
18
0
嗨,这当时做的测试覆盖了深度,长度,异常字符串(比如阿拉伯文),360的基本上不会在这方面出问题,其实你可以异常字符串,很多国产软件会有惊喜
雪    币: 2444
活跃值: (2894)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
boursonjane 2020-6-17 15:23
19
0
wuxiwudi 嗨,这当时做的测试覆盖了深度,长度,异常字符串(比如阿拉伯文),360的基本上不会在这方面出问题,其实你可以异常字符串,很多国产软件会有惊喜
你看下一篇。
雪    币: 920
活跃值: (1605)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wuxiwudi 2020-6-18 12:21
20
0
bjtwokeight 你看下一篇。
看了一下应该是资源耗尽,每一个扫描线程占用过多资源
雪    币: 2444
活跃值: (2894)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
boursonjane 2020-6-18 12:42
21
0
wuxiwudi 看了一下应该是资源耗尽,每一个扫描线程占用过多资源
是的,这深目录我一开始主要测它出问题的点是  递归导致栈溢出, 如果它是使用递归遍历目录而没什么特别处理的话。clamav最新版中也会溢出,在设定最大扫描深度为无限的时候。
经过测试之后我发现了些额外的问题,例如实时监控崩溃(这个感觉应该是长路径问题), 还有为什么越扫越深同时越扫越慢了||为什么删除深目录文件那么慢等等。
雪    币: 407
活跃值: (1622)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Thead 2020-6-18 13:50
22
0
bjtwokeight 是的,这深目录我一开始主要测它出问题的点是 递归导致栈溢出, 如果它是使用递归遍历目录而没什么特别处理的话。clamav最新版中也会溢出,在设定最大扫描深度为无限的时候。 经过测试之后我发现了些额 ...
删除深目录慢应该是因为目录删除需要从最里面向外删除,目录越深,找到最下面的那一层就越慢。递归遍历容易爆栈,广度优先遍历没有递归那么快
雪    币: 2680
活跃值: (3312)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Mr.hack 2020-6-18 17:28
23
0
老标题党了
雪    币: 589
活跃值: (5867)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
火绒实验室 1 2020-7-16 15:31
24
0
火绒已于5.0.47.0版本解决该问题
雪    币: 2444
活跃值: (2894)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
boursonjane 2020-7-16 16:16
25
0
火绒实验室 火绒已于5.0.47.0版本解决该问题
是不会崩了, 不过目录只扫600级啊
游客
登录 | 注册 方可回帖
返回