windows 弹shell_Windows 网络编程:U盘防御软件

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:460500587


cc474e80921a355d292833f91280ac09.png

微信公众号:计算机与网络安全

ID:Computer-network

通过U盘来传播病毒通常是使用操作系统的自动运行功能,并配合U盘下的Autorun.inf文件来实现的。如果让操作系统不自动运行移动磁盘,或者保证移动磁盘下不存在Autorun.inf文件,那样通过U盘感染病毒的几率就小很多了。

一、通过系统配置禁止自动运行

先介绍一下关于如何通过系统配置来禁止U盘中Autorun.inf的自动运行。通常情况下需要进行两方面的设置,一方面是通过“管理工具”中的“服务”来进行设置,另一方面是通过“组策略”来进行设置。一般这两处都需要进行修改。下面分别介绍一下如何对这两处进行设置。

先来看一下如何在“服务”中进行设置。首先打开控制面板中的“管理工具”,然后找到“服务”将其双击打开。在服务列表中找到名称为“Shell Hardware Detection”的服务,双击该服务,打开“Shell Hardware Detection的属性”对话框。单击“停止”按钮将该服务停止,再把“启动类型”修改为“已禁用”状态,如图1所示。

a80b141e52efe6be06664947ca0fb520.png

图1  禁用“Shell Hardware Detection”服务

将服务中的“Shell Hardware Detection”禁用后,再来对“组策略”进行设置。首先在“运行”中输入“gpedit.msc”,然后依次单击左边的树形控件,“计算机配置”->“管理模板”->“系统”,然后在右边双击“关闭自动播放”选项,弹出“关闭自动播放 属性”对话框,在“设置”选项卡中选择“已启用”单选项,在“关闭自动播放”处选择“所有驱动器”选项,设置完成后单击“确定”按钮。再到左边的树形控件中选择“用户配置”->“管理模板”->“系统”,到右边找到“自动关闭播放”选项,设置方法同上,如图2所示。

128165006fb5caa531c97df2d6d0be69.png

图2  组策略中的“关闭自动播放”

通过以上设置,的确是可以相对有效地保护计算机不中U盘相关的病毒。不过,我们不能因此而满足,因为我们的目的是打造一个U盘防御的软件。

二、打造一个简易的U盘防御软件

我们将打造一个U盘防火墙,当插入U盘时会有提示,并且自动检查U盘下是否有Autorun.inf文件,并解析Autorun.inf文件。除此而外,通过U盘防火墙可以打开U盘,从而可以安全地使用U盘。

如何才能知道有U盘被插入电脑呢?可以使用定时器不断地去检查,也可以开启一个线程不断地去检查,也可以通过Windows的消息得到通知。前两种方法笨了些,我们主动不断地去检查是否有U盘的插入,不如被动地等待Windows的消息来通知我们。

三、WM_DEVICECHANGE和OnDeviceChange()

在Windows下有一个消息可以通知应用程序计算机配置发生了变化,这个消息是WM_DEVICECHANGE。该消息的消息过程定义如下:

4acab02780fc421d5f3ecf538037da9c.png

该消息通过两个附加参数来进行使用,其中wParam表示设备改变的事件,lParam表示事件对应的数据。我们要得到设备被插入的消息类型,因此wParam的取值为DBT_DEVICEARRIVAL,而该消息对应的数据的数据类型为DEV_BROADCAST_HDR,该结构体的定义如下:

41ce9116c128981483321be2e8dd9973.png

在该结构体中,主要看的是dbch_devicetype ,也就是设备的类型。如果设备类型为DBT_DEVTYP_VOLUME,则把当前结构体转换为DEV_BROADCAST_VOLUME结构体,该结构体定义如下:

224ed82e8a4b61258669534dcee7f3de.png

在该结构体中主要是dbcv_unitmask和dbcv_flags。dbcv_unitmask通过位来表示逻辑盘符,第0位表示A盘,第1位表示B盘。dbcv_flags表示受影响的盘符或媒介,该值为0时表示U盘或移动硬盘。

上面介绍了关于WM_DEVICECHANGE这个消息,由于是在MFC下进行开发的,因此可以使用OnDeviceChange()这个消息响应函数来进行代替WM_DEVICECHANGE消息。虽然使用了OnDeviceChange()这个消息响应函数而没有使用WM_DEVICECHANGE,但是响应函数的附加参数与WM_DEVICECHANGE相同。OnDeviceChange()函数定义如下:

e7f133b7fb2a6101c3161632f557bd19.png

四、通过OnDeviceChange()消息来获得被插入U盘的盘符

通过上面对WM_DEVICECHANGE消息的介绍,下面使用MFC下的OnDeviceChange()消息响应函数来编写一个获取被插入U盘的盘符的小程序,为编写U盘防火墙做一个简单的准备工作。首先来添加消息映射,添加代码如下:

0df123ee00b6facd8729b5af7e0a679c.png

在头文件中添加消息响应函数的定义,定义如下:

38a410355642bdce9a5bdc8c351c2fb7.png

最后添加消息响应函数的实现,代码如下:

1e53a628486191a7dec0aff1b9768a1b.png

我们将其编译连接并运行,插入一个U盘,得到如图3所示的提示。

5a8e961449fb21c5066ec5e22ef763a9.png

图3  检测到的U盘盘符

上面的这段代码可以将其封装为一个函数,封装后的函数定义如下:

52181ae171304d3e31d68545c2e5bd0c.png

在使用类似DBT_DEVICEARRIVAL这样以DBT_开头的宏时应包含头文件“dbt.h”文件。

五、U盘防火墙的完善

前面已经获得了被插入U盘的盘符,接下来就可以对U盘上的Autorun.inf文件进行分析,并删除要运行的程序,还可以安全地打开U盘。改写一下OnDeviceChange()函数,以实现要完成的功能,代码如下:

07bf910d17bdca4e2613a6cd356c6eca.png

安全打开U盘的实现代码如下:

f57ccb8b1b8556fc2460575bbe176f69.png

用DeleteFile()函数删除U盘中要运行的程序可能会失败,因为有时U盘并没有完全准备好。可以通过判断来完成,但这里就不给出代码了,大家可自行修改完成。在代码中,涉及到两个新的API函数,分别是GetPrivateProfileString()和ShellExecute()函数。这两个函数的功能分别是获取配置文件中指定键的键值,和运行指定的文件或文件夹,大家可以通过查询MSDN进行详细地了解。

在上面的程序中,通过提示让用户选择是否要删除掉U盘中要被执行的文件,如果用户对此并没有太多的了解和认识的话很有可能不删除。如果删了本不该删的文件,那么用户对该软件的友好感便会降低,那应该如何做呢?应该建立一个白名单和黑名单,无论是通过散列进行比较,还是通过文件名进行比较,都可以。当然,越精确的匹配方法越好。这样,就可以提早一步为用户进行判断了,然后给出一个安全建议,不但提高了软件的友好感,而且会显得相对较为专业了。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值