Kalau pembantu harus punya 2, sebagai Ibu Rumahtangga harus bisa semua sendiri

Ini tulisan selingan, minggu kemarin ini Eyang datang dan jadi banyak ngobrol dengan Eyang selain sambil masak dan cucipiring, makanya jadi ga sempet nulis ataupun baca buku. Pekerjaan ibu rumahtangga itu kayaknya aja gak ngapa-ngapain, kayaknya aja ga stress ga mikirin klien atau deadline, tapi sebenernya kalau diliat lagi sejak pagi ada deadline buat bangun siapin makan 3 kali sehari, mikirin menu makan apa, mikirin hal-hal kecil yang sepertinya saking rutinnya jadi beban karena bosan.

Biasanya habis lebaran begini topik paling populer adalah mbak yang ga balik lagi, dan kebanyakan orang bakal sibuk nyari pengganti. Saya jadi teringat beberapa waktu lalu di grup ibu-ibu ada yang mencari seorang mbak untuk urus anak, bersihin rumah dan masak. Komentar yang masuk dari ibu-ibu lainnya adalah: kalau kayak gitu harus cari 2, kasian mbaknya kalau harus lakukan semua. Alasannya masuk akal, katanya supaya anaknya lebih terperhatikan sewaktu mbaknya kerjain bebersih dan urusan domestik lainnya.

Ngajakin Joshua baca buku supaya mamanya bisa cuci piring

Faktanya nyari pembantu 1 aja susah, lah ini disuruh cari 2. Terus komentar lainnya sih bilang ya bisa aja cari 1 doang tapi ibunya harus ikut bantuin juga. Saya tercenung dengan komentar yang ada, karena sebagai ibu yang ga pergi ngantor yang kenal banyak ibu tidak bekerja lainnya di kota ini, saya bisa liat sebagai Ibu kami harus bisa lakukan semuamya, sambil urus rumah, urus cucian, urus anak dan urus diri sendiri tentunya. Makanan ga terhidang dengan sendirinya, walaupun di sini bisa praktis bisa beli dengan harga yang ga terlalu mahal, tapi mikirin menu makan apa berikutnya kadang bikin pusing, apalagi kalau tiap orang punya selera berbeda. Untuk makan di luar lebih ga praktis lagi, karena anak-anak biasanya lebih terdistract buat liat sekeliling daripada makan di rumah jadi makan di rumah lebih jadi pilihan.

Kembali ke judul, lalu kalau pembantu harus punya lebih dari 1, karena ya mereka kan dibayar untuk melakukannya, ga manusiawi kalau mereka melakuan semuanya sendiri (apalagi sebagai pembantu yang ditinggal karena ibu bekerja), akan tetapi kalau Ibu yang tidak bekerja itu semua kewajiban dan tugas utama ibu jadi harus bisa lakukan semua sendiri. Saya pikir-pikir lagi, sebenernya pembantu itu membantu doang atau lakukan semua fungsi utama? waktu saya ngobrol sama Joe, komentar Joe nah itu pantesan ada yang bilang mending poligami daripada bayar pembantu 2 hahahahahaa. Ya bedalah pembantu dan ibu, si pembantu tentunya masih pengen melakukan hal-hal lain untuk dirinya sendiri. Walaupun pembantu menginap di rumah, menurut saya sebaiknya pembantu punya jam kerja juga, bukannya malah jadi 24 jam tinggal manggil mbaaaaak.

Idealnya, pembantu itu emang cuma membantu. Saya sendiri pakai pembantu yang datang hanya beberapa jam seminggu 3 kali. Saya dan Joe ga suka pake pembantu nginap, selain ga ada ruangan ekstra buat dia, saya merasa ga ada privacy kalau ada pembantu di rumah 24 jam. Saya memperkerjakan pembantu untuk membereskan rumah dan ngurusin cucian, karena pekerjaan itu bener2 time consuming dan butuh energi, pembantu saya mencuci pake mesin cuci, jadi dia tinggal menjemur dan menyetrika. Sambil nungu cucian kering ya dia beres-beres rumah dan ngepel dan sikat kamar mandi. Saya juga ga butuh pembantu 24 jam, karena Joe juga banyak membantu saya mengurus dan ajak main anak-anak di hari di mana pembantu ga ada/sore hari.

Dengan adanya pembantu, saya bisa fokus urusin anak dan mikirin menu masakan/makanan. Kalau lagi mentok ga kepikiran mau masak apa, ya udah beli tapi ya seringnya harus masak juga walaupun itu cuma nasi goreng atau sayur bening. Kalau hari sekolah saya mendampingi Jona homeschool sambil juga ajak main Joshua. Kadang-kadang pembantu saya bisa dititipin Joshua sekitar 1-2 jam kalau saya harus antar Jonathan kursus. Tapi biasanya Joshua sedang tidur siang pas saya tinggal, jadi sebenarnya dia ga perlu ajak Joshua main, cuma dititip biar bisa ditinggal di rumah aja.

Ngomong-ngomong, waktu lagi nulis ini saya dikasih tau Joe kalau hari ini 16 Juni adalah hari peringatan internasional buat pembantu (International Domestic Workers Day). Mungkin buat yang memperkerjakan pembantu 24 jam bisa kasih liburlah besok kalau udah kelewatan hari ini. Bisa juga mulai kasih jadwal supaya pembantu juga punya me time. Untuk para suami yang di rumah ga ada pembantu, jangan jadi alasan buat poligami ya, harusnya ikutan bantuin istri daripada harus bayar 2 pembantu. Pakai pembantu sewajarnya, karena pembantu itu sesuai namanya membantu, bukan melakukan semuanya sendiri. Pasangan suami istri juga merupakan penolong yang sepadan, artinya pekerjaan domestik bukan cuma tugas istri. Suami juga sangat dianjurkan menolong istri melakukan hal-hal bersama di rumah. Ah jadi kayak iklan layanan masyarakat ya hehehe.

Trik Reverse Engineering Kode Python

Entah kenapa akhir-akhir ini saya banyak melihat pertanyaan mengenai reverse engineering kode Python yang sudah di-obfuscate, baik di Facebook maupun Telegram. Sudah ada beberapa artikel dalam Bahasa Indonesia yang membahas ini misalnya Bermain dengan Python Bytecode dan  Reverse Engineering Python Bytecode. Kedua artikel itu sudah bagus, jadi saya sarankan untuk membaca kedua artikel itu untuk dasar reversing bytecode Python.

Artikel ini hanya ingin membahas trik untuk mempermudah revers engineering proteksi tertentu yang memakai marshal dan gagal didekompilasi.

Setelah membaca kedua artikel tersebut, beberapa hal yang penting diketahui adalah:

  1. Sebuah fungsi atau modul (file) python bisa didapatkan byte codenya (dengan marshal yang merupakan modul bawaan Python)
  2. Kita bisa mengeksekusi hasil marshal dengan exec marshal.loads(bytecode)
  3. File pyc sebenarnya hanyalah file marshal dengan header
  4. Bytecode bisa dilihat versi teksnya dengan dis (modul bawaan Python juga)
  5. Ada decompiler (uncompyle6) yang bisa mengembalikan (mendekompilasi) kode pyc  kembali menjadi kode Python, tapi ini tidak selalu berhasil

Beberapa proteksi yang dilakukan secara umum seperti ini:Kode python dicompile menjadi pyc, headernya dihapus, dan dijadikan string, jadinya:

exec marshal.loads(bytecode);

Seperti sudah dibahas di artikel lain, untuk mendekompilasi kita bisa mengambil bytecode, menuliskan ke file dan menambah header, lalu kita decompile dengan kode seperti ini:

bytecode = '....' #isi bytecode di sini

import imp
magic_number = imp.get_magic()

import struct, time
timestamp = struct.pack('i', int(time.time()))

with open('temp.pyc', 'wb') as f:
    f.write(magic_number)
    f.write(timestamp)
    f.write(bytecode)

Lalu kita coba decompile filenya (uncompyle6 temp.pyc). Tapi kadang dekompilasi ini gagal, contohnya adalah di artikel: Reverse Engineering Python Bytecode. Cara yang pasti berhasil adalah dengan membaca bytecodenya (seperti dijelaskan di artikel tersebut), walau kadang ini sulit jika kodenya rumit.

Di sini saya akan menjelaskan trik untuk proteksi sejenis. Perhatikan bahwa di dalam bytecode file tersebut diakhiri dengan:

12     >> 39161 LOAD_NAME                0 (marshal)  #
          39164 LOAD_ATTR                8 (loads)    #
          39167 LOAD_NAME                2 (e)        #
          39170 CALL_FUNCTION            1            # marshal.loads(e)
          39173 LOAD_CONST               1 (None)     #
          39176 DUP_TOP                               #
          39177 EXEC_STMT                             # exec(marshal.loads(e))
          39178 LOAD_CONST               1 (None)     #
          39181 RETURN_VALUE                          #

Yang artinya, pasti ada kode dekripsi, dan terakhir memanggil: exec marshal.loads. Dalam kasus ini saya tidak peduli proses dekripsinya bagaimana. Tapi saya memperhatikan bahwa tidak ada fungsi berbahaya yang dipanggil selain marshal.loads.

Sekarang trik cara mendapatkan kodenya yang terdekrip tanpa harus membaca dan memahami bytecodenya: kita bisa memaksa agar tidak memanggil marshal, tapi marshax (saya ganti huruf terakhir), lalu membuat modul marshax yang akan menuliskan hasil dekripsi ke file.

Contohnya begini: saya simpan kode yang sudah di-marshal ke file temp, lalu saya baca, ganti teks marshal dengan marshax dan eksekusi. Karena sudah diubah, maka ini akan error karena modul marshax tidak ada,

import marshal

with open("temp", "rb") as f:
  c = marshal.loads(f.read().replace("marshal", "marshax"))
exec c

Tujuan kita adalah untuk menangkap kode yang sudah didekrip. Jadi untuk ini kita buat file marshax.py di direktori yang sama dengan isi:

def loads(x):
    with open("temp2", "w") as f:
        f.write(x)

Hasilnya, ketika exec c dipanggil, fungsi loads di marshax yang akan dipangil dan akan menuliskan kode yang sudah didekrip ke dalam file temp2.

Sekarang file temp2 bisa dicoba diberi header dan didecompile lagi. Jika dekompilasi gagal dan masih berakhir dengan marshal.loads lagi, ulangi langkah yang sama.

Demikian trik kecil dari saya. Semoga bisa membantu reverse engineering file Python lain. Teknik serupa (mengganti implementasi kode) juga bisa diterapkan di kasus lain. Semoga semakin banyak lagi yang menuliskan artikel reverse engineering dalam bahasa Indonesia, sehingga mudah saya link seperti di posting ini.

Membedah e-KTP

Posting ini sekedar membahas tentang kartu tanda penduduk elektronik (e-KTP). Sampai saat ini saya belum pulang ke Indonesia untuk mengurus e-KTP karena KTP lama masih berlaku. Waktu orang tua saya datang ke sini tahun lalu saya sudah sempat ngoprek e-KTP mereka sedikit, dan sekarang selagi mereka berkunjung saya teruskan dan tuliskan hasil eksplorasi saya.

Sebagian isi tulisan ini didapat dari reverse engineering, dan sebagian lagi dari berbagai informasi yang tersebar di Internet. Ada juga bagian yang merupakan spekulasi saya dari informasi yang ada.

Security sebuah smart card

Sebuah smart card adalah sebuah komputer kecil, di dalamnya ada CPU, RAM, dan juga storage. Smart card diakses menggunakan reader, secara umum ada dua jenis: contact (menggunakan konektor fisik seperti SIM card) dan contactless (tanpa konektor fisik seperti kartu e-Money berbagai bank saat ini). Dari sisi programming keduanya sama saja. Kartu smart card yang baru umumnya juga sudah tahan (immune) terhadap side channel attack (DPA/SPA/FI dsb).

Hal yang membuat smart card penting untuk security adalah kemampuan smart card untuk melakukan komputasi (menghitung, melakukan hasing, enkripsi, dekripsi, dsb), dan sangat sulit untuk melakukan ekstraksi data dari smart card. Bayangkan seperti disuruh mengekstrak data di sebuah komputer yang dicor dan dimasukkan ke lemari besi.

Dari segi security, kita bisa memandang smart card ini seperti komputer remote yang melakukan komputasi yang tidak kita ketahui, dan kita tidak bisa mengekstrak informasi jika tidak ada bug pada implementasinya. Bayangkan sebuah sevice php seperti ini

<?php echo hash_hmac (“sha256”, $_GET[“q”], “[email protected]!ku” );?>

Jika kita tidak memiliki akses ke source code program tersebut, maka kita bisa mencoba-coba berbagai input, dan dengan melihat outputnya kita tidak akan bisa mengetahui bahwa kita memakai key “[email protected]!ku”.

Untuk berkomunikasi dengan smart card, kita mengirimkan perintah dalam bentuk byte-byte (dinamakan PDU atau protocol data unit), dan dibalas oleh card dengan status dan byte-byte hasil. Sebenarnya ini tidak berbeda jauh dari komunikasi lain seperti HTTP: kita mengirimkan request, dan card akan mengirimkan status dan balasan. Bahkan smart card generasi baru memang memasukkan server HTTP di dalamnya.

Riset smart card di level protokol (bukan level serangan fisik) bisa dilakukan dengan biaya relatif rendah. Card reader jenis contact dengan konektor USB bisa didapatkan dengan dengan harga kurang dari 10 USD, dan versi contactless (NFC) dengan konektor USB harganya sekitar 30 USD (atau jika punya Raspberry Pi atau Arduino, harga modul NFC-nya saja bisa kurang dari 5 USD).

Perhatikan bahwa: sebuah smart card bisa diisi program. Programnya bisa melakukan apa saja, baik itu memenuhi standar tertentu, atau melakukan sesuatu yang sifatnya custom. Sebagai informasi, kebanyakan  (tapi tidak semua) card sekarang ini diprogram menggunakan Java (teknologi JavaCard). Eksperimen Java Card bisa dilakukan di PC tanpa kartu menggunakan JCardSim.

Smart card juga memiliki protokol standar untuk filesystem. Kita bisa memilih Master File/Dedicated File (MF/DF) yang merupakan struktur direktori, dan EF (Elementary File) yang merupakan file. Semua “nama” pada file hanyalah bilangan yang umumnya dituliskan dalam notasi heksa desimal. Sebuah MF/DF/EF bisa diproteksi dan hanya bisa diakses dalam kondisi tertentu saja (dalam kondisi lain statusnya access denied)

SAM (Secure Access Module/Secure Application Module)

Jika komputer biasa digunakan untuk melakukan komputasi kriptopgrafi untuk dimasukkan ke e-KTP maka programnya akan rawan sekali diubah dan keynya gampang dicuri. Untuk mengatasi hal ini digunakan smart card lain yang dinamakan SAM. Ini hanya merupakan nama peran/role untuk smart card. Sebuah smart card biasa bisa menjadi SAM. Jadi sebuah SAM juga bisa diberi program apa saja. SAM ini bisa berupa chip yang ditanam di hardware, atau berupa kartu biasa. Biasanya SAM ini akan menggunakan jenis kartu contact.

Sekarang masalah security berpindah ke SAM. Tentunya SAM ini berbahaya jika jatuh ke tangan yang salah, jadi ada mekanisme keamanan yang diterapkan pada SAM e-KTP. Mekanismenya cukup sederhana, sehingga jika cukup niat bisa diakali. Ketika Kartu SAM diberikan untuk dipakai dengan aplikasi di sebuah komputer, file konfigurasi diberikan. File konfigurasi ini dienkrip dengan “Machine ID” (yang bisa dengan mudah didapatkan oleh program apapun).

Dengan menggunaakan file konfigurasi yang di XOR dengan machine ID, didapatkan key untuk mengakses Kartu SAM. Kartu tidak bisa dengan mudah dipakai di komputer lain tanpa mengakali program dan/atau mengganti machine ID. Jika N kali salah memasukkan machine ID, maka kartu SAM akan terblokir, dan harus meminta kartu SAM baru.

Keamanan ini hanya sekedar menghindari SAM yang “tercecer” di jalan agar tidak bisa sembarang dipakai. Jika ada yang berniat mengambil kartu SAM dan tahu dipakai di komputer mana (atau device mana), maka keamanan ini tidak membantu. Jadi bisa saja seoarang operator meminjam kartu SAM, dibawa pulang dan dipakai di rumah.

Data Pada e-KTP

Data yang disimpan pada e-KTP pada MF/DF 7F0A. Untuk memilih MF/DF ini bisa digunakan PDU

00A40000027F0A

Beberapa data yang ada di kartu:

  1. Data kontrol kartu (Card Control, pada EF: 6FF0), terbuka tapi spesifikasinya tidak diketahui
  2. Foto (EF: 6FF2), data ini terbuka
  3. Data Demografik/Biodata (6FF1), datanya diproteksi
  4. Data sidik jari: Minutiae1 (6FF4) dan Minutiae2 (6FF5), datanya diproteksi
  5. Scan tanda tangan (6FF3), datanya diproteksi
  6. ECDSA Signature (6FF6), datanya diproteksi

Mengekstrak Foto dari e-KTP

Foto dapat diekstrak dari e-KTP karena memang tidak diproteksi. Cara membacanya cukup mudah, pertama pilih MF/DF dan EF foto, lalu baca 2 byte pertama

00A40000027F0A
00A40000026FF2
00B0000002

Pada 2 byte pertama terdapat panjang (ukuran) data JPEG yang perlu dibaca.  Perhatikan bahwa apapun perintahnya akan selalu ada 2 byte status kembalian (9000 artinya adalah OK, bisa dibandingkan dengan HTTP Code 200):

=> 00 a4 00 00 02 7f 0a
<= 90 00 
Response : 
=> 00 a4 00 00 02 6f f2
<= 90 00 
Response : 
=> 00 b0 00 00 02
<= 06 fe 90 00
Response : 06 fe

Dalam kasus ini panjang file adalah 0x6fe byte = 1790 byte.

Berikutnya data bisa dibaca dengan mengirimkan PDU berikut ini berulang sampai selesai terbaca. Misalnya kita membaca dari offset 2 sebanyak 16 byte, berikutnya dari offset 18 sebanyak 16 byte, dst.

00BB<Offset High><Offset Low><Size>

Jika kita memiliki offset: 0x1234, maka Offset High adalah 0x12 dan Offset Low 0x34.  Teorinya kita bisa membaca sampai 255 byte sekali baca, kenyataannya card readernya bisa error. Di aplikasi e-KTP digunakan 112 byte sekali baca tapi di salah satu card reader saya, saya perlu memakai ukuran 16 byte sekali baca supaya reliable.

Data yang didapatkan adalah file JPEG biasa dengan ukuran 96×96 piksel.


Autentikasi Kartu

Untuk membaca data yang diproteksi, diperlukan key yang berada di SAM. Langkah pertama adalah mutual authentication untuk mendapatkan session key. Berdasarkan hasil reverse engineering,  protokol ini sepertinya berdasarkan Doc 9303 ICAO (Machine Readable Travel Documents) terutama Part 11 (Security Mechanisms for MRTDs).

Di dalam dokumen di atas, diasumsikan mesin pembaca memiliki key dalam memori komputer. Dalam dokumen itu protokolnya seperti ini (hanya garis besar, lihat contoh Appendix D di dokumen 9303 Part 11). Masing-masing pihak (kartu dan app desktop) memiliki SEED yang menjadi dasar untuk pembuatan key:

  • To Card: 0084000008 (request challenge/random number)
  • From Card: 8 byte random
  • From App: Generate random X1 (8 byte) dan X2 (16 byte), lalu  hoitung P1 = 3DES(X1 + RandomFrom Card +X2) , P2 = MAC(P1), hasilnya P1 + P2 ukurannya 40 byte, kirimkan ini ke kartu
  • From Card: kartu melakukan perhitungan serupa dan mengembalikan 40 byte
  • App melakukan komputasi dan menghasilkan session key.

Sedangkan protokolnya e-KTP seperti ini:

  • To SAM: Reset 00FF000000
  • From SAM: OK
  • To CARD: Get Challenge: 0084000008
  • From Card: challenge (8 byte)
  • To SAM: GenerateMutualAuth 00F10000 + CardControl + UID (8) + Challenge (8)
  • From SAM: 40 byte
  • To Card: ExternalAuth: 0082000028 + response from SAM
  • From Card: 40 byte
  • To SAM: VerifyMutualAuth: 00F2000028 + Response From Card

Perbedaannya adalah ada data Card Control dan UID kartu yang dikirim ke SAM. Sepertinya Card Control ini berisi informasi untuk pembuatan SEED, tapi tanpa source code ini tidak bisa diketahui detailnya.

Akan sangat panjang untuk membuktikan bahwa ini aman, tapi pada dasarnya: jika kita tidak punya key enkripsinya, meskipun kita bisa mengubah apapun di sisi app, maka kita tidak bisa mencari tahu key-nya.

Secure Messaging

Berdasarkan pada session key yang didapat pada proses autentikasi, maka setiap PDU yang dikirim akan dienkrip  dulu sebelum dikirim ke kartu dan yang diterima akan didekrip dulu sebelum diproses. Deskripsi ini cukup panjang, tapi ada gambar di dokumen yang menjelaskan ini.

Karena session key tidak pernah di simpan di PC, tapi di SAM, maka secara praktis yang terjadi adalah:

  1. Aplikasi membuat PDU unprotected (misalnya select EF)
  2. Aplikasi mengirimkan PDU unprotected ke SAM
  3. SAM membalas dengan PDU versi Secure Messaging
  4. Aplikasi mengirimkan PDU terenkripsi ke kartu e-KTP
  5. Kartu e-KTP membalas dalam PDU yang terenkrip
  6. Aplikasi mengirimkan PDU terenkrip dari e-KTP ke SAM
  7. SAM akan mendekrip PDU dan hasilnya dibaca oleh aplikasi di PC

Jadi dalam proses ini, meskipun kita mengetahui data terenkripsi dan hasil dekripsinya, kita tetap tidak tahu key yang digunakan (session ini selalu random dalam setiap koneksi).

Emulasi SAM dan e-KTP

Untuk membuat aplikasi e-KTP tanpa memiliki SAM. kita bisa menggunakan SAM dan e-KTP buatan kita sendiri dengan key yang kita masukkan sendiri tentunya ini tidak akan jalan di e-KTP “beneran” sampai kita memiliki akses untuk SAM yang benar. Hal ini sudah pernah diimplementasikan oleh BPPT dalam paper PERANCANGAN EMULATOR KTP ELEKTRONIK BERBASIS JAVA CARD UNTUK MENDUKUNG PENGUJIAN FUNGSIONALITAS PEMBACA KTP ELEKTRONIK INDUSTRI NASIONAL.

Dalam paper ini disebutkan bahwa metode key derivation yang digunakan e-KTP sifatnya rahasia dan mereka mengimplementasikan sendiri algoritma yang sekedar bisa dipakai oleh kartu SAM dan kartu KTP mereka sendiri.

Amankah e-KTP

Aman tergantung dari sudut pandang mana: dari pembuatan KTP, dan dari pemilik/pengguna KTP. Keamanan e-KTP ada pada SAM-nya.  Ini berarti beberapa hal:

  • Kartu SAM harus dijaga ketat, karena jika bisa dipinjam, maka bisa digunakan membuat KTP Aspal
  • Semoga key generation-nya aman. Saya sudah pernah menemukan kode SAM yang aman, tapi cara membuat key yang random hanya mengandalkan fungsi random biasa (bukan secure random) dan menggunakan seed waktu saat ini.
  • Semoga key utama disimpan dengan baik oleh kemendagri

Saat ini data foto sama sekali tidak diproteksi, sehingga seseorang bisa mengambil foto dari dompet yang tertutup. Menurut standar security MRTD, seharusnya data yang bisa dibaca dienkrip dengan informasi yang tertera di kartu. Misalnya untuk paspor, dari nomor paspor, tanggal lahir, tanggal kadaluarsa. Informasi ini tertera di kartu, jadi seseorang yang berusaha membaca dokumen tidak bisa membaca jika memang tidak memegang kartunya. Dengan ini kita bisa memastikan apakah benar isi data elektronik sama dengan data yang dicetak.

Sempat ada aplikasi POC reader e-KTP tapi sayangnya sudah dihapus dari Google Play (tapi masih bisa didownload dari sini). Aplikasi ini membaca data foto seperti saya jelaskan di atas. Sebenarnya agak berbahaya mempercayai data ini, karena mudah sekali membuat card yang jika dibaca dengan aplikasi tersebut akan keluar foto.

Semoga programmernya handal dan tidak membuat kesalahan implementasi. Saya agak khawatir membaca kode seperti ini di salah satu aplikasi yang saya dekompilasi.

Dari mana bisa tahu ini semua?

Pertama adalah mencari dulu aplikasi desktop e-ktp. Ini bisa dicari dengan query berikut di Google.

“index of” e-ktp inurl:.go.id/

Sekarang sepertinya sudah cukup sadar sehingga installernya lebih sulit dicari, tapi tahun lalu ini mudah sekali dicari. Programnya ditulis dalam .NET tanpa obfuscation sehingga mudah dibuka.

Berikutnya eksperimen diteruskan dengan e-KTP orang tua saya. Saya sudah mencoba beberapa attack yang umum, dan sepertinya semuanya aman.

Saat ini saya baru menemukan hal-hal kecil yang undocumented. Seperti halnya web server yang bisa dicari direktori tersembunyi dengan teknik “forced browsing”, kita bisa mengirimkan perintah berurutan ke smart card untuk mencari tahu perintah mana yang menghasilkan sesuatu tapi tidak terdokumentasi.

Demikian hasil oprekan e-KTP untuk saat ini. Mungkin di masa depan akan saya teruskan lagi. Saat ini belum ada ide serangan baru.

 

Wisata di Chiang Mai

Kadang-kadang, ada teman bertanya kalau mau ke Chiang Mai ada apa yang menarik untuk dikunjungi? Seperti biasa, begitu kita tinggal agak lama di suatu kota, kita udah nggak memikirkan lagi tempat wisata, karena semuanya itu ya bukan tempat wisata buat kita. Tapi kalau diganti pertanyaanya, misalnya suatu hari kami ga tingal di Chiang Mai lagi, kira-kira apa yang akan kami kunjungi kalau ke Chiang Mai? Tulisan ini juga buat jadi referensi kalau ada lagi yang nanya ke kami hehehe.

Jawabannya tergantung berapa lama rencana mengunjungi Chiang Mai, terus apakah kami datang tanpa anak atau dengan anak-anak. Kalau datang dengan anak-anak, tentunya yang dikunjungi tempat yang menarik untuk anak-anak juga. Tempat yang biasa mereka kunjungi sejak kecil. Beberapa yang bisa di list adalah:

  • Dalam kota Chiang Mai
  • kota sekitar Chiang Mai
Dalam kota Chiang Mai

Untuk dalam kota Chiang Mai, yang paling mudah tentunya Suan Buak Haad Park (nama di Google: Nong Buak Hard Public Park) di old city. Di park bisa kasih makan ikan dan pigeon, main-main di playground atau sekedar berlari-lari mengelilingi taman sambil mencoba beberapa alat olahraga yang ada. Kalau sudah capai bermain, nongkrong di coffee shop yang ada di park minum kopi dan nyemil hehe. Kalau lapar, bisa beli ayam bakar plus nasi ketan di pintu keluar park, atau kalau mau paket hemat ya bawa makanan dari luar dan tinggal sewa tikar aja piknik dan buat dessert bisa beli eskrim/es puter versi sini. Jonathan senang makan es krim pake ketan terus ditaburin kacang. Di sini sepertinya apa saja bisa dicampur dengan ketan hehehe.

Memberi makan burung di park

Jalan-jalan di park

Tujuan berikutnya ya tentunya mall. Dari beberapa mall yang ada di sini, Airport Plaza (CentralPlaza Chiang Mai Airport) merupakan mall yang paling sering kami kunjungi. Selain karena sekarang ini Jonathan ikut kelas Taekwondo di sana, mall ini adalah mall terdekat dari rumah (sekitar 5 menit kalau ga kena lampu merah). Di mall biasanya kami akan makan berbagai pilihan makanan Thai di food court atau restoran makanan Jepang OISHI (ini restoran milik orang Thailand), naik kereta api gratis, Joshua bisa main di soft area gratis dan mungkin kalau anak-anak sudah cukup besar bisa diajak nonton di bioskop :-).

Mainan gratis di mall
Food court

Selain park di old city, kami juga sekarang ini sering mengunjungi Royal Flora Ratchapreuk dan Night Safari. Mudah-mudahan kalaupun nanti datang jadi turis, saya masih bisa dapetin harga lokal (asal ga lupa aja bahasanya).

Untuk harga turis, harga Night Safari tergolong mahal, dan rugi rasanya kalau datang cuma sebentar. Saat ini rate yang dikenakan untuk turis itu sekitar 800 baht dewasa (harus cek lagi buat tau harga anak-anak). Sementara itu kalau kami dapat harga lokal seperti orang Thai, dewasa itu harganya ga lebih dari 250 baht. Saat ini kami masih bisa mendaftar jadi member, harga member 500 baht untuk selama 6 bulan dan bebas masuk setiap hari juga boleh kalau mau.

Di night safari ada banyak kegiatan yang kalau diikuti semua butuh waktu 5 jam di sana. Kita bisa jalan keliling di walking zone sekitar 1 jam, makan, kalau ada waktu ekstra naik tram keliling 1 jam, menonton beberapa tarian dan animal shows (tiger show 30 menit dan night predator show 30 menit). Diantara waktu tunggu show dan jadwal tram anak-anak bisa main di Playground. Karena cukup sering ke sana, kadang kami datang cuma untuk jalan keliling walking zone, main di playground dan makan saja.

Ratchapreuk
Ratchapreuk

Kami juga menjadi member untuk Royal Flora Ratchepreuk 400 baht per tahun. Kalau bukan member, sebagai orang Thai harus bayar 100 baht per datang, dan sebagai orang asing harus bayar 200 baht per orang (anak-anak biasanya harganya lebih murah). Di taman bunga ini selain bisa main pokemon (kami masih main pokemon), ada playground juga buat anak-anak main dan bisa untuk melemaskan kaki keliling park hehe.

Hidden Village

Salah satu tempat yang mungkin akan dikunjungi jika punya waktu ekstra di Chiang mai adalah Hidden Village. Tempat ini relatif baru, dan karena ga ada membership kami ga bisa terlalu sering ke sana. Di hidden village ini tiket masuk 100 baht/orang dan 50 baht untuk anak-anak. Di dalamnya ada restoran, playground, petting zoo dan animatronik Dinosaurus. Dengan bayar ekstra 20 – 40 baht ada lagi mainan seperti bouncy house dan softplay area di dalamnya.

Selain night safari, kami juga pergi ke zoo. Chiang Mai zoo cukup besar dan butuh seharian juga mengeksplornya termasuk bagian aquarium dan menonton animal show yang ada.

Kami juga sudah dua kali ke Poo Poo Paper park, tapi sudah dituliskan di posting yang ini. Sedikit tentang Chiang Mai Zoo pernah dituliskan di sini dan nanti mengenai Chiang Mai Night Safari dan royal flora Ratchepreuk akan ditulis di posting terpisah.

Luar kota (butuh drive lebih dari 30 menit)

Karena kami gak biasa nyetir jauh-jauh, maka perjalanan lebih dari 30 menit itu tergolong luar kota buat kami hehehe. Kami jarang pergi ke luar kota, jadi ya ga bisa kasih banyak saran juga untuk keluar kota. Tapi ada beberapa tempat yang sesekali kami kunjungi kalau lagi bosan dengan yang dalam kota.

Horizon Village

Dulu kami sering sekali ke Horizon Village. Tempat ini butuh drive sekitar 30 – 40 menit dari rumah. Biasanya butuh waktu seharian kalau ke sana. Di sana ada pilihan untuk makan buffet di hari Sabtu dan Minggu, bersepeda dan atau keliling taman. Taman di sini lebih rindang dibandingkan Ratchepreuk. Di taman horizon village ini juga ada mini zoo dan bisa kasih makan ikan atau burung unta. Dulu sebelum Jonathan 3 tahun, kami bisa ke tempat ini sebulan sekali, tapi belakangan karena Jonathan banyak kegiatan di hari weekend, kami jadi makin jarang ke sana (selain tempatnya juga makin mahal haha).

Hot spring

Tempat wisata yang menarik juga untuk dikunjungi dan ga jauh dari Chiang Mai itu Hotspring San Kampheng. Butuh nyetir sekitar 45 menit – 1 jam dari kota. Kami baru beberapa kali ke sana, sebenarnya seru juga rendaman air panas, atau bisa juga makan telur rebus yang di rendam di air belerang. Kalau misalnya datang pas musim panas, ya kayaknya ga disarankan.

Tempat ini menyenangkan dikunjungi di musim dingin tentunya. Tak jauh dari tempat ini ada cave yang katanya sih cukup menarik untuk dikunjungi, tapi kami belum kunjungi karena ga mau ambil resiko ngejar-ngejar Joshua dalam gelap hahaha. Kalau mau menginap, di sana juga ada pondokan yang bisa di sewa atau area untuk camping, tapi kami belum coba sampai sekarang.

Doi Suthep

Gimana dengan Doi Suthep? Hmm walaupun ada yang bilang belum sah sampai ke Chiang Mai kalau belum ke Doi Suthep, tapi rasanya ga ada yang istimewa dengan Doi Suthep, setidaknya buat kami begitu. Kami pertama kali ke sana setelah beberapa tahun di Chiang Mai. Total selama 11 tahun di kota ini , kami baru 2 kali ke sana (bahkan kami lebih sering ke Doi Inthanon daripada Doi Suthep). Kenapa Doi Inthanon? Ya di Doi Inthanon itu udaranya lebih adem, dan juga naturenya lebih indah.

Butuh waktu 1 jam nyetir menanjak ke Doi Suthep. Di sana bisa melihat ke arah kota Chiang Mai dan foto-foto doang hehehe. Kalau ke doi Suthep, biasanya akan mampir juga ke Doi Pui, di sana bisa melihat kehidupan masyarakat tradisional dan ada taman bunga nya yang juga cukup indah. Di bulan Januari, di dekat Doi Suthep bisa melihat hutan yang penuh dengan bunga sakura. Tapi karena jalannya ke sana sempit dan bunga sakura cuma mekar dalam waktu 2 minggu saja, biasanya weekend jalanan ke sana akan macet, dan yaaa setelah pernah sekali ke sana, kami belum ke sana lagi hehehee.

Doi Inthanon

Doi Inthanon. Titik tertinggi di Thailand

Doi Inthanon, butuh sekitar 2 jam perjalanan (1 jam perjalanan menanjak). Kami suka ke sana karna udaranya adem. Pemandangannya juga jauh lebih indah dibanding Doi Suthep. Ada banyak pilihan di Doi Inthanon ini, untuk yang suka trekking juga ada beberapa pilihan jalur trekking di sana (tapi kami belum pernah). Selain ada temple, taman bunga, di sana juga ada air terjun. Kalau ke Doi Inthanon, butuh waktu seharian untuk bisa mengeksplore/menikmati alam di sana.

Queen Sirikit Botanic Garden

Buat pecinta tanaman dan nature, sekitar 1 jam naik mobil dari Chiang Mai juga ada taman bunga Queen Sirikit Botanic Garden. Kami baru sekali ke sana dan udah beberapa tahun lalu, jadi ga bisa kasih banyak update selain di tempat itu luas dan banyak jenis tanaman dan bunga yang indah. Sekarang ini di sana ada canopy sky walk yang cukup panjang. Waktu kami ke sana canopy sky walk ini belum ada, mungkin ini bisa jadi alasan untuk ke sana lagi.

Kalau punya waktu ekstra, bisa juga ke Golden triangle. Tempat ini merupakan perbatasan antara Thailand, Myanmar dan Laos. Butuh perjalanan sekitar 3 jam dari Chiang mai. Di perjalanan menuju lokasi bisa berhenti di hotspring. Kami baru sekali ke sana ikutan tour sebelum ada Joshua.

Sebenarnya pengen lagi ke sana ajak Joshua, tapi dipikir-pikir temple yang menjadi tempat wisata di sana kurang cocok untuk dilihat oleh anak-anak. Untuk yang tidak bawa anak dan suka melihat arsitektur temple yang unik, tempat ini bisa jadi pilihan dan sekalian siapa tau pengen dapat cap mengunjungi negara Laos dan Myanmar sekalian.

Ada beberapa tempat sekitar sini yang belum juga kami eksplore. Entah apakah kami akan eksplore suatu saat setelah kami ga di sini lagi atau entahlah. Kami belum pernah ke Doi Angkhan, padahal katanya tempat ini cukup dekat dari Chiang Mai dan indah, tapi sejauh ini belum tertarik untuk ke sana. Mungkin kalau sudah ga di Chiang Mai baru deh pengen ke sana dan ke mari jadi turis hehehe. Beberapa tempat yang jadi tujuan wisata juga waterfall. Tapi karena saya selau bayangkan air terjun sipiso-piso, saya ga pernah senang dengan waterfall di sini hehhe.

Jadi kembali ke pertanyaan: kalau ke Chiang Mai, sebaiknya ke mana dong? Kalau ga punya banyak waktu mending wisata memperhatikan kehidupan orang lokal. Pergi massage, wisata kuliner dengan harga lokal, pergi ke pasar tradisional biar ditanya: where are you come from, dan ketika kita jawab Indonesia mereka akan bilang ooh Filipin atau Malay sambil bilang same nunjuk ke wajah mereka yang artinya: wajah kita sama mirip orang Thai. Kalau punya waktu banyak, ya bisa deh mengunjungi semua tempat yang disebutkan di atas.

So, dari tulisan ini, kira-kira kalian bakal tertarik ga datang ke Chiang Mai jadi turis? Kalau kata saya, jangan jadi turis deh, rugi. Mending tinggal aja di sini, hidup nyaman pasti betah deh (kecuali buat yang sangat strict dengan makanan harus label halal, ini bisa jadi hidupnya berasa repot). Tapi walaupun demikian, banyak juga kok restoran halal di Chiang Mai. Buktinya beberapa teman orang Indonesia di Chiang Mai yang muslim juga bisa betah berlama-lama tinggal menetap di Chiang Mai.

Di posting lain akan dibahas mengenai event-event khusus di Chiang Mai (festival bunga, Songkran dsb), supaya tahu kalau mau datang sebaiknya bulan apa.