How To Make Your Own Anti-Virus

2 Juli, 2007 at 8:59 am 3 komentar

Author : PusHm0v @ PusHm0v Software Development

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 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 ialah 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)) As Byte ‘deklarasi ulang untuk array

  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)) As Byte ‘deklarasi ulang untuk array

  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/ProjekAV.zip

Entry filed under: Programming. Tags: .

congratulazione ROSSI…. KENA TILANG MICROSOFT….:P

3 Komentar Add your own

  • 1. U_2L  |  24 Desember, 2007 pukul 8:12 am

    Thank’s bgt men info nya. . . .
    Cuma yg mw saya tanyakan gini…,, saya pernah dengar tenrtang CRC32, yaitu mengecek file secara keseluruhan atau sebagian,,,
    Iini bedanya apa ? ? ?
    Truz cara bedainnya gmn ? ? ??
    Class module yang anda sajikan ini cara sebagian atau seluruh ? ? ?
    Mohon penerangan nya ?? ? ?

  • 2. andy  |  13 September, 2008 pukul 3:49 pm

    Betul Mas… Antivirus yang tidak ter-update krn alasan tidak punya koneksi ke internet, seperti MACAN OMPONG. tul!!
    Solusinya kita sendiri yang harus proteksi komputer kita, tentunya dengan dukungan orang2 seperti Mas.
    BRAVO Mas !!

  • 3. umang  |  30 Desember, 2008 pukul 6:16 am

    OK banget infonya, aku pengen banget buat Antivirus pribadi pakai VB, mas kirimin dong source codenya ke mailku, boleh ya? Thanks banget lho…

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


CaLeNDar

Juli 2007
S S R K J S M
« Jun   Agu »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

my PoST

CouNTeR

  • 4,126 hits

%d blogger menyukai ini: