Anda di halaman 1dari 5

Notes :

- Penulis TIDAK bertanggung jawab atas penggunaan maupun penyalahgunaan dari art
ikel ini.
- Tujuan dibuat artikel HANYA untuk BAHAN PEMBELAJARAN saja.
- Penggunaan nama, merek, atau logo hanya sebagai CONTOH dan REFERENSI saja, TID
AK ada maksud mempromosikan pihak tertentu.
- Penulis mohon maaf apabila seluruh/sebagian dari isi artikel ini sudah tersira
t dalam artikel sejenis lainnya.
Main#
Sekarang kehadiran para virus maker ( selanjutnya disingkat jadi VM saja) lokal te
lah membuat gerah para user komputer tanah air. Bisa dibayangkan bila dari sekia
n banyak virus lokal tidak satu-dua yang menghancurkan data (terutama bagi file
office; word, excel, dll ). Bagi para vendor Anti Virus ( selanjutnya disingkat menj
adi AV saja) fenomena ini adalah lahan bisnis untuk produk mereka. Sebut saja NO
RMAN, yang kini men-support perusahaan konsultan virus lokal ( VAKSIN.COM) , Syman
tec, McAffe, NOD32, dan sebagainya. Dengan menawarkan update definisi software A
V tercepat, engine scanner paling sensitif, dan lain-lain merupakan kiat untuk m
emancing para korban virus membeli dan menggunakan software AV mereka. Bagi penu
lis sendiri hal ini memang agak memberatkan mengingat update file definisi atau
engine AV tsb haruslah melalui koneksi internet. Lalu bagaimana yang tidak mempu
nyai akses sama sekali? Konsekuensinya iyalah tertinggal dalam hal pengenalan va
rian virus baru yang pada ujung-ujungnya membuat AV yang sudah terinstall bagai M
acan Ompong . Kalau kita membuat AV sendiri bagaimana? dengan database definisi ya
ng bisa diupdate oleh kita bahkan dapat saling tukar dengan teman? Bisa saja, de
ngan syarat mau mempelajari sedikit teknik pemograman.Pertama kita harus mengert
i bagaimana cara kerja sebuah AV sederhana, pada dasarnya sebuah software AV mem
punyai komponen-komponen :
1. Engine scanner, ini merupakan komponen utama AV dalam mengenali sebuah patter
n virus. Engine ini dapat dikelompokkan menjadi statis dan dinamis. Statis dalam
hal ini dapat disebut menjadi spesifik terhadap pattern tertentu dari sebuah fi
le virus. Checksum merupakan salah satu contoh dari engine statis ini. Dinamis d
alam artian dia mengenali perilaku umum sebuah virus. Heuristic menjadi salah satu
contohnya.
2. Database definition, menjadi sebuah referensi dari sebuah pattern file virus.
Engine statis sangat bergantung kepada komponen ini.
3. Decompress atau unpacking engine, khusus untuk pengecekan file-file yang terk
ompresi (*.rar, *.zip, dll) atau kompresi atau packing untuk file PE seperti UPX
, MeW , dll.
Tidak jarang hasil dari pengecekan terhadap file suspect virus menghasilkan fals
e-positive bahkan false-negative ( false-positive berarti file yang bersih diangg
ap thread oleh AV, dan false-negative berarti file yang 100% thread akan diangga
p bersih). Semua itu dapat diakibatkan oleh ketidak-sempurnaan dari engine scann
er itu sendiri. Misal
pada contoh kasus Engine String scanner ( Engine scanner yang menyeleksi string-st
ring dari file text-based), bila diterapkan rule 3 out of 5 ( bila AV menemukan 3
dari daftar 5 string kategori malicious) maka AV akan memberikan bahwa file ter
indikasi sebuah thread yang positif. Padahal file tsb nyatanya tidak menimbulkan
efek berbahaya bila dijalankan atau dieksekusi. Kesalahan scanning macam ini la
zim ditemukan untuk file-file *.VBS, *.HTML, dll. Untuk penggunaan engine checks
um sangat banyak ditemui di beberapa software AV lokal. Checksum yang lazim digu
nakan diantaranya CRC16, CRC32, MD5, dll. Dikarenakan mudah untuk diimplementasi
kan. Engine ini sendiri bukannya tanpa cacat, Checksum bekerja dengan memproses
byte demi byte dari sebuah file dengan sebuah algoritma tertenu ( tergantung dari
jenis checksum yang digunakan) sehingga menghasilkan sebuah format tertentu dar
i file tsb. Contoh checksum menggunakan CRC32 dan MD5 :
* calCrc = CRC32(file_name_and_path)
* calMD5 = MD5(file_name_and_path)
Maka isi dari string calCrc adalah 7AF9E376, sedangkan untuk MD5nya adalah 529CA
8050A00180790CF88B63468826A. Perlu diketahui bila virus menerapkan rutin yang me
ngubah byte tertentu dari badan virus tsb setiap kali maka penggunaan engine che
cksum ini akan kurang optimal karena bila 1 byte berubah dari file maka checksum
juga akan berubah.
Mari kita belajar membuat sebuah AV sederhana, yang diperlukan :
1. Software Visual Basic 6.0
2. Sedikit pemahaman akan pemograman Visual Basic 6.0
3. Sampel file bersih atau virus ( opsional)
First#
Sekarang kita akan belajar membuat sebuah rutin sederhana untuk :
- Memilih file yang akan dicek
- Membuka file tersebut dalam mode binary
- Memproses byte demi byte untuk menghasilkan Checksum
Buka MS-Visual Basic 6.0 anda, lalu buatlah sebuah class module dan Form dengan
menambahkan sebuah objek Textbox, CommonDialog dan Command Button. (Objek Common
Dialog dapat ditambahkan dengan memilih Project -> COmponent atau Ctrl-T dan mem
ilih Microsoft Common Dialog Control 6.0) Ketikkan kode berikut pada class modul
e (kita beri nama class module tsb clsCrc) :
================= START HERE ====================
Private crcTable(0 To 255) As Long crc32
Public Function CRC32(ByRef bArrayIn() As Byte, ByVal lLen As Long, Optional ByV
al lcrc As Long = 0) As Long
bArrayIn adalah array byte dari file yang dibaca, lLen adalah ukuran atau size fi
le
Dim lCurPos As Long Current position untuk iterasi proses array bArrayIn
Dim lTemp As Long variabel temp hasil perhitungan
If lLen = 0 Then Exit Function keluar fungsi apabila ukuran file = 0
lTemp = lcrc Xor &HFFFFFFFF
For lCurPos = 0 To lLen
lTemp = (((lTemp And &HFFFFFF00) &H100) And &HFFFFFF) Xor (crcTable((lTemp And 2
55) Xor bArrayIn(lCurPos)))
Next lCurPos
CRC32 = lTemp Xor &HFFFFFFFF
End Function
Private Function BuildTable() As Boolean
Dim i As Long, x As Long, crc As Long
Const Limit = &HEDB88320
For i = 0 To 255
crc = i
For x = 0 To 7
If crc And 1 Then
crc = (((crc And &HFFFFFFFE) 2) And &H7FFFFFFF) Xor Limit
Else
crc = ((crc And &HFFFFFFFE) 2) And &H7FFFFFFF
End If
Next x
crcTable(i) = crc
Next i
End Function
Private Sub Class_Initialize()
BuildTable
End Sub
================= END HERE ====================
Lalu ketikkan kode berikut dalam event Command1_Click :
================= START HERE ====================
Dim namaFileBuka As String, HasilCrc As String
Dim CCrc As New clsCrc bikin objek baru dari class ClsCrc
Dim calCrc As Long
Dim tmp() As Byte array buat file yang dibaca
Private Sub Command1_Click()
CommonDialog1.CancelError = True error bila user mengklik cancel pada CommonDialo
g
CommonDialog1.DialogTitle = Baca File Caption commondialog
On Error GoTo erorhandle label error handle
CommonDialog1.ShowOpen
namafilbuka = CommonDialog1.FileName
Open namafilbuka For Binary Access Read As #1 buka file yang dipilih dengan akses
baca pada mode binary
ReDim tmp(LOF(1) 1) As Byte deklarasi ulang untuk array, # Bugs Fixed #
Get #1, , tmp()
Close #1
calCrc = UBound(tmp) mengambil ukuran file dari array
calCrc = CCrc.CRC32(tmp, calCrc) hitung CRC
HasilCrc = Hex(calCrc) diubah ke format hexadesimal, karena hasil perhitungan dar
i class CRC masih berupa numeric
Text1.Text = HasilCrc tampilkan hasilnya
Exit Sub
erorhandle:
If Err.Number <> 32755 Then MsgBox Err.Description error number 32755 dalah bila
user mengklik tombol cancel pada saat memilih file
================= END HERE ====================
COba anda jalankan program diatas dengan memencet tombol F5, lalu klik Command1
untuk memilih dan membuka file. Maka program akan menampilkan CRC32nya.
Second#
Kode diatas dapat kita buat menjadi sebuah rutin pengecekan file suspect virus d
engan antara membandingkan hasil CRC32nya dan database CRC kita sendiri. Algorit
manya adalah :
- Memilih file yang akan dicek
- Membuka file tersebut dalam mode binary
- Memproses byte demi byte untuk menghasilkan Checksum
- Buka file database
- Ambil isi file baris demi baris
- Samakan Checksum hasil perhitungan dengan checksum dari file
Format file database dapat kita tentukan sendiri, misal :
- FluBurung.A=ABCDEFGH
- Diary.A=12345678
Dimana FluBurung.A adalah nama virus dan ABCDEFGH dalah Crc32nya. Jika kita memp
unyai format file seperti diatas, maka kita perlu membaca file secara sekuensial
per baris serta memisahkan antara nama virus dan Crc32nya. Dalam hal ini yang m
enjadi pemisah adalah karakter = .
Buat 1 module baru ( diberi nama module1) lalu isi dengan kode :
================= START HERE ====================
Public namaVirus As String, CrcVirus As String deklarasi variabel global untuk na
ma dan CRC virus Public pathExe as String deklarasi variabel penyimpan lokasi fil
e EXE AV kita
Public Function cariDatabase(Crc As String, namaFileDB As String) As Boolean
Dim lineStr As String, tmp() As String variabel penampung untuk isi file
Open namaFileDB For Input As #1 buka file dengan mode input
Do
Line Input #1, lineStr
tmp = Split(lineStr, = ) pisahkan isi file bedasarkan pemisah karakter =
namaVirus = tmp(0) masukkan namavirus ke variabel dari array
CrcVirus = tmp(1) masukkan Crcvirus ke variabel dari array
If CrcVirus = Crc Then bila CRC perhitungan cocok/match dengan database
cariDatabase = True kembalikan nilai TRUE
Exit Do keluar dari perulangan
End If
Loop Until EOF(1)
Close #1
End Function
================= END HERE ====================
Lalu tambahkan 1 objek baru kedalam Form, yaitu Command button2. lalu ketikkan l
isting kode berikut kedalam event Command2_Click :
================= START HERE ====================
If Len(App.Path) <= 3 Then bila direktori kita adalah root direktori
pathEXE = App.Path
Else
pathEXE = App.Path &
End If
CommonDialog1.CancelError = True error bila user mengklik cancel pada CommonDialo
g
CommonDialog1.DialogTitle = Baca File Caption commondialog
On Error GoTo erorhandle label error handle
CommonDialog1.ShowOpen
namafilbuka = CommonDialog1.FileName
Open namafilbuka For Binary Access Read As #1 buka file yang dipilih dengan akses
baca pada mode binary
ReDim tmp(LOF(1) 1) As Byte deklarasi ulang untuk array # Bugs Fixed #
Get #1, , tmp()
Close #1
calCrc = UBound(tmp) mengambil ukuran file dari array
calCrc = CCrc.CRC32(tmp, calCrc) hitung CRC
HasilCrc = Hex(calCrc) diubah ke format hexadesimal, karena hasil perhitungan dar
i class CRC masih berupa numeric
If cariDatabase(HasilCrc, pathEXE & DB.txt ) Then bila fungsi bernilai TRUE
MsgBox Virus ditemukan : & namaVirus tampilkan message Box
End If
Exit Sub
erorhandle:
If Err.Number <> 32755 Then MsgBox Err.Description error number 32755 dalah bila
user mengklik tombol cancel pada saat memilih file
================= END HERE ====================
Fitur AV sederhana ini dapat ditambahkan dengan fitur process scanner, akses reg
istry, real-time protection (RTP) dan lain lain. Untuk process scanner pada dasa
rnya adalah teknik enumerasi seluruh proses yang sedang berjalan pada Sistem Ope
rasi, lalu mencari letak atau lokasi file dan melakukan proses scanning. Fitur a
kses registry memungkinkan kita untuk mengedit secara langsung registry windows
apabila akses terhadap registry ( Regedit) diblok oleh virus. Sedangkan fitur RTP
memungkinkan AV kita berjalan secara simultan dengan windows explorer untuk meng
scan direktori atau file yang sedang kita browse atau lihat. Untuk ketiga fitur
lanjutan ini akan dibahas pada artikel selanjutnya.
Kesimpulan#
Tidak harus membeli software AV yang mahal untuk menjaga komputer kita dari anca
man virus, kita bisa membuatnya sendiri dengan fitur-fitur yang tak kalah bagusn
ya. Memang terdapat ketidaksempurnaan dalam AV buatan sendiri ini, tetapi setida
knya dapat dijadikan pencegah dari infeksi virus komputer yang semakin merajalel
a. Software AV sederhana ini dilengkapi oleh engine scanner statis dan database
definisi. Tidak tertutup kemungkinan software AV ini ditingkatkan lebih advanced
dalam hal engine scannernya.
Penutup#
Pengembangan software AV sederhana ini sepenuhnya Open-Source selama mengikutser
takan nama pembuat asli didalamnya. Listing serta projek lengkap dapat didownloa
d di http://www.geocities.com/emomelodicfreak/ProjekAV.zip

Anda mungkin juga menyukai