Kamis, 29 September 2011

Pemberitahuan

Buku Saya yang terbaru yang berjudul "Membuat Software Hacking Dengan C++". Buku ini saya maksudkan sebagai lanjutan dari buku saya yang pertama yaitu "Masuki Dunia Hacker Dengan C++". Jika Anda tertarik untuk membelinya secara online, Anda dapat membelinya di tokomahal.com atau di gramediaonline.com.

Sebagai Catatan, jika Anda adalah seorang pemula dalam C++, saya sarankan Anda untuk membaca terlebih dahulu buku tentang dasar-dasar pemrograman C++ sebelum Anda membaca dan mempelajari buku "Membuat Software Hacking Dengan C++". Kalau saya boleh memberi saran, saya sih menyarankan Anda untuk membeli buku saya yang pertama yaitu "Masuki Dunia Hacker Dengan C++" karena memang isi dari buku saya yang kedua cukup berkaitan dengan buku saya yang pertama.

Akhir kata, selamat menikmati buku terbaru saya, dan selamat memasuki 'Dunia C++'.

NS.


Minggu, 11 September 2011

Class String

Dalam dunia pemrograman C/C++, masalah string merupakan salah satu momok yang cukup menakutkan. Tidak jarang programmer yang menyerah sebelum 'berperang' menaklukan medan algorithma sebuah aplikasi yang hendak dibuat. Kebanyakan dari para surrender adalah para programmer yang hendak membuat aplikasi-aplikasi yang membutuhkan pengolahan string.

Di dalam C/C++, string direpresentasikan dalam dua bentuk yaitu: array of char dan class string. Untuk kesederhanaan (sederhana tidak selalu mudah) dan kompatibilitas dengan bahasa C, para hacker biasanya menggunakan string dalam bentuk array of char. Selain karena mereka tidak perlu terlalu khawatir dengan masalah buffer overflow, mereka juga tidak banyak melakukan pengolahan string.

Lain halnya dengan para programmer yang membut aplikasi yang dapat digunakan sehari-hari. Kebanyakan dari mereka harus berurusan dengan pengolahan string. Selain itu, masalah buffer overflow juga menjadi momok yang sangat menakutkan bagi mereka karena apabila aplikasi yang mereka buat berhasil di hack, maka hilanglah kepercayaan user yang berarti turunnya profit mereka.

Nah untuk mengatasi masalah tersebut, sudah sejak lama pengembang bahasa C++ mengembangkan suatu class yang dapat digunakan secara fleksibel untuk melakukan pengolahan string yaitu class string.

Karena pembahasan tentang class string ini terlalu panjang-lebar, maka saya sengaja membuat tutorial tersebut menjadi sebuah e-book yang dapat Anda download disini.

Oke, selamat membaca dan jangan lupa tinggalkan komentar jika terdapat kesalahan dan keburukan dalam tulisan tersebut.

NS.

Kamis, 25 Agustus 2011

Installasi IDE di Linux

Tidak adil rasanya kalau selama ini porsi pembahasan C++, baik di buku maupun di blog, hanya membahas pada platform Microsoft Windows saja. Karena itu, pada kesempatan kali ini, saya mencoba untuk menebus ketidak-adilan saya dengan membahas tentang C++ di dunia Linux.

Mungkin pembahasan kali ini tidak terlalu berat. Pada pembahasan ini saya hanya akan membahas bagaimana cara menginstall compiler di Linux. Secara Linux memang telah menyediakan default compiler yaitu GCC. Namun tanpa IDE, saya rasa banyak orang akan malas memprogram di Linux.

IDE yang saya gunakan adalah code::blocks. Entah mengapa, tapi sepertinya IDE ini menarik untuk digunakan. Baiklah langsung saja, kita mulai proses installasinya.

Installasi code::blocks ini ada dua cara, yaitu: cara offline dan cara online.

Cara online:

  1. Pastikan Anda terkoneksi ke Internet

  2. Install code::blocks melalui apt-get

    Ketikan perintah:

    $ sudo apt-get install codeblocks

  3. Tunggu sampai proses installasi selesai


Cara offline:

  1. Download file offline installer di http://www.mediafire.com/?iheq74m85q1q16c

  2. Ketika file telah selesai di download, copy-kan atau pindahkan file tersebut ke Desktop.

    Kemudian, buka terminal dan ketikan perintah:

    $ cd Desktop

    Untuk berpindah direktori aktif ke Desktop.

  3. Extract file installer

    Untuk mengextract file installer, ketikan perintah berikut:

    $ tar -zxvf codeblocks-10.05-1-debian-i386.tar.gz

    Setelah itu, di Desktop, terdapat direktori bernama i386. Pindah ke directory tersebut dengan perintah:

    $ cd i386

  4. Install code::blocks

    Untuk menginstall code::blocks, ketikan perintah:

    $ sudo dpkg -EG -i *.deb

    Tunggu sampai proses installasi selesai


Setelah installasi selesai, baik secara offline maupun online, jalankan code::blocks dengan perintah

$ codeblocks

Pada saat Anda pertama kali menjalankan code::blocks, maka Anda akan diminta untuk memilih compiler yang digunakan. Pilih saja GNU GCC Compiler.

Kemudian untuk membuat sebuah project baru, pilih menu File->New->Project... Kemudian pilih Empty Project dan klik Go.



Muncul dialog Empty Project, klik Next > untuk pertama kalinya. Kemudian, isi Project title: dengan nama project yang akan digunakan, Folder to create project in: dengan lokasi file project disimpan. Biarkan isian Project filename: dan Resulting filename: karena kedua isian tersebut akan terisi secara otomatis. Klik Next >.



Kemudian terdapat pengaturan Compiler yang digunakan, Debug dan Release Configuration. Pilihan Debug configuration digunakan ketika File executable yang Anda hasilkan digunakan untuk proses debugging. File yang dihasilkan dari Debug configuration lebih besar daripada file yang dihasilkan dari Release configuration. Sedangkan Release configuration digunakan untuk menghasilkan file executable sesungguhnya. Jadi jika Anda tidak ingin melakukan debugging terhadap file yang Anda hasilkan, uncheck pilihan Create “Debug” configuration:.

Untuk file executable yang dihasilkan oleh Debug configuration, akan disimpan di <project_dir>/bin/Debug sementara file object-nya disimpan di <project_dir>/obj/Debug. Sedangkan file executable yang dihasilkan oleh Release configuration, akan disimpan di <project_dir>/bin/Release sementara file object-nya disimpan di <project_dir>/obj/Release. Klik Finish untuk selesai.

Nah sekarang, saatnya kita mencoba melakukan coding. Ketikan code berikut ini:

#include
using namespace std;

int main()
{
cout << "Hello World.. This is the first time I'm using code::blocks" << endl; return 0; }

Kemudian, compile dan run program tersebut melalui menu Build->Build and run atau dengan menekan tombol F9. Maka akan muncul dialog seperti ini:



Yak sekian tutorial dari saya, walaupun mungkin terlalu remeh tapi saya berharap dapat membantu. Untuk selanjutnya, jika coding di Linux, saya (mungkin) akan memakai code::blocks sampai ada compiler yang lebih bagus lagi. :)

Jumat, 12 Agustus 2011

Simple Encryption Menggunakan XOR

XOR adalah operasi logika per-bit (bitwise) yang membandingkan dua buah bit yang apabila salah satunya bernilai benar, maka hasil akhir operasi XOR ini adalah benar. Namun apabila kedua bit yang dibandingkan bernilai salah atau keduanya bernilai benar, maka hasil akhirnya adalah salah.

Untuk lebih jelasnya perhatikan tabel kebenaran berikut:

XYX^Y
110
101
011
000


Keunikan dari perintah ini adalah, apabila kita melakukan operasi XOR dua kali terhadap suati bit (dengan operand yang sama), maka hasil akhirnya akan kembali ke bit semula.

XYX^Y(X^Y)^Y
1101
1011
0110
0000


Terlihat, pada contoh di atas, ketika bit X di XOR-kan dengan Y, kemudian hasilnya di XOR-kan lagi dengan Y maka akan menghasilkan bit X. Nah sifat inilah yang dapat digunakan untuk melakukan enkripsi sederhana.

Misal terdapat karakter A = 01000001 di XOR kan dengan 10000000 maka hasilnya akan menjadi 11000001 atau karakter dan jika di XOR kan lagi, maka akan kembali menjadi 01000001 atau A lagi.

Oke daripada bingung, kita lihat contoh nyatanya saja. Perhatikan kode berikut.

// ED-Xor - Melakukan enkripsi-dekripsi dengan menggunakan
//          operasi bitwise dengan operator XOR (^)
#include <iostream>
using namespace std;

void EncDecXOR(char*, int);
const int key = 199; // Key untuk enkripsi

int main()
{
  char buffer[1024]; // Penampung input. maximum 1024 karakter

  cout << "Masukan string yang akan di Enkripsi: ";

  // Masukan input string dari standar output ke buffer[]
  cin.getline(buffer, 1024-1);

  EncDecXOR(buffer, key); // Enkripsi string di buffer[]

  cout << "Hasil Enkripsi : " << buffer << endl;

  EncDecXOR(buffer, key); // Dekripsi string di buffer[]

  cout << "Hasil Deksripsi : " << buffer << endl;

  system("PAUSE");
  return 0;
}

// EncDecXOR() - Melakukan enkripsi-dekripsi dengan menggunakan XOR
//               berdasarkan key yang ditentukan oleh user
void EncDecXOR(char* szString, int nKey)
{
  for(int i=0; szString[i]; i++)
  {
    szString[i] = szString[i] ^ nKey;
  }
}


Perhatian langsung kita fokuskan saja pada fungsi EncDecXOR(). Pada fungsi tersebut, terdapat looping yang akan menjelajahi setiap karakter dari string yang ditunjuk oleh pointer szString. Nah pada setiap karakter, akan dilakukan operasi XOR dengan nilai nKey dan kemudian hasilnya akan dimasukan lagi ke variabel yang ditunjuk oleh pointer szString.

Jadi pada contoh diatas, nilai dari buffer, setelah fungsi ini dipanggil, akan berubah menjadi string dalam bentuk terenkripsi. Ketika fungsi EncDecXOR() dipanggil lagi dengan parameter yang sama, baru nilai buffer akan kembali seperti semula.

Jika kode di atas dieksekusi, maka tampilannya adalah sebagai berikut:

Masukan string yang akan di Enkripsi: Muhammad Nazaruddin
Hasil Enkripsi                      : è▓»ª¬¬ªúτëª╜ª╡▓úú«⌐
Hasil Deksripsi                     : Muhammad Nazaruddin
Press any key to continue . . .

Demikian tutorial singkat dari saya, Anda dapat memberikan komentar apabila terdapat kesalahan atau jika Anda kurang paham terhadap penjelasan saya diatas. Oke, sampai jumpa di artikel berikutnya .

Minggu, 12 Juni 2011

typedef

Di dunia pemrograman C++, penggunaan perintah ini terbilang sederhana dan sekilas terlihat tidak penting. Namun ternyata, khususnya bagi beberapa orang, penggunaan dan pemahaman tentang typedef ini cukup membingungkan.

Banyak tutorial yang mengatakan bahwa penggunaan typedef adalah untuk memberikan sinonim dari suatu tipe data. Namun, jujur saja secara pribadi, saya tidak sepenuhnya setuju dengan pendapat tersebut. Misal terdapat pernyataan berikut:

typedef int bilBulat;

bilBulat nBilangan;

Pada contoh diatas, anggapan bahwa bilBulat merupakan sinonim dari int, sehingga pernyataan kedua (bilBulat nBilangan) berarti int nBilangan, memang bisa dianggap benar. Namun sesungguhnya yang terjadi pada pernyataan diatas adalah bilBulat bukan merupakan nama lain dari int. bilBulat hanya berfungsi menjadi sesuatu yang diganti dengan nama aktual variabel yang akan dideklarasikan.

Jadi ketika kita mendeklarasikan bilBulat nBilangan, maka deklarasi yang sebenarnya (yang compiler akan lakukan adalah: “Buang typedef, lalu ganti bilBulat dengan nBilangan sehingga pernyataannya menjadi seperti ini:

int nBilangan;

Oke, mungkin terlihat cukup membingungkan. Perhatikan saja pernyataan berikut.

typedef int Tumpukan[10];

Apabila terdapat pernyataan

Tumpukan nArray;

Maka Anda tinggal pikirkan saja “Buang typedef, lalu ganti Tumpukan dengan nArray.” Sehingga pernyataan yang sebenarnya adalah seperti berikut.

int nArray[10];

Jadi yang sebenarnya dilakukan oleh typedef adalah hampir sama dengan preprocessor #define hanya saja perintah typedef lebih fleksibel untuk digunakan.

Misal terdapat pernyataan berikut:

typedef int (*callBack)(char *); // Biasa digunakan untuk function pointer

Maka pernyataan berikut:

callBack pFunc1;

callBack pFunc2;

callBack pFunc3;

Memiliki arti:

int (*pFunc1)(char *);

int (*pFunc2)(char *);

int (*pFunc3)(char *);

Saya tidak menyatakan bahwa preprocessor #define tidak dapat digunakan untuk melakukan pernyatan-pernyataan tersebut. Hanya saja saya tidak memiliki bayangan bagaimana cara melakukan hal di atas dengan preprocessor #define (bahkan membayangkannya saja sudah membuat saya malas).

Sekian tutorial dari saya, semoga bermanfaat. Jika ada kesalahan, silakan berkomentar sehingga saya bisa memperbaikinya :).

Selasa, 08 Maret 2011

Microsoft Visual Studio Express

Microsoft Visual Studio Express merupakan Software Development tools yang dikeluarkan oleh Microsoft yang dapat diunduh secara gratis. Deretan aplikasi yang termasuk dalam paket Visual Studio Express ini adalah:

  1. Visual Basic 2010 Express

  2. Visual C# 2010 Express

  3. Visual C++ 2010 Express

  4. Visual Web Developer 2010 Express

  5. Visual Phone Developer Tools

Karena buku saya adalah buku yang membahas tentang C++, maka saya pun hanya mengunduh Visual C++ 2010 Express.


Perbandingan Antara Visual C++ 2010 Express dengan Dev-C++ 4.9.9.2

Jika dibandingkan dengan Dev-C++ yang saya gunakan (baik sehari-hari, maupun ketika saya menulis buku "Masuki Dunia Hacker Dengan: C++"), Visual C++ 2010 Express ini memiliki keunggulan yang lebih baik pada bidang tampilan antarmukanya (interface).

Kemudian, apabila kita mengetik sebuah fungsi, maka akan muncul preview parameter-parameter fungsi tersebut. Hal ini tentu memudahkan kita untuk mengetahui apakah nilai parameter-parameter fungsi yang kita ketikan sudah sesuai atau belum.

Yang terakhir (sejauh pengamatan saya), pada saat kita membuat sebuah project baru, kita akan disodori pilihan yang lebih variatif daripada pilihan project yang disediakan Dev-C++.

Namun dibalik keunggulan-keunggulan tersebut, kekurangan Visual C++ 2010 Express ini adalah cukup berat saat digunakan apabila dibandingkan dengan Dev-C++ yang tergolong sangat ringan. Hal ini menurut saya cukup mengganggu pasalnya, kadang saya cukup tidak sabar apabila pindah dari window editor satu file ke file lainnya. Dan inilah yang membuat Visual C++ 2010 Express tidak cukup baik di mata saya.

Kemudian, walaupun produk ini gratis, namun Anda tetap harus melakukan registrasi (secara online tentunya) dimana Anda diharuskan untuk memiliki WindowsID seperti akun email pada hotmail.com atau windowslive.com.

Akhirnya, karena alasan itulah, saya lebih memilih untuk tetap setia pada Dev-C++ 2010. (Terutama karena Dev-C++ lebih ringan daripada Visual C++ 2010 Express).

Untuk mengunduh Microsoft Visual Studio Express, silakan klik disini.

Jumat, 25 Februari 2011

Mematikan Komputer Dengan WIndows API

Virus, worm, trojan, malware dan program-program 'jahat' lainnya biasanya dibekali dengan kemampuan untuk dapat mematikan (melakukan shutdown) komputer yang dihinggapinya.

Saya yakin, banyak diantara Anda yang telah mengetahui bagaimana melakukannya, baik dengan bahasa pemrograman Visual Basic, Delphi, atau bahkan C/C++.

Berikut adalah contoh program yang dapat melakukan shutdown beserta tutorial versi saya.


  1. Shutdown Codes + Article

  2. Shutdown Codes


Jika Anda menemukan bugs atau error dalam program tersebut, Anda bisa memberitahu saya melalui e-mail. :)

Program Chat Sederhana

Seorang Pembaca Buku "Masuki Dunia Hacker Dengan : C++" meminta saya untuk memberi contoh program yang dapat mengirim dan menerima data (bertindak sebagai client sekaligus server).

Source code lengkapnya dapat Anda dapat download disini (maaf jika tidak disertai dengan tutorial)

Pada program ini, saya menggunakan beberapa threading untuk membuat beberapa fungsi yang dapat berjalan secara mandiri. Serta tentu saja saya masih memakai winsock untuk mengimplementasikan socket.

Saya yakin bahwa program ini masih terdaapt banyak bugs. Karena itu, saya akan sangat senang sekali apabila Anda bersedia memberikan perbaikan pada program tersebut.

Oh ya, tidak lupa terima kasih kepada setiap orang yang telah membaca buku saya (terutama yang membelinya :)).

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | belt buckles