Sekarangkehadiran para virus maker (–selanjutnyadisingkatjadi VM
saja) lokaltelahmembuatgerah para user komputertanah air. Bisa
dibayangkanbiladarisekianbanyak virus lokaltidaksatu-dua yang
menghancurkan data (terutamabagi file office; word, excel, dll…). Bagi
para vendor Anti Virus (–selanjutnyadisingkatmenjadi AV saja)
fenomenainiadalahlahanbisnisuntukprodukmereka. Sebutsaja
NORMAN, yang kini men-support perusahaankonsultan virus lokal
(–VAKSIN.COM) , Symantec, McAffe, NOD32, dansebagainya. Dengan
menawarkan update definisi software AV tercepat, engine scanner paling
sensitif, dan lain-lain merupakankiatuntukmemancing para korban
virus membelidanmenggunakan software AV mereka. Bagipenulissendiri
halinimemangagakmemberatkanmengingat update file definisiatau
engine AV tsbharuslahmelaluikoneksi internet. Lalubagaimana yang
tidakmempunyaiaksessamasekali? Konsekuensinyaiyalahtertinggal
dalamhalpengenalanvarian virus baru yang padaujung-ujungnyamembuat
AV yang sudahterinstallbagai 'MacanOmpong'. Kalaukitamembuat AV
sendiribagaimana? dengan database definisi yang bisadiupdateoleh
kitabahkandapatsalingtukardenganteman? Bisasaja, dengansyarat
maumempelajarisedikitteknikpemograman.
Pertamakitaharusmengertibagaimanacarakerja
sebuah AV sederhana, padadasarnyasebuah software AV mempunyai
komponen-komponen :
1. Engine scanner, inimerupakankomponenutama AV
dalammengenalisebuah pattern virus. Engine inidapatdikelompokkan
menjadistatisdandinamis. Statisdalamhalinidapatdisebutmenjadi
spesifikterhadap pattern tertentudarisebuah file virus. Checksum
merupakansalahsatucontohdari engine statisini. Dinamisdalam
artiandiamengenaliperilaku 'umum' sebuah virus. Heuristic menjadi
salahsatucontohnya.
2. Database definition, menjadisebuahreferensidarisebuah pattern
file virus. Engine statissangatbergantungkepadakomponenini.
3. Decompress atau unpacking engine, khususuntukpengecekan file-file
yang terkompresi (*.rar, *.zip, dll) ataukompresiatau packing untuk
file PE seperti UPX, MeW ,dll.
Tidakjaranghasildaripengecekanterhadap file
suspect virus menghasilkan false-positive bahkan false-negative (–
false-positive berarti file yang bersihdianggap thread oleh AV, dan
false-negative berarti file yang 100% thread akandianggapbersih).
Semuaitudapatdiakibatkanolehketidak-sempurnaandari engine scanner
itusendiri. Misal
padacontohkasus Engine String scanner (–Engine scanner yang
menyeleksi string-string dari file text-based), biladiterapkan rule 3
out of 5 (– bila AV menemukan 3 daridaftar 5 string kategori
malicious) maka AV akanmemberikanbahwa file terindikasisebuah thread
yang positif. Padahal file tsbnyatanyatidakmenimbulkanefek
berbahayabiladijalankanataudieksekusi. Kesalahan scanning macamini
lazimditemukanuntuk file-file *.VBS, *.HTML, dll. Untukpenggunaan
engine checksum sangatbanyakditemui di beberapa software AV lokal.
Checksum yang lazimdigunakandiantaranya CRC16, CRC32, MD5, dll.
Dikarenakanmudahuntukdiimplementasikan. Engine inisendiribukannya
tanpacacat, Checksum bekerjadenganmemproses byte demi byte dari
sebuah file dengansebuahalgoritmatertenu (– tergantungdarijenis
checksum yang digunakan) sehinggamenghasilkansebuah format tertentu
dari file tsb. Contoh checksum menggunakan CRC32 danMD5 :
* calCrc = CRC32(file_name_and_path)
* calMD5 = MD5(file_name_and_path)
Makaisidari string calCrcadalah 7AF9E376,
sedangkanuntuk MD5nya adalah 529CA8050A00180790CF88B63468826A. Perlu
diketahuibila virus menerapkanrutin yang mengubah byte tertentudari
badan virus tsbsetiap kali makapenggunaan engine checksum iniakan
kurang optimal karenabila 1 byte berubahdari file maka checksum juga
akanberubah.
Mari kitabelajarmembuatsebuah AV sederhana, yang diperlukan :
1. Software Visual Basic 6.0
2. Sedikitpemahamanakanpemograman Visual Basic 6.0
3. Sampel file bersihatau virus (– opsional)
First#
Sekarangkitaakanbelajarmembuatsebuahrutinsederhanauntuk :
- Memilih file yang akandicek
- Membuka file tersebutdalam mode binary
- Memproses byte demi byte untukmenghasilkan Checksum
Buka MS-Visual Basic 6.0 anda, lalubuatlahsebuah
class module dan Form denganmenambahkansebuahobjek Textbox,
CommonDialogdan Command Button. (ObjekCommonDialogdapatditambahkan
denganmemilih Project ->COmponentatau Ctrl-T danmemilih
Microsoft Common Dialog Control 6.0) Ketikkankodeberikutpada class
module (kitaberinama class module tsbclsCrc) :
================= START HERE ====================
Private crcTable(0 To 255) As Long 'crc32
Public Function CRC32(ByRefbArrayIn() As Byte, ByVallLen As Long, Optional
ByVallcrc As Long = 0) As Long
'bArrayInadalah array byte dari file yang dibaca, lLenadalahukuranatau size
file
Dim lCurPos As Long 'Current position untukiterasi proses array bArrayIn
Dim lTemp As Long 'variabel temp hasilperhitungan
If lLen = 0 Then Exit Function 'keluarfungsiapabilaukuran file = 0
lTemp = lcrcXor&HFFFFFFFF
For lCurPos = 0 To lLen
lTemp = (((lTemp And &HFFFFFF00) \\ &H100) And &HFFFFFF) Xor
(crcTable((lTemp And 255) XorbArrayIn(lCurPos)))
Next lCurPos
CRC32 = lTempXor&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 ====================
Laluketikkankodeberikutdalam event Command1_Click :
================= START HERE ====================
Dim namaFileBuka As String, HasilCrc As String
Dim CCrc As New clsCrc 'bikinobjekbarudari 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
padaCommonDialog
CommonDialog1.DialogTitle = "Baca File" 'Caption commondialog
On Error GoToerorhandle 'label error handle
CommonDialog1.ShowOpen
namafilbuka = CommonDialog1.FileName
Open namafilbuka For Binary Access Read As #1 'buka file yang
dipilihdenganaksesbacapada mode binary
ReDimtmp(LOF(1) - 1) As Byte 'deklarasiulanguntuk array, # Bugs Fixed #
Get #1, , tmp()
Close #1
calCrc = UBound(tmp) 'mengambilukuran file dari array
calCrc = CCrc.CRC32(tmp, calCrc) 'hitung CRC
HasilCrc = Hex(calCrc) 'diubahke format hexadesimal, karenahasilperhitungandari
class CRC masihberupa numeric
Text1.Text = HasilCrc 'tampilkanhasilnya
Exit Sub
erorhandle:
If Err.Number<> 32755 Then MsgBoxErr.Description 'error number
32755 dalahbila user mengkliktombol cancel padasaatmemilih file
================= END HERE ====================
CObaandajalankan program diatasdenganmemencet
tombol F5, laluklik Command1 untukmemilihdanmembuka file. Maka
program akanmenampilkan CRC32nya.
Second#
Kodediatasdapatkitabuatmenjadisebuahrutinpengecekan file
suspect virus denganantaramembandingkanhasil CRC32nya dan database
CRC kitasendiri. Algoritmanyaadalah :
- Memilih file yang akandicek
- Membuka file tersebutdalam mode binary
- Memproses byte demi byte untukmenghasilkan Checksum
- Buka file database
- Ambilisi file baris demi baris
- Samakan Checksum hasilperhitungandengan checksum dari file
Format file database dapatkitatentukansendiri, misal :
- FluBurung.A=ABCDEFGH
- Diary.A=12345678
DimanaFluBurung.Aadalahnama virus dan ABCDEFGH dalah Crc32nya. Jika
kitamempunyai format file sepertidiatas, makakitaperlumembaca file
secarasekuensial per barissertamemisahkanantaranama virus dan
Crc32nya. Dalamhalini yang menjadipemisahadalahkarakter '='.
Buat 1 module baru (– diberinama module1) laluisidengankode :
================= START HERE ====================
Public namaVirus As String, CrcVirus As String
'deklarasivariabel global untuknamadan CRC virus Public pathExe as
String 'deklarasivariabelpenyimpanlokasi file EXE AV kita
Public Function cariDatabase(Crc As String, namaFileDB As String) As Boolean
Dim lineStr As String, tmp() As String 'variabelpenampunguntukisi file
Open namaFileDB For Input As #1 'buka file dengan mode input
Do
Line Input #1, lineStr
tmp = Split(lineStr, "=") 'pisahkanisi file bedasarkanpemisahkarakter
'='
namaVirus = tmp(0) 'masukkannamaviruskevariabeldari array
CrcVirus = tmp(1) 'masukkanCrcviruskevariabeldari array
If CrcVirus = Crc Then 'bila CRC perhitungancocok/match dengan database
cariDatabase = True 'kembalikannilai TRUE
Exit Do 'keluardariperulangan
End If
Loop Until EOF(1)
Close #1
End Function
================= END HERE ====================
Lalutambahkan 1 objekbarukedalam Form, yaitu
Command button2. laluketikkan listing kodeberikutkedalam event
Command2_Click :
================= START HERE ====================
If Len(App.Path) <= 3 Then 'biladirektorikitaadalah root direktoripathEXE =
App.Path Else pathEXE = App.Path& "\\" End If
CommonDialog1.CancelError = True 'error bila user mengklik cancel
padaCommonDialog CommonDialog1.DialogTitle = "Baca File" 'Caption commondialog
On Error GoToerorhandle 'label error handle CommonDialog1.ShowOpen namafilbuka
= CommonDialog1.FileName Open namafilbuka For Binary Access Read As #1 'buka
file yang dipilihdenganaksesbacapada mode binary ReDimtmp(LOF(1) - 1) As Byte
'deklarasiulanguntuk array # Bugs Fixed # Get #1, , tmp() Close #1 calCrc =
UBound(tmp) 'mengambilukuran file dari array calCrc = CCrc.CRC32(tmp, calCrc)
'hitung CRC HasilCrc = Hex(calCrc) 'diubahke format hexadesimal,
karenahasilperhitungandari class CRC masihberupa numeric If cariDatabase(HasilCrc,
pathEXE& "DB.txt") Then 'bilafungsibernilai TRUE MsgBox
"Virus ditemukan : " &namaVirus 'tampilkan message Box End If
Exit Sub erorhandle: If Err.Number<> 32755 Then MsgBoxErr.Description
'error number
32755 dalahbila user mengkliktombol cancel padasaatmemilih file
================= END HERE ====================
Fitur AV sederhanainidapatditambahkandengan
fitur process scanner, akses registry, real-time protection (RTP) dan
lain lain. Untuk process scanner padadasarnyaadalahteknikenumerasi
seluruh proses yang sedangberjalanpadaSistemOperasi, lalumencari
letakataulokasi file danmelakukan proses scanning. Fiturakses
registry memungkinkankitauntukmengeditsecaralangsung registry
windows apabilaaksesterhadap registry (–Regedit) diblokoleh virus.
Sedangkanfitur RTP memungkinkan AV kitaberjalansecarasimultan
dengan windows explorer untukmengscandirektoriatau file yang sedang
kita browse ataulihat. Untukketigafiturlanjutaniniakandibahas
padaartikelselanjutnya.
Kesimpulan#
Tidakharusmembeli software AV yang mahaluntukmenjagakomputerkita
dariancaman virus, kitabisamembuatnyasendiridenganfitur-fitur
yang takkalahbagusnya. Memangterdapatketidaksempurnaandalam AV
buatansendiriini, tetapisetidaknyadapatdijadikanpencegahdari
infeksi virus komputer yang semakinmerajalela. Software AV sederhana
inidilengkapioleh engine scanner statisdan database definisi. Tidak
tertutupkemungkinan software AV iniditingkatkanlebih advanced dalam
hal engine scannernya.