Sabtu, 28 Mei 2016

Membuat Program C untuk Mengirim Email dengan libquickmail


Senang sekali mengingat masa lalu. Dulu saya sering iseng membuat virus, worm dan program jahat lainnya, termasuk keylogger. Namun sayangnya, kesemuanya itu belum ada yang sukses berada di papan atas, seperti Sality dan Conficker.

Jadi, saya ingin mengulaingi masa lalu saya. Dan untuk saat ini, saya berencana membuat satu lagi program jahat, yang lebih jahat. Ya, keylogger. Program keylogger pertama saya sudah saya sebarkan di salah satu situs download software. Jika ingin mencobanya, carilah program bernama “SpyC” di www.brothersoft.com.

Sekarang, saya akan mengembangkan keylogger tersebut dari awal, dengan menambahkan kemampuan mengirimkan email hasil pencurian data korban ke email milik kita. Tapi, yang jadi masalah adalah, bagaimana mengirimkan email dari program yang kita buat?

Sebenarnya ada banyak cara, salah satu yang berhasil saya uji adalah dengan memanfatkan bantuan libquickmail. Tak perlu repot-repot mengetahui istilah teknis dalam mekanisme komunikasi email. Cukup memodifikasi sedikit sampel program yang disediakan dalam source libquickmail, saya pun berhasil mengirimkan sebuah email dari progam saya. Prinsipnya, program kita akan memanggil serangkaian API dari library tersebut untuk mengirimkan email, semua mekanismenya kita tak perlu tahu, karena libquickmail sendirilah yang akan mengurusnya. Sederhana, bukan?

Selama ini, komunikasi dengan email dapat dilakukan melalui beberapa jenis mekanisme protokol, seperti SMTP, POP3 dan IMAP. Gmail adalah salah satu layanan email yang mendukung ketiga jenis protokol tersebut. Sementara itu, libquickmail hanya mendukung protokol SMTP. Selebihnya, anda bisa meluangkan sedikit waktu untuk mengetahui lebih lanjut tentang ketiga protokol tersebut.

Lalu, apa itu libquickmail?
Menurut penciptanya sendiri, libquickmail adalah: “C library intended to give C/C++ developers a quick and easy way to send e-mail from their applications. Supports multiple To/Cc/Bcc recipients and multiple attachments without size limitation. For the actual SMTP communication either libcurl can be used or the built in SMTP support. The library can also be used to just create a multipart MIME message body.
Also comes with a command line application for sending mails (with optional attachments).”

NB: Jika tak mengerti artinya, anda bisa menggunakan Google translate. Hehehe

Library ini mendukung platform Unix-like dan Windows. Namun pada kesempatan kali ini, saya hanya menjelaskan tata caranya dalam persepektif pengguna Linux. Mungkin tutorial khusus untuk penggunaan libquickmail di Windows akan dibahas lebih jauh di waktu lain, ya.

Baik, langsung saja kita mulai.
1. Sayangnya libquickmail belum tersedia di repository utama Ubuntu. Saya tidak tahu untuk repository lain. Untuk itu kita perlu melakukan compile, build dan instalasi secara manual. Namun, jika repo anda sudah menyediakannya, anda cukup menginstalnya sesuai prosedur biasanya, dan melewati tahapan ini. Pertama, kita download source code libquickmail dulu.
https://sourceforge.net/projects/libquickmail

2. Ekstrak file

3. Build
Pertama masuk ke direktori source code
cd /home/it/libquickmail-0.1.23

Lakukan konfigurasi otomatis dengan menjalankan script 'configure'. Tambahkan parameter --prefix/usr.
./configure --prefix=usr

Setelah build selesai, nantinya semua file dimasukkan sekitar folder /usr/local. Umumnya program masih bisa berjalan jika library berada dalam lingkup /usr/local, tapi nyatanya percobaan saya sebelumnya gagal. Jadi, akhirnya saya memilih lokasi prefix /usr.

Compile dan link source code yang telah dikonfigurasi dengan perintah:
make
Install hasilnya ke sistem
sudo make install



5. Buat program
Berikut adalah source code untuk mengirim email melalui protokol SMTP gmail. Alamat server dan port SMTP saya peroleh dari link berikut.
https://support.google.com/a/answer/176600?hl=id

/*
    This file is part of libquickmail.

    libquickmail is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    libquickmail is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with libquickmail.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "quickmail.h"
#include <stdio.h>

#define FROM        "irvan.herz@gmail.com"
#define TO          "irvan.herz@gmail.com"
//#define CC          "otheruser@domain.com"
//#define BCC         "otheruser@domain.com"
#define SMTPSERVER  "smtp.gmail.com"
#define SMTPPORT    587
#define SMTPUSER    "irvan.herz@gmail.com"
#define SMTPPASS    "XXXXXXXXXXX"

void list_attachment_callback (quickmail mailobj, const char* filename, quickmail_attachment_open_fn email_info_attachment_open, quickmail_attachment_read_fn email_info_attachment_read, quickmail_attachment_close_fn email_info_attachment_close, void* callbackdata)
{
  printf("[%i]: %s\n", ++*(int*)callbackdata, filename);
}

int main ()
{
  printf("libquickmail %s\n", quickmail_get_version());
  quickmail_initialize();
  quickmail mailobj = quickmail_create(FROM, "libquickmail test e-mail");
#ifdef TO
  quickmail_add_to(mailobj, TO);
#endif
#ifdef CC
  quickmail_add_cc(mailobj, CC);
#endif
#ifdef BCC
  quickmail_add_bcc(mailobj, BCC);
#endif
  quickmail_add_header(mailobj, "Importance: Low");
  quickmail_add_header(mailobj, "X-Priority: 5");
  quickmail_add_header(mailobj, "X-MSMail-Priority: Low");
  quickmail_set_body(mailobj, "This is a test e-mail.\nThis mail was sent using libquickmail.");
  //quickmail_add_body_memory(mailobj, NULL, "This is a test e-mail.\nThis mail was sent using libquickmail.", 64, 0);
  quickmail_add_body_memory(mailobj, "text/html", "This is a <b>test</b> e-mail.<br/>\nThis mail was sent using <u>libquickmail</u>.", 80, 0);
/**/
  quickmail_add_attachment_file(mailobj, "test_quickmail.c", NULL);
  quickmail_add_attachment_file(mailobj, "test_quickmail.cbp", NULL);
  quickmail_add_attachment_memory(mailobj, "test.log", NULL, "Test\n123", 8, 0);
/**/
/*/
  quickmail_fsave(mailobj, stdout);

  int i;
  i = 0;
  quickmail_list_attachments(mailobj, list_attachment_callback, &i);

  quickmail_remove_attachment(mailobj, "test_quickmail.cbp");
  i = 0;
  quickmail_list_attachments(mailobj, list_attachment_callback, &i);

  quickmail_destroy(mailobj);
  return 0;
/**/

  const char* errmsg;
  quickmail_set_debug_log(mailobj, stderr);
  if ((errmsg = quickmail_send(mailobj, SMTPSERVER, SMTPPORT, SMTPUSER, SMTPPASS)) != NULL)
    fprintf(stderr, "Error sending e-mail: %s\n", errmsg);
  quickmail_destroy(mailobj);
  return 0;
}

Awalnya saya mencoba konfigurasi server=aspmx.l.google.com dan port=25, tapi gagal. Begitu pula dengan server=smtp.gmail.com dan port=465. Konfigurasi yang berhasil saya uji dan dapat diproses oleh program adalah server=smtp.gmail.com dan port=587. Untuk konfigurasi lain, saya belum sempat mencobanya.

6. Build program
gcc test_quickmail.c -lquickmail -o test_quickmail

7. Jalankan, lalu cek inbox



Oyeee, berhasil. Kira-kira, program apa yang akan anda buat, ya?
Read more

Rabu, 11 Mei 2016

Internet Murah dan Jangkauan Luas? Pakai AXIS, Karena yang Murah Tidak Selalu Murahan


Di zaman maju seperti ini, keberadaan komunikasi konvensional sepertinya mulai tergeser, tergerus oleh perkembangan pesat internet. Sering diriwayatkan oleh guru dan kerabat yang lahir lebih dulu dari saya; dulu kalau mau bicara, ya harus ke orangnya. Memang sudah ada pos, tapi kurang efektif untuk komunikasi jarak dekat.

Perlahan keberadaaan teknologi mulai merambah sektor telekomunikasi. Setelah telepon rumah mulai populer saat itu, handphone pun hadir menggesernya. Sampai sekarang keberadaannya sepertinya masih belum bisa digeser oleh teknologi lain. Hanya saja, mungkin handphone mulai bertransformasi menjadi media komunikasi beragam fitur. Saat menggenggam sebuah handphone, seakan-akan kita bisa menggenggam dunia, menyatukan ufuk barat dan ufuk timur menjadi satu. Apa mungkin? Ya, tentu. Sekarang ada internet.

Yang masih jadi kendala dalam penggunaan internet, adalah tarif.  Jika dihitung secara kasar, memang sebenarnya internet lebih murah. Jika 1000 karakter SMS dipatok tarif Rp 50. Maka dengan internet, rata-rata hanya dipatok tarif Rp 1 saja untuk setiap KB. Jadi Rp 1 sudah cukup untuk mengirim pesan 1000 karakter (1 KB) tersebut. Namun, jika dihitung dari segi utilitas, internet masih tergolong mahal, karena kegunaan internet selama ini memang tidak terlalu berfokus pada aktifitas kirim-terima pesan saja.

Di keseharian perkuliahan, saya merasakan sendiri betapa keberadaan internet sangat mustahil untuk dipisahkan. Dulu, kami biasa berkomunikasi dengan SMS dan telepon. Kemudian beberapa semester berlalu diikuti kemunculan zaman Facebook. Untung, handphone saya sudah berfitur Java, jadi Opera mini sudah cukup memuaskan untuk digunakan mengakses Facebook.

Sekarang, zaman itu berlalu seperti yang sebelumnya pernah terjadi. Ya, sekarang zamannya chatting. Mulai dari Whatsapp, Line, Kakao talk; semuanya sudah tak asing bagi saya. Namun, semenjak zaman ini muncul, saya mulai kawatir dengan masalah pengeluaran. Memang ada yang murah, tapi jangan ditanya lagi soal jangkauannya.

Ah, sudahlah, itu sudah berlalu. Sekarang saya pakai Axis. Murah, jangkauan luas. Saya nggak bohong.

Awalnya saya ragu, pengalaman lampau saya sempat mengatakan harga berbanding lurus dengan kualitas dan jangkauan. Tapi ternyata saya salah, jaringan Axis sekarang sudah semakin luas; tapi tarifnya tidak banyak berubah, tetap murah seperti yang dulu-dulu. Kenapa bisa demikian?

Ternyata inilah jawabannya yang dikutip dari Okezone.
PT XL Axiata Tbk (EXCL) merupakan sebuah perusahaan operator telekomunikasi hasil penggabungan dua perusahaan (merger) yakni XL dan Axis. Proses merger berhasil tercapai pada 19 Maret 2014 silam. Mantan CEO XL Axiata, Hasnul Suhaimi, merupakan salah satu tokoh yang mempunyai peran dalam proses merger tersebut. Dirinya mengungkapkan, sebenarnya kala itu XL sama sekali tidak berminat untuk mencaplok Axis.
"Waktu 2009 pemegang saham XL datang ke Indonesia, dia bilang eh dia jual Axis, XL kan waktu itu butuh frekuensi. Tapi setelah dihitung-hitung dikasih saja kami tidak mau, karena perusahaannya utangnya banyak. Akhirnya kami bilang tidak," kenangnya saat peluncuran buku 'Sukses Merger XL-Axis di Gedung PPM Management, Jakarta, Kamis (14/4/2016).
Hasnul juga mendapatkan masukan dari salah satu karyawannya, bahwa sebagai perusahaan operator selular mereka harus terus mengikuti perkembangan teknologi. Pihaknya juga mulai sadar bahwa XL belum memiliki frekuensi 1.800 Mhz yang merupakan sumber daya untuk layanan data yang menggunakan teknologi 4G.
"Kami akhirnya melihat ke pasar, yang memiliki frekuensi tersebut di pasar paling Indosat, kan tidak mungkin diakuisisi. Akhirnya tinggallah Axis dan tiga," imbuhnya.
Akhirnya dengan didasari kebutuhan untuk terus berkembang, XL pun memutuskan untuk melakukan akuisisi Axis. Dengan merger tersebut akhirnya XL Axiata bisa mendapatkan frekuensi 1800 MHz yang akhirnya bisa memberikan layanan 4G.
"Saat itu saya bilang oke kalau tidak ada 4G kita tidak akan sukses. Karena percuma jika kami sukses kala itu tapi di masa depan kami tertinggal," pungkasnya.

Nah, itulah sedikit cerita tentang Axis dan XL. Memang sebelumnya informasi ini belum banyak diekspos ke media. Tapi setelah ini kita tahu, bahwa perkembangan Axis ternyata penuh dengan lika-liku di balik layar. Begitu pula XL, ternyata fitur 4G yang telah diberikan merupakan buah dari kerjasamanya dengan Axis.

Read more

Senin, 02 Mei 2016

Cara Mudah Membuat Komik Strip dari Gambar Tangan dengan Bantuan Software Gratis


Judul yang cukup panjang, untuk sekedar menjelaskan sebuah tutorial pembuatan komik. Tapi, saya harap Anda tidak menyesal membacanya, ya. Karena, tutorial ini sepertinya akan sangat menarik untuk dicoba, tentunya tutorial ini harus mudah dipraktikkan oleh siapapun, khususnya bagi yang baru pertama kali ingin merancang sebuah komik.

Mungkin langkah prosedur yang dijelaskan disini akan terasa berbeda dengan yang dijelaskan oleh tutorial blog tetangga. Sebenarnya, yang membuatnya memiliki perbedaan adalah adanya penekanan pada penggunaan software gratis dan penggunaan peralatan yang sederhana.  Adapun software yang digunakan dalam tutorial pembuatan komik ini adalah GIMP dan Inkscape.

Kenapa harus software gratis?
Alasannya adalah karena saya prihatin melihat fakta di sekitar kita, bahwa keberadaan software komersial ternyata cenderung diminati. Bukan karena harganya terjangkau untuk didapatkan, tapi karena semuanya tersedia dalam bentuk bajakan yang mudah diperoleh.

Sudah tidak sabar, bukan? Baik, ayo kita mulai.

Alat dan bahan yang harus dipersiapkan:
- Pensil dan Penghapus
- Kertas
- Scanner atau Kamera (hasil jepretan jernih lebih baik), atau bisa juga Webcam (pastikan pencahayaan bagus)
- Software Inkscape dan GIMP

Pertama, kita buat rangkaian alur gambar di sebuah kertas. Untuk menapatkan hasil yang memuaskan, sebaiknya gunakan kertas yang permukaannya masih bersih dan tidak lusuh. Kemudian scan atau foto gambar yang sudah dibuat.
Yang paling sulit disini adalah, membuat setiap strip gambar agar terlihat mirip antara satu dengan yang lain. Untuk menyikapinya, anda bisa dengan bertahap mengambil gambar dari strip pertama, lalu mengedit dan mengambil gambarnya kembali untuk digunakan sebagai strip kedua, begitu seterusnya.

Sekarang buka GIMP, kemudian lanjutkan membuka gambar hasil scan atau jepretan kamera.
Lakukan optimisasi gambar, melalui menu Colors > Auto > White balance. Ini bertujuan untuk memaksimalkan hasil pada saat proses tracing. Apa itu tracing? kita lihat saja nanti.
Hasil optimisasi akan menghasilkan gambar dengan nilai kontras yang pas.
Biasanya, gambar kamera cenderung kurang tajam dibandingkan gambar hasil scan (Namun untuk pemula, kamera HP yang biasa dibuat selfie sudah cukup, kok. hehehe). Maka dari itu, lanjutkan dengan tahap optimisasi yang kedua, untuk memperjelas garis-garis gambar. Lakukan dengan alat-alat yang tersedia pada toolbox, bisa dengan Pencil tool, atau Brush tool.

Wow, kita sudah semakin jauh. Sekarang apa lagi?
Yang satu ini adalah tahapan yang lumayan penting. Gambar akan diubah ke dalam bentuk garis-garis yang lebih sederhana. Masih dalam GIMP, klik menu Effect > Edge-detect > Difference of Gaussian. Atur nilai Radius 1 dan Radius 2 hingga goresan pensil yang anda buat terlihat benar-benar jelas. Biasanya saya pakai Radius 1=20,0 - 60,0 dan Radius 2 = 1,0.

Oke, hasilnya sudah mulai terlihat sepertinya. Sekarang, mari berpindah ke layar Inkscape. Salin gambar yang sudah kita proses berulang kali tersebut ke workspace Inkscape. Caranya, Pilih semua/select all (Ctrl+A) gambar yang ada di GIMP, Copy (Ctrl+C), lalu paste (Ctrl+V) ke workspace Inkscape.

Dan, sekarang adalah tahapan akhir untuk mengkonversi gambar komik mentah anda ke dalam bentuk digital. Klik menu Path > Trace Bitmap. Gunakan Brightness cutoff, dengan Threshold antara 0,500 - 0,950; sampai objek memiliki goresan jelas dengan sedikit noda.
Nah, sekarang gambar sudah mulai jadi, hilangkan noda-noda hasil tracing dengan tool yang disediakan inkscape, yaitu Edit paths by node (F2).


Sekarang yang harus Anda lakukan hanyalah mewarnai gambar sesuka hati, dengan Fill tool.

Ahahahay.
Akhirnya, Sekarang anda sudah berhasil membuat karakter komik pertama Anda. Keren bukan?
Ini komik saya, mana komik kamu?


Read more