anti virus 3

[sebelumnya anti virus 2]

Funsi Hash dan Kriptografi

Fungsi hash h adalah suatu fungsi yang paling tidak memenuhi dua properti berikut:

1. kompresi, h memetakan masukan x yang panjangnya sembarang, tetapi terbatas, ke keluaran h(x) yang panjangnya tetap.

2. mudah dihitung, untuk setiap x, h(x) mudah dihitung.

Secara esensial dalam kriptografi ada dua keluarga fungsi hash:

1. MAC (Message Authentication Codes), yaitu keluarga hash yang memerlukan kunci dan digunakan baik untuk otentikasi maupun pengecekan integritas suatu pesan.

2. MDC (Message Detection Codes), keluarga ini tidak memerlukan kunci dan hanya digunakan untuk pengecekan integritas.

Keluarga MDC lah yang dapat diaplikasikan untuk mendeteksi virus sederhana. Fungsi hash ini didesain sedemikian rupa sehingga memenuhi tiga properti berikut:

o Ketahanan prapeta. Untuk setiap y, seharusnya tidak mungkin (sulit secara komputasi) ditemukan x sehingga h(x) = y. Properti ini mengakibatkan bahwa fungsi hash harus tidak dapat dibalik.

o Ketahanan prapeta kedua. Untuk setiap x, seharusnya tidak mungkin ditemukan x’ sehingga h(x) = h(x’) dengan x ≠ x’. Dengan kata lain h(x) tunggal untuk setiap x.

o Ketahanan Tubrukan. Seharusnya tidak mungkin ditemukan x dan x’ yang berbeda sehingga h(x) = h(x’).

Properti pertama dan kedua berhubungan dengan integritas suatu masukan x, sedangkan properti ketiga berkaitan dengan kekuatan atau keamanan fungsi hash tersebut. Contoh fungsi hash yang banyak diaplikasikan adalah MD5 (Message Digest 5), sayangnya baru-baru ini ditemukan bahwa MD5 gagal di properti ketiga, sehingga MD5 dikatekorikan tidak aman. Meskipun demikian, kita masih tetap bisa memanfaatkan MD5 untuk mencari file-file yang sama, dalam hal ini si virus, karena properti ketiga itu tidak begitu diperlukan untuk kasus kita.

fungsi hash ini cukup sulit diimplementasikan, demi kemudahan kita bisa menggunakan TMessageDigest yang dapat digunakan dengan bebas, thx to the author.

Implementasi Multithreading pada Delphi

Jika kita menerapkan metoda multitreading pada suatu aplikasi berarti kita secara sadar telah membagi beberapa tugas yang dapat dikerjakan secara serentak dan saling bebas tereksekusi satu sama lain pada aplikasi itu. Masing-masing tugas itulah yang disebut thread. Windows API menyediakan banyak fungsi berkaitan dengan pembuatan dan sinkronisasi thread. Secara khusus Delphi menyediakan suatu objek yang mengapsulkan beberpa fungsi API tersebut bernama TThread. Objek ini sungguh mengefisienkan usaha pengodean kita untuk mengakses multithreading pada aplikasi windows.

Mengapa mulithreading? Pertanyaan ini mudah dijawab jika kita pernah mengalami window yang tidak mau merespon pesan klik yang disampaikan mouse kita pada suatu aplikasi. Hal ini terjadi karena window itu terlalu sibuk mengerjakan sesuatu, sehingga window itu memberikan pesan “Not Responding” sampai tugas yang memakan banyak waktu prosesor itu selesai. Contoh aplikasi multhitreading adalah ketika explorer sedang mengopi suatu file berukuran cukup besar yang memunculkan dialog proses pengopian: karena proses pengopian dibuat sebagai thread baru, maka explorer masih tetap mau merespon pesan-pesan yang disampaikan padanya. Jadi untuk proses-proses yang memakan banyak waktu sampai selesai dapat dilakukan pada thread yang terpisah sehingga proses tetap berjalan di latar belakang dan meninggalkan window (jika aplikasi itu menggunakan window) yang masih responsif. Dalam hal pencarian virus, jelas bahwa aplikasi seperti ini akan memakan banyak resource khususnya waktu prosesor, sehingga akan lebih bijak jika kita mengaplikasikan multithreading padanya.

Untuk memanggil objek TThread, pada proyek yang sedang kita kerjakan, pilih menu

File > New > Other…

Pada tab New pilih ikon berjudul Thread Object.

thread object

Jika kita klik OK, maka Delphi akan membuatkan unit baru yang isinya kelas TThread. Pada unit inilah kita akan mengimplementasikan algoritma pencarian virus utama kita. Namai unit ini sebagai, misalnya, trCheckVir, sedangkan kelasnya kita namai checkVir. Deklarasi pada kelas ini adalah sebagai berikut:

checkVir = class(TThread) // nama kelas checkVir

private

fspath,fsMd, sFile: string; // jalur direktori, nilai MD5, file yang sedang diolah

fsSize, fsStop: integer; // ukuran file dan bendera untuk menyetop proses thread

// lihat propery pada scope publik.

protected

procedure Execute; override; // demi kepentingan inisiasi thread baru akan

// berkerja setelah Resume dipanggil yang memanggil

// method Execute ini

procedure CompPerDir(sCurDir: string); // kerja utama

procedure ProgressText; // indikasi thread sedang bekerja

public

property sPath:string read fspath write fspath ;

property sMd:string read fsMd write fsMd;

property nSize: integer read fsSize write fsSize;

property nStop: integer read fsStop write fsStop;

property FilePath: string read sFile write sFile;

end;

Dalam kelas ini juga terdapat fungsi iIsVirus,

// masukan sFile, nama file yang akan diproses

// keluaran sFile, nama Virus dalam database, jika MD5(sFile) ada dalam database

function iIsVirus(var sFile: string): integer;

var

i: integer;

begin

// kembalian i, jumlah hasil pembandingan md5 yang sama

result:= 0;

// perhitungan MD5

if (iCalMD5(sFile) <> 0) then

exit;

// Database virus telah terdaftar di ListView2 pada window utama tab Virus List

for i:=dlgMain.ListView2.Items.Count -1 downto 0 do

begin

if (strIComp(PAnsiChar(dlgMain.ListView2.Items.Item[i].SubItems[1]), PAnsiChar(sFile)) = 0) then

begin

sFile:= dlgMain.ListView2.Items.Item[i].SubItems[0];

inc(result);

end;

end;

end;

Sedangkan iCalMd adalah fungsi yang memanggil objek TmessageDigest untuk menghitung nilai MD5 file yang nama – lengkap dengan jalur direktori – nya dijadikan masukan.

Ok proses utama thread selesai. Sekarang kita fokus ke window utama dan mengode pemicu dilarikannya thread checkVir kita. Dan pemicunya tidak lain adalah tombol btStart. Peranan tombol ini ada dua, yaitu memulai dan menyetop kerja thread checkVir, yang dikondisikan oleh caption si tombol. Prosedurnya adalah sebagai berikut,

procedure TdlgMain.btStartClick(Sender: TObject);

var

sPath: string;

begin

// jika caption-nya ‘Stop’ hentikan kerja thread

if (dlgMain.btStart.Caption = ‘Stop’) then

begin

threadob.nStop := 0;

// panggil rutin penghentian thread

// rutin ini juga dieksekusi ketika kerja thread selesai

dlgMain.EndProgress(Sender);

exit;

end;

// hapus semua daftar hasil pencarian sebelumnya

dlgMain.listView1.Clear;

// pilih direktori untuk memulai pencarian

if SelectDirectory(‘Select Directory to begin Searching’,

”, sPath) then

// panggil thread

goScan(sPath);

end;

Dengan goScan prosedur yang khusus memanggil thread,

procedure TdlgMain.goScan(sDir: string);

begin

// ubah caption btStart dan set btPause sehingga enable

// btPause tombol yang menyetop sementara atau meneruskan kerja thread

dlgMain.btStart.Caption:= ‘Stop’;

dlgMain.btPause.Enabled:= true;

// buat thread checkVir dalam variabel threadob dalam scope global agar mudah dipanggil

// implementasi yang buruk, tetapi mudah diterapkan😉

threadob := CheckVir.Create(true);

threadob.OnTerminate:= dlgMain.EndProgress;

threadob.sPath := sDir;

threadob.nStop := 1;

threadob.FreeOnTerminate := True; // hancurkan threadob ketika thread mati

threadob.Resume; // larikan thread di latar belakang

end;

Sedangkan kode pada saat btPause diklik mudah,

procedure TdlgMain.btPauseClick(Sender: TObject);

begin

if btPause.Caption = ‘Pause’ then

begin

btPause.Caption:= ‘Resume’;

threadob.Suspend;

end else

begin

btPause.Caption:= ‘Pause’;

threadob.Resume;

end;

end;

ok, sampai sini dulu😉

btw, kenapa tidak coba anti virusnya sekarang? silakan ambil disini, source-nya menyusul jika tulisan ini sudah kelar O:-)

2 pemikiran pada “anti virus 3

  1. Wow, kelihatannya tu hebat, tp kq g ada source-nya dalam delphi…
    Aku dah nyoba’in ni tp g jd”….

    Tolong source-nya disertain juga dong, ya…???
    Biar Q bisa bwt nambah ilmu nih…

    Plizzz…???!!!

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