You are on page 1of 12

Notes :

- Penulis TIDAK bertanggung jawab atas penggunaan maupun penyalahgunaan dari artikel ini.
- Tujuan dibuat artikel HANYA untuk BAHAN PEMBELAJARAN saja.
- Penggunaan nama, merek, atau logo hanya sebagai CONTOH dan REFERENSI saja, TIDAK
ada maksud mempromosikan pihak tertentu.
- Penulis mohon maaf apabila seluruh/sebagian dari isi artikel ini sudah tersirat dalam artikel
sejenis lainnya.

Main#
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 laha n 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.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 bar is 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.

Penutup#
Pengembangan software AV sederhana ini sepenuhnya Open-Source selama mengikutsertakan
nama pembuat asli didalamnya. Listing serta projek lengkap dapat didownload di
http://www.geocities.com/emomelodicfreak/P rojekAV.zip

Ditulis dalam Virus

« Basmi Virus Via Notepad


Website Baru »

Tanggapan
1.

keren b0z…
lam knaL yup..
add maiLq d0ng..
kucink_bpd@yahoo.com
tak tunggu y pren..

Oleh: a4n_ngw alias q-cink on Desember 2, 2008


at 12:27 pm

Beri tanggapan

Cara Kerja AV(Antivirus) sederhana..

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 ====================

You might also like