Pertama pasti yang menjadi pertanyaan apasih Checksum CRC32 itu? Cyclic Redundancy Check (CRC) adalah salah satu fungsi hash yang dikembangkan untuk mendeteksi kerusakan data dalam proses transmisi ataupun penyimpanan. CRC menghasilkan suatu checksum yaitu suatu nilai dihasilkan dari fungsi hash-nya, dimana nilai inilah yang nantinya digunakan untuk mendeteksi error pada transmisi ataupun penyimpanan data.
Nilai CRC dihitung dan digabungkan sebelum dilakukan transmisi data atau penyimpanan, dan kemudian penerima akan melakukan verifikasi apakah data yang diterima tidak mengalami perubahan ataupun kerusakan. CRC32 32 juga melambangkan panjang checksum dalam bit. Bentuk CRC yang disediakan untuk algoritma sesuai dengan ide pembagian ”polynomial”. Dan hal ini digunakan untuk memperhitungkan checksum yang sama dari seluruh algoritma CRC. Algoritma CRC adalah cara yang bagus dan teruji untuk pengecekan byte dalam jumlah besar dari suatu file yang telah termodifikasi maupun tidak. Algoritma ini mencari lewat seluruh jumlah byte dan menghasilkan angka 32 bit untuk menggambarkan isi file. Dan sangat kecil sekali kemungkinan dua stream dari byte yang berbeda mempunyai CRC yang sama. Algoritma CRC32 dapat diandalkan juga untuk mengecek error yang terjadi dalam urutan byte. Dengan CRC32 kemungkinan perubahan standar (penyimpangan dari penghitungan CRC terhadap file) yang terjadi dapat dikendalikan.
Perkembangan teknologi dan informasi membawa perubahan besar dalam penggunaan metode Checksum CRC32. Banyak bermunculan software-software jahat (Malware) dan juga perkembangan virus computer yang semakin canggih membuat metode Checksum CRC32 lantas digunakan untuk mengetahui mendeteksi virus dengan acuan nilai CRC32-nya. Nilai CRC32 adalah nilai yang didapat dari besar file dan nama file yang dibandingkan dengan tabel CRC32 yang sudah ada acuannya.
Untuk menghitung dengan metode CRC32 dilakukan dengan beberapa cara, yaitu :
- Perhitungan Tabel Lookup Cara pertama kita harus menghitung kalkulasi tabel lookup yang berguna untuk menentukan standar isi dari tabel CRC32, yaitu dengan membandingkan nilai 255 yang heksanya FFFFFFFF dengan polynomial file yang telah distandarkan yaitu EDB88320 menggunakan Xor. Kemudian hasil dari perbandingan disimpan di tiap array 'F' yang berjumlah 255 array.
- Untuk menghitung CRC32 suatu file kita perlu ukuran dari file tersebut dan mengeset standar perbandingan untuk CRC32 ke heksa FFFFFFFF. Kemudian untuk mengecek nilai yang ada tiap byte nya next kita buat aja crc32 generator-nya.....
Bahan: form (CommandButton,CommonDialog), Class Modules
‘Source of Form1:
Option Explicit
Dim crc As New clsCrc
Private Sub Command1_Click()
Dim rieysha() As Byte, lcrc As Long
On Error Resume Next
cd.ShowOpen
cd.Filter = "All File|*.*"
Open cd.FileName For Binary Access Read As #1
ReDim rieysha(LOF(1) - 1)
Get #1, , rieysha
Close #1
lcrc = UBound(rieysha())
lcrc = crc. CRC32 (rieysha, lcrc)
MsgBox UCase(Hex(lcrc)) ‘menampilkan kotak peringatan besisi nilai Checksum CRC32
End Sub
‘next source of Class Modules:
Option Explicit
Private crcTable(0 To 255) As Long
Public Function CRC32 (ByRef bArrayIn() As Byte, ByVal lLen As Long, Optional ByVal lcrc As Long = 0) As Long
Dim lCurPos As Long
Dim lTemp As Long
If lLen = 0 Then Exit Function
'Untuk menghitung CRC32 suatu file kita perlu ukuran dari file tersebut dan mengeset standar perbandingan untuk CRC32 ke heksa FFFFFFFF. Kemudian untuk mengecek nilai yang ada tiap byte nya
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
Cara – cara antivirus dalam mengenali sebuah virus melalui metode checksum crc32 adalah sebagai berikut :
- Memilih file yang akan diperiksa
- Mengambil informasi dari file tersebut, yaitu nama, ukuran
- Menghitung checksum file yang diambil dari ukuran file dengan metode crc32.
- Tentunya hasil checksum tersebut akan dikumpulkan dalam database signature checksum CRC32 dari virus-virus yang telah dicari nilai checksum CRC32-nya.kemudian antivirus akan bekerja dengan menggunakan hasil checksum tersebut untuk mengenali bahwa program tersebut adalah virus.
Tetapi CRC tidak cukup aman karena telah ditemukan cara untuk melakukan reversing terhadap hasil CRC. Kemampuan untuk melakukan reverse terhadap nilai CRC ini dimanfaatkan ketika kita ingin melakukan manipulasi terhadap data yang kita ketahui nilaiCRCnya. Teknik reverse ini telah saya terangkan pada tutorial Virus Header Modifier dimana kita dapat mengubah nilai checksum CRC32 dari suatu file aplikasi dan file aplikasi tersebut masih dapat berjalan dengan normal. Hal ini sama halnya ketika kita melakukan proses kompresi data dengan menggunakan packer semisal UPX,PETITE,dll. File hasil kompresi ukurannya akan menjadi lebih kecil dari ukuran asli akan tetapi saat file dijalankan tetap berjalan dengan normal namun nilai dari checksum CRC32 telah berubah.
Untuk itu para programer antivirus tidak hanya menggunakan teknik checksum CRC32 akan tetapi juga menggunakan teknik-teknik lain seperti:
- Menggunakan checksum MD5
- Menggunakan Heuristic Icon
- Menggunakan Pattern tersendiri
- Antivirus tersebut tidak menggunakan metode checksum dalam pendeteksian tetapi lebih cenderung mengacu string pada body file. Trik ini biasa diaplikasikan pada mayoritas antivirus professional.
Subscribe in a reader