一种基于驱动内核级的usb病毒感染免疫方法

文档序号:8259387阅读:386来源:国知局
一种基于驱动内核级的usb病毒感染免疫方法
【技术领域】
[0001]本发明涉及计算机安全技术领域,具体地说是一种基于驱动内核级的USB病毒感染免疫方法。
【背景技术】
[0002]USB是“Universal Serial Bus”的缩写,其意思是“通用串行总线”,是电脑系统连接外围设备(如U盘,活动硬盘、键盘、鼠标、打印机等)的输入/输出接口标准。现今用此种总线连接的设备非常多,使用极为广泛,USB等移动存储外设病毒最大的特征就是利用USB接口这一特性进行感染计算机的,其通过运行USB等移动存储外设根目录下的Autorun.1nf文件来激活。随着USB设备具有移动性和使用上方便性,使得这类病毒传播起来速度非常之快,经常能在局域网内部进行疯狂传播,也正因为如此,USB等移动存储外设病毒种类和变种较多。
[0003]I> Autorun病毒(即Autorun.1nf文件来激活的病毒)的原理:
Autorun.1nf 的内容:
[Au to Run]
0PEN=setup.exesheIlexecute=setup.exeshell\Auto\command=setup.exe分解出来:
[AutoRun]open=setup.exeshell\open=打开(&0)shell\open\command=setup.exeshell\open\default=lshell\explore=资源管理器(%X)shell\explore\command=setup.exe
由此可见,如果setup, exe里包含病毒,那么计算机就被病毒感染了。
[0004]2、Autorun病毒的清除或免疫去掉文件和目录的隐藏属性;
找至丨J Autorun.1nf ;
以及其中的可执行文件;
USB免疫法;
禁止USB的自动运行。
[0005]目前,禁止USB自动运行或是手动建立Autorun.1nf来免疫都不能很方便或是很好地解决问题。

【发明内容】

[0006]本发明的技术任务是提供一种基于驱动内核级的USB病毒感染免疫方法。
[0007]本发明的技术任务是按以下方式实现的,该病毒感染免疫方法通过随机启动模块、实时监控模块、隔离可疑文件模块以及USB写保护模块实现;
随机启动模块通过操作系统自动启动或手动启动方式驱动,实时监控模块通过内存进行扫描及监控,当插入USB或其他存储外设时,如果该设备感染USB病毒并尝试感染本机所有硬盘分区时,隔离可疑文件模块自动拦截并将触发感染操作的文件移动到隔离区;当发现误报时可以将其移至正常区域;同时还将关联的文件进行查找并隔离;USB写保护模块对移动存储外设进行写保护。
[0008]所述的随机启动模块通过内核注册表的方式进行设置及判断。
[0009]所述的实时监控模块通过调用windows自带指针函数及编写内存查找函数,实时检查是否有USB插入及命令或程序运行的操作。
[0010]所述的隔离可疑文件模块检测到可疑文件时,使用锁定函数及隔离函数将可疑文件移动到隔离区。
[0011]所述的USB写保护模块通过调用内核组策略设置外设的写保护状态。
[0012]本发明的一种基于驱动内核级的USB病毒感染免疫方法和现有技术相比,具有实时监控、实时锁定可疑文件、免疫autorun.1nf病毒的特点;且可针对移动存储外设进行写保护,达到防范本机中毒后感染移动存储外设的效果。
【附图说明】
[0013]附图1为一种基于驱动内核级的USB病毒感染免疫方法的功能模块架构示意图。
【具体实施方式】
[0014]实施例1:
该基于驱动内核级的USB病毒感染免疫方法通过随机启动模块、实时监控模块、隔离可疑文件模块以及USB写保护模块实现;
随机启动模块通过操作系统自动启动方式驱动,通过内核注册表的方式进行设置及判断;实时监控模块通过调用windows自带指针函数及编写内存查找函数,实时检查是否有USB插入及命令或程序运行的操作,当插入USB或其他存储外设时,如果该设备感染USB病毒并尝试感染本机所有硬盘分区时,隔离可疑文件模块检测到可疑文件时,使用锁定函数及隔离函数将可疑文件移动到隔离区;当发现误报时可以将其移至正常区域;同时还将关联的文件进行查找并隔离;USB写保护模块通过调用内核组策略设置外设的写保护状态,对移动存储外设进行写保护。
[0015]实施例2:
该基于驱动内核级的USB病毒感染免疫方法通过随机启动模块、实时监控模块、隔离可疑文件模块以及USB写保护模块实现;
随机启动模块通过手动启动方式驱动,通过内核注册表的方式进行设置及判断;实时监控模块通过调用windows自带指针函数及编写内存查找函数,实时检查是否有USB插入及命令或程序运行的操作,当插入USB或其他存储外设时,如果该设备感染USB病毒并尝试感染本机所有硬盘分区时,隔离可疑文件模块检测到可疑文件时,使用锁定函数及隔离函数将可疑文件移动到隔离区;当发现误报时可以将其移至正常区域;同时还将关联的文件进行查找并隔离;USB写保护模块通过调用内核组策略设置外设的写保护状态,对移动存储外设进行写保护。
[0016]上述模块的详细流程说明如下:(通过VC++实现具体功能,详细源代码并未全部呈现,只呈现关键部分)
1、随机启动模块调用windows内核:
#include 〃msvcrt.h〃
#include〈windows.h>
#include <Dbt.h>
#include <commctrl.h>
#include <shellap1.h>
#include <shlwap1.h>
#include <shlobj.h>
配置保存函数:
void SaveConfig( LPCTSTR szConfigFile, const CONFIG ^lpConfig )
{
TCHAR buff[MAX—ffi⑶ILING—NAME—LEN];
WritePrivateProfileString( kSystemSec, kAutoStartKey,_itot (IpConfig->bAutoStart, buff, 10 ), szConfigFile );
WritePrivateProf iIeString( kSystemSec, kStartAsTaskKeyj _itot (IpConfig->bStartAsTask, buff, 10 ), szConfigFile );
WritePrivateProfileString( kSystemSec, kUDiskWriteProtectKey, _itot(IpConfig->bUDiskWriteProtect, buff, 10 ), szConfigFile );
WritePrivateProfileString ( kSystemSec, kDisabIeAutorunKeyj _itot (IpConfig->bDisabIeAutorunj buff, 10 ), szConfigFile );
WritePrivateProfiIeString( kSystemSec, kKeepCDAutorunKey, _itot(IpConfig->bKeepCDAutorun, buff, 10 ), szConfigFile );
WritePrivateProf iIeString ( kSystemSec, kCheckUpdatesKey, _itot (IpConfig->bCheckUpdates, buff, 10 ), szConfigFile );
内核注册表项启动函数:
if ( RegOpenKeyEx( HKEY—LOCAL—MACHINE,
TEXT (^SOFTWAREWMi crosof t\\Windows\\CurrentVer s 1n\\
Run"),0,
KEY—QUERY—VALUE | KEY—SET—VALUE,
&hKey ) == ERROR—SUCCESS )
{
if ( IpConfig->bAutoStart && !IpConfig->bStartAsTask ) {
GetModuleFiIeName( NULL, szPath, MAX_PATH ); dwSize = sizeof ( szValue );
if ( RegQueryValueEx ( hKey, szRunKey, NULL, &dwType, (LPBYTE)szValue, &dwSize ) != ERROR—SUCCESS
I I ( dwType != REG—SZ | | —tcsicmp( szValue, szPath ) !=O))
{
RegSetValueEx ( hKey, szRunKey, 0,REG—SZ,(LPBYTE)szPath,sizeof( TCHAR ) * (_tcslen( szPath )+1));
}//end if
}
else {
if ( RegQueryValueEx( hKey, szRunKey, NULL, NULL, NULL, NULL )==ERROR—SUCCESS )
{
RegDeleteValue( hKey, szRunKey );
}//end if }//end if RegCloseKey( hKey );
}//end if
2、实时监控模块
static BOOL IsCommandValid( LPCTSTR szDrive, LPCTSTR IpCmdj LPTSTRIpCoreFile )
{
TCHAR szTemp[MAX_PATH];
LPCTSTR p;
LPTSTR p2; int i,j;
IpCoreFile[0] = ’\0,;
if ( GetFullFileName( szDrive, IpCmdj IpCoreFile ))
{
p = _tcschr( IpCoreFilej ’:’ );
if( p != NULL && *(p-l) == szDrive[0])
{
return TRUE;
}//end if}//end ifif ( IpCoreFile[0] ==,\0,)
{ GetFullFileName( NULL, IpCmdj IpCoreFile );
}//end if if( IpCoreFile[0] !=,\0,)
{
p = PathFindFileName( IpCoreFile ); if ( _tcsicmp( szWscriptExe, p ) == 0 )
{//如果使用vbs
p = nextparam( IpCmdj szWscript ); if( p != NULL && *p != ’\0’ )
{
GetFullFileName( szDrive, p, IpCoreFile );
}//end if
}
else if ( _tcsicmp( szRunD1132Exe, p ) == 0 )
{// rundll32 dll
p = nextparam( IpCmdj szRunD1132 ); goto RunDll;
}
else if ( _tcsicmp( szRunD1164Exe, p ) == O )
{// rundll32 dll
p = nextparam( IpCmdj szRunD1164 ); RunDll:1f( p != NULL && *p != ’\0’ )
{
if ( *p == ’ \",)
{
_tcscpy( szTemp, p + I ); p2 = _tcschr( szTemp,,V,); if( p2 != NULL )
{
*p2 = ’ \0,;
}//end if
}
else {
_tcscpy ( szTemp, p );
}//end if IpCoreFile[0] = ’\0,; p2 = szTemp + _tcslen( szTemp );
while ( !GetFullFileName( szDrive, szTemp, IpCoreFile ))
{while ( *(—p2) != ’,,&& p2 > szTemp ) ;//end whileif( *p2 !=,,,)
{
break;
}//end if*p2 =,,;
}//end while }//end if
}
else if ( _tcsicmp( szMshtaExe, p ) == O )
{// 如果使用 mshta 〃...Run(,xxx,) 〃p = nextparam( IpCmdj szMshta );if( p != NULL && *p != ’\0’ )
{
p = StrStrI ( p,TEXT(〃run〃));
if ( p != NULL && _stscanf ( p + 3,TEXTC ( \,%s"),szTemp ) >
O )
{
for( i = j = I; szTemp[i] !=,\,,&& szTemp[i] !=,\0,; ++i
)
{
if( szTemp[i] !=,\\,|| szTemp[1-1] !=,\\,)
{
szTemp[j] = szTemp[i];
++j;
}//end if}//end forszTemp[j] = ’\0,;
GetFullFileName( szDrive, szTemp, IpCoreFile );
}//end if }//end if
}
else if ( _tcsicmp( szCmdExe, p ) == O )
{////如果使用 cmd 〃...Run(’XXX’)〃 p = nextparam( IpCmdj szCmd ); if( p != NULL && *p != ’\0’ )
{
P = nextp( p );
for( i = 0; *p !=,\0,; ++p ) {
if( *P !=,\"’ )
{
szTemp [i]=木p;
++i;
}//end if }//end for szTemp[i] = ,\0,;
for ( p = szTemp; p != NULL && 木p !=,\0,; p = nextp ( p ))
{
do {
if ( tcsicmpsp( p,szCmd ) == 0 | | tcsicmpsp( p,szCmdExe
)==0 )
{
P = nextp ( p );
}
else if ( tcsicmpsp( p,szStart )
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1