Serum Virus Kusumah

Pernah mendengar nama Kusumah? Teman anda barangkali. Atau tetangga anda. Bagaimana bila Kusumah ini menempel di file-file program kita? Tentu saja itu adalah sebuah virus. Baiklah, kali ini kita akan membahas virus Kusumah.

Virus ini jelas-jelas buatan hacker lokal, dan tampaknya ada 3 versi yang beredar luas. Sebenarnya virus ini tidak berbahaya, namun bagaimanapun tetap mengganggu, dan harus secepatnya dibasmi.

Karakteristik Virus

Kusumah.2588:
  • Menyerang file .COM, .EXE, dan Overlay.
  • Menambah besar file yang ditularinya sebesar 2588 byte.
  • Mencegat Vektor 08h yang digunakan sebagai penghitung cacahan waktu pada komputer. Bila hitungannya tercapai, maka virus ini akan menampilkan:

         ÉÍ< INGAT SHALAT.!! >Í»
     º     UNIVERSITAS     º
     º  JEND. ACHMAD YANI  º
     º  ® E l e k t r o ¯  º
     ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
     º (C) KUSUMAH SASMITA º
     ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ

  • Vektor 21h, inti dari fungsi DOS, dimanipulasi untuk beberapa fungsinya, yaitu:
  • 4Eh (Find First Matching File), dimanfaatkan untuk menelusuri tiap-tiap direktori mencari program COMMAND.COM untuk diinfeksi
  • 41h (Delete File), digunakan sama dengan fungsi 41h namun dengan trigger fungsi berbeda
  • 3Dh (Open File Using Handle), digunakan untuk menulari suatu file/program ketika akan dibuka.
  • 4B00h (Execute Program), digunakan untuk menginfeksi program ketika akan dijalankan.
  • 43h (Get/Set File Atributes), dimanipulasi agar menyebarkan virus ketika suatu file diperiksa atau diganti atributnya.
  • 56h (Rename File), dimanfaatkan untuk menyerang file/program yang diganti namanya.
  • 0FFFEh, menghasilkan AX=4A4Bh (‘JK’) sebagai tanda virus telah aktif.
  • 0FFFFh, menghasilkan AX=4B53h (‘KS’), tanda aktif.
  • 2521h, 2513h (Set Interrupt Vector), bila terjadi penggantian vektor 21h atau 13h, maka virus selalu mengupayakan agar dirinya selalu aktif. Virus memang ini selalu mengupayakan vektor yang dicegatnya selalu pertama kali mengarah pada rutinnya.
  • 36h (Get Disk Free Space), digunakan untuk mencari program COMMAND.COM ketika dilakukan pengecekan besar sisa disk yang tersedia. Fungsi ini sering digunakan oleh perintah internal DOS, yaitu DIR.
  • Ketika pertama kali diinstalasi virus ini akan berusaha mencari dan menginfeksi file COMMAND.COM, terutama di direktori C:\DOS.
  • Mengganti label pada disket menjadi ‘KUSUMAH S’.
  • Pada tiap hari Jum’at akan dibuat file SELAMAT.COM yang bila dijalankan akan menampilkan: ‘Create by: KUSUMAH SASMITA, UNJANI Bdg-Cmh …. Good Day !’
Kusumah.3016:

Sebagian besar sama dengan Kusumah.2588, namun dengan sedikit perbedaan di proses instalasi, tampilan, pencegatan fungsi, maupun struktur file yang diinfeksi. Beberapa perbedaan:

  • Menambah besar file program sebanyak 3016 byte.
  • Mencegat Int 21 fungsi 3Dh, 4B00h, 43h, 56h, 0FFFFh, 2521h, 2513h.
  • Secara tidak langsung mencegat Int 1Ch, sebagai pengganti Int 08h. Proses ini dilakukan lewat fasilitas alarm pada Int 1Ah.
  • Tampilan bila cacahan terpenuhi:

         ÉÍ< INGAT SHALAT.!! >Í»
         º     UNIVERSITAS     º
         º  JEND. ACHMAD YANI  º
         º  Bandung Indonesia  º
         ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
         º By: KUSUMAH SASMITA º
         ÈÍÍÍÍÍ< W I N G >ÍÍÍÍͼ

  • Pada awal program .COM terdapat string kalimat:
                – U N J A N I –
                    Ver.  2.00
                 By: KUSUMAH S
                     Bandung
                     Indonesia
  • Pengecekan isi COMSPEC saat instalasi virus.
Kusumah.3967:

Pada virus ini mulai banyak dikembangkan trik-trik baru dalam kerja virus. Banyak perbedaan dari kedua versi sebelumnya, terutama dari makin banyaknya manipulasi fungsi yang dilakukan. Perbedaan itu antara lain:

  • Menambah besar file program sebesar 3967 byte.
  • Bisa dibilang semi ‘stealth’ hingga mampu menerobos sebagian program imunisasi. Namun tidak setiap operasi file diberikan fasilitas ini, dan tampaknya hanya untuk menghindari pengecekan sendiri pada sebuah program.
  • Mencegat vektor pada lapisan dalam, yaitu dengan jalan menelusuri vektor Int 21h, dan memodifikasi pada titik terakhir.
  • Mencegat Int 21h, fungsi 4Eh, 43h, 0FFFFh, 0FFFEh, ditambah:
  • 2B01h (Set Date) DX=5351h (SQ), bila AL=00h berarti virus telah aktif di memori.
  • 33h (Get Ctrl-Break Checking Flag), ini ada hubungannya dengan penelusuran vektor, yang mungkin untuk menandakan virus telah aktif.
  • 6Ch (Extended Open/Create File), fungsi ini digunakan oleh perintah internal DOS ‘Copy’.
  • 4Bh (Exec/Load Program), selain sub fungsi 00h (Exec) dicegat pula sub fungsi 01h/02h (Load) yang biasa digunakan program debugger. Virus memanipulasi fungsi ini sehingga program yang didebug seakan-akan tidak berubah.
  • 3Bh (Change Current Dir), dimanfaatkan untuk menulari program COMMAND.COM bila ditemukan.
  • 3Ch (Create File), 3Dh (Open File), 3Eh (Close File), 3Fh (Read File), 40h (Write To File), 42h (Move File Pointer), dimanipulasi untuk mendukung fasilitas ‘stealth’ terhadap operasi file yang sering digunakan dalam DOS.
  • 17h (Rename File Using FCB), dimanfaatkan untuk menyerang file/program yang diganti namanya.
  • 11h (Search First/FCB), 12h (Search Next/FCB), untuk menyembunyikan perubahan besar file. Biasa digunakan perintah internal DOS ‘Dir’.
  • Mulai menerapkan teknik enkripsi dan trik anti debugging yang mungkin dapat mempersulit mereka yang ingin membongkar virus ini.
  • Tampaknya tidak memiliki tampilan khusus, hanya kadang-kadang memberikan pesan “Moslem Power Never End.(P) KuSuMaH’s. ElEkTrO UnJaNi” bila virus gagal melakukan instalasi di memori.
  • Seperti umumnya virus file yang ‘stealth’, virus ini juga nampaknya mengecek dijalankannya program ‘CHKDSK’ agar tidak memberikan hasil yang keliru.
  • Program SELAMAT.COM bila dijalankan akan menampilkan: ‘(P) KuSuMaH S, Elektro UNJANI Bdg-Cmh’. Parameter waktu turut diperhatikan dalam pembuatan file SELAMAT.COM.
  • Pada awal badan virus di file program terdapat string ‘KuSuMaH’S UnJaNi, Bandung’.
Kusumah.3968:

Pada dasarnya sama dengan Kusumah.3967, hanya terdapat sedikit perbedaan. Walau begitu kedua virus ini saling tidak mengenal satu sama lain dengan baik, terbukti dengan saling bertumpuknya kedua virus bila diaktifkan secara berganti-ganti. Perbedaan utama:

  • Menambah besar file sebesar 3968 byte.
  • Tidak terdapat string pengenal pada awal badan virus.

Baik virus Kusumah.2588 maupun Kusumah.3016 terlihat banyak kemiripan dengan virus Keypressed. Sedangkan virus Kusumah.3967 dan Kusumah.3968 tampak banyak mengambil ide dari virus Die-hard (atau sebaliknya?). Keempat virus ini juga melakukan penyesuaian besar file asal hingga tepat per satuan paragraph (10h byte). Tampak jelas bahwa virus ini dibuat dari program berformat .COM, hal ini dapat dilihat dari pengaturan ofset program baik di file maupun di memori.

Program Serum Virus

Cara yang ampuh untuk membasmi virus ini yaitu dengan menggunakan program serum yang penulis sertakan. Program ANTIKSM.PAS dibuat dengan bahasa Pascal, dan dikompilasi dengan Turbo Pascal 6.0+. Sebaiknya Turbo Pascal 7.0 seperti yang penulis gunakan. Bila Anda menggunakan Borland Pascal 7.0, atur agar target kompiler ke modus real.

Secara garis besar program ini mempunyai dua prosedur untuk pembasmian virus Kusumah, yaitu:

  1. PMem, mendeteksi keaktifan virus di memory. Virus Kusumah hanya dapat menyusup ke akhir memori konvensional (yang normal), dan bermasalah bila selain itu. Untuk melumpuhkannya cukup dengan mencari akhir dari memori 640K, dan melakukan pencarian terhadap identitas virus. Dilanjutkan dengan melakukan ‘patching’ terhadap rutin-rutin virus di memory, sehingga jalur-jalur sistem yang dicegat dapat dikembalikan ke kondisi asalnya. Bila proses pelumpuhan ini gagal, maka program akan langsung berhenti, untuk mencegah penyebaran virus lebih lanjut.
  2. PDir, mendeteksi dan melenyapkan virus di file-file program pada direktori yang disebutkan lewat parameter. Pendeteksian meliputi seluruh program .EXE atau .COM. Bila diinginkan dapat dilakukan proses ‘scan’ pada seluruh file, mengingat banyak file-file program yang termuat sebagai overlay atau driver sistem dengan bermacam ekstensi. Bila file positif terkena virus, maka akan segera dibersihkan dan dikembalikan seperti semula. Perhatian khusus bila file terserang lebih dari satu virus. Apabila virus Kusumah tidak berada pada lapisan terluar, maka program tidak mendeteksi adanya virus pada file tersebut. Hal ini sulit dicari jalan keluarnya, kecuali virus-virus yang masuk setelah Kusumah dibersihkan terlebih dahulu.

Setelah listing program ANTIKSM.PAS tersedia, panggilah program Turbo Pascal dan buka listing tersebut. Bila dalam menu Compile tersedia pilihan Destination, pastikan untuk ditujukan ke Disk, agar terbentuk file ANTIKSM.EXE. Lalu lakukan proses Compile, Run, Make atau Build, sehingga tercipta file ANTIKSM.EXE yang siap untuk dijalankan.

Atau dapat pula Anda kompilasi langsung lewat program TPC.EXE, satu paket dengan Turbo Pascal, yaitu dengan mengetikkan:
      C:\>TPC ANTIKSM
bila tidak ada kesalahan maka akan tercipta file ANTIKSM.EXE.

Pemakaian Serum

Untuk menjalankan program ANTIKSM, ketiklah di prompt DOS sebagai berikut:

            C:\>ANTIKSM <[dir1] [dir2]…> [/S /A]

[dir1] [dir2]…, maksudnya adalah direktori yang dituju bisa lebih dari satu direktori. Contoh:
     C:\>ANTIKSM C:\DOS D:\WINDOWS A:\

/S, maksudnya apabila terdapat sub direktori maka program akan masuk ke seluruh sub direktori yang ada.

/A, artinya program tidak hanya memeriksa file-file yang berektensi .EXE atau .COM, namun seluruh file.

Ada baiknya sebelum menggunakan serum ini Anda cobakan dulu pada beberapa file untuk memastikan bahwa serum bekerja dengan baik. Juga perlu dipastikan bahwa memori dalam keadaan bebas virus (lain), agar proses berjalan sesuai yang diharapkan.

Penulis telah melakukan uji coba pembersihan terhadap bermacam-macam file, dan hasilnya berjalan dengan baik. Kesalahan pembersihan telah diusahakan seminim mungkin. Pada pemulihan file akibat infeksi virus Kusumah.2588 atau Kusumah.3016, besar file asal mungkin tidak kembali seperti semula. Hal ini akibat proses teknis dari kerja virus, dan sulit dicari cara untuk mengatasinya. Namun secara umum ini tidak menimbulkan efek apa-apa.

Dalam prosesnya program ini tidak mengharapkan input dari pemakai, kecuali lewat parameter. Jadi bila suatu operasi tulis file gagal, karena disket diprotek misalnya, proses terus berjalan dengan memberikan pesan kesalahan secara umum. Proses dapat diulang kembali bila kesalahan telah diperbaiki. Hal ini untuk menyederhanakan pembuatan program, sebab bisa dibilang hanya sedikit kesalahan yang dapat terjadi.

Penutup

Di era globalisasi ini tampaknya teknologi pervirusan, khususnya virus lokal, akan terus berkembang. Apalagi didukung program-program bantu yang memadai dan makin canggih. Ditambah pula banjirnya informasi, tentang apapun, yang dapat membuat efek tersendiri.

Tentang virus Kusumah ini tampaknya masih terus dikembangkan oleh pembuatnya. Tampak dari banyak versi yang dibuat oleh orang yang sama, namun dengan struktur dan teknik yang berbeda. Begitulah virus komputer, tantangan dan godaan seperti tidak ada habis-habisnya. Setidaknya, minumlah segelas air putih dan tarik nafas dalam-dalam. Pikiran jernih, itulah yang kita perlukan.

Akhirnya penulis berharap semoga program ini bermanfaat bagi pembaca sekalian. Komentar, saran, kritik, atau apapun silakan layangkan ke Antivirus Media untuk ditanggapi seperlunya.

Daftar Pustaka

  1. David Jurgens. HelpPC v2.10 (c)1991.
  2. Ralf Brown. The MSDOS Interrupt List.
  3. Ediman Lukito. Membongkar, Memberantas dan Mencegah Virus Komputer.

Listing Program

{***********************************************}
{ File:      ANTIKSM.PAS => ANTIKSM.EXE         }
{ Deskripsi: Anti Virus Kusumah                 }
{ Kompiler:  Turbo Pascal 6.0+, Borland, Inc    }
{ Utilitas:  Soft-ICE v2.64, Nu-Mega            }
{ Penulis:   M. Harjono                         }
{ Tanggal:   03 Juni 1997                       }
{ Dedikasi:  * Pembaca AntiVirus Media          }
{            * BL-TI-93                         }
{ (c)1997 Antivirus Media                       }
{***********************************************}
{$S-,R-,G+,I+,X+,Q-,A+,B-}
{$M 7505,0,0}
program Anti_Kusumah;

uses
  Dos;

type
  R_Exe = record
    MZ: word;
    _Mod: word;
    _Div: word;
    Rel: word;
    Hed: word;
    _M1,_M2: word;
    _SS,_SP: word;
    CkSum: word;
    _IP,_CS: word;
  end;
  R_Com = record
    Kod: byte;
    JMP: word;
  end;
  R_Id = array[1..6] of byte;
  R_PVir = function(Bs:word; var BufV,BufH): word;
  R_DVir = record
    Lf: integer;    {lok kode virus}
    La: integer;    {lok awal virus}
    Lh: integer;    {lok hdr asli}
    Id: R_Id;       {Id vir}
    Pr: R_PVir;     {rutin proses}
  end;
  R_MVir = record
    La: integer;    {lok awal mem vir}
    Lc: integer;    {lok awal modif}
    Kb: word;       {kode awal modif}
    Kj: word;       {kode modif}
    Id: R_Id;       {Id vir}
  end;
  Exe = ^R_Exe;
  Com = ^R_Com;
  P_W = ^word;
  P_L = ^longint;

var
  Lok_H: longint;

function MCBAkhir: word; assembler;
asm
{-- ambil MCB pertama --}
  mov ah,52h
  int 21h
  mov dx,es:[bx-2]
  cld
{-- ambil dan set UMB link --}
  mov ax,5802h
  int 21h
  jc @@U_1
  push ax
  mov ax,5803h
  xor bx,bx
  int 21h
  pop bx
  jnc @@1
@@U_1:
  mov bl,-1
{-- telusuri MCB --}
@@1:
  mov es,dx
  xor si,si
  SegES lodsb
  cmp al,5Ah
  jz @@2
  cmp al,4Dh
  jnz @@3
  lodsw
  SegES lodsw
  stc
  adc dx,ax
  jmp @@1
@@2:
  stc
  adc dx,es:[3]
@@3:
{-- kembalikan UMB link --}
  cmp bl,-1
  jz @@U_O_2
  mov ax,5803h
  mov bh,0
  int 21h
@@U_O_2:
  xchg dx,ax
end;

function SegIdMem(_Seg,Lok: word;var Id): word; assembler;
asm
  push ds
  lds si,Id
  mov es,_Seg
  xor di,di
  mov cx,$4000
  cld
@@1:
  mov al,ds:[si]
  repnz scasb
  jnz @@2
  push cx
  push si
  push di
  inc si
  mov cx,type R_Id-1
  repz cmpsb
  pop di
  pop si
  pop cx
  jnz @@1
  dec di
  mov ax,Lok
  neg ax
  sub di,ax
  jb @@2
  xchg di,ax
  mov cl,4
  shr ax,cl
  add ax,_Seg
  jmp @@3
@@2:
  xor ax,ax
@@3:
  pop ds
end;

function CekId(P1,P2: pointer): boolean; assembler;
asm
  push ds
  lds si,P1
  les di,P2
  mov cx,type R_Id
  cld
  repz cmpsb
  mov al,00
  jnz @@1
  mov al,01
@@1:
  pop ds
end;

{-- Bagian Pemulih di Memory --}
const
  PjDatM = 4;
  KusM : array[1..PjDatM] of R_MVir =
    ((La:-$8FA;Lc:$8CE;Kb:$DBE8;Kj:$72EB;Id:($75,$04,$B8,$4B,$4A,$CF)),
     (La:-$A12;Lc:$9F8;Kb:$4EE8;Kj:$6CEB;Id:($75,$04,$B8,$53,$4B,$CF)),
     (La:-$76E;Lc:$75B;Kb:$FB9C;Kj:$A2EB;Id:($05,$B8,$53,$4B,$9D,$CF)),
     (La:-$75E;Lc:$74B;Kb:$FB9C;Kj:$A2EB;Id:($05,$B8,$53,$4B,$9D,$CF)));

function PMem: shortint;
var
  _MCB,_Seg: word;
  I: integer;
begin
  PMem := 0;
  _MCB := MCBAkhir;
  for i := 1 to PjDatM do
    with KusM[i] do
    begin
      _Seg := SegIdMem(_MCB,La,Id);
      if (_Seg <> 0) and (MemW[_Seg:Lc]=Kb) then
      begin
        PMem := 1;
        MemW[_Seg:Lc] := Kj;
      end;
    end;
end;

{-- Bagian Pemulih di File --}
{$F+}
function Kus1Com(Bs:word; var BufV,BufH): word; assembler;
asm
  push ds
  lds si,BufV
  les di,BufH
  cmp Bs,3
  jb @@E
  mov cx,3
  mov ax,cx
  repz movsb
  jmp @@U
@@E:
  xor ax,ax
@@U:
  pop ds
end;

function Kus2Com(Bs:word; var BufV,BufH): word; assembler;
asm
  push ds
  lds si,BufV
  les di,BufH
  cmp Bs,$70
  jb @@E
  mov cx,$70
  mov ax,cx
  repz movsb
  jmp @@U
@@E:
  xor ax,ax
@@U:
  pop ds
end;

function Kus3Cxe(Bs:word; var BufV,BufH): word; assembler;
asm
  push ds
  mov cx,Bs
  les di,BufV
  xor ax,ax
  cld
@@3:
  repnz scasb
  jnz @@E
  cmp es:[di],ax
  jnz @@3
  cmp es:[di+2],al
  jnz @@3
  add di,3
  mov si,di
@@4:
  mov al,es:[di]   {dekrip header asli}
  xor al,$FD
  stosb
  loop @@4
  SegES lodsw
  mov word ptr Lok_H,ax
  SegES lodsw
  mov word ptr Lok_H+2,ax
  push es
  pop ds
  les di,BufH
  mov cl,type R_Exe
  mov ax,ds:[si]
  cmp ax,$5A4D
  jz @@1
  cmp ax,$4D5A
  jz @@1
  mov cl,type R_Com
@@1:
  mov ax,cx
  repz movsb
  jmp @@U
@@E:
  xor ax,ax
@@U:
  pop ds
end;

function Kus1Exe(Bs:word; var BufV,BufH): word; assembler;
asm
  push ds
  lds si,BufV
  les di,BufH
  cmp Bs,8
  jb @@E
  cld
  lodsw
  mov es:[di.R_Exe._SS],ax
  lodsw
  mov es:[di.R_Exe._SP],ax
  lodsw
  mov es:[di.R_Exe._CS],ax
  lodsw
  mov es:[di.R_Exe._IP],ax
  mov ax,type R_Exe
  jmp @@U
@@E:
  xor ax,ax
@@U:
  pop ds
end;
{$F-}

const
  PjDatV = 8;
  KusV: array[1..PjDatV] of R_DVir =
    ((Lf:-3;La:-$2A8;Lh:$A19;Id:($E2,$F7,$C3,$E8,$00,$00);Pr:Kus1Com),
     (Lf:-3;La:-$31A;Lh:$B58;Id:($78,$52,$45,$E8,$00,$00);Pr:Kus2Com),
     (Lf:+9;La:-$11B;Lh:$F36;Id:($01,$53,$CB,$A1,$A0,$10);Pr:Kus3Cxe),
     (Lf:+9;La:-$100;Lh:$F37;Id:($01,$53,$CB,$A1,$A1,$10);Pr:Kus3Cxe),
     (Lf:+6;La:-$74E;Lh:$107;Id:($B8,$FE,$FF,$CD,$21,$3D);Pr:Kus1Exe),
     (Lf:+12;La:-$8B7;Lh:$42D;Id:($B8,$FF,$FF,$CD,$21,$3D);Pr:Kus1Exe),
     (Lf:+5;La:-$11C;Lh:$105E;Id:($3B,$02,$53,$33,$DB,$C3);Pr:Kus3Cxe),
     (Lf:+5;La:-$101;Lh:$105F;Id:($2B,$02,$53,$33,$DB,$C3);Pr:Kus3Cxe));

function PulihFile(NmF: string): shortint;
var
  F1: file;
  Buf,BufH: array[0..$FF] of byte;
  Dapet,Attr: word;
  Lok_V,Wkt: longint;
  I: integer;
  _Exe: byte;
begin
  {$I-}
  PulihFile := 0;
  Assign(F1,NmF);
  FileMode := 0;
  Reset(F1,1);
  if (IOResult <> 0) then
    Exit;
  BlockRead(F1,Buf,SizeOf(Buf),Dapet);
  if (Dapet<>SizeOf(Buf)) then
  begin
    Close(F1);
    Exit;
  end;
  if (Exe(@Buf)^.MZ = $4D5A) or (Exe(@Buf)^.MZ = $5A4D) then
  begin
    _Exe := 1;
    with Exe(@Buf)^ do
      Lok_V := longint(hed+_cs)*$10 + _ip - 100;
  end
  else
  begin
    _Exe := 0;
    with Com(@Buf)^ do
      Lok_V := JMP + 3 - 100;
  end;
  Seek(F1,Lok_V);
  BlockRead(F1,Buf,SizeOf(Buf));
  Close(F1);
  I := 1;
  while not CekId(@Buf[KusV[i].Lf+100],@KusV[i].Id) and (I <= PjDatV) do
    Inc(I);
  if (I <= PjDatV) then
  begin
    {-- positif bervirus --}
    PulihFile := -1;
    GetFAttr(F1,Attr);
    if (Attr and ReadOnly = ReadOnly) then
      SetFAttr(F1,Attr and not(ReadOnly));
    FileMode := 2;
    Reset(F1,1);
    if (IOResult <> 0) then
      Exit;
    GetFTime(F1,Wkt);
    Lok_H := Lok_V+100+KusV[i].La;
    Seek(F1,Lok_H+KusV[i].Lh);
    BlockRead(F1,Buf,SizeOf(Buf),Dapet);
    if (_Exe=1) then
    begin
      Seek(F1,0);
      BlockRead(F1,BufH,SizeOf(BufH));
      with Exe(@BufH)^ do
      begin
        _Mod := Lok_H mod 512;
        _Div := (Lok_H div 512);
        if (_Mod <> 0) then
          Inc(_Div);
      end;
    end;
    Seek(F1,0);
    BlockWrite(F1,BufH,KusV[i].Pr(Dapet,Buf,BufH),Dapet);
    if (Dapet=0) or (IOResult <> 0) then
    begin
      Close(F1);
      Exit;
    end;
    Seek(F1,Lok_H);
    Truncate(F1);
    SetFTime(F1,Wkt);
    Close(F1);
    if (IOResult <> 0) then
      Exit;
    if (Attr and ReadOnly = ReadOnly) then
      SetFAttr(F1,Attr);
    PulihFile := 1;
  end;
  InOutRes := 0;
  {$I+}
end;

const
  Par_Tidak: set of 1..15 = [];
  SubDir: boolean = false;
  Semua: boolean = false;
var
  Kena,Proses,NSubDir: word;

{$S+}
procedure PDir(S: PathStr);
var
  SR: SearchRec;
begin
  Inc(NSubDir);
  FindFirst(S+'*.*',anyfile,SR);
  while DosError = 0 do
  begin
    if (SR.Name[1] <> '.') and (SR.Attr and VolumeID <> VolumeID) then
    begin
      if (SR.Attr and Directory = Directory) then
      begin
        if SubDir then
        begin
          WriteLn(#13'Periksa ',S+SR.Name,' ':10);
          PDir(S+SR.Name+'\');
        end;
      end
      else
      begin
        if Semua or (pos('.EXE',SR.Name) <> 0) or (pos('.COM',SR.Name) <> 0) then
        begin
          Inc(Proses);
          Write(#13,SR.Name:14);
          case PulihFile(S+SR.Name) of
             1:
            begin
              WriteLn(' [terinfeksi, dipulihkan]');
              Inc(Kena);
              while (PulihFile(S+SR.Name)=1) do;
            end;
            -1:
            begin
              WriteLn(' [terinfeksi, gagal dipulihkan]');
              Inc(Kena);
            end;
          end;
        end;
      end;
    end;
    FindNext(SR);
  end;
end;
{$S-}

procedure IntNull; assembler;
asm
  mov al,03
  iret
end;

var
  Par: string[128];
  I,P: integer;
begin
  WriteLn(#13#254' Anti Virus Kusumah  v1.00'#10+
          #13#254' Dibuat oleh M. Harjono'#10+
          #13#254' (c)1997 Antivirus Media'#10);
  P := ParamCount;
  if (P = 0) then
  begin
    WriteLn('Sintak: ANTIKSM <[dir1] [dir2]...> [/S /A]'#10#13+
            '  /S = Masuk Sub Direktori'#10#13+
            '  /A = Semua File');
    Exit;
  end;
  {-- init rutin pemulih --}
{ KusV[1].Pr := Kus1Com;
  KusV[2].Pr := Kus2Com;
  KusV[3].Pr := Kus3Cxe;
  KusV[4].Pr := Kus3Cxe;
  KusV[5].Pr := Kus1Exe;
  KusV[6].Pr := Kus1Exe;
  KusV[7].Pr := Kus3Cxe;
  KusV[8].Pr := Kus3Cxe;
  {-- periksa memori --}
  Write('Cek Memori.... ');
  if (PMem=1) then
    WriteLn('[virus aktif, dilumpuhkan]')
  else
    WriteLn('[ok]');
  {-- olah parameter --}
  for I := 1 to P do
  begin
    Par := ParamStr(I);
    if (length(Par)=2) and (Par[1]='/') then
    begin
      case UpCase(Par[2]) of
        'S': SubDir := true;
        'A': Semua := true;
      end;
      Par_Tidak := Par_Tidak + [I];
    end;
  end;
  {-- init program --}
  SetIntVec($1B,@IntNull);
  SetIntVec($23,@IntNull);
  SetIntVec($24,@IntNull);
  Kena := 0;
  Proses := 0;
  NSubDir := 0;
  {-- periksa file --}
  for I := 1 to P do
  begin
    if not (I in Par_Tidak) then
    begin
      Par := ParamStr(I);
      if (Par[length(Par)] <> ':') and (Par[length(Par)] <> '\') then
        Par := Par + '\';
      WriteLn(#13'Periksa ',Par,' ':10);
      PDir(Par);
    end;
  end;
  WriteLn(#13'Hasil:        '#13#10+
          '  Direktori = ',NSubDir:6,#13#10+
          '  File      = ',Proses:6,#13#10+
          '  Terkena   = ',Kena:6,#13#10);
end.

2 Komentar »

  1. huntu said

    naon tah P1 P2…. apdu sender yaaa 6F00

  2. huntu said

    euuuuhh ieu yeuhh biangna, pantesan harita windows urg manggih virus Dos :((

RSS feed for comments on this post · TrackBack URI

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s