点饭的百度空间
银牌会员
     
积分 2315
发帖 2236
注册 2007-11-30
|
#1 【QQ517826104】扯一下U盘病毒的防范……
QQ517826104
男, 17岁
http://hi.baidu.com/517826104/bl ... 9de2315243c156.html

上图是我的U盘……或者说跟我的U盘一样。在学校死念书,退化了。我那该死的创新论文就写这个,挺恶心的。上次Left同学好像问到WM_DEVICECHANGE的用法,在下面一起写上了。高手勿喷……

学校的电脑都很不太平,老师们的U盘东插西插,结果把病毒传的到处都是。偏偏那些病毒又做的垃圾,把U盘文件夹全隐藏起来然后见一个同名EXE。杀软删掉病毒之后就无视那写可怜的隐藏文件夹了(好像微点会自动修复隐藏属性)……然后老师就会以为文件被“吃掉了”。
扯点很挫但是比较现实的方案吧。
关闭自动播放,这个是必须的。组策略或者修改注册表
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDriveTypeAutorun
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDriveTypeAutorun
不再赘述……
扯一下是U盘的插入拦截。
可以编程进行监控插入操作,然后自动删掉一些autorun.inf什么的文件。360有这个监控功能。相应U盘的插入可以用WM_DEVICECHANGE消息进行相应,说说WM_DEVICECHANGE的用法。
首先是准备工作。貌似有些机器在插入设备的时候不会发送WM_DEVICECHANGE消息。把HKLM\SYSTEM\CurrentControlSet\Services\Cdrom的Autorun键值设为1,类型REG_DWORD。貌似就可以了。
接着是响应消息。简述VC的做法。
首先需要引用dbt.h,里面有需要的一些常量。
/*
* BroadcastSpecialMessage constants.
*/
#define WM_DEVICECHANGE 0x0219
然后创建一个窗口用来接收消息。接收到这个消息后,可以通过wParam判断是插入还是拔出。比如在WndProc里面这样写:
BOOL CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
//...省略其他消息处理
case WM_DEVICECHANGE:
//设备改动
switch(LOWORD(wParam))
{
case DBT_DEVICEARRIVAL: //插入设备
MessageBox(hWnd,"插入设备。","U盘监控",0);
return true;
case DBT_DEVICEREMOVECOMPLETE: //移除设备
MessageBox(hWnd,"拔出设备。","U盘监控",0);
return true;
}
default:
return false;
}
return false;
}
这样可以捕捉到U盘的插入和拔出动作。不过其他设备的插入和拔出也会发送DeviceChange消息,比如光驱中放入了光盘。是否存在U盘就要自己检查了。当然WM_DEVICECHANGE的wParam还有其他的值。引用dbt.h中的内容:
/*
* The following messages are for WM_DEVICECHANGE. The immediate list
* is for the wParam. ALL THESE MESSAGES PASS A POINTER TO A STRUCT
* STARTING WITH A DWORD SIZE AND HAVING NO POINTER IN THE STRUCT.
*
*/
#define DBT_DEVICEARRIVAL 0x8000 // system detected a new device (插入新硬件)
#define DBT_DEVICEQUERYREMOVE 0x8001 // wants to remove, may fail (发出移除请求,还没有删除)
#define DBT_DEVICEQUERYREMOVEFAILED 0x8002 // removal aborted (取消删除硬件)
#define DBT_DEVICEREMOVEPENDING 0x8003 // about to remove, still avail. (??)
#define DBT_DEVICEREMOVECOMPLETE 0x8004 // device is gone (硬件已成功移除)
#define DBT_DEVICETYPESPECIFIC 0x8005 // type specific event (??)
这样可以捕捉到关于硬件插入和移除等事件,下面的工作就是拦截之类的了……有兴趣的同学可以自己写写,比如用进程注入explorer.exe然后R3下Hook CreateProcess之类的就行。
再扯U盘的修复。
下面是一个简单的VBS脚本,可以自动删除U盘上的autorun.inf,然后恢复根目录所有的隐藏目录。
Dim colDisks, objDisk
On Error Resume Next
Set colDisks = objFSO.Drives
For Each objDisk In colDisks
With objDisk
If .IsReady And .DriveType = Removable Then '是移动存储设备
If UCase(Left(.Path, 1) <> "A") Then '跳过A盘。很恶心
DoEvents
Dim szPath, szName
szPath = .RootFolder '只检查根目录
SetAttr szPath & "autorun.inf",vbNormal '删除autorun.inf
Kill szPath & "autorun.inf"
szName = Dir(szPath, vbDirectory + vbHidden + vbSystem + vbReadOnly)
Do While szName <> ""
If szName <> "." And szName <> ".." Then
If ((GetAttr(szPath & szName) And vbDirectory) <> 0) And _
((GetAttr(szPath & szName) And vbHidden) <> 0) Then '是否隐藏目录?
'去掉隐藏属性
SetAttr szPath & szName, vbNormal
'删除同名exe
SetAttr szPath & szName & ".exe",vbNormal
Kill szPath & szName & ".exe"
'删除同名scr。目前没有见到SCR后缀的。估计会有……
SetAttr szPath & szName & ".scr",vbNormal
Kill szPath & szName & ".scr"
End If
End If
szName = Dir
Loop
End If
End If
End With
Next
最后是恶心的免疫。下面是的批处理在每个磁盘根目录创建所谓的“免疫目录”。其中用了点猥琐的手段,创建的免疫目录在FAT32文件系统也不能用rd /s /q命令移除。我记得磁碟机是会调用这个命令删掉免疫目录的。
创建
::::::::::::::::::::::::::::::::::::::::::::
:: By ChiChou
::::::::::::::::::::::::::::::::::::::::::::
@echo off
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
cacls "%%i:\folder.htt" /E /C /P everyone:F
cacls "%%i:\autorun.inf" /E /C /P everyone:F
cacls "%%i:\desktop.ini" /E /C /P everyone:F
del /f /q "%%i:\folder.htt"
del /f /q "%%i:\autorun.inf"
del /f /q "%%i:\desktop.ini"
md "%%i:\folder.htt"
md "%%i:\autorun.inf"
md "%%i:\desktop.ini"
attrib "%%i:\folder.htt" +s +r +h
attrib "%%i:\autorun.inf" +s +r +h
attrib "%%i:\desktop.ini" +s +r +h
md "%%i:\folder.htt\...\"
md "%%i:\autorun.inf\...\"
md "%%i:\desktop.ini\...\"
md "%%i:\folder.htt\...\"
md "%%i:\autorun.inf\...\"
md "%%i:\desktop.ini\...\"
cacls "%%i:\folder.htt" /E /C /P everyone:N
cacls "%%i:\autorun.inf" /E /C /P everyone:N
cacls "%%i:\desktop.ini" /E /C /P everyone:N
)
del /f /q "%0"
移除
::::::::::::::::::::::::::::::::::::::::::::
:: By ChiChou
::::::::::::::::::::::::::::::::::::::::::::
@echo off
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
cacls "%%i:\folder.htt" /E /C /P everyone:F
cacls "%%i:\autorun.inf" /E /C /P everyone:F
cacls "%%i:\desktop.ini" /E /C /P everyone:F
rd /s /q "%%i:\folder.htt\...\"
rd /s /q "%%i:\autorun.inf\...\"
rd /s /q "%%i:\desktop.ini\...\"
rd /s /q "%%i:\folder.htt\safe..\"
rd /s /q "%%i:\autorun.inf\safe..\"
rd /s /q "%%i:\desktop.ini\safe..\"
rd /s /q "%%i:\folder.htt\safe..\safe..\"
rd /s /q "%%i:\autorun.inf\safe..\safe..\"
rd /s /q "%%i:\desktop.ini\safe..\safe..\"
rd /s /q "%%i:\folder.htt"
rd /s /q "%%i:\autorun.inf"
rd /s /q "%%i:\desktop.ini"
)
del /f /q "%0"
废话完毕。
百度空间 笑侃人生:
U盘病毒惯用伎俩—隐藏文件夹 微点对于未知伪文件夹病毒防御机制是?
清除病毒后很多用户都找不到自己的文件夹 被病毒隐藏的正常文件夹微点能否成功还原?(修改文件夹的属性为不隐藏)
建议:
把防御病毒的时间提前 在插上U盘是后台就自动做了,并修复文件夹,然后给用户一个提示 而不是用户双击后提示病毒,这个时间差给普通用户影响很大
通过某些特征(如大小,文件夹名称 文件名综合判断)
发现有隐藏文件夹的行为 就可以直接判断 符合病毒伪装的特征报为未知病毒然后比对白名单 排除误报
文件夹隐藏,该文件夹的名称和某个.exe文件的文件名相同并且文件大小小于2Mb 基本上可以判断了
我的意见:
如果一个未知程序 除了恶意隐藏所有文件 其他什么坏事都不干 微点没发现病毒行为 那用户就找不到自己的文件了
干脆微点在注册表保护里面增加 显示/隐藏所有文件和文件夹
|
※ ※ ※ 本文纯属【点饭的百度空间】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
|
 你的微笑 is 微点的骄傲!
http://hi.baidu.com/new/micropoint |
 |
|