.model small .code start segment assume cs:start,ds:start org 0 ghost proc far header dd 0ffffffffh attributes dw 2000h pointers dw offset strategy,offset commands blockdev db 0,0,2,2,1,0,1,40h,0,64h,0,0fah,1,0,8,0,1,0,0,0 ghost endp strategy proc far mov cs:data1,bx mov cs:data2,es retf strategy endp commands proc far push si push ds lds si,dword ptr cs:data1 mov word ptr [si+3],8102h cmp byte ptr [si+2],0 jne loc1 call first loc1: pop ds pop si retf commands endp data1 dw 0 data2 dw 0 dw 24 dup(000bh) par db 0 data3 db 0 first proc near pushf push ax push bx push cx push dx push si push di push ds push es cld push cs pop ds mov dx,offset message mov ah,9 int 21h call second jc loc2 call third jnc loc3 loc2: mov al,0 jmp short loc4 loc3: mov al,data3 sub al,par cmp al,1 jge loc4 mov al,0 loc4: lds bx,dword ptr data1 mov cs:blockdev,al mov [bx+0dh],al xor ah,ah cmp al,0 je loc5 shl ax,1 add ax,45h loc5: mov [bx+0eh],ax mov [bx+10h],cs mov word ptr [bx+12h],45h mov [bx+14h],cs mov word ptr [bx+3],100h pop es pop ds pop di pop si pop dx pop cx pop bx pop ax popf retn first endp second proc near mov al,24h mov par,al mov ax,4452h stc int 21h jc loc6 cmp ax,dx jne loc6 cmp ah,10h jne loc6 cmp al,67h jne loc6 les si,dword ptr data1 mov al,es:[si+16h] add al,40h mov par,al jmp short loc7 loc6: les si,dword ptr data1 cmp byte ptr es:[si],16h jbe loc7 les si,dword ptr data1 mov al,es:[si+16h] add al,40h mov par,al loc7: cmp par,43h jb loc8 cmp par,5ah jb loc12 loc8: les si,header mov al,40h loc9: cmp si,0ffffh je loc11 test word ptr es:[si+4],8000h jnz loc10 add al,es:[si+0ah] loc10: les si,dword ptr es:[si] jmp short loc9 loc11: mov par,al loc12: clc retn second endp third proc near push ds les bx,dword ptr data1 lds si,dword ptr es:[bx+12h] loc13: lodsb cmp al,9 je loc14 cmp al,20h je loc14 ja loc13 jmp short loc17 loc14: call fourth cmp al,20h jb loc17 and al,0dfh cmp al,40h jb loc16 cmp al,5ah ja loc16 cmp byte ptr [si],3ah jne loc15 inc si loc15: mov cs:data3,al jmp short loc14 loc16: mov dx,18dh stc pop ds retn loc17: clc pop ds retn third endp fourth proc near loc18: lodsb cmp al,20h je loc18 cmp al,9 je loc18 retn fourth endp message db 'Ghost Device Driver vers. 1.00 by Peter2000',13,10,36 start ends end