Halaman

Kamis, 06 Desember 2012

Cara Membuat Antivirus Sendiri




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.

5 komentar: