Pernahkah
anda kenal dg anti virus yang bernama ARTAV..!!
atau AV yg
lainnya..
Mungkin
sekarang kita g heran lagi yg kayak gtuan..
Contohnya yg
baru ini,ada lagi blog tetangga yg share antivirus buatan dia(ngakunya dia)..
Smile
Emang
Sekarang kehadiran para virus maker (–selanjutnya disingkat jadi VM
saja) lokal
telah membuat gerah para user komputer tanah air. Bisa
dibayangkan
bila dari sekian banyak virus lokal tidak satu-dua yang
menghancurkan
data (terutama bagi file office; word, excel, dll…). Bagi
para vendor
Anti Virus (–selanjutnya disingkat menjadi AV saja)
fenomena ini
adalah lahan bisnis untuk produk mereka. Sebut saja
NORMAN, yang
kini men-support perusahaan konsultan virus lokal
(–VAKSIN.COM)
, Symantec, McAffe, NOD32, dan sebagainya. Dengan
menawarkan
update definisi software AV tercepat, engine scanner paling
sensitif,
dan lain-lain merupakan kiat untuk memancing para korban
virus
membeli dan menggunakan software AV mereka. Bagi penulis sendiri
hal ini
memang agak memberatkan mengingat update file definisi atau
engine AV
tsb haruslah melalui koneksi internet. Lalu bagaimana yang
tidak
mempunyai akses sama sekali? Konsekuensinya iyalah tertinggal
dalam hal
pengenalan varian virus baru yang pada ujung-ujungnya membuat
AV yang
sudah terinstall bagai 'Macan Ompong'. Kalau kita membuat AV
sendiri
bagaimana? dengan database definisi yang bisa diupdate oleh
kita bahkan
dapat saling tukar dengan teman? Bisa saja, dengan syarat
mau
mempelajari sedikit teknik pemograman.
Jadi intinya
sekarang Gua kasih bocoran dkt buat kalian,,
gimana
mereka melakukannya..yook mulai...
Pertama kita
harus mengerti bagaimana cara kerja
sebuah AV
sederhana, pada dasarnya sebuah software AV mempunyai
komponen-komponen
:
1. Engine
scanner, ini merupakan komponen utama AV
dalam
mengenali sebuah pattern virus. Engine ini dapat dikelompokkan
menjadi
statis dan dinamis. Statis dalam hal ini dapat disebut menjadi
spesifik
terhadap pattern tertentu dari sebuah file virus. Checksum
merupakan
salah satu contoh dari engine statis ini. Dinamis dalam
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
terkompresi (*.rar, *.zip, dll) atau kompresi atau packing untuk
file PE
seperti UPX, MeW , dll.
Tidak jarang
hasil dari pengecekan terhadap file
suspect
virus menghasilkan false-positive bahkan false-negative (–
false-positive
berarti file yang bersih dianggap thread oleh AV, dan
false-negative
berarti file yang 100% thread akan dianggap bersih).
Semua itu dapat
diakibatkan oleh ketidak-sempurnaan dari engine scanner
itu sendiri.
Misal
pada contoh
kasus Engine String scanner (–Engine scanner yang
menyeleksi
string-string 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 terindikasi sebuah thread
yang
positif. Padahal file tsb nyatanya tidak menimbulkan efek
berbahaya
bila dijalankan atau dieksekusi. Kesalahan scanning macam ini
lazim
ditemukan untuk file-file *.VBS, *.HTML, dll. Untuk penggunaan
engine
checksum sangat banyak ditemui di beberapa software AV lokal.
Checksum
yang lazim digunakan diantaranya CRC16, CRC32, MD5, dll.
Dikarenakan
mudah untuk diimplementasikan. 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
dari 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 529CA8050A00180790CF88B63468826A. Perlu
diketahui
bila virus menerapkan rutin yang mengubah byte tertentu dari
badan virus
tsb setiap kali maka penggunaan engine checksum 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 CommonDialog dapat ditambahkan
dengan
memilih Project -> COmponent atau Ctrl-T dan memilih
Microsoft
Common Dialog Control 6.0) Ketikkan kode berikut pada class
module (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 ByVal
lcrc As Long = 0) As Long
'bArrayIn
adalah array byte dari file yang dibaca, lLen adalah ukuran atau size file
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 255) 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 CommonDialog
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 dari 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 dengan antara membandingkan hasil CRC32nya dan database
CRC kita
sendiri. Algoritmanya 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
mempunyai format file seperti diatas, maka kita perlu membaca file
secara
sekuensial per baris serta memisahkan antara nama virus dan
Crc32nya.
Dalam hal ini yang menjadi 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 nama dan CRC virus Public pathExe as
String
'deklarasi variabel penyimpan lokasi file 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 listing 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 CommonDialog
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 dari 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 registry, real-time protection (RTP) dan
lain lain.
Untuk process scanner pada dasarnya adalah teknik enumerasi
seluruh
proses yang sedang berjalan pada Sistem Operasi, lalu mencari
letak atau
lokasi file dan melakukan proses scanning. Fitur akses
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 mengscan 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 ancaman
virus, kita bisa membuatnya sendiri dengan fitur-fitur
yang tak
kalah bagusnya. Memang terdapat ketidaksempurnaan dalam AV
buatan
sendiri ini, tetapi setidaknya dapat dijadikan pencegah dari
infeksi
virus komputer yang semakin merajalela. 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.
0 Comment to " "
Posting Komentar