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:
|
- 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:
|
- 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:
- 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.
- 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
- David Jurgens. HelpPC v2.10 (c)1991.
- Ralf Brown. The MSDOS Interrupt List.
- 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.
huntu berkata
naon tah P1 P2…. apdu sender yaaa 6F00
huntu berkata
euuuuhh ieu yeuhh biangna, pantesan harita windows urg manggih virus Dos
(