Kamis, 12 Februari 2009

Bahaya Program Anti Virus Oleh : Yohanes Nugroho

Sejak pertama ditemukan virus telah mengalami perkembangan teknologi yang cukup besar, demikian juga program Antivirus yang ada. Sayangnya perkembangan Antivirus biasanya hanya mengejar perkembangan virus dan bukan berusaha mendahuluinya. Antivirus yang ketinggalan (teknologinya) justru dapat mengundang bahaya bagi pemakai.

Ketika virus-virus berhasil dideteksi keberadaannya, virus-virus yang baru selalu bermunculan dengan teknologi yang lebih canggih yang membuat antivirus menjadi tak berdaya . Antivirus yang lama misalnya, selalu dapat di-'tipu' dengan teknologi stealth, dengan demikian ketika antivirus ini berusaha mendeteksi file-file yang lain, virus yang stealth tadi justru menyebarkan dirinya ke setiap file yang diperiksa.

Di berbagai majalah tentunya Anda sering melihat adanya program-program antivirus " satuan " (spesifik) yang tujuannya untuk mendeteksi satu jenis virus. Biasanya para pembuat antivirus tidak memberitahukan cara-cara yang benar untuk menggunakan program antivirus ini, padahal antivirus spesifik memiliki risiko yang besar jika tidak digunakan secara benar.

Antivirus spesifik hanya mampu mendeteksi satu jenis virus (dan mungkin beberapa variannya) dan biasanya mampu melumpuhkan virus di memori. Jika Anda menemukan suatu virus dan Anda yakin nama virusnya Anda bisa menggunakan Antivirus semacam ini, namun jika Anda tidak tahu, sebaiknya jangan coba-coba. Jika ternyata virus yang aktif adalah virus lain, yang tentunya tidak terdeteksi oleh antivirus ini, maka antivirus tersebut justru dapat menyebarkan virus yang ada ke seluruh file program yang diperiksanya.

Bahaya yang lebih menakutkan adalah jika antivirus salah mendeteksi suatu virus dan salah membersihkannya sehingga file program yang Anda coba untuk perbaiki justru menjadi rusak. Kejadian ini pernah terjadi misalnya pada kasus virus DenHard, virus ini benar-benar mirip dengan die hard, namun virus ini menggunakan teknik yang berbeda untuk mengembalikan header file yang asli, beberapa antivirus yang berusaha membersihkannya justru merusakkan file program tempat virus itu berada. Selain terjadi pada kasus virus DenHard, kasus inipun pernah (dan mungkin masih akan terus) terjadi pada beberapa virus. Salah satu alasan para pembuat virus membuat virus yang mirip adalah supaya virus tersebut sulit dibersihkan, karena para pembuat antivirus tidak suka jika virusnya dapat dengan mudah dibersihkan oleh user.

SUMBER BAHAYA PROGRAM ANTIVIRUS

Program Antivirus bisa berbahaya karena sebab-sebab berikut:

  • Beberapa program antivirus hanya menggunakan teknik sederhana yang bisa dengan mudah di-tipu oleh pembuat virus Misalnya program antivirus hanya memeriksa beberapa byte di awal virus, pembuat virus bisa saja membuat virus versi lain yang sama di bagian awal tetapi berbeda di bagian-bagian yang penting, misalnya di rutin enkripsi/dekripsi header file asli. Ini akan membuat program antivirus menjadi perusak file bukan penyelamat file. Beberapa antivirus juga dapat di tipu dengan mengubah-ubah file signature antivirus. File signature merupakan file yang berisi ID dari setiap virus yang dikenal oleh antivirus, jika ID tersebut di ubah maka antivirus tidak akan mengenalnya. Antivirus yang baik seharusnya dapat memeriksa jika file signature-nya berubah.
  • Program Antivirus tidak membuat backup file yang dibersihkan. Sering program antivirus (terutama yang spesifik) tidak menyediakan sarana untuk membuat backup file yang dibersihkan, padahal ini sangat penting andaikata proses pembersihan gagal.
  • Program Antivirus tidak melakukan self check. Self check itu perlu, program antivirus dapat saja diubah oleh orang lain sebelum sampai ke tangan pengguna. Program-program antivirus komersial biasanya melakukan self check untuk memastikan dirinya tidak diubah oleh siapapun, namun ada juga yang tidak dan ini berbahaya. Pada program-program antivirus lokal, yang sering disertakan pada beberapa artikel komputer, biasanya menyertakan source code-nya, sebaiknya Anda mengcompile sendiri source tersebut jika Anda ragu pada keaslian file exe-nya.
  • Program Antivirus residen bisa di matikan dengan mudah Antivirus residen yang baik seharusnya tidak bisa dideteksi dan di uninstall dengan mudah. Contoh antivirus residen yang kurang baik adalah VSAFE (ada di paket DOS). VSAFE bisa dideteksi dan dimatikan dengan menggunakan interrupt (coba Anda pelajari/debug program vsafe yang ada di DOS agar Anda mengerti). Pemakai akan mendapatkan rasa aman yang palsu dengan menggunakan antivirus semacam ini. Tidak ada rasa aman justru lebih baik dari rasa aman yang palsu.
  • Program antivirus tidak memberi peringatan kadaluarsa. Seiring dengan berjalannya waktu, virus-virus yang bermunculan semakin banyak dan tekniknya semakin canggih. Program antivirus yang baik sebaiknya memberi peringatan jika Antivirus yang digunakan sudah terlalu out of date. Ini penting supaya kejadian antivirus yang menyebarkan virus tidak terulang.

    INILAH YANG PERLU ANDA LAKUKAN SEBAGAI PENGGUNA

    Sebagai pengguna program antivirus ada beberapa hal yang bisa Anda lakukan untuk meminimalkan risiko penggunaan antivirus

  • Carilah antivirus yang baik, baik di sini artinya program tersebut dapat dipercaya untuk mendeteksi dan membasmi berbagai virus yang ada. Jangan terbuai dengan janji-janji yang ditawarkan para vendor antivirus, dan jangan terbuai juga dengan nama merk yang cukup terkenal. Cobalah cari perbandingan antara berbagai antivirus di berbagai majalah / situs di internet.
  • Gunakan selalu Antivirus terbaru, Anda bisa mendapatkannya dari Internet atau dari beberapa majalah. Antivirus yang lama memiliki risiko yang besar jika digunakan (lebih dari 6 bulan sudah sangat berbahaya).
  • Buatlah cadangan untuk data dan program Anda yang penting.
  • Lakukan proses pembersihan virus dengan benar jika Anda menemukan virus
  • Pastikan program Antivirus yang Anda dapat adalah yang asli, ada kemungkinan seseorang telah mengubah antivirus tersebut, atau mungkin menularinya dengan suatu virus.
  • Hubungi ahlinya jika Anda merasa tidak dapat mengatasi virus di komputer atau jaringan Anda.

Langkah proses pembersihan yang baik adalah sebagai berikut

Jika Anda menjalankan komputer pribadi

  1. Boot komputer Anda dengan disket startup yang bersih dari virus (dan di write protect)
  2. Jalankan program virus scanner/cleaner pada sebuah file yang terinfeksi
  3. Coba jalankan file tersebut, jika file tersebut menjadi rusak, jangan teruskan lagi
  4. Jika program dapat berjalan lancar, cobakan sekali lagi pada beberapa file (cari yang ukurannya kecil, yang sedang dan yang besar). File yang ukurannya besar perlu di-check, biasanya file ini mengandung internal overlay yang membuat filenya rusak jika terkena virus.
Jika Anda adalah Admin jaringan, sebaiknya Anda mengambil sampel virus ke disket dan mencoba untuk membersihkannya di komputer lain, ini dilakukan untuk tidak mengganggu pekerjaan yang mungkin sedang dilakukan oleh orang lain. Hal ini juga untuk mengantisipasi, kemungkinan adanya virus baru yang mirip dengan virus lain (bayangkan apa jadinya jika terjadi salah pembersihan sehingga seluruh program di jaringan menjadi tidak bisa dipakai!). Jika gagal dibersihkan Anda perlu memanggil ahlinya untuk menangani, atau mencari informasi lebih lanjut di Internet. Percobaan pada beberapa file tujuannya untuk mencegah salah deteksi dan atau salah perbaikan oleh program antivirus. Jika virus dianggap berbahaya dan aktivitas menggunakan jaringan bisa ditunda sementara, mungkin untuk sementara jaringan dimatikan.

SEBAGAI PROGRAMMER INI YANG PERLU ANDA LAKUKAN

Saat ini untuk menjadi programmer antivirus yang baik tidaklah mudah, Anda perlu tahu teknik-teknik pemrograman virus yang setiap hari semakin bertambah sulit. Program antivirus yang Anda buat sebaiknya juga mengikuti perkembangan teknologi virus. Untuk membuat program antivirus yang baik tidaklah mudah, namun ada beberapa hal yang perlu Anda ingat sebagai pembuat Antivirus jika Anda ingin program Anda dipakai orang lain, dan tidak membahayakan orang tersebut

  1. Program Anda sebaiknya bisa mematikan virus di memori, dan dapat memberi peringatan jika ada sesuatu yang aneh di memori komputer pemakai (misalnya besar base mem kurang dari 640 Kb)
  2. Dalam membuat ID virus pilihlah beberapa lokasi, lokasi yang baik adalah di awal virus dan di bagian penting virus (misalnya di bagian dekripsi header program asli) ini untuk memastikan tidak ada yang mengubah lokasi dan sistem enkripsi (jika ada) header program asli.
  3. Jika data/header di enkrip, verifikasikan data yang didapat dari perhitungan, misalnya lihat apakah CS dan IP asli yang di dapat dari perhitungan masih dalam batas besar file, atau apakah instruksi JMP pertama di file COM masuk akal (kurang dari panjang file).
  4. Buat cadangan file jika file yang dibersihkan dikhawatirkan rusak
  5. Lakukan self check di awal program. Jika tidak seluruh bagian program bisa di self check, bagian ID virus perlu diperiksa apakah berubah atau tidak (misalnya dengan checksum).
  6. Buatlah penjelasan yang jelas tentang cara penggunaan antivirus
  7. Jika program hanya dapat dijalankan di DOS periksalah selalu ketika program dijalankan apakah program tersebut benar-benar berjalan di DOS
  8. Jika ingin membuat program antivirus residen, jangan memakai ID virus yang tidak terenkripsi di memori, antivirus lain yang tidak mengenal antivirus Anda tersebut, justru akan menganggap adanya sebuah (atau beberapa buah) virus aktif di memori. Hal ini bisa terjadi, karena beberapa antivirus memeriksa seluruh memori terhadap adanya ID virus.
  9. Untuk antivirus yang non residen teknik no 8 juga perlu digunakan, ini perlu agar program antivirus yang lain tidak mengira program ini terkena virus. Kadang-kadang program juga meninggalkan bekas di memori, yang mungkin bisa dicurigai oleh antivirus lain sebagai virus. Jika Anda tidak ingin menerapkan teknik tersebut, Anda bisa menghapus memori variabel ID virus setelah selesai digunakan.
  10. Jika mungkin, untuk virus yang polimorfik gunakan metode heuristic (dan atau emulasi) untuk men-scan dan teknik emulasi untuk mendekrip, atau mengembalikan program asli.
Seharusnya 10 hal tersebut cukup, Anda bisa menambahkan sendiri hal tersebut jika perlu. Misalnya masalah kecepatan scanning dan lain-lain.

Simpulan dan penutup

Kiranya setelah membaca artikel di atas, para pemakai dan programmer antivirus dapat mendapatkan pengetahuan yang baru mengenai antivirus komputer. Sebagai pemakai antivirus, Anda harus lebih hati-hati, dan dengan rajin mengupdate antivirus Anda. Hal ini sangat perlu dilakukan, terutama bagi Anda yang terhubung ke Internet, sudah banyak virus yang menyebarkan dirinya lewat e-mail, dan dengan memanfaatkan beberapa bug dari perangkat email client Anda beberapa virus dapat menyebar tanpa Anda sadari (saat artikel ini dibuat, ada laporan dari sumber yang terpercaya bahwa ada bug di outlook yang memungkinkan attachment di eksekusi tanpa diketahui user).

Bagi para programmer antivirus, kiranya Anda tergerak untuk mempelajari lagi lebih banyak mengenai teknik-teknik virus, dan teknik-teknik untuk membasminya. Saat ini penulis virus di Indonesia belum terlalu banyak, tapi nanti ketika muncul berbagai virus dengan teknologi tinggi buatan bangsa sendiri, tentunya kita harus bisa membasminya (dengan baik dan benar tentunya), tidakkah kita akan malu, jika harus menggantungkan diri pada antivirus buatan luar negeri?.

Artikel ini bukanlah artikel yang lengkap mengenai pembuatan program antivirus yang baik, juga bukan tutorial yang lengkap mengenai penggunaan antivirus dengan baik dan benar, melainkan hanya sebuah artikel singkat agar para pemakai dan programmer lebih mewaspadai virus dengan lebih memperhatikan aspek antivirusnya.

8 Hal Yang Harus Diketahui Programer Pemula Tentang MySQL

  1. 1. Tabel MySQL bukanlah array
  2. 2. Bahasa SQL dan Fungsi-Fungsi MySQL
  3. 3. LIMIT, LIMIT, LIMIT
  4. 4. Tipe Data
  5. 5. Normalisasi dan Pemodelan
  6. 6. Indeks
  7. 7. Konkurensi, Locking, dan Transaksi
  8. 8. Jenis Tabel
  9. Penutup

Time and again I am amazed at how bad the successful software packages out there are. Apache is easily outperformed by fnord, MySQL isn’t even a real database, PHP is so slow that Zend actually made a business model out of selling performance enhancing hacks for it.—diary Fefe

PHP+MySQL. Siapa yang tidak tahu bahwa duo sejoli ini adalah pasangan terpopular di dunia open source, bahkan di seluruh Internet. PHP telah menggeser Perl sebagai bahasa pilihan dalam membuat aplikasi Web, terutama bagi pemula. Dan PHP hampir selalu bersanding dengan MySQL; 90–95%+ skrip PHP di www.hotscripts.com mungkin bertuliskan “membutuhkan PHP dan MySQL”. Buku-buku PHP, termasuk untuk pemula, tidak akan dipandang afdol kalau belum membahas MySQL. Dan programer PHP, lambat atau cepat, mau atau tidak mau, pasti akan harus mengakrabi software database yang satu ini.

Sayangnya, banyak programer sudah bermain-main dan memakai MySQL secara live di situs produksi, padahal masih asing sama sekali dengan konsep database relasional. Bahkan sebetulnya MySQL juga banyak memiliki kekurangan dalam hal fitur SQL. Sehingga programer PHP tidak bisa memahami dan memanfaatkan kekuatan penuh database relasional + SQL.

Buat Anda para programer pemula yang memang masih awam dengan MySQL dan konsep database pada umumnya, tidak perlu minder atau khawatir. Di dunia IT yang bergerak serba cepat ini memang ada terlalu banyak hal yang harus dipelajari. Dan kebanyakan jadinya dipelajari sambil jalan, sambil dipraktikkan. Ketika mulai membangun CMS untuk satunet.com tahun 1999 pun, saya hanya punya skill terbatas tentang SQL: hanya tahu SELECT, UPDATE, DELETE, CREATE TABLE, dan DROP TABLE. Apa itu JOIN, bagaimana mengubah skema tabel, bagaimana mendesain database yang baik dan ternormalisasi, semuanya masih blank. Dan semua harus dipelajari sambil jalan. Tapi toh akhirnya semua baik-baik saja.

Lewat artikel ini kita akan membahas hal-hal dasar apa yang perlu diketahui agar bisa memakai MySQL dengan efektif dan efisien. Mari kita mulai dengan hal nomor satu:

1. Tabel MySQL bukanlah array

Programer PHP atau Perl tentu saja familiar dengan array dan hash, yang biasanya dipakai untuk menyimpan sekumpulan data terkait. Sebagian dari mereka yang tidak familiar dengan MySQL akan cenderung menganalogikan tabel database dengan array/hash (tepatnya, array of array atau array 2 dimensi). Tabel dipandang sama seperti sebuah array, hanya saja bisa berukuran besar sekali dan persisten (disimpan di disk).

Cara pandang ini tidak sepenuhnya salah, karena toh dalam mengambil record dari tabel biasanya ditampung ke dalam variabel array/hash. Hanya saja, cara pandang ini kadang-kadang membuat programer PHP melakukan sesuatu seperti:

$res = mysql_query("SELECT * FROM t1");
$rows = array();
while ($row = mysql_fetch_row($res)) $rows[] = $row;
echo “Jumlah record di tabel t1 = “, count($rows);

atau membuat tabel seperti:

CREATE TABLE t2 (
f0 INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
f1 INT UNSIGNED,
f2 VARCHAR(5),
f3 VARCHAR(200),
f4 VARCHAR(200),
f5 BLOB
);

Apa yang salah dengan kode PHP pertama di atas, yang bertujuan mencari jumlah record dalam sebuah tabel? Si programer, yang terlalu terobsesi menganggap tabel MySQL sebagai sebuah array, mencoba membangun dulu arraynya dengan mengisi satu-persatu elemen dari hasil query agar nantinya bisa menggunakan fungsi array count(). Masalahnya, bagaimana kalau jumlah record ada 100 ribu? 1 juta? 10 juta? Bukan itu saja, selesai di-count() variabel $rows langsung dibuang lagi! Padahal, ada cara yang jauh lebih efisien:

SELECT COUNT(*) FROM t1

Hasil querynya hanyalah sebuah record saja, tak peduli berapa pun ukuran tabel t1.

Lalu apa yang salah dengan kode SQL kedua? Si programer Perl, dalam hal ini, terobsesi ingin mengambil tiap record di tabel dengan fungsi DBI $sth->fetchrow_array()

@row = $sth->fetchrow_array();
print $row[0]; # f0
print $row[1]; # f1
print $row[2]; # f2
# …

Enak bukan? Elemen ke-0 berisi nilai field f0, elemen ke-1 field f1, dst. Masalahnya, kemudahan ini mengorbankan nama field yang menjadi sangat tidak deskriptif. Belum lagi kalau tabel perlu diubah dengan menyisipkan field-field lain di antara field yang sudah ada. Atau field-field lama perlu dihapus. Semuanya akan menjadi mimpi buruk.

Sebagian pembaca mungkin geleng-geleng kepala. Apa benar ada programer PHP dan Perl yang melakukan kedua hal di atas? Percaya deh, ada. Saya pernah harus ketiban getah memaintain tabel dengan nama field kriptik seperti ini.

2. Bahasa SQL dan Fungsi-Fungsi MySQL

MySQL adalah database SQL bukan? Sayangnya, programer PHP pemula kadang terbatas sekali pengetahuan SQL-nya. Padahal, untuk menggunakan database MySQL dengan efektif, ia tidak boleh malas mempelajari bahasa kedua, yaitu SQL. Jika tidak belajar SQL, maka ada kemungkinan Anda akan melakukan hal-hal seperti:

$res = mysql_query("SELECT * FROM bigtable");
while ($row = mysql_fetch_assoc($res)) {
if ($row['age'] >= 40) {
echo “Ditemukan kustomer yang berusia lebih dari 40 tahun!\n”;
break;
}
}

Apa salah kode di atas? Si programer PHP mencoba mensimulasikan klausa WHERE SQL dengan melakukan pengujian kondisi di kode PHP. Padahal, yang seharusnya dilakukan adalah:

SELECT * FROM bigtable WHERE age >= 40

Ini amat mengirit trafik client/server karena tidak semua record harus dikirimkan dari MySQL ke program PHP Anda.

Sebagian pembaca mungkin geleng-geleng kepala. Apa benar ada programer PHP yang seperti ini? Percaya deh, ada.

SQL sudah menyediakan cara untuk menyortir data, memformat tampilan, mengelompokkan dan memfilter record, dsb. MySQL juga terkenal banyak menyediakan fungsi-fungsi, mulai dari manipulasi tanggal, angka, string, dsb. Kenali SQL dan fungsi-fungsi MySQL; jangan duplikasikan ini semua di PHP sebab akan lebih efisien jika dilakukan di level MySQL.

Ini contoh lain programer PHP yang tidak memanfaatkan fasilitas dari MySQL:

$res = mysql_query("SELECT * FROM customers");
while ($row = mysql_fetch_assoc($res)) {
# format semula yyyy-mm-dd...
preg_match("/(\d\d\d\d)-(\d\d?)-(\d\d?)/", $row[date], $matches);
# … dan ingin dijadikan dd/mm/yyyy
$tanggal = “$matches[3]/$matches[2]/$matches[1]“;
echo “Nama=$row[name], Tanggal lahir=$tanggal
\n”;
}

Padahal MySQL sudah menyediakan fungsi pemformatan dan manipulasi tanggal:

$res = mysql_query("SELECT name, DATE_FORMAT(date,’%d-%m-%Y’) as tanggal “.
“FROM customers”);
while ($row = mysql_fetch_assoc($res)) {
# tidak perlu capek-capek manipulasi string lagi…
echo “Nama=$row[name], Tanggal lahir=$row[tanggal]
\n”;
}

Poin no. 2 ini kedengarannya klise, tapi, seperti nasihat Inggris bilang: know thy tools.

3. LIMIT, LIMIT, LIMIT

Salah satu alasan mengapa MySQL sangat cocok untuk aplikasi Web adalah mendukung klausa LIMIT. Dengan klausa ini, mudah sekali membatasi jumlah record hasil yang diinginkan dalam satu perintah SQL. Tidak perlu bermain kursor atau bersusah payah lewat cara lainnya. Belakangan database lain seperti PostgreSQL dan Firebird pun ikut mendukung fungsionalitas LIMIT (dengan sintaks yang tidak persis sama tentunya).

Sayangnya, programer PHP sendiri yang belum mengenal MySQL dengan baik tidak menggunakannya dengan semestinya.

$res = mysql_query("SELECT name FROM users ORDER BY date");
$rows = array();
for ($i=1; $i<=10; $i++) $rows[] = mysql_fetch_row($res);

Si programer hanya berniat mengambil 10 record, tapi menyuruh MySQL mengambil semua record yang ada dulu. Bagaimana kalau ada 100 ribu record? 1 juta record? 10 juta? Seharusnya, setiap kali Anda menginginkan hanya satu, sepuluh, lima belas record, Anda perlu memberitahu MySQL lewat klausa LIMIT.

SELECT name FROM users ORDER BY date LIMIT 10

Sehingga kita bisa mengirit trafik komunikasi client/server dan mengizinkan MySQL melakukan optimisasi terhadap query tersebut.

4. Tipe Data

Berbeda dengan PHP dan bahasa-bahasa skripting yang mengizinkan kita menaruh apa saja dalam sebuah $variable tanpa deklarasi tipe terlebih dahulu, di MySQL kita perlu mendeklarasikan tipe-tipe data semua field yang ada pada saat membuat sebuah tabel. Seorang programer PHP yang tidak kenal MySQL kadang-kadang cenderung memilih jenis data yang salah (umumnya: memilih VARCHAR() padahal ada tipe data yang lebih tepat) dikarenakan tidak mengenal jenis-jenis data yang tersedia.

Berikut beberapa contoh kurang tepatnya pemilihan tipe data: 1) memilih CHAR(8) atau VARCHAR(10) dan bukannya DATE untuk menyimpan tanggal; kerugiannya, lebih boros tempat dan tidak bisa memanfaatkan fungsi-fungsi khusus tanggal; 2) memilih CHAR(3) atau CHAR(6) ketimbang TINYINT UNSIGNED untuk menyimpan data boolean (“YES” dan “NO”; atau “TRUE” dan “FALSE”; padahal jauh lebih irit dinyatakan dengan 1 dan 0 yang hanya menempati 1 byte); 3) memilih FLOAT atau DOUBLE dan bukannya DECIMAL untuk menyimpan jumlah uang; kerugiannya, FLOAT dan DOUBLE adalah berbasis biner dan seringkali tidak eksak dalam menyimpan pecahan desimal.

Nomor 3 sering terjadi karena programer biasanya hanya mengenal single/double floating point number yang tersedia di bahasa pemrograman. Padahal database umumnya menyediakan angka pecahan berbasis desimal yang bisa eksak menyimpan pecahan desimal.

Manual MySQL amat membantu di sini; di subbab tentang Column Types dijelaskan dengan rinci jenis-jenis data yang ada, termasuk rentang nilai yang dapat ditampung, berapa byte yang ditempati tipe data tersebut, dsb.

5. Normalisasi dan Pemodelan

Normalisasi, skema, entiti-atribut, primary key (PK) dan foreign key (FK), tabel entiti, tabel relasi, OLTP & OLAP… semuanya adalah istilah-istilah yang umum dijumpai dalam pemodelan fisik database. Sayangnya, banyak programer pemula tidak memiliki kemampuan modeling. Sehingga jika disuruh mendesain skema database (sekumpulan tabel-tabel beserta nama field dan tipenya) hasilnya tidak optimal bahkan berantakan. Skema yang buruk berakibat terjadinya duplikasi data, tidak scalable, performance yang buruk, tidak memenuhi requirements, dsb.

Modeling tentunya tidak bisa diajarkan dalam 1–2 hari, apalagi dalam artikel yang singkat ini. Anda perlu membaca buku-buku mengenai pemodelan database dan belajar dari pengalaman maupun dari model-model yang sudah ada. Tapi beberapa nasihat yang mungkin bisa saya berikan di sini adalah sbb.

Satu, langkah pertama dalam pemodelan adalah menemukan entiti-entiti. Entiti bisa dibilang “objek” yang akan kita gelluti. Misalnya, customer, produk, dan transaksi. Setiap entiti umumnya ditaruh dalam satu tabel, tabel ini disebut tabel entiti. Langkah kedua adalah mencari atribut-atribut entiti tersebut. Misalnya tabel customers memiliki atribut sapaan, nama, alamat (jalan + kota + kodepos + propinsi + negara), tanggal record ini ditambahkan, dsb. Langkah ketiga adalah mencari relasi di antara entiti-entiti. Umumnya relasi adalah satu dari: 1-1, 1-many, many-many. Misalnya, relasi antara transaksi dan produk adalah many-many, artinya sebuah transaksi pembelian dapat berisi banyak produk dan sebuah produk tentu saja dapat dibeli dalam lebih dari satu transaksi. Setiap relasi juga akan ditempatkan pada tabel, yaitu tabel relasi.

Dua, dalam pemodelan tidak ada istilah model yang benar atau salah. Yang ada adalah model yang tepat dan tidak tepat untuk keperluan tertentu. Misalnya, untuk aplikasi sederhana modelnya sederhana. Semakin kompleks aplikasi, model pun semakin rumit (jumlah entiti, relasi, dan atribut akan bertambah). Pada umumnya, seiring kompleksitas bertambah, yang tadinya atribut akan berubah menjadi entiti dikarenakan adanya kenyataan hubungan 1-many/many-many antara atribut. Contohnya, tabel customers memiliki atribut alamat. Jika kita ingin mendukung banyak alamat untuk satu customers, maka alamat akan menjadi entiti dan menempati tabel sendiri. Lalu kita membuat tabel relasi customers-alamat.

6. Indeks

Indeks adalah sesuatu yang berkaitan erat dengan implementasi, bukan modeling. Kita seringkali perlu menambahkan indeks pada sebuah field atau banyak field dikarenakan jika tidak ditambahkan maka performance database tidak menjadi praktis. Serba-serbi indexing juga mungkin terlalu panjang untuk bisa dijelaskan dalam artikel pendek ini, tapi intinya setiap kolom yang: 1) memiliki rentang nilai cukup banyak; 2) terletak pada tabel yang berisi banyak record; 3) seringkali disebutkan di klausa WHERE dan/atau ORDER BY dan/atau GROUP BY; perlu diberi indeks. Ini dikarenakan indeks membantu mencari secara cepat sebuah nilai dari banyak nilai yang ada. Beberapa contoh:

* Setiap primary key umumnya otomatis diberi indeks oleh database server, meskipun tabelnya masih berisi sedikit record atau bahkan kosong. Ini dikarenakan database perlu selalu mengecek keberadaan sebuah nilai field ini manakala ada sebuah record yang ditambahkan (ingat, PK artinya tak boleh ada dua record yang mengandung nilai field ini yang sama). Tanpa indexing, pengecekan akan linear dan memakan waktu lama.

* Field tanggal lahir dalam tabel customers kemungkinan besar harus diindeks. Bahkan dayofyear() field ini juga mungkin perlu diindeks. Mengapa? Karena: 1) rentang nilai cukup besar (365 hari dalam setahun x +- 60 jumlah tahun); 2) tabel customers potensial ukurannya besar; 3) sering disebutkan di klausa WHERE (misalnya mencari customer yang ultah hari ini).

* Field memo/notes kemungkinan besar tidak perlu diindeks (secara biasa). Mengapa? Karena meskipun 1) rentang nilai cukup besar; dan 2) tabel customers bisa besar; tapi 3) field ini tidak pernah disebutkan di klausa WHERE secara langsung (mis: Anda tidak pernah menyebutkan: … WHERE notes=’nilai catatan tertentu’ atau WHERE notes > ‘nilai tertentu’). [Catatan: ada indeks lain yang “tidak biasa” di MySQL, yaitu FULLTEXT. Tapi ini di luar cakupan artikel kita kali ini.]

* Field jenis kelamin mungkin tidak perlu diindeks, kecuali jika perbandingan pria:wanita amat drastis bedanya. Mengapa? Sebab: 1) rentang nilai yang ada hanyalah dua: L (lelaki) dan P (perempuan). Meskipun Anda beri indeks, tidak akan memperbaiki kinerja.

7. Konkurensi, Locking, dan Transaksi

Programer web pemula kadang-kadang tidak menyadari bahwa program/skrip yang dibuatnya tidaklah seperti program desktop yang dijalankan oleh satu user. Melainkan, dalam satu waktu bisa saja ada 10 atau 100 user yang “menembak” skrip Anda di Web. Karena itu, isu locking dan konkurensi penting sekali. Contohnya adalah seperti ini:

$res = mysql_query("SELECT value FROM counters WHERE name='counter1'");
list ($value) = mysql_fetch_row($res);
$value++;
// do something else first...
$res = mysql_query("UPDATE counter SET value=$value WHERE name='counter1'");

Di antara baris pertama (saat kita mengambil nilai record) dan baris keempat (saat kita menaruh kembali nilai dalam record) mungkin saja telah terjadi beberapa kali perubahan terhadap si record. Misalnya, pada baris pertama klien1 memperoleh nilai $value = 100. Di baris 3 $value di-increment menjadi 101. Tapi apa yang terjadi jika selama selang waktu itu nilai record counter1 telah menjadi 103 (karena misalnya klien2, klien3, dan klien4 telah meng-incrementnya)? Oleh si klien1, counter1 direset kembali menjadi 101 dan akibatnya increment oleh klien2, klien3, dan klien4 hilang. Seharusnya nilai counter1 menjadi 104.

Untuk kasus di atas, pemecahannya cukup gampang. Lakukan increment secara atomik:

// tidak perlu ambil nilai counter dulu...
// do something else first...
$res = mysql_query("UPDATE counter SET value=value+1 WHERE name='counter1'");

Tapi dalam kasus lain, kadang-kadang kita harus melakukan locking terhadap tabel atau record untuk menjamin bahwa selama kita // do something else… klien2, klien3, dan klien4 tidak bisa seenaknya menaikkan nilai counter:

mysql_query(”LOCK TABLES cuonters”);
$res = mysql_query(”SELECT value FROM counters WHERE name=’counter1′”);
list ($value) = mysql_fetch_row($res);
// do something else first… increase value or something…
$res = mysql_query(”UPDATE counter SET value=$value WHERE name=’counter1′”);
mysql_query(”UNLOCK TABLES”);

atau (lebih baik karena kita tidak perlu melock keseluruhan tabel):

mysql_query(”SELECT GET_LOCK(’lock1′)”);
$res = mysql_query(”SELECT value FROM counters WHERE name=’counter1′”);
list ($value) = mysql_fetch_row($res);
// do something else first… increase value or something…
$res = mysql_query(”UPDATE counter SET value=$value WHERE name=’counter1′”);
mysql_query(”SELECT RELEASE_LOCK(’lock1′)”);

Ingat, locking dapat berakibat samping yaitu deadlock.

Transaksi. Transaksi pun sesuatu yang dipergunakan secara meluas di dunia database, tapi hampir tidak pernah kita jumpai di bahasa pemrograman (ini karena data di bahasa pemrograman ditaruh dalam variabel di memori semua; tidak ada isu disk yang crash/lambat/rusak/harus disinkronkan dengan data di memori). Karena itu Anda perlu memahami konsep ini dari buku-buku tentang database.

8. Jenis Tabel

Di MySQL dikenal istilah table handler dan jenis tabel. Saat ini ada 3 jenis tabel utama yang bisa dipakai di MySQL: MyISAM (default), BerkeleyDB, dan InnoDB. Yang perlu diketahui ada tiga hal: 1) tidak semua tabel mendukung transaksi (MyISAM tidak mendukung transaksi, jadi COMMIT dan ROLLBACK tidak melakukan sesuatu yang semestinya jika Anda menerapkan pada tabel MyISAM); 2) tidak semua tabel punya karakteristik performance yang sama (BerkeleyDB misalnya, lambat jika ukuran tabel besar) dan disimpan dengan cara yang sama (tabel MyISAM misalnya disimpan dalam 3 file: .MYI, .MYD, .frm sementara tabel-tabel dan database-database InnoDB disimpan bersama dalam daerah disk yang disebut tablespace; 3) distribusi MySQL yang bukan -Max tidak dikompile dengan dukungan terhadap BerkeleyDB dan InnoDB.

Nomor 3 penting Anda ketahui karena jika kita menginstruksikan MySQL untuk membuat database dengan jenis tertentu:

CREATE TABLE (...) TYPE=BDB;

Dan MySQL tidak dikompile untuk mendukung BerkeleyDB, maka MySQL tidak akan protes dengan error, melainkan membuatkan tabel tersebut untuk kita tapi dengan tipe default yaitu MyISAM. Jadi Anda perlu mengecek dulu menggunakan SHOW TABLE STATUS:

mysql> create table t4 (i int) type=innodb;
Query OK, 0 rows affected (0.00 sec)

mysql> show table status from mydb like ‘t4′;
+——+——–+-…
| Name | Type | …
+——+——–+-…
| t4 | MyISAM | …
+——+——–+-…

Ternyata MyISAM!

Penutup

Sebetulnya untuk memakai MySQL dengan baik dan benar diperlukan skill-skill dasar lain seperti membackup, merestore, mengeset parameter-parameter server, memonitor server, dsb. Tapi itu semua lebih merupakan tugas seorang administrator (DBA).

Layanan Hosting Gratis PHP dan MySQL

Walaupun saat ini biaya hosting sudah cukup terjangkau, tapi layanan hosting gratis masih banyak dicari. Buat yang baru belajar web, layanan hosting gratis biasanya dipakai untuk latihan sebelum menggunakan layanan hosting berbayar. Sedangkan para blogger biasanya menggunakan layanan hosting gratis untuk membuat dummy blog untuk keperluan link building.

Di bawah ini adalah situs-situs yang menyediakan layanan hosting gratis yang support php dan mysql:

1. php0h.com

Fitur:

  • 350 MB disk space
  • 15 GB monthly transfer
  • 5 MySQL databases
  • PhpMyAdmin
  • Automatic script installation

2. 000webhost.com

Fitur:

  • 1500 MB disk space
  • 100 GB data transfer
  • MySQL database
  • cPanel control panel
  • Fantastico De Luxe 1-Click Autoinstaller

3. phpnet.us

Fitur:

  • 350 MB disk space
  • 15 GB monthly transfer
  • 5 MySQL databases
  • PhpMyAdmin
  • Automatic script installation

4. prophp.us

Fitur:

  • 5.5 GB space
  • 200 GB bandwidth
  • 1 FTP Account
  • PHP 5
  • 50 MySQL Databases
  • phpMyAdmin
  • 50 Addon Domains
  • 50 Subdomains
  • 1 Catchall Email Address
  • 24/7 Technical Support
  • Free CO.CC Domain
  • cPanel with Vista Panel theme

5. profusehost.net

Fitur:

  • 10 GB disk space
  • 100 GB monthly transfer
  • Website Builder
  • Autoscript installer
  • MySQL database
Selain yang sudah tercantum di atas, masih ada banyak sekali situs-situs yang menyediakan layanan hosting gratis. Jadi, kalau lima yang di atas masih kurang, silakan googling aja

Rabu, 28 Januari 2009

BELAJAR MENJADI HACKER

Hacker dengan keahliannya dapat melihat & memperbaiki kelemahan perangkat lunak di komputer; biasanya kemudian di publikasikan secara terbuka di Internet agar sistem menjadi lebih baik. Sialnya, segelintir manusia berhati jahat menggunakan informasi tersebut untuk kejahatan - mereka biasanya disebut cracker. Pada dasarnya dunia hacker & cracker tidak berbeda dengan dunia seni, disini kita berbicara seni keamanan jaringan Internet.

Saya berharap ilmu keamanan jaringan di tulisan ini digunakan untuk hal-hal yang baik - jadilah Hacker bukan Cracker. Jangan sampai anda terkena karma karena menggunakan ilmu untuk merusak milik orang lain. Apalagi, pada saat ini kebutuhan akan hacker semakin bertambah di Indonesia dengan semakin banyak dotcommers yang ingin IPO di berbagai bursa saham. Nama baik & nilai sebuah dotcom bisa jatuh bahkan menjadi tidak berharga jika dotcom di bobol. Dalam kondisi ini, para hacker di harapkan bisa menjadi konsultan keamanan bagi para dotcommers tersebut - karena SDM pihak kepolisian & aparat keamanan Indonesia amat sangat lemah & menyedihkan di bidang Teknologi Informasi & Internet. Apa boleh buat cybersquad, cyberpatrol swasta barangkali perlu di budayakan untuk survival dotcommers Indonesia di Internet.

Berbagai teknik keamanan jaringan Internet dapat di peroleh secara mudah di Internet antara lain di http://www.sans.org, http://www.rootshell.com, http://www.linuxfirewall.org/, http://www.linuxdoc.org, http://www.cerias.purdue.edu/coast/firewalls/, http://www.redhat.com/mirrors/LDP/HOWTO/. Sebagian dari teknik ini berupa buku-buku yang jumlah-nya beberapa ratus halaman yang dapat di ambil secara cuma-cuma (gratis). Beberapa Frequently Asked Questions (FAQ) tentang keamanan jaringan bisa diperoleh di http://www.iss.net/vd/mail.html, http://www.v-one.com/documents/fw-faq.htm. Dan bagi para experimenter beberapa script / program yang sudah jadi dapat diperoleh antara lain di http://bastille-linux.sourceforge.net/, http://www.redhat.com/support/docs/tips/firewall/firewallservice.html.

Bagi pembaca yang ingin memperoleh ilmu tentang jaringan dapat di download secara cuma-cuma dari http://pandu.dhs.org, http://www.bogor.net/idkf/, http://louis.idaman.com/idkf. Beberapa buku berbentuk softcopy yang dapat di ambil gratis dapat di ambil dari http://pandu.dhs.org/Buku-Online/. Kita harus berterima kasih terutama kepada team Pandu yang dimotori oleh I Made Wiryana untuk ini. Pada saat ini, saya tidak terlalu tahu adanya tempat diskusi Indonesia yang aktif membahas teknik-teknik hacking ini - tetapi mungkin bisa sebagian di diskusikan di mailing list lanjut seperti kursus-linux@yahoogroups.com & linux-admin@linux.or.id yang di operasikan oleh Kelompok Pengguna Linux Indonesia (KPLI) http://www.kpli.or.id.

Cara paling sederhana untuk melihat kelemahan sistem adalah dengan cara mencari informasi dari berbagai vendor misalnya di http://www.sans.org/newlook/publications/roadmap.htm#3b tentang kelemahan dari sistem yang mereka buat sendiri. Di samping, memonitoring berbagai mailing list di Internet yang berkaitan dengan keamanan jaringan seperti dalam daftar http://www.sans.org/newlook/publications/roadmap.htm#3e.

Dijelaskan oleh Front-line Information Security Team, "Techniques Adopted By 'System Crackers' When Attempting To Break Into Corporate or Sensitive Private Networks," fist@ns2.co.uk http://www.ns2.co.uk. Seorang Cracker umumnya pria usia 16-25 tahun. Berdasarkan statistik pengguna Internet di Indonesia maka sebetulnya mayoritas pengguna Internet di Indonesia adalah anak-anak muda pada usia ini juga. Memang usia ini adalah usia yang sangat ideal dalam menimba ilmu baru termasuk ilmu Internet, sangat disayangkan jika kita tidak berhasil menginternetkan ke 25000 sekolah Indonesia s/d tahun 2002 - karena tumpuan hari depan bangsa Indonesia berada di tangan anak-anak muda kita ini.

Nah, para cracker muda ini umumnya melakukan cracking untuk meningkatkan kemampuan / menggunakan sumber daya di jaringan untuk kepentingan sendiri. Umumnya para cracker adalah opportunis. Melihat kelemahan sistem dengan mejalankan program scanner. Setelah memperoleh akses root, cracker akan menginstall pintu belakang (backdoor) dan menutup semua kelemahan umum yang ada.

Seperti kita tahu, umumnya berbagai perusahaan / dotcommers akan menggunakan Internet untuk (1) hosting web server mereka, (2) komunikasi e-mail dan (3) memberikan akses web / internet kepada karyawan-nya. Pemisahan jaringan Internet dan IntraNet umumnya dilakukan dengan menggunakan teknik / software Firewall dan Proxy server. Melihat kondisi penggunaan di atas, kelemahan sistem umumnya dapat di tembus misalnya dengan menembus mailserver external / luar yang digunakan untuk memudahkan akses ke mail keluar dari perusahaan. Selain itu, dengan menggunakan agressive-SNMP scanner & program yang memaksa SNMP community string dapat mengubah sebuah router menjadi bridge (jembatan) yang kemudian dapat digunakan untuk batu loncatan untuk masuk ke dalam jaringan internal perusahaan (IntraNet).

Agar cracker terlindungi pada saat melakukan serangan, teknik cloacking (penyamaran) dilakukan dengan cara melompat dari mesin yang sebelumnya telah di compromised (ditaklukan) melalui program telnet atau rsh. Pada mesin perantara yang menggunakan Windows serangan dapat dilakukan dengan melompat dari program Wingate. Selain itu, melompat dapat dilakukan melalui perangkat proxy yang konfigurasinya kurang baik.

Setelah berhasil melompat dan memasuki sistem lain, cracker biasanya melakukan probing terhadap jaringan dan mengumpulkan informasi yang dibutuhkan. Hal ini dilakukan dengan beberapa cara, misalnya (1) menggunakan nslookup untuk menjalankan perintah 'ls ' , (2) melihat file HTML di webserver anda untuk mengidentifikasi mesin lainnya, (3) melihat berbagai dokumen di FTP server, (4) menghubungkan diri ke mail server dan menggunakan perintah 'expn ', dan (5) mem-finger user di mesin-mesin eksternal lainnya.

Langkah selanjutnya, cracker akan mengidentifikasi komponen jaringan yang dipercaya oleh system apa saja. Komponen jaringan tersebut biasanya mesin administrator dan server yang biasanya di anggap paling aman di jaringan. Start dengan check akses & eksport NFS ke berbagai direktori yang kritis seperti /usr/bin, /etc dan /home. Eksploitasi mesin melalui kelemahan Common Gateway Interface (CGI), dengan akses ke file /etc/hosts.allow.

Selanjutnya cracker harus mengidentifikasi komponen jaringan yang lemah dan bisa di taklukan. Cracker bisa mengunakan program di Linux seperti ADMhack, mscan, nmap dan banyak scanner kecil lainnya. Program seperti 'ps' & 'netstat' di buat trojan (ingat cerita kuda troya? dalam cerita klasik yunani kuno) untuk menyembunyikan proses scanning. Bagi cracker yang cukup advanced dapat mengunakan aggressive-SNMP scanning untuk men-scan peralatan dengan SNMP.

Setelah cracker berhasil mengidentifikasi komponen jaringan yang lemah dan bisa di taklukan, maka cracker akan menjalan program untuk menaklukan program daemon yang lemah di server. Program daemon adalah program di server yang biasanya berjalan di belakang layar (sebagai daemon / setan). Keberhasilan menaklukan program daemon ini akan memungkinkan seorang Cracker untuk memperoleh akses sebagai 'root' (administrator tertinggi di server).

Untuk menghilangkan jejak, seorang cracker biasanya melakukan operasi pembersihan 'clean-up' operation dengan cara membersihkan berbagai log file. Dan menambahkan program untuk masuk dari pintu belakang 'backdooring'. Mengganti file .rhosts di /usr/bin untuk memudahkan akses ke mesin yang di taklukan melalui rsh & csh.

Selanjutnya seorang cracker dapat menggunakan mesin yang sudah ditaklukan untuk kepentingannya sendiri, misalnya mengambil informasi sensitif yang seharusnya tidak dibacanya; mengcracking mesin lain dengan melompat dari mesin yang di taklukan; memasang sniffer untuk melihat / mencatat berbagai trafik / komunikasi yang lewat; bahkan bisa mematikan sistem / jaringan dengan cara menjalankan perintah 'rm -rf / &'. Yang terakhir akan sangat fatal akibatnya karena sistem akan hancur sama sekali, terutama jika semua software di letakan di harddisk. Proses re-install seluruh sistem harus di lakukan, akan memusingkan jika hal ini dilakukan di mesin-mesin yang menjalankan misi kritis.

Oleh karena itu semua mesin & router yang menjalankan misi kritis sebaiknya selalu di periksa keamanannya & di patch oleh software yang lebih baru. Backup menjadi penting sekali terutama pada mesin-mesin yang menjalankan misi kritis supaya terselamatkan dari ulah cracker yang men-disable sistem dengan 'rm -rf / &'.

Bagi kita yang sehari-hari bergelut di Internet biasanya justru akan sangat menghargai keberadaan para hacker (bukan Cracker). Karena berkat para hacker-lah Internet ada dan dapat kita nikmati seperti sekarang ini, bahkan terus di perbaiki untuk menjadi sistem yang lebih baik lagi. Berbagai kelemahan sistem di perbaiki karena kepandaian rekan-rekan hacker yang sering kali mengerjakan perbaikan tsb. secara sukarela karena hobby-nya. Apalagi seringkali hasil hacking-nya di sebarkan secara cuma-cuma di Internet untuk keperluan masyarakat Internet. Sebuah nilai & budaya gotong royong yang mulia justru tumbuh di dunia maya Internet yang biasanya terkesan futuristik dan jauh dari rasa sosial.

Pengembangan para hobbiest hacker ini menjadi penting sekali untuk keberlangsungan / survival dotcommers di wahana Internet Indonesia. Sebagai salah satu bentuk nyatanya, dalam waktu dekat Insya Allah sekitar pertengahan April 2001 akan di adakan hacking competition di Internet untuk membobol sebuah server yang telah di tentukan terlebih dahulu. Hacking competition tersebut di motori oleh anak-anak muda di Kelompok Pengguna Linux Indonesia (KPLI) Semarang yang digerakan oleh anak muda seperti Kresno Aji (masaji@telkom.net), Agus Hartanto (hartx@writeme.com) & Lekso Budi Handoko (handoko@riset.dinus.ac.id). Seperti umumnya anak-anak muda lainnya, mereka umumnya bermodal cekak - bantuan & sponsor tentunya akan sangat bermanfaat dan dinantikan oleh rekan-rekan muda ini.

Mudah-mudahan semua ini akan menambah semangat pembaca, khususnya pembaca muda, untuk bergerak di dunia hacker yang mengasyikan dan menantang. Kalau kata Captain Jean Luc Picard di Film Startrek Next Generation, "To boldly go where no one has gone before".

Membuat virus macro sendiri

Berdasarkan sifat dan penyerangannya, virus komputer dapat dibedakan menjadi beberapa macam, misalnya virus boot sector, virus file, polymorphic virus, stealth virus, dan virus makro. Virus makro ini dapat menyerang pada dokumen MS Word, Excel atau Power Point. Virus makro ini termasuk virus yang paling banyak dijumpai di sekitar kita. Tentunya kita masih ingat dengan adanya virus Mellisa atau virus I Love You yang juga dapat kita masukkan ke dalam kategori virus macro.

Mengapa virus makro ini sering sekali kita jumpai? Jawabnya tentu saja karena populasi pengguna MS Office sangat banyak. Dengan pengguna yang cukup banyak tentunya virus makro dapat berkembang dengan cepat. Dengan melakukan pertukaran data *.doc (dokumen MS Word) yang telah terinfeksi maka sudah cukup untuk membuat semua dokumen menjadi terinfeksi.

Yang menarik, bagaimana cara membuat virus makro tersebut? Kalau Anda seorang programmer, dengan bantuan berbagai referensi tentunya mudah saja untuk belajar membuat virus makro. Masalahnya bagaimana kalau kita sama sekali tidak menguasai bahasa pemrograman?

Tenang saja, di internet banyak sekali software yang dapat digunakan untuk membuat virus makro. Salah satunya adalah SkamWerks Lab. Dengan fasilitas Virii Wizard, kita dapat membuat virus mulai dari awal sampai selesai. Saat menggunakan Virii Wizard, kita dapat menuliskan pembuat virusnya, nama virus, dan makro-makro yang akan dimasukkan ke dalam virus. Nah, daripada penasaran, silakan Anda cepat-cepat mencobanya sendiri. Tentunya setelah Anda mendownload programnya di sini.

Jika berminat, Anda bisa mendapatkan software-software lain yang dapat digunakan untuk membuat virus di sini. Koleksinya sangat lengkap!

Selamat mencoba!

Sejarah Prosesor Intel

Berikut adalah sedikit sejarah perkembangan prosesor Intel dan para clone-nya yang berhasil disarikan

  • Debut Intel dimulai dengan processor seri MCS4 yang merupakan cikal bakal dari prosesor i4040. Processor 4 bit ini yang direncanakan untuk menjadi otak calculator , pada tahun yang sama (1971), intel membuat revisi ke i440. Awalnya dipesan oleh sebuah perusahaan Jepang untuk pembuatan kalkulator , ternyata prosesor ini jauh lebih hebat dari yang diharapkan sehingga Intel membeli hak guna dari perusahaan Jepang tersebut untuk perkembangan dan penelitian lebih lanjut. Di sinilah cikal bakal untuk perkembangan ke arah prosesor komputer.
  • Berikutnya muncul processor 8 bit pertama i8008 (1972), tapi agak kurang disukai karena multivoltage.. lalu baru muncul processor i8080, disini ada perubahan yaitu jadi triple voltage, pake teknologi NMOS (tidak PMOS lagi), dan mengenalkan pertama kali sistem clock generator (pake chip tambahan), dikemas dalam bentuk DIP Array 40 pins. Kemudian muncul juga processor2 : MC6800 dari Motorola -1974, Z80 dari Zilog -1976 (merupakan dua rival berat), dan prosessor2 lain seri 6500 buatan MOST, Rockwell, Hyundai, WDC, NCR dst. Z80 full compatible dengan i8008 hanya sampai level bahasa mesin. Level bahasa rakitannya berbeda (tidak kompatibel level software). Prosesor i8080 adalah prosesor dengan register internal 8-bit, bus eksternal 8-bit, dan memori addressing 20-bit (dapat mengakses 1 MB memori total), dan modus operasi REAL.
  • Thn 77 muncul 8085, clock generatornya onprocessor, cikal bakalnya penggunaan single voltage +5V (implementasi s/d 486DX2, pd DX4 mulai +3.3V dst).
  • i8086, prosesor dengan register 16-bit, bus data eksternal 16-bit, dan memori addressing 20-bit. Direlease thn 78 menggunakan teknologi HMOS, komponen pendukung bus 16 bit sangat langka , sehingga harganya menjadi sangat mahal.
  • Maka utk menjawab tuntutan pasar muncul i8088 16bit bus internal, 8bit bus external. Sehingga i8088 dapat memakai komponen peripheral 8bit bekas i8008. IBM memilih chip ini untuk pebuatan IBM PC karena lebih murah daripada i8086. Kalau saja CEO IBM waktu itu tidak menyatakan PC hanyalah impian sampingan belaka, tentu saja IBM akan menguasai pasar PC secara total saat ini. IBM PC first release Agustus 1981 memiliki 3 versi IBM PC, IBM PC-Jr dan IBM PC-XT (extended technology). Chip i8088 ini sangat populer, sampai NEC meluncurkan sebuah chip yang dibangun berdasarkan spesifikasi pin chip ini, yang diberi nama V20 dan V30. NEC V20 dan V30 adalah processor yang compatible dengan intel sampai level bahasa assembly (software).

Chip 8088 dan 8086 kompatibel penuh dengan program yang dibuat untuk chip 8080, walaupun mungkin ada beberapa program yang dibuat untuk 8086 tidak berfungsi pada chip 8088 (perbedaan lebar bus)

  • Lalu muncul 80186 dan i80188.. sejak i80186, prosessor mulai dikemas dalam bentuk PLCC, LCC dan PGA 68 kaki.. i80186 secara fisik berbentuk bujursangkar dengan 17 kaki persisi (PLCC/LCC) atau 2 deret kaki persisi (PGA) dan mulai dari i80186 inilah chip DMA dan interrupt controller disatukan ke dalam processor. semenjak menggunakan 286, komputer IBM menggunakan istilah IBM PC-AT (Advanced Technology)dan mulai dikenal pengunaan istilah PersonalSystem (PS/1). Dan juga mulai dikenal penggunaan slot ISA 16 bit yang dikembangkan dari slot ISA 8 bit , para cloner mulai ramai bermunculan. Ada AMD, Harris & MOS yang compatible penuh dengan intel. Di 286 ini mulai dikenal penggunaan Protected Virtual Adress Mode yang memungkinkan dilakukannya multitasking secara time sharing (via hardware resetting).

Tahun 86 IBM membuat processor dengan arsitektur RISC 32bit pertama untuk kelas PC. Namun karena kelangkaan software, IBM RT PC ini "melempem" untuk kelas enterprise, RISC ini berkembang lebih pesat, setidaknya ada banyak vendor yang saling tidak kompatibel.

  • Lalu untuk meraih momentum yang hilang dari chip i8086, Intel membuat i80286, prosesor dengan register 16-bit, bus eksternal 16-bit, mode protected terbatas yang dikenal dengan mode STANDARD yang menggunakan memori addressing 24-bit yang mampu mengakses maksimal 16 MB memori. Chip 80286 ini tentu saja kompatibel penuh dengan chip-chip seri 808x sebelumnya, dengan tambahan beberapa set instruksi baru. Sayangnya chip ini memiliki beberapa bug pada desain hardware-nya, sehingga gagal mengumpulkan pengikut.
  • Pada tahun 1985, Intel meluncurkan desain prosesor yang sama sekali baru: i80386. Sebuah prosesor 32-bit , dalam arti memiliki register 32-bit, bus data eksternal 32-bit, dan mempertahankan kompatibilitas dengan prosesor generasi sebelumnya, dengan tambahan diperkenalkannya mode PROTECTED 32-BIT untuk memori addressing 32-bit, mampu mengakses maksimum 4 GB , dan tidak lupa tambahan beberapa instruksi baru. Chip ini mulai dikemas dalam bentuk PGA (pin Grid Array)

    Prosesor Intel sampai titik ini belum menggunakan unit FPU secara
    internal . Untuk dukungan FPU, Intel meluncurkan seri 80x87. Sejak 386 ini mulai muncul processor cloner : AMD, Cyrix, NGen, TI, IIT, IBM (Blue Lightning) dst, macam-macamnya :

    i80386 DX (full 32 bit)
    i80386 SX (murah karena 16bit external)
    i80486 DX (int 487)
    i80486 SX (487 disabled)
    Cx486 DLC (menggunakan MB 386DX, juga yang lain)
    Cx486 SLC (menggunakan MB 386SX)
    i80486DX2
    i80486DX2 ODP
    Cx486DLC2 (arsitektur MB 386)
    Cx486SLC2 (arsitektur MB 386)
    i80486DX4
    i80486DX4 ODP
    i80486SX2
    Pentium
    Pentium ODP

  • Sekitar tahun 1989 Intel meluncurkan i80486DX. Seri yang tentunya sangat populer, peningkatan seri ini terhadap seri 80386 adalah kecepatan dan dukungan FPU internal dan skema clock multiplier (seri i486DX2 dan iDX4), tanpa tambahan instruksi baru. Karena permintaan publik untuk prosesor murah, maka Intel meluncurkan seri i80486SX yang tak lain adalah prosesor i80486DX yang sirkuit FPU-nya telah disabled . Seperti yang seharusnya, seri i80486DX memiliki kompatibilitas penuh dengan set instruksi chip-chip seri sebelumnya.
  • AMD dan Cyrix kemudian membeli rancangan prosesor i80386 dan i80486DX untuk membuat prosesor Intel-compatible, dan mereka terbukti sangat berhasil. Pendapat saya inilah yang disebut proses 'cloning', sama seperti cerita NEC V20 dan V30. AMD dan Cyrix tidak melakukan proses perancangan vertikal (berdasarkan sebuah chip seri sebelumnya), melainkan berdasarkan rancangan chip yang sudah ada untuk membuat chip yang sekelas.
  • Tahun 1993, dan Intel meluncurkan prosesor Pentium. Peningkatannya terhadap i80486: struktur PGA yang lebih besar (kecepatan yang lebih tinggi , dan pipelining, TANPA instruksi baru. Tidak ada yang spesial dari chip ini, hanya fakta bahwa standar VLB yang dibuat untuk i80486 tidak cocok (bukan tidak kompatibel) sehingga para pembuat chipset terpaksa melakukan rancang ulang untuk mendukung PCI. Intel menggunakan istilah Pentium untuk meng"hambat" saingannya. Sejak Pentium ini para cloner mulai "rontok" tinggal AMD, Cyrix . Intel menggunakan istilah Pentium karena Intel kalah di pengadilan paten. alasannya angka tidak bisa dijadikan paten, karena itu intel mengeluarkan Pentium menggunakan TM. AMD + Cyrix tidak ingin tertinggal, mereka mengeluarkan standar Pentium Rating (PR) sebelumnya ditahun 92 intel sempat berkolaborasi degan Sun, namun gagal dan Intel sempat dituntut oleh Sun karena dituduh menjiplak rancangan Sun. Sejak Pentium, Intel telah menerapkan kemampuan Pipelining yang biasanya cuman ada diprocessor RISC (RISC spt SunSparc). Vesa Local Bus yang 32bit adalah pengembangan dari arsitektur ISA 16bit menggunakan clock yang tetap karena memiliki clock generator sendiri (biasanya >33Mhz) sedangkan arsitektur PCI adalah arsitektur baru yang kecepatan clocknya mengikuti kecepatan clock Processor (biasanya kecepatannya separuh kecepatan processor).. jadi Card VGA PCI kecepatannya relatif tidak akan sama di frekuensi MHz processor yang berbeda alias makin cepat MHz processor, makin cepat PCI-nya
  • Tahun 1995, kemunculan Pentium Pro. Inovasi disatukannya cache memori ke dalam prosesor menuntut dibuatnya socket 8 . Pin-pin prosesor ini terbagi 2 grup: 1 grup untuk cache memori, dan 1 grup lagi untuk prosesornya sendiri, yang tak lebih dari pin-pin Pentium yang diubah susunannya . Desain prosesor ini memungkinkan keefisienan yang lebih tinggi saat menangani instruksi 32-bit, namun jika ada instruksi 16-bit muncul dalam siklus instruksi 32-bit, maka prosesor akan melakukan pengosongan cache sehingga proses eksekusi berjalan lambat. Cuma ada 1 instruksi yang ditambahkan: CMOV (Conditional MOVe) .
  • Tahun 1996, prosesor Pentium MMX. Sebenarnya tidak lebih dari sebuah Pentium dengan unit tambahan dan set instruksi tambahan, yaitu MMX. Intel sampai sekarang masih belum memberikan definisi yang jelas mengenai istilah MMX. Multi Media eXtension adalah istilah yang digunakan AMD . Ada suatu keterbatasan desain pada chip ini: karena modul MMX hanya ditambahkan begitu saja ke dalam rancangan Pentium tanpa rancang ulang, Intel terpaksa membuat unit MMX dan FPU melakukan sharing, dalam arti saat FPU aktif MMX non-aktif, dan sebaliknya. Sehingga Pentium MMX dalam mode MMX tidak kompatibel dengan Pentium.

Bagaimana dengan AMD K5? AMD K5-PR75 sebenarnya adalah sebuah 'clone' i80486DX dengan kecepatan internal 133MHz dan clock bus 33MHz . Spesifikasi Pentium yang didapat AMD saat merancang K5 versi-versi selanjutnya dan Cyrix saat merancang 6x86 hanyalah terbatas pada spesifikasi pin-pin Pentium. Mereka tidak diberi akses ke desain aslinya. Bahkan IBM tidak mampu membuat Intel bergeming (Cyrix, mempunyai kontrak terikat dengan IBM sampai tahun 2005)

Mengenai rancangan AMD K6, tahukah anda bahwa K6 sebenarnya adalah rancangan milik NexGen ? Sewaktu Intel menyatakan membuat unit MMX, AMD mencari rancangan MMX dan menambahkannya ke K6. Sayangnya spesifikasi MMX yang didapat AMD sepertinya bukan yang digunakan Intel, sebab terbukti K6 memiliki banyak ketidakkompatibilitas instruksi MMX dengan Pentium MMX.

  • Tahun 1997, Intel meluncurkan Pentium II, Pentium Pro dengan teknologi MMX yang memiliki 2 inovasi: cache memori tidak menjadi 1 dengan inti prosesor seperti Pentium Pro , namun berada di luar inti namun berfungsi dengan kecepatan processor. Inovasi inilah yang menyebabkan hilangnya kekurangan Pentium Pro (masalah pengosongan cache) Inovasi kedua, yaitu SEC (Single Edge Cartidge), Kenapa? Karena kita dapat memasang prosesor Pentium Pro di slot SEC dengan bantuan adapter khusus. Tambahan : karena cache L2 onprocessor, maka kecepatan cache = kecepatan processor, sedangkan karena PII cachenya di"luar" (menggunakan processor module), maka kecepatannya setengah dari kecepatan processor. Disebutkan juga penggunaan Slot 1 pada PII karena beberapa alasan :

Pertama, memperlebar jalur data (kaki banyak - Juga jadi alasan Socket 8), pemrosesan pada PPro dan PII dapat paralel. Karena itu sebetulnya Slot 1 lebih punya kekuatan di Multithreading / Multiple Processor. ( sayangnya O/S belum banyak mendukung, benchmark PII dual processorpun oleh ZDBench lebih banyak dilakukan via Win95 ketimbang via NT)

Kedua, memungkinkan upgrader Slot 1 tanpa memakan banyak space di Motherboard sebab bila tidak ZIF socket 9 , bisa seluas Form Factor(MB)nya sendiri konsep hemat space ini sejak 8088 juga sudah ada .Mengapa keluar juga spesifikasi SIMM di 286? beberapa diantaranya adalah efisiensi tempat dan penyederhanaan bentuk.

Ketiga, memungkinkan penggunaan cache module yang lebih efisien dan dengan speed tinggi seimbang dengan speed processor dan lagi-lagi tanpa banyak makan tempat, tidak seperti AMD / Cyrix yang "terpaksa" mendobel L1 cachenya untuk menyaingi speed PII (karena L2-nya lambat) sehingga kesimpulannya AMD K6 dan Cyrix 6x86 bukan cepat di processor melainkan cepat di hit cache! Sebab dengan spec Socket7 kecepatan L2 cache akan terbatas hanya secepat bus data / makin lambat bila bus datanya sedang sibuk, padahal PII thn depan direncanakan beroperasi pada 100MHz (bukan 66MHz lagi). Point inilah salah satu alasan kenapa intel mengganti chipset dari 430 ke 440 yang berarti juga harus mengganti Motherboard.

Setting MS Outlook untuk Email Yahoo


Berbeda dengan email Yahoo.com, email Yahoo.co.id disertai dengan fitur SMTP dan POP3 gratis. Dengan demikian Anda dapat mengakses (mengirim dan menerima) email dengan menggunakan email client seperti MS Outlook, MS Outlook Express, The Bat, Thunderbird, dll.

Selain itu Anda juga bisa mengakses email Yahoo.co.id dari handphone Anda. Tentunya jika handphone Anda support fitur email SMTP dan POP3.

Pertama Anda login dulu ke email Yahoo Anda dan lakukan konfigurasi sebagi berikut:

1. Klik menu/link Opsi yang ada di sebelah kanan agak ke atas.
2.
Klik menu/link Akses dan Penerusan POP.
3. Klik pada pilihan (radio button) Akses Web & POP lalu klik tombol Simpan.

Selanjutnya buka program MS Outlook Express dan lakukan setting seperti di bawah ini:

  1. Klik menu Tools - Accounts.
  2. Pindah ke tab Mail.
  3. Klik menu Add - Mail.
  4. Isi Display Name dengan nama Anda.
  5. Isi email address dengan email Yahoo Anda, misalnya emaillatihanku@yahoo.co.id
  6. Isi Incoming mail (POP3, IMAP, or HTTP) server dengan pop.mail.yahoo.co.id
  7. Isi Outgoing mail (SMTP) server dengan smtp.mail.yahoo.co.id
  8. Isi Account name dengan email login Anda. Kalo email Anda emaillatihanku@yahoo.com maka Anda isi Account name dengan emaillatihanku.
  9. Isi Password dengan password email Anda.
  10. Klik Finish.
  11. Pada form Internet Accounts, pilik email yang baru saja Anda buat dan klik Properties.
  12. Pindah ke tab Advanced.
  13. Pada isian Server Port Numbers - Outgoing mail (SMTP) diisi dengan 465.
  14. Pada isian Server Port Numbers - Incoming mail (POP3) diisi dengan 995.
  15. Beri tanda check (centhang) pada This server requires a secure connection (SSL).
  16. Klik tombol OK.

Sekarang silakan Anda coba download email dari Yahoo. Caranya, klik icon Send/Recv dan pilih nama email yang tadi Anda buat. Atau bisa juga klik icon Send/Recv - Receive All.

Jika Anda sudah menyetting MS Outlook Express Anda dengan benar maka Anda dapat mendownload email dari Yahoo Anda.