TV Online

  • Rabu, 22 Agustus 2012

    Cara Membuat Anti Virus Sendiri (tips)

    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)

    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.

     admin ganda@.NET
    Sumber : http://orispyro.wordpress.com/

    Tidak ada komentar:

    Posting Komentar