Rabu, 21 Desember 2011

belajar membuat anti virus



BELAJAR MEMBUAT ANTIVIRUS SENDIRI:
MENGGUNAKAN ENGINE ANSAV
By:[girrel13]
Kurang puas dengan antivirus yang Anda gunakan?, atau sekedar penasaran dengan cara membuat antivirus? Jika memang benar demikian kenapa tidak mencoba membuat antivirus sendiri? Pasti lebih asyik, selain menambah pengetahuan kita tentang antivirus juga untuk mengisi waktu-waktu senggang dengan mencoba bermain-main dengan virus, sehingga diharapkan tidak ada lagi ketakutan yang berarti akan virus komputer.
Dalam pemrograman antivirus memang sangat dibutuhkan pengetahuan tentang alghoritma, dimana hal ini penting untuk membangun engine detektor virus, misalnya seperti menggunakan alghoritma kalkulasi CRC atau MD5 sebagai engine detektornya. Lalu permasalahannya apa? Apakah Anda sudah cukup mengetahui tentang alghoritma yang dipakai dan tehnik yang digunakan untuk mendeteksi virus? Saya yakin belum banyak yang mengetahuinya lebih-lebih pada tehniknya, sekalipun Anda seorang programmer, mengapa? Karena walaupun Anda menguasai berbagai macam alghortima, tetapi belum tentu Anda mengetahui cara menjadikan alghoritma tersebut menjadi engine antivirus, karena selain membutuhkan pengetahuan tentang alghoritma Anda juga membutuhkan paling tidak sedikit pemahaman tentang struktur file eksekutabel. Sedangkan struktur eksekutabel akan tampak rumit untuk dipelajari bagi yang masih awam lebih-lebih yang masih belum tahu apa-apa tentang komputer.
Saya akan memberikan beberapa contoh yang mudah dan sederhana dalam membuat antivirus. Berbahagialah karena disini Anda tidak harus mengetahui banyak tentang alghoritma-alghoritma yang sulit, Anda cukup mengetahui sedikit tentang dasar-dasar pemrograman baik menggunakan bahasa Visual Basic, C, C++ atau Delphi. Kok bisa? Ya karena saya telah membangun engine ansav yang saya buat dalam bentuk file DLL (Dynamic Link Library) khusus saya buat untuk mempermudah membuat antivirus sendiri. File tersebut bisa di download di sini.
Sedikit tentang file DLL ini
File DLL yang saya buat ini mengandung engine virus detektor yang digunakan antivirus ansav untuk mendeteksi virus-virus lokal masa kini. Anda bisa dengan mudah menggunakan fungsi-fungsi yang ada pada file DLL ini untuk mendeteksi virus, contoh untuk memeriksa apakah suatu file merupakan virus, Anda hanya perlu membuat perintah seperti format berikut :
CheckWithAnsav(FileYangDicek, NamaVirus, BesarTampungan)
Sedangkan contoh penggunaanya seperti berikut :
retval = CheckWithAnsav (“C:\readme.txt”,Buffer,nSize)
Analisa :
Fungsi CheckWithAnsav akan mencoba memeriksa file “readme.txt” yang terletak pada drive “C:\”, apabila file “readme.txt” mengandung virus maka nilai pengembalian dari fungsi tersebut akan berupa nilai 1 yang pada contoh listing diatas diletakkan pada variabel “retval”, sebaliknya nilai pengembalian akan berupa 0 apabila file tidak mengandung virus. Lalu Buffer dan nSize pada listing diatas itu apa? Buffer adalah tampungan yang nantinya berisi nama virus yang terdeteksi apabila file “readme.txt” mengandung virus, tetapi tampungan ini akan kosong apabila virus tidak terdeteksi (file bersih), sedangkan nSize adalah jumlah karakter pada Buffer. Jadi apabila file “readme.txt” mengandung virus “gombal” misalnya maka Buffer akan birisi text “W32/Gombal” dan nSize akan berisi nilai 10 (jumlah dari karakter “W32/Gombal”).
Mudah bukan?
Se-instan itukah?, kalau memang benar semudah itu penggunaannya lalu bagaimana dengan kemampuannya? Tenang.., tentang kemampuan jangan khawatir, engine ansav ini merupakan engine detektor virus tercepat saat ini di Indonesia, karena pada basis pemrogramannya sendiri ansav menggunakan bahasa assembly (low level language). Pada test yang saya lakukan untuk men-scan semua virus yang saya koleksi semuanya berjumlah 314 virus dan ditest pada nootebook Pentium 2 Celleron dengan memori 128 MB, pada testnya hanya membutuhkan waktu sekitar 1,5 detik untuk men-scan semua file bervirus sampai habis. Walaupun begitu engine ini memiliki tingkat keakuratan yang tinggi. Jika Anda tidak percaya dengan yang saya katakan, Anda bisa mencobanya sendiri dengan menggunakan spek komputer yang sama dengan diatas, tetapi Anda bisa juga mencobanya pada berbagai spek yang berbeda, karena memang belum saya coba pada komputer dengan spek lain.
Dilihat dari pemrogramannya yang dibuat dengan basis low level language assembly apakah bisa DLL ini dipakai pada kompiler-kompiler tingkat tinggi seperti Visual Basic, C++, dan Delphi? Bisa!, engine ini bisa berjalan pada berbagai macam jenis kompiler yang ada saat ini, untuk itu saya sudah menyertakan contoh source codenya dalam 3 tingkatan bahasa, bahasa tingkat rendah (low level language) menggunakan Assembly 32 bit, Bahasa tingkat menengah (middle level language) menggunakan C, dan bahasa tingkat tinggi (high level language) menggunakan C++ dan Visual Basic.
Sepertinya Anda sudah mulai bosan membacanya, okeh sekarang kita mulai saja pelajarannya.
Mulai Belajar
Apa yang akan Anda lakukan untuk membuat seseorang mau membantu Anda untuk menunjukkan jalan ke suatu tempat yang Anda belum ketahui? Ya.., Anda bisa menanyakan alamat tempatnya pada orang tersebut, sukur-sukur orang tersebut sekalian bersedia mengantarkan Anda sampai tujuan. Tetapi apakah orang yang belum begitu mengenal Anda akan begitu saja bersedia untuk mengantarkan Anda? Walaupun mungkin hal ini terjadi, tetapi saya yakin prosentase kemungkinan hanya berkisar antara 1-5% saja.
Oleh karena itulah sebelum kita memulai praktek pada penulisan listing, terlebih dahulu akan saya perkenalkan Anda kepada DLL ansav ini.
Kalau yang sebelumnya pengenalan sudah saya tuliskan di atas pada bagian “Sedikit tentang DLL ini” tetapi itu hanya sedikit lihatlah kata pertama pada judul tersebut, diAndaikan Anda adalah seorang yang baru saja menemukan orang yang dianggap mampu untuk menunjukkan jalan, maka bagian diatas tadi hanya seperti Anda baru saja mengucapkan “Misi… numpang tanya…”, nah sekarang adalah saatnya Anda untuk membujuk orang itu untuk mengantarkan Anda pada tujuan, dengan cara pertama-tama berkenalan dan sedikit berbasa-basi… he..he..he.. kayaknya cara saya menggambarkan terlalu berlebihan, maklum saya oran]ngnya termasuk orang yang suka mengAndai-Andai dan menghayal tinggiiiiii banget (hanya yang + bukan yang –, kalaupun ada cuma sedikit koq. he..he..he..). Tetapi semua ini saya maksudkan agar proses belajar tidak membosankan dan berharap agar lebih mudah untuk dipahami.
Lebih detail tentang DLL ini
Dibuat menggunakan bahasa ….. (ya saya tahu Anda sudah mengetahuinya di bagian pengenalan pertama diatas)
Nama file asli : “ansavcore.dll”
Memiliki ukuran sangat kecil, pada versi awalnya memiliki ukuran16 KB. Anda tidak perlu lagi khawatir untuk membawanya kemana-mana, karena tidak berat sehingga tidak membutuhkan tukang pikul untuk membawanya.
Memiliki kecepatan scan tinggi. Pada core enginenya hanya menggunakan sekitar 269 instruksi dasar prosesor jenis x386, dan 18 fungsi eksternal termasuk lokal dan API-nya. Bandingkan dengan instruksi yang dihasilkan oleh kompiler bahasa tingkat tinggi yang bisa mencapai bukan hanya ratusan bahkan bisa sampai ribuan instruksi dan fungsi eksternal yang saling berlompat-lompatan walaupun dengan arsitektur kerja yang sama dengan yang saya buat. Untuk perbandingannya, Anda bisa lihat pada kompiler tingkat tinggi Visual Basic 6.
Mampu berjalan di sistem operasi Windows 98/ME/2K/XP untuk VISTA belum dicoba. Sehingga Anda lebih leluasa untuk mengembangkan antivirusnya.
Pada versi waktu artikel ini mulai ditulis yakni 1.0.0 sudah memiliki 6 fungsi yang siap untuk digunakan, diantaranya:
CheckWithAnsav
AnsavVirusFirst
AnsavVirusNext
AnsavVirusClose
AnsavVirusCount
AnsavGetVersion
Keterangan tentang fungsi-fungsi tersebut :
1. CheckWithAnsav
Membutuhkan 3 parameter, berfungsi untuk memeriksa file dari virus. Fungsi ini memiliki prototipe :
Int CheckWithAnsav (
IN LPSTR File,
OUT LPSTR VirusName,
IN OUT PULONG nSize
);
Note: Prototipe fungsi di atas ditulis dalam format bahasa C. Disini saya akan memakai standar bahasa C dalam penulisan prototipe selanjutnya.
Fungsi ini akan mencoba untuk memeriksa file yang alamat (path) nya diletakkan pada parameter File, apabila virus terdeteksi pada file yang di-scan maka nama virus akan diletakkan pada parameter kedua VirusName, sedangkan parameter terakhir yaitu nSize adalah jumlah karakter dari parameter VirusName. Untuk nSize nilai harus terlebih dahulu diset dengan 30 atau MAX_VIRUSNAME_LENGTH.
Const MAX_VIRUSNAME_LENGTH = 30
Selanjutnya nSize akan menghasilkan output berupa jumlah karakter nama virus yang terdeteksi. Apabila terdeteksi adanya virus maka nilai pengembalian dari fungsi ini adalah 1 atau AN_VIRUS_DETECTED.
Const AN_VIRUS_DETECTED = 1
Dan akan menghasilkan nilai 3 atau AN_SCAN_ERROR pada pengembaliannya apabila dalam operasinya fungsi ini mengalami kesalahan atau terjadi error. Sedangkan apabila file tidak ditemukan maka akan memberikan nilai pengembalian 2 atau ERROR_FILE_NOT_FOUND.
Const AN_SCAN_ERROR = 3
Const ERROR_FILE_NOT_FOUND = 2
2. AnsavVirusFirst
Membutuhkan 2 parameter, berfungsi untuk meng-enumerasikan, atau mendapatkan seluruh nama-nama virus yang ada pada database engine ansav. Adapun 2 parameter yang dibutuhkan adalah parameter VirusName dan nSize, parameter VirusName adalah alamat tempat tampungan untuk nama pertama virus pada data base virus ansav, sedangkan nSize adalah jumlah karakter pada tampungan VirusName.
Fungsi ini meneghasilkan nilai pengembalian berupa handel hFind yang nantinya digunakan untuk mendapatkan nama-nama virus selanjutnya menggunakan fungsi ke 3 AnsavVirusNext.
HANDLE AnsavVirusFirst (
OUT LPSTR VirusName,
IN OUT LONG nSize
);
Apabila operasi yang dilakukan fungsi ini gagal maka nilai pengembaliannya adalah 0 atau NO_MORE_VIRUSES. Dan akan menghasilkan nilai pengembalian -1 atau INVALID_HANDLE_VALUE apabila terjadi kesalahan pada waktu operasinya.
Const NO_MORE_VIRUSES = 0
3. AnsavVirusNext
Membutuhkan 3 parameter, berfungsi untuk mendapatkan nama-nama virus selanjutnya dengan berdasarkan handel yang telah didapatkan dari fungsi ke 2 (AnsavVirusFirst), handel diletakkan pada parameter pertamanya yaitu hFind, sedangkan parameter kedua File berisi alamat tampungan yang nantinya akan berisi nama virus selanjutnya, dan parameter terakhir nSize berisi jumlah karakter nama virus yang ada pada parameter VirusName.
Int AnsavVirusNext (
IN HANDLE hFind,
OUT LPSTR VirusName,
IN OUT PULONG nSize
);
Fungsi ini akan menghasilkan nilai pengembalian 0 atau NO_MORE_VIRUSES apabila daftar virus telah habis dibaca, dan akan menghasilkan nilai pengembalian -1 atau INVALID_HANDLE_VALUE apabila handel salah atau terjadi error pada waktu operasinya.
4. AnsavVirusClose
Membutuhkan 1 parameter hFind berupa handel yang didapat dari fungsi ke 2 (AnsavVirusFirst). Fungsi ini akan menutup sesi pengumpulan daftar nama-nama virus pada database engine-nya.
Fungsi ini memiliki prototipe :
Int AnsavVirusClose(
IN HANDLE hFind
);
Menghasilkan nilai pengembalian 1 apabila operasi berhasil, dan menghasilkan nilai -1 apabila operasi gagal atau terjadi kesalahan pada operasinya.
5. AnsavVirusCount
Tidak membutuhkan parameter apapun. Berfungsi untuk mendapatkan jumlah keseluruhan virus yang ada pada database ansav engine. Jumlah keseluruhan virus didapat dari nilai pengembaliannya.
Fungsi ini memiliki prototipe :
ULONG AnsavVirusCount (Void);
6. AnsavGetVersion
Fungsi terakhir ini membutuhkan parameter yang merujuk pada alamat memori berkapasitas 12 byte dan dibagikan menjadi 3 jenis versi. 4 byte untuk versi major, 4 byte selanjutnya untuk versi minor, 4 byte terakhir untuk versi revisi. Untuk ini sudah saya siapkan bentuk parameternya berupa struktur.
typedef struct _ANSAV_VERSION_INFO {
UINT dwMajor;
UINT dwMinor;
UINT dwRevision;
} ANSAV_VERSION_INFO, *PANSAV_VERSION_INFO;
VOID AnsavGetVersion (
PANSAV_VERSION_INFO lpAvi
);
Cara penggunaan fungsinya ditulis dalam bahasa Visual Basic :
Dim avi As ANSAV_VERSION_INFO
Call AnsavGetVersion(avi)
Hasil yang berupa versi engine ansav akan diletakkan pada variabel “avi”. Untuk mendapatkan versi major bisa dengan perintah “avi.dwMajor”, untuk versi minor bisa dengan perintah “avi.dwMinor”, sedangkan untuk versi revisinya bisa dengan perintah “avi.dwRivision”.
Setelah masa perkenalan dan basa-basi selesai, sebenarnya Anda harus sudah diantar ke tujuan Anda oleh orang yang baru Anda kenali tersebut, tetapi apabila tidak demikian, berarti saya salah duga, karena bisa saja ternyata yang Anda kenali adalah orang buta misalnya .
Sebelum Anda memulai mempraktekkannya, paling tidak Anda harus terlebih dahulu memiliki segala perlengkapan yang akan dibutuhkan nanti dalam pembelajaran ini.
Adapun perlengkapan yang dibutuhkan adalah :
1. Kompiler
Kompiler ini berfungsi untuk meng-kompil atau istilahnya membangun sebuah aplikasi software, dimana aplikasi yang dimaksud atau yang akan kita buat adalah berupa antivirus sederhana.
Kompiler yang diperlukan bisa menggunakan Visual Basic, C, C++ atau Delphi.
2. Debugger (optional)
Jika Anda memang seorang yang selalu melakukan kesalahan atau paling tidak orang yang selalu berhati-hati dalam membuat program saya sarankan untuk tidak pernah lupa melakukan debugging pada setiap aplikasi yang baru Anda buat.
Proses debugging sendiri itu digunakan untuk menganalisa jalannya suatu program dan biasanya untuk mencari letak kesalahan pada suatu sistem aplikasi. Pada beberapa kompiler tingkat tinggi biasanya sudah disertakan program debugger sendiri.
Tapi ini hanya optional, artinya Anda tidak harus atau diwajibkan untuk memiliki program debugger dengan catatan Anda memang orang yang PeDe abis dan orang yang ma’sum istilahnya orang yang tidak pernah melakukan kesalahan , tapi tidak ada satupun orang di dunia ini yang tidak pernah melakukan kesalahan. Jadi akan selalu saya sarankan (recommended) untuk para programmer khususnya pemula.
Adapun jenis-jenis debugger ada sangat banyak bertebaran di sana-sini, Anda bisa memilih sesuai dengan selera dan kesukaan Anda. Contoh macam-macam debugger eksternal yang nge-tren dan banyak dipakai pada abad ini : OllyDebug, IDA Pro, WinDbg dll.
3. Roti coklat (recommended)
Selain 2 perlengkapan diatas saya tambahkan lagi perlengkapan ketiga ini dengan sifat recommended yang artinya saya sarankan kepada Anda yang mudah bosan dan frustasi. Tapi walaupun begitu perlengkapan ketiga ini juga sama optionalnya dengan perlengkapan kedua yaitu program debugger, artinya Anda tidak harus tapi sangat saya sarankan, dimaksudkan untuk menghilangi kejenuhan ketika Anda sudah mulai muak membaca tutorial ini, pejamkan mata… dan makanlah satu coklat lalu ambil nafas panjang kira-kira 1-2 menit, setelah itu Anda coba pelajari kembali, pasti akan lebih plong dan lebih segar meneruskan belajarnya.
Tentang recommended coklat ini sendiri tidak harus coklat, Anda bisa dengan makanan-makanan kesukaan Anda untuk dibarengi ketika Anda sedang dalam proses belajar. Karena sebenarnya coklat itu sendiri adalah makanan kesukaan saya . tapi jangan salah loh.., menurut para ahli ternyata makanan yang mengandung banyak unsur coklat memiliki pengaruh tersendiri yang dapat merangsang sel-sel otak manusia, tentang benar atau tidaknya Wallahu a’lam.:D tapi bukan karena para ahli mengatakan seperti itu lalu saya ikut-ikutan makan coklat, yee… saya memang sudah mulai suka makan coklat sejak umur 5 tahun.
Okeh, dari pada banyak bicara yang gak kunjung selesai, mending kita mulai saja tutorialnya. Untuk tutorialnya akan saya berikan contoh-contohnya dalam penggunaan 6 fungsi yang sudah saya sebutkan diatas, adapun bahasa pemrograman yang akan saya gunakan untuk contoh dalam penulisan listing-nya adalah menggunakan 3 tingkatan bahasa seperti yang pernah saya singgung diatas, low, middle dan high, Assembly, C dan Visual Basic. Tetapi urutannya akan saya buat berdasarkan dengan pemrograman tingkat tinggi terlebih dahulu, yakni Visual Basic.
Oh ya…, jangan lupa sebelum Anda mulai berpraktek, terlebih dahulu letakkan file “ansavcore.dll” pada direktori tempat Anda meletakkan program yang akan Anda buat atau pada direktori project Anda.
1. CheckWithAnsav
Fungsi pertama yang akan saya contohkan adalah fungsi CheckWithAnsav, informasi tentang fungsi ini bisa Anda baca pada tulisan sebelumnya.
Contoh penggunaan fungsi CheckWithAnsav dalam bahasa Visual Basic :
Sebelum Anda bisa menggunakan fungsi ini dari file library “ansavcore.dll”, terlebih dahulu Anda harus mendeklarasikan beberapa kosntanta dan fungsinya. Adapun bentuk deklarasi fungsi ini pada bahasa Visual Basic adalah :
‘ Contoh penggunaan fungsi CheckWithAnsav
‘ pada bahasa Visual Basic

‘ Ditulis oleh : [4NV|e]
Const MAX_VIRUSNAME_LENGTH = 30
Const ERROR_FILE_NOT_FOUND = 2
Const AN_SCAN_ERROR = 3
Const AN_CLEAN = 0
Private Declare Function CheckWithAnsav Lib “ansavcore.dll” _
(ByVal FileName As String, ByVal VirusName As String, nSize As Long) As Long
Note: Karena ruang halaman yang sempit, maka tAnda “_” (underscore) pada contoh listing di atas saya pergunakan sebagai tAnda bahwa listing tersebut diteruskan pada baris selanjutnya. Cara ini akan saya pergunakan pada penulisan listing dalam bahasa Visual Basic selanjutnya.
Setelah Anda menuliskan deklarasinya langkah selanjutnya bisa langsung menuliskan listing kodenya :
Private Sub PeriksaFile()
Dim RetVal As Long
Dim nSize As Long
Dim Buff As String * MAX_VIRUSNAME_LENGTH
Dim NamaVirus As String
nSize = MAX_VIRUSNAME_LENGTH
RetVal = CheckWithAnsav(“C:\file_dicurigai.exe”, _
Buff, nSize)
If RetVal = 1 Then
NamaVirus = Left$(Buff, nSize)
Call MsgBox(“File ini mengandung virus : ” & _
NamaVirus & “, Hati-hati!! “)
Else
Select Case RetVal
Case ERROR_FILE_NOT_FOUND
Call MsgBox(“File yang Anda maksud tidak ditemukan!.”)
Case AN_SCAN_ERROR
Call MsgBox(“Terjadi kesalahan dalam proses scanning.”)
Case AN_CLEAN
Call MsgBox(“File ini bersih dari virus.”)
End Select
End If
End Sub
Analisa kode :
nSize = MAX_VIRUSNAME_LENGTH
RetVal = CheckWithAnsav(“C:\file_dicurigai.exe”, _
Buff, nSize)
Set terlebih dahulu variabel nSize dengan nilai 30 atau yang sudah dibuatkan konstantanya yaitu MAX_VIRUSNAME_LENGTH. Nilai 30 adalah alokasi maximal untuk menampung nama virus. Kemudian periksa file “file_dicurigai.exe” yang ada pada drive “C:\”, tentang nama file yang akan diperiksa Anda bisa menentukan namanya sendiri. Untuk memeriksa file tersebut gunakan fungsi CheckWithAnsav dan letakkan nilai pengembaliannya pada variabel RetVal.
If RetVal = 1 Then
NamaVirus = Left$(Buff, nSize)
Call MsgBox(“File ini mengandung virus : ” & _
NamaVirus & “, Hati-hati!! “)
Kemudian cek berapakah nilai yang dihasilkan dari pengembalian fungsi CheckWithAnsav yang ada pada variabel RetVal, jika (if) nilai pada variabel RetVal = 1 berarti file tersebut (“file_dicurigai.exe”). mengandung virus.
Kemudian apabila memang virus terdeteksi maka dapatkan nama virus yang terdeteksi tersebut menggunakan perintah Left untuk men-trim (memperpendek jangkauan string) dan letakkan nama tersebut pada variabel NamaVirus, lalu tampilkan pesan “File ini mengandung virus : “, apabila virus yang terdeteksi adalah virus “gombal” maka akan ditampilkan pesan seperti berikut :
“File ini mengandung virus : W32/Gombal, Hati-hati!!
Else
Select Case RetVal
Case ERROR_FILE_NOT_FOUND
Call MsgBox(“File yang Anda maksud tidak ditemukan!.”)
Case AN_SCAN_ERROR
Call MsgBox(“Terjadi kesalahan dalam proses scanning.”)
Case AN_CLEAN
Call MsgBox(“File ini bersih dari virus.”)
End Select
End If
End Su
Apabila virus tidak atau belum terdeteksi, maka periksa status operasi. Perintah Select Case RetVal disini digunakan untuk memeriksa status operasi apakah berhasil atau terjadi error. Apabila nilai pengembalian berupa ERROR_FILE_NOT_FOUND berarti file yang dimakusd untuk di-scan tidak ada (tidak eksis) maka tampilkan pesan kesalahan “File yang Anda maksud tidak ditemukan!”. Apabila nilai pengembalian berupa AN_SCAN_ERROR berarti terjadi kesalahan dalam melakukan scanning pada file tersebut, maka tampilkan pesan “Terjadi kesalahan dalam proses scanning”. Terakhir apabila nilai pengembalian berupa 0 atau AN_CLEAN berarti file tersebut tidak mengandung virus atau bersih.
Contoh penggunaan fungsi CheckWithAnsav dalam bahasa C :
/*
Contoh penggunaan fungsi CheckWithAnsav
pada bahasa C
Ditulis oleh : [girrel13]
*/
#include <windows.h>
#include <stdio.h>
int const AN_VIRUS_DETECTED = 1;
int const AN_SCAN_ERROR = 3;
int const MAX_VIRUS_LENGTH = 30;
typedef STDCALL int _CheckWithAnsav(
LPSTR FileName,
LPSTR VirusName,
PULONG nSize
);
static _CheckWithAnsav *CheckWithAnsav;
void PeriksaFile(void);
void PeriksaFile(void){
char vName[30];
unsigned long nSize=MAX_VIRUS_LENGTH;
CheckWithAnsav = (_CheckWithAnsav*)
GetProcAddress(LoadLibrary(“ansavcore.dll”),
“CheckWithAnsav”);
int RetVal = CheckWithAnsav( “C:\file_dicurigai.exe”,
vName,&nSize);
if (RetVal==AN_VIRUS_DETECTED){
printf(“\nFile ini mengandung virus : %s”
“, Hati-hati!! “,vName);
} else {
switch (RetVal) {
case ERROR_FILE_NOT_FOUND:
{
printf(“\nFile yang Anda maksud “
“tidak ditemukan!.”);
} break;
case AN_SCAN_ERROR:
{
printf(“\nTerjadi kesalahan dalam “
“proses scanning.”);
} break;
default:
{
printf(“\nFile ini bersih dari virus.”);
}
}
}
}
Analisa kode pada bahasa C tidak jauh berbeda dengan yang menggunakan bahasa Visual Basic, kedua-duanya hampir memiliki cara kerja yang sama, jadi tidak dibutuhkan analisa kode lagi disini. Saya yakin Anda bisa memahaminya.
Contoh penggunaan fungsi CheckWithAnsav dalam bahasa Assembly :
Comment ~
Contoh penggunaan fungsi CheckWithAnsav
pada bahasa Assembly
Ditulis oleh : [girrel13]
~
.386
.model flat, stdcall
option casemap: none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.const
AN_CLEAN             equ 0
AN_VIRUS_DETECTED    equ 1
AN_SCAN_ERROR        equ 3
MAX_VIRUS_LENGTH     equ 30
.data?
_ScanWithAnsav       dd ?
nSize                dd ?
vName                db MAX_VIRUS_LENGTH dup(?)
Buffer               db 256 (?)
.data
szAppName            db ‘Ansav in asm’,0
szAnsavCoreDll       db ‘ansavcore.dll’,0
szScanWithAnsav      db ‘CheckWithAnsav’,0
szFile               db ‘C:\file_dicurigai.exe’,0
szVirusTdtks         db ‘File ini mengandung virus : %s, ‘
db ‘Hati-hati!! ‘,0
szBersih             db ‘File ini bersih dari virus.’,0
szFileTidakAda       db ‘File yang Anda maksud tidak ditemukan!’,0
szError              db ‘Terjadi kesalahan dalam proses scanning.’,0
.code
start:
PeriksaFile proc
push    offset szAnsavCoreDll
call    LoadLibrary
push    offset szScanWithAnsav
push    eax
call    GetProcAddress
mov     _ScanWithAnsav,eax
mov     nSize,MAX_VIRUS_LENGTH
push    offset nSize
push    offset vName
push    offset szFile
call    _ScanWithAnsav
test    eax,eax
jz      bersih
cmp     eax,AN_VIRUS_DETECTED
je      virus_terdeteksi
cmp     eax,ERROR_FILE_NOT_FOUND
je      file_tidak_ada
cmp     eax,AN_SCAN_ERROR
je      error
jmp     tamat
virus_terdeteksi:
push    offset vName
push    offset szVirusTdtks
push    offset Buffer
call    wsprintf
add     esp,4*3
lea     eax,Buffer
call    tampilkan_pesan
jmp     tamat
file_tidak_ada:
lea     eax,szAppName
call    tampilkan_pesan
jmp     tamat
error:
lea     eax,szAppName
call    tampilkan_pesan
jmp     tamat
bersih:
lea     eax,szAppName
call    tampilkan_pesan
tamat:
xor     eax,eax
ret
tampilkan_pesan:
push    0
push    offset szAppName
push    eax
push    0
call    MessageBox
ret
PeriksaFile endp
end start
Sama dengan pada bahasa-bahasa sebelumnya, cara kerjanya pada bahasa assembly juga sama.
Untuk menghemat waktu, tenaga dan pikiran , contoh fungsi-fungsi yang lain nantinya akan saya tulis dalam satu arsip saja, dengan pembagian berdasarkan bahasanya. Contoh akan saya tulis dengan full source code dan akan saya jadikan satu dalam file terkompresi (zip). Dan bisa di download pada postingan selanjutnya. Jadi intinya saya hanya akan mengatakan kalau artikel ini adalah “masih bersambung…” hiks… sulit banget sih ngomongnya… ~_~”

0 komentar:

Posting Komentar

lakukan yang terbaik

Artikel saya

You can replace this text by going to "Layout" and then "Page Elements" section. Edit " About "

Tambah Sesuai Hati kamu