Bikin CTF yang bener dong, jangan malu-maluin

Daripada sekedar menyindir (sindiran sudah dilakukan puluhan orang dari beberapa tahun lalu), sekalian lah saya posting terbuka bagi penyelenggara lomba Capture The Flag (CTF) yang super ngawur, terutama CTF Cyber Jawara. Beberapa CTF Indonesia sudah baik (seperti botani.cf Gemastik, atau idsecconf), tapi Cyberjawara ini sudah parah, jadi bahan tertawaan setiap tahun tetap saja tidak membaik (tahun ini saja sudah ada beberapa, misalnya ini, ini dan ini). Padahal ini adalah kegiatan ID SIRTII (Indonesia Security Incident Response Team on Internet Infrastructure)

ctf

Daripada menyindir secara halus dan sudah tidak berhasil, sekalian lah saya tulis di blog secara blak-blakan, supaya bisa dibaca oleh semua orang. Semoga cara ini lebih berhasil.

Sebenarnya sudah ada banyak petunjuk bagaimana menyelenggarakan CTF yang baik, misalnya dari PPP, salah satu team CTF terbaik di dunia. Tapi bagian yang diminta untuk avoid malah jadi bagian utama di Cyber Jawara.

Try to avoid these as much as possible:

Menurut saya CTF yang buruk akan merusak semua pihak:

  1. Para pemain CTF yang susah payah belajar dengan ikutan CTF Internasional tiap minggu tidak bisa dikenali di Indonesia karena tidak bisa menang main tebak-tebakan
  2. Para peserta tidak belajar hal yang baru dari CTF
  3. Pembuat soal mempermalukan diri dengan soal kacangan, dan terlihat tidak pernah ikutan CTF internasional, kredibilitasnya diragukan
  4. Kita jadi bahan tertawaan negara lain (pemenang ini akan masuk jadi team yang mewakili Cyber Sea Games).

Ketika di Amerika sudah melakukan riset dan kompetisi automated tool untuk CTF, kita masih main tebak-tebakan, soal exploitasi jarang diberikan, paling jauh reverse engineering dengan XOR.

Soal kriptografi juga kebanyakan hanya main tebak-tebakan. Tidak pernah ada soal yang memberikan source code (jadi semua soal adalah ciphertext only). Ciphertextnya pun sangat pendek. Mengutip dari dokumen saran dari PPP:

Give enough ciphertext for meaningful statistics (twenty ASCII characters can be almost anything). sering sekali soalnya cuma beberapa simbol atau beberapa angka, dan ternyata ini substitution cipher.

Use a guessable algorithm. With a classic cipher and a short amount of ciphertext, it may be very difficult to narrow it down. The challenge should be in breaking the crypto system, not figuring out what the crypto system is. Sistem kriptografinya yang selalu jadi tebakan, bukan breaking cryptonya.

Saran saya, kalo memang  yang seperti ini ingin dipertahankan, nama kompetisinya diganti saja: lomba paranormal cyber atau lomba dukun cyber.

Update 27 Agustus 2016: Menanggapi berbagai komentar di sini atau di social media yang menyatakan bahwa CTF CyberJawara ini bagus untuk pemula karena mereka jadi belajar sesuatu: Sebenarnya menurut saya justru ini salah satu bahayanya CyberJawara. Para pemula MENGIRA mereka BELAJAR sesuatu. Padahal yang dipelajari tidak terpakai, dan pemula akan MENGIRA bahwa beginilah dunia CTF sesungguhnya secara internasional. Parahnya lagi CyberJawara ini levelnya nasional, bukan level sekolah masak kualitasnya kalah jauh dibandingkan HSCTF, sebuah CTF dari anak highschool untuk highschool?

Kalau mau ikutan CTF yang lebih berkelas dan selalu terbuka silakan ikuti Botani CTF. Soalnya bervariasi dari mudah sampai sulit. Saya juga menyumbang beberapa soal untuk CTF Idsecconf yang sedang aktif saat ini.

Kalau penasaran saya sudah ikut CTF apa saja (dan writeup saya), silakan baca di blog team Rentjong dan team Play4fun, sedangkan yang saya ikuti individu ada di github saya. Jika ingin ikutan CTF (yang beneran), saya juga sudah menulis perlu belajar apa.

Mengenal ESP8266: SOC Wifi super murah dari China

Artikel ini adalah perkenalan SOC ESP8266, sebuah System On A Chip (SOC) berfitur WIFI yang sedang sangat populer. Salah satu penyebab kepopuleran ESP8266  untuk Internet Of Things (IOT) karena harga chipnya yang super murah: kurang dari 2 USD (sudah termasuk ongkos kirim dari China). Benda ini juga mudah diprogram menggunakan C, Python, Lua, Basic ataupun Wiring (dengan IDE Arduino).

Secara praktis, kemampuan IP networking akan memungkinkan kita membuat benda yang bisa dikendalikan dari Internet (contohnya: mematikan atau menyalakan sesuatu), mengirimkan data ke Internet (mengirimkan pembacaan sensor), atau memanfaatkan data dari Internet (menampilkan cuaca, menampilkan jam akurat saat ini).

Tahun 2014, sebuah perusahaan China merilis chip WIFI ESP8266, chip ini awalnya hanya dijual dalam bentuk modul (bernama ESP-01) agar sebuah microcontroller (misalnya Arduino) bisa mengakses WIFI melalui serial port dengan menggunakan AT Command Hayes.  Pada saat itu chip ini dokumentasinya minim sekali dalam bahasa Inggris, tapi satu hal yang pasti adalah: chip ini sangat murah. Karena sangat murah dan menarik, maka ada yang berusaha menerjemahkan datasheet lengkapnya.

20160131_155419
ESP-01

Ternyata chip ini memiliki spesifikasi yang luar biasa untuk harganya yang begitu murah. Chip ini memiliki CPU 32 bit Tensilica Xtensa LX106 80 Mhz, dengan RAM instruksi 64 KiB dan RAM data 96 KiB. Chip ini memiliki berbagai I/O (GPIO, SPI, I2C, I2S, dan bahkan sebuah ADC). Chip ini tidak memiliki storage (EPROM), tapi bisa dihubungkan SPI flash (biasanya 512 KiB – 4 MiB).  Beberapa bulan yang lalu Espressif menjual juga ESP8285 yang memiliki built in flash 1 MiB.

Saya tegaskan bahwa walaupun awalnya modul ESP-01 dijual sebagai modul WIFI untuk Arduino, sekarang ESP8266 ini bisa berdiri sendiri, tidak perlu Arduino, bahkan sebenarnya ESP-01 versi awal (dengan firmware bawaan dengan AT command) itu cukup konyol, karena ESP8266 lebih powerful dari Arduino (lebih cepat, lebih banyak RAM), tapi hanya sekedar jadi “pembantu” Arduino untuk bisa terhubung ke WIFI.

Espressif menyadari minat yang besar dari komunitas, dan mereka merilis SDK agar lebih mudah memprogram ESP8266 menggunakan bahasa C. Dengan SDK ini, berbagai bahasa lain bisa diimplementasikan juga.

Berbagai pihak menyadari betapa menariknya chip ini, dan membuat berbagai modul (ESP-02, ESP-03, dst) untuk memudahkan memanfaatkan semua I/O yang tersedia. Modul ESP-01 hanya memiliki beberapa pin yang terhubung ke chipnya, karena memang tujuan awalnya hanya untuk terhubung ke serial port saja, sedangkan modul ESP-XX yang lain umumnya memiliki lebih banyak pin.

Sekarang ini ESP8266 bisa diprogram dengan berbagai cara: langsung menggunakan compiler C + SDK dari Espressif, Menggunakan bahasa Wiring (menggunakan IDE Arduino), menggunakan Lua (NodeMCU), Python (menggunakan MicroPython) dan BASIC (Menggunakan ESP8266 Basic).

Jika menggunakan C + SDK atau IDE Arduino, setiap kali kita memprogram devicenya, maka dilakukan flashing ulang programnya. Untuk bahasa lain, kita bisa melakukan koneksi via serial port lalu mengetikkan program secara langsung secara interaktif (tidak permanen, akan hilang ketika restart) dan bisa kita simpan jika kita sudah yakin dengan isi programnya agar permanen.

IMG_4879
NodeMCU

Sebagian modul ESP sudah diberi chip USB to serial (biasanya CH340, chip USB to serial paling murah) sehingga bisa langsung diprogram dengan mencolokkan ke USB komputer. Untuk modul lain (seperti ESP-01), kita perlu menghubungkan kabel serial sendiri (bisa dengan USB to serial yang harganya kurang dari 2 USD). Driver untuk CH340 sudah tersedia untuk Linux (tidak perlu install), Windows (otomatis akan dikenali dan didownload otomatis oleh Windows), dan OS X (perlu install sendiri).

Kecepatan ESP8266 ini sangat tinggi (80Mhz, bisa dioverclock sampai 160 Mhz), sehingga memungkinkan untuk bit banging fitur lain yang tidak didukung, misalnya ada satu orang (cnlohr) yang menyiarkan gambar dengan ESP8266, membuat virtual USB device (seperti VUSB Atmega), dan bahkan memprogram ESP8266 sebagai ethernet controller. Anda juga bisa melihat berbagi proyek lain yang memanfaatkan ESP8266.

Dalam bidang security: ESP8266 dapat menginjeksikan paket raw WIFI sehingga bisa digunakan untuk WIFI jamming atau untuk mendeautentikasi semua client. ESp8266 ini juga bisa mendengarkan paket raw WIFI, jadi bisa juga dipakai untuk scanning.

Selain untuk IOT, untuk Anda yang tertarik pada arsitektur komputer yang tidak standar (bukan cuma Intel dan ARM), ESP8266 menggunakan core Xtensa dari Tensilica yang memiliki beberapa fitur yang menarik (misalnya memiliki sliding register window seperti SPARC).

ESP8266 saat ini masih memiliki kelemahan, misalnya RAM yang kecil mempersulit pemrograman fitur kompleks (terutama dengan bahasa high level), jumlah ADC (analog to digital converter) yang hanya satu, tidak punya DAC (digital to analog converter), tidak punya Pulse Width Modulation (PWM). Sebagian besar kelemahan ini tentunya bisa diatasi dengan chip tambahan (chip ADC/DAC, dsb). Saat ini sebagian orang mengatasi kelemahan di atas dengan menggunakan Arduino (ADC/DAC sudah tersedia).

Sebentar lagi (rencananya awal September), Espressif akan merilis ESP32, yang merupakan generasi selanjutnya dari ESP8266 dengan dual core dan RAM lebih banyak, (416 KiB) serta memiliki fitur bluetooth 4.2. Beberapa pihak sudah mendapatkan versi “preview” dari chip ini, dan sejauh ini tidak ada komplain negatif. Jika harganya tidak terpaut jauh dari ESP8266, Chip baru ini akan sangat populer.

Ini adalah salah satu proyek kecil iseng yang saya buat: mengendalikan LED yang disusun sirkuler menggunakan browser (bisa desktop/mobile).

IMG_5993

IMG_6006

Jika proyek Anda berikutnya butuh WIFI dan tidak perlu pemrosesan yang kompleks, tidak perlu Single Board Computer (SBC) yang relatif lebih mahal (CHIP harganya 9 USD, belum ongkir, Raspberry Pi 35 USD, belum ongkir) cukup ESP8266 saja. Atau gunakan beberapa ESP8266 yang mengupload data ke sebuah SBC untuk diproses lebih lanjut.

Catatan Elektronik, Pokemon, dan Satellite Receiver

Posting ini sekedar catatan beberapa oprekan beberapa waktu terakhir ini. Topiknya: elektronik (beberapa komponen elektronik yang saya beli), Pokemon (baik versi lama maupun Pokemon Go), dan Satellite Receiver baru saya.

Kadang saya melihat posting lama di blog ini, kadang saya banyak menulis dan kadang jarang sekali menulis. Di bulan ketika jarang menulis, saya kadang lupa apa yang dikerjakan bulan itu, jadi sekarang saya coba rangkum beberapa minggu terakhir.

Elektronik

Saya kadang iseng menambah lampu atau mekanisme lain di mainan Jonathan. Menambahkan suara biasanya merupakan hal yang repot. Beberapa waktu lalu waktu iseng browsing AliExpress, saya menemukan bahwa ada banyak chip melodi, gonggongan anjing, sirine yang dijual dengan sangat murah (1.0-1.7 USD untuk 5-10 chip, jadi harga per chipnya cuma 0.1-0.2 USD). Penggunaan chip ini juga sangat mudah: butuh power (3.0-4.5 VDC), saklar (untuk mentrigger mematikan/menyalakan suara), speaker (langsung saja ke speaker 8 ohm, tanpa perlu sirkuit amplifier apapun). Sebagian chip perlu sebuah transistor tambahan sebagian hanya butuh sebuah resistor.

 

HTB1sgbMKpXXXXXkXpXXq6xXFXXXO

Saya sekalian mencoba memesan juga touch module. Sebenarnya komponen saklar merupakan salah satu komponen paling mudah dipakai, tapi saya sering malas menyoldernya, dan kadang susah menempelkan saklar kecil di satu tempat, jadi saya coba membeli touch module. Harganya relatif murah, bisa ditekan dari depan maupun belakang, dan ada indikator led ketika touch terdeteksi. Selain satu tombol, ada versi 4 tombol dan lebih.

IMG_1372

 

Setelah monitor kecil saya dipindahkan ke mobil supaya Joshua bisa nonton (dan tidak melihat ke samping terus ke layar kakaknya). Saya perlu membeli layar kecil lagi untuk testing berbagai SBC. Ketika Jonathan melihat layar kecil ini, dia malah ingin itu jadi jam di kamarnya. Jadi saya setup menjadi jam paw patrol (pake chrome kiosk mode + HTML/JS).

Jam ini jadinya mahal sekali, tapi nanti saya berencana menambahkan fitur lain.

20160811_070502 (1)
Gambarnya akan berubah tiap beberapa menit

Pokemon

Waktu kami liburan di Indonesia, Pokemon Go sudah ada di sana, tapi ternyata ketika sampai sini, bisa login, tapi belum ada apa-apa (semua mapnya blank). Saya confirm dengan membaca berita bahwa Pokemon Go sempat aktif di hari pertama, tapi kemudian dinonaktifkan di Thailand.

Saya teringat game Pokemon yang ada di Nintendo DSi saya, jadi saya coba ajari Jonathan Pokemon Diamond & Peal (tahun 2007). Dengan homebrew GBC emulator, saya juga tunjukkan Pokemon Yellow (tahun 1998). Ternyata Jonathan bisa enjoy game ini juga. Dia bisa cepat mengerti mekanisme gamenya.

IMG_1363

Seminggu yang lalu ketika kami sedang ke Bangkok untuk mengurus paspor Risna dan Jonathan, Pokemon Go akhirnya tersedia di Asia Tenggara. Saya dan Risna menginstall game ini di HP masing-masing. Sekarang ini kami jadi sering jalan-jalan ke luar untuk menangkap Pokemon dan menetaskan telurnya. Ketika kembali saya perlihatkan game pokemon yang lama, Jonathan segera mengenali nama-namanya, seperti Pidgey, Rattata, Magikarp, dsb.

13891860_10155222768478538_8049029765484130913_n

Sebagai programmer, saya cukup penasaran dengan API Pokemon Go-nya. Setelah API-nya sempat ditutup, para reverser berhasil membongkar Unknown6 dan membuat API-nya jalan lagi. Setelah membuat account baru, saya mencoba Pokemon Map. Lumayan juga untuk memutuskan apakah akan jalan-jalan ke Horizon Park atau Night Safari (di Horizon Park cuma ada satu Pokestop).

horizonpark
Horizon Park
night-safari
Night Safari

Saya juga menjalankan Pokemon Bot untuk sekedar menaikkan level dan mendapatkan Lure Module. Lure Module ini akan dipakai untuk menarik pokemon ke pokestop dan akan bisa dinikmati oleh account asli kami. Jadi niatannya pake bot nggak untuk take over PokeGym. Setelah melihat API-nya, bisa dilihat beberapa hal detail seperti misalnya bahwa foto tiap Pokestop akan didownload penuh (versi foto biasa/rectangle, bukan versi bulat yang muncul di App-nya)

pokebot

Membaca source botnya juga cukup menarik. Hanya dalam beberapa minggu mereka sudah mempelajari berbagai batasan Pokemon Go (misalnya berapa kecepatan maksimum berjalan untuk menetaskan telur) dan mengimplementasikan berbagai fitur menarik (berjalan mengikuti path tertentu, berbagai nilai random untuk mensimulasikan behavior manusia).

Dari API dan protokol Pokemon ini, bisa diketahui bahwa: kita tidak perlu mengirimkan foto dari kamera (bahkan mode AR juga bisa dimatikan di app resminya, jadi jika kita tutup kameranya dengan lakban pun pokemon ini masih bisa dimainkan). Aplikasi ini memang mengirimkan koordinat kita, tapi hanya ketika berjalan di foregound, masih masuk akal (dibandingkan Google Now yang selalu memonitor posisi kita, termasuk di mana kita parkir terakhir kali).

Sattelite Receiver

Kami memasanga antenna parabola ketika orang tua saya akan datang ke sini, supaya mereka bisa melihat siaran Indonesia. Antena ini dipasang dengan paket dekoder standar. Setelah itu TV ini jarang dipakai. Kami sempat merekam cukup banyak episode Paw Patrol bahasa Indonesia supaya Jonathan bisa belajar Bahasa Indonesia, tapi kemudian Global TV selalu mengulang siarannya, jadi kami tidak merekam lagi.

TV ini jarang kami akses salah satunya karena harus berada di depan TV di ruang tamu, plus harus switch input HDMI dulu. Jadi saya membeli dekoder baru (di Aliexpress) yang mendukung streaming langsung. Sekarang kami bisa menikmati TV Indonesia dari Android maupun PC, serta bisa juga langsung diakses dari Kodi.

IMG_0997

Di Android, aplikasi DreamPlayer bisa dipakai, di desktop bisa memakai VLC yang cross platform. Sesekali jika ada teman yang bilang: ada sesuatu yang menarik di TV, saya bisa mengaksesnya dengan mudah.

 

2016-08-10
“Google Maps”, “Pokemen”

Sistem operasi yang dipakai adalah Linux (OpenATV), jadi bisa dicustomize. Saya juga bisa menjalankan dvbsnoop untuk melihat paket data raw yang diterima oleh satelit ini. Tapi sampai saat ini saya belum ngoprek lebih jauh.

dvbsnoop

Lain-lain

Setelah dulu saya mencoba beli helikopter seharga 0.99 USD karena beruntung di Banggood.com (walau “keberuntungan” nya dibantu oleh skrip), saya membeli quad copter kecil. Sebenarnya saya belum akan banyak memainkan ini (masih cukup bahaya ketika dipegang Jonathan, bisa menabrak atap, masuk ke halaman orang, dsb), tapi ini saya beli sekarang karena khawatir Thailand akan memperketat import quadcopter di kemudian hari

20160812_074606.jpg

Waktu di Don Muang ketika kembali ke Chiang Mai, saya coba RTL SDR dan lucu juga dapet nama flight TEST1234

bandara-donmuang

 

 

Hacking In App Purchase

Di artikel ini saya akan membas teknis hacking In App Purchase (IAP) Sebelum membahas teknis hacking IAP, saya perlu menegaskan dulu bahwa saya tidak setuju dengan berbagai bentuk pembajakan. Di artikel ini saya akan menyinggung Apple App Store, tapi pembahasan akan lebih banyak ke Android (karena sekarang ini saya lebih banyak memakai Android). Saya sengaja tidak melink ke berbagai tool hacking yang saya sebutkan di sini, silakan dicari sendiri.

Jangan Membajak

Sebagai developer saya tahu betapa tidak enaknya jika karya kita dibajak. Saya selalu berusaha membeli semua hal secara legal. Semua software yang saya pakai saya beli atau memakai versi gratis. Saya membeli OS Windows, membeli Office (sekarang subscribe Office 365), dan juga membeli tools-tools yang memang berguna saya, misalnya saya membeli/subscribe  IntelliJ ultimate, VMWare Fusion, dsb. Saya juga berusaha membeli segala macam produk digital lain, seperti musik (dari iTunes), film (subscribe NetFlix, atau menonton dari Youtube), buku (membeli dari Amazon Kindle ataupun Google Play Books).

Tapi khusus untuk IAP dalam game, saya sering merasa pelit. IAP di aplikasi untuk meremove restriksi menurut saya bagus karena berfungsi sebagai trial. Contoh: saya memakai JuiceSSH di Android, jika kita ingin versi pro, kita hanya perlu unlock saja dengan IAP setelah mencoba bahwa itu cocok untuk kita.

IAP dalam game terlalu berusaha menarik uang dari user. Bahkan sekarang istilahnya menjadi Pay To Win (PTW). Sudah ada banyak kasus di mana orang tua harus membayar banyak karena mereka tidak paham setting untuk membatasi IAP ini.

Untuk game yang sifatnya single player, saya biasanya akan mencoba menghack gamenya (saya tidak mau jadi orang mengesalkan yang menang di game multiplayer karena curang). Di game dengan IAP saya akan membeli sebagian item yang masuk akal (sebagai bentuk dukungan untuk developer). Contoh: Cut the Rope 2 saya ingin bisa main terus tanpa menunggu setelah game over sekian kali, jadi saya beli fitur ini, tapi jumlah koinnya saya hack.

Buat apa hacking IAP Game?

Hacking IAP di game ini banyak gunanya bagi saya:

  1. Melatih skill Reverse Engineering. Meski sudah ada beberapa tools untuk hacking IAP, saya lebih suka melakukan dengan cara manual.
  2. Mengupdate ilmu, agar jika kita membuat game atau aplikasi, tidak akan mudah dihack IAP-nya
  3. Membuat kita cepat bosan dengan game tersebut karena sudah memenangkan semuanya, plus anak saya gembira bisa mencoba semua fitur gamenya
  4. Hemat uang

Cara Kerja IAP

IAP di berbagai platform bekerja dengan cara seperti ini:

  1. Developer mendaftarkan item apa yang bisa dibeli dalam sebuah aplikasi
  2. Ketika user mengklik buy di sebuah aplikasi, kontrol dialihkan ke app store (Play Store/AppStore)
  3. App store yang akan mengkonfirmasi pembelian, menagih ke user (bisa dari kartu kredit, potong pulsa, dsb)
  4. App store mengembalikan receipt ke aplikasi
  5. Aplikasi memvalidasi pembelian

Ada beberapa “benda” yang bisa dijual. Benda pertama adalah yang sifatnya benar-benar virtual, seperti misalnya koin dalam game, benda ini bisa dihadirkan tanpa bantuan server. Benda kedua ada wujudnya secara digital dan sumbernya bukan dari aplikasi itu sendiri, misalnya ebook yang perlu didownload dari server.

Local Hacking

Salah satu hack pertama yang dilakukan pada ketika Apple memperkenalkan IAP adalah menggunakan Fake App Store. Caranya begini: request yang harusnya dikirim ke App Store diintercept secara lokal di device, and selalu dikembalikan: Sukses. Bug seperti ini sudah ditutup, tapi variannya masih ada.

Di Android, aplikasi menggunakan Intent untuk melakukan komunikasi. Jika kita tidak menyatakan package mana yang harus melakukan aksi tersebut, maka permintaan bisa diproses aplikasi lain (contohnya: buka file PDF ini, maka akan dimunculkan dialog kepada user untuk memilih PDF reader mana yang akan dipakai).

Salah satu hack yang ada adalah CreeHack. Dia akan mendaftarkan diri sebagai handler IAP. Cara ini bisa dilakukan pada device yang tidak diroot, tapi hanya aplikasi tertentu di mana developer kurang memperhatikan security. Seperti tertulis di panduan dari Google:

iap-Screenshot from 2016-08-02 10-09-56

Cara mengatasi hal seperti ini adalah dengan menggunakan server eksternal untuk melakukan pemeriksaan IAP. Jadi aplikasi mengirimkan request pembelian ke App Store, lalu Appstore akan mengembalikan receipt. Karena aplikasi bisa saja dipatch, maka kita perlu server eksternal yang memvalidasi ke servernya App Store apakah benar receipt tersebut terdaftar. Tentunya asumsinya hacker tidak bisa menjebol server eksternal kita.

media-20160802.png

Untuk benda berwujud buku, video dan konten digital lain, tentunya pemeriksaan di server ini wajib dilakukan. Beberapa tahun yang lalu, aplikasi seperti Scoop tidak melakukan pengecekan di server, hasilnya banyak orang yang menghack scoop untuk mengambil majalah secara gratis.

 

Data Hacking

Untuk benda kategori pertama (tidak butuh remote server), data akan disimpan secara lokal, contohnya: jumlah koin saat ini atau apakah level sudah dibuka. Jika data tidak dilindungi dengan hashing atau enkripsi tertentu, maka ini akan mudah diubah.

Contohnya: saya membeli Plant vs Zombie yang pertama, ada versi bayar yang tanpa iklan dan tanpa IAP. Untuk mendapatkan banyak koin, kita cukup mengedit file data. Di Android yang sudah diroot, penggantian data bisa dilakukan dengan mudah. Di Android yang tidak diroot, data bisa diubah dengan fitur backup/restore (asalkan kita enable developer mode).

adb backup -f namafile.ab com.namapackage

File bisa dikonversi dengan Android Backup Extractor menjadi file tar.

java abe.jar unpack namafile.ab namafile.tar

Ketika mengupdate file tar, kita harus membuatnya lagi dengan urutan file yang sama, jadi ini perlu disimpan

tar tf namafile.tar > package.list

Setelah itu kita bisa mengekstrak filenya, dan mengeditnya:

tar xf namafile.tar

Setelah selesai, kita pack lagi

tar cf restore.tar -T package.list

Setelah itu kita konversi lagi menjadi format Android backup

java -jar abe.jar pack-kk restore.tar restore.ab

Dan kita kembalikan ke device:

adb restore restore.ab

 

Screenshot_2016-08-01-23-01-40

 

Memory Hacking

Data yang ada memori juga bisa dihack dengan berbagai tool. Saya jarang melakukan ini karena perlu Android yang sudah diroot.

Cara kerja tool ini biasanya begini: kita masukkan skor atau koin saat ini, lalu tool tersebut akan mencari semua alamat memori dalam game yang berisi angka tersebut. Kita mainkan gamenya sebentar sampai nilai skor atau koinnya berubah, lalu kita scan lagi, sekarang tool tersebut akan memfilter lagi memori yang tadi. Ini bisa diulangi sampai kita mendapatkan alamat memori yang berisi koin atau skor dan langsung bisa diubah. Sebagian orang juga sudah menshare alamat memori mana yang perlu diubah sehingga langkah di atas bisa diskip.

Sebagai game developer, Anda bisa memakai representasi yang berbeda sampai titik di mana skor/koin itu ditampilkan. Misalnya skor selalu disimpan dalam 17 + skor (17 hanya sekedar angka sembarang), dan ketika ditampilkan, kita kurangkan lagi 17). Tentunya cara yang lebih rumit bisa dilakukan, tidak sekedar menambah dengan sebuah angka.

Protocol Hacking

Kadang data yang datang dari Internet bisa kita modifikasi supaya aplikasi membuka fiturnya atau memberi koin. Contoh: beberapa aplikasi memberi reward jika kita menonton video iklan (atau me-like fb, atau melakukan aksi lain) dan jumlah koin ini diminta via jaringan.

Dengan mengubah response dari server (saya menggunakan OWASP ZAP, tapi ada banyak tool lain yang bisa melakukan ini) maka saya bisa mendapatkan puluhan juta koin dari menonton satu video (biasanya hanya 15 ribu koin). Anda bisa melihat betapa mahalnya koin (harga dalam rupiah karena saya menggunakan account Indonesia), 80 juta koin harganya hampir 800 ribu rupiah, sedangkan 80 juta koin ini tidak cukup untuk membuka semua fitur game (semua kendaraan + semua level + semua upgrade mesin).

Screenshot_2016-08-01-20-00-51

Karena jumlah pembelian koin maksimum adalah 80 juta koin, saya coba mengganti supaya tiap kali menonton video, saya mendapatkan 80 juta koin.

Screenshot_2016-08-01-22-28-20

App Hacking

Cara terakhir jika mengubah data tidak bisa dilakukan (karena prokteksi hash dan atau enkripsi) adalah dengan app hacking. Level pertama hanya membaca kode saja, untuk mengetahui key yang dipakai. Ini kadang tidak berhasil, contohnya begini, untuk mengaktifkan fitur tertentu, app mengirimkan IMEI + receipt ke server, dan server mengenkrip dengan private key nya (IMEI + kode aktivasi). Sekarang app bisa memvalidasi dengan mengecek menggunakan public keynya, tapi kita tidak bisa menciptakan data ini karena tidak tahu private key server.

Dalam kasus seperti itu, level kedua adalah: patching aplikasinya. Untuk bisa patching aplikasinya, tentunya kita harus melakukan reverse engineering. Ini dilakukan dengan  membaca smali atau assembly (jika app-nya menggunakan native code seperti Cocos2D-x), sebagian besar game saat ini ditulis dalam native code agar portabel ke platform iOS.

Jarang sekali saya sampai harus menggunakan cara ini, karena meskipun pasti selalu berhasil, di versi berikutnya ketika mereka mengubah hal kecil app ini harus dipatch lagi. Patching juga tidak mudah jika harus dilakukan  jika aplikasi sudah diobfuscate atau di level native code (pacthing kode Java/Smali lebih gampang) .

Binary APK Android tidak dienkripsi, jadi kita bisa dengan mudah mendapatkan binarynya mempatchnya dan menandatangani ulang APK-nya. Anda bisa membaca lebih lanjut soal ini di tulisan saya: Reverse Engineering APK Android.

Untuk iOS agar bisa patching app, Anda perlu mendapatkan binary executable yang tidak dienkrip (menggunakan Clutch atau sejenis di device yang sudah dijailbreak). Setelah itu app bisa dipatch dan disign ulang (dengan iResign misalnya) agar bisa dijalankan di device iOS lain yang tidak dijailbreak.

Di Android ada aplkasi Lukcy Patcher yang mengotomasi patching dasar aplikasi yang membutuhkan IAP. Tentunya tidak semua aplikasi bisa dipatch dengan cara seperti ini. Perlu diperhatikan juga bahwa saya belum pernah mengecek security Lucky Patcher ini.

Sebagai catatan: JANGAN percaya dengan APK yang sudah dimodifikasi orang, kecuali Anda bisa mengetahui dengan tepat apa modifikasinya. Kasus terbaik adalah mereka cuma menambahkan atau mengganti iklan. Kasus terburuk: mereka bisa menginstall Trojan di HP Anda.

Sebagai Developer

Jika item Anda memang berharga, misalnya untuk aplikasi penjual ebooks, tiap buku berharga karena penerbit, penulis harus dibayar, maka buatlah sistem pengecekan IAP yang sebagus mungkin sejak awal.

Jika Anda membuat game, dan yakin game itu akan terkenal (misalnya karena sudah ada dana marketing sangat besar), maka siapkan juga proteksi IAP yang baik sejak awal untuk menjaga investasi Anda.

Untuk Anda yang hanya membuat game casual, silahkan buat strategi yang baik bagi Anda. Mengamankan IAP butuh waktu (dan juga server eksternal). Sebagian game yang tadinya kurang populer, mereka awalnya tidak menggunakan proteksi yang baik (dan ini mungkin membuat banyak orang jadi ingin bermain), tapi ketika menjadi populer, mereka memperketat pemeriksaan IAP.

Bacalah berbagai artikel mengenai hacking IAP, dan lakukan berbagai langkah pengamanan, kadang ada sesuatu yang sederhana yang bisa dilakukan untuk menambah keamanan. Contoh paling sederhana adalah selalu memanggil setPackage di Android, dengan ini hack seperti CreeHack tidak akan bekerja. Contoh lain adalah menggunakan obfuscator agar kode tidak bisa dengan mudah dicari.

Setiap beberapa bulan, ketika membuat fitur baru, ubahlah sedikit kode pemeriksaan IAP Anda (misalnya mengubah nama method, menambahkan method sampah), supaya orang bosan berusaha menghack aplikasi Anda.

 

Password

Password adalah metode autentikasi yang paling umum. Password memiliki banyak kelebihan, tapi juga banyak kekurangan. Contoh kelebihannya: sangat sederhana, mudah dishare, tidak butuh hardware khusus. Sementara itu kelemahan password: mudah dishare artinya bisa disalin dengan mudah, bisa dibruteforce, bisa terjadi password reuse, dsb.

Saat ini masalah yang sangat umum adalah ini: orang memakai password yang sama di berbagai layanan. Jika satu layanan jebol, dan password Anda ketahuan untuk semua situs lain (bisa dengan bruteforce/dictionary attack, bisa juga situs itu menyimpan plaintext password). Banyak situs kecil yang passwordnya bocor (atau mungkin bahkan pemilik situsnya jahat), tapi jangan kira situs besar tidak bisa bocor.

Selain kebocoran dari berbagai situs, password juga kadang bisa didapatkan dari mengendus (sniff) paket jaringan.  Password juga bisa dengan mudah didapat dari menggunakan keylogger (program atau hardware yang menyimpan setiap tombol yang Anda tekan).

Ada berbagai solusi yang ditawarkan untuk masalah password ini, dari mulai tidak menyimpan password, menyimpan password, mengganti atau menambahkan autentikasi lain.

Solusi pertama adalah: tidak menyimpan password. Dasarnya adalah: membuat “formula” yang Anda sendiri yang tahu, jadi bisa dengan mudah menghasilkan password untuk berbagai situs. Saya tidak akan menjelaskan semua formula ini, tapi kita lihat saja beberapa contohnya.

Cara pertama: XKCD, silakan dibaca sendiri komiknya ini (sumber: https://xkcd.com/936/ )

Password Strength

 

Ada pembahasan teknis mengenai ini, misalnya di sini:

http://security.stackexchange.com/questions/6095/xkcd-936-short-complex-password-or-long-dictionary-passphrase

Hal yang paling praktis yang membuat sistem ini sulit dipakai: banyak situs yang hanya mengijinkan password MAKSIMAL 8 karakter. Jadi skema ini tidak bisa selalu dipakai. Untuk kasus tertentu, misalnya untuk password di Linux, ini bisa dipakai. Saya sendiri memakai varian ini di berbagai server Linux yang saya kelola.

Cara berikutnya adalah memakai formula untuk menghasilkan password dari sebuah master password, contohnya di sini. Tentunya Anda harus cukup rajin untuk mempraktikkan ini. Varian dari ini adalah menggunakan tool sha (atau hashing lain), seperti dibahas di sini.  Yang perlu diperhatikan adalah: hati-hati jangan meninggalkan jejak ketika memakai tool semacam ini (misalnya di shell/bash history) karena semuanya akan jebol.

Saya sempat memakai varian cara formula, tapi ini juga memiliki kelemahan: sebagian situs ternyata masih mengharuskan requirement password complexity: harus ada huruf besar, huruf kecil, angka, simbol. Tadinya saya ingin memecahkan persoalan itu dengan selalu menambahkan 123!. Ternyata: ada situs yang TIDAK MENGIJINKAN SIMBOL sebagai password.  Sekarang saya harus mengingat: situs yang ini boleh nggak pake simbol? Saya baru saja nemu situs seperti ini: readycard yang tidak membolehkan simbol ketika memasukkan password, tapi harus gabungan huruf dan angka dan perlu huruf kapital.

Berikutnya: kadang password kita dipaksa diganti oleh situs karena situs tersebut baru saja kebobolan. Sekarang kita harus menambahkan lagi “versi” di formula, supaya bisa membuat password versi 2. Lebih parah lagi jika kita harus mengganti password berkala. Baru-baru ini ada yang berusaha membrute force password iCloud saya, dan saya disuruh mengganti password baru dan password ini tidak boleh sama dengan password sebelumnya. Ini baru sekali di iCloud, tapi sudah terjadi puluhan kali pada account BBM saya, ada yang brute force yang membuat saya harus mereset password. Parahnya di iCloud, saya tidak bisa menggunakan password yang sama dengan setahun terakhir.

Hal seperti ini terjadi beberapa kali: menghitung password berdasarkan formula: tidak bisa login, coba sekali lagi dengan karakter spesial, ternyata gagal, coba versi 2, ternyata gagal.  dan account diblok sementara. Ini kadang terjadi karena websitenya meminta “userid” tapi ternyata hanya bisa login dengan email.

Untuk berbagai situs tidak penting, akhirnya saya memakai password yang sama. Saya mendaftar di puluhan forum demi bisa mendownload sebuah file (banyak file/program yang semi illegal yang hanya bisa didownload setelah login). Tapi bahkan situs nggak penting sekalipun kadang diretas, jadi harus ganti password, dan seringnya tidak boleh pake password yang sama. Jadi bahkan saya punya beberapa password sederhana untuk situs nggak penting.

Setelah makin pusing dengan batasan berbagai situs, tentunya langkah yang masuk akal adalah: mengingat password di browser. Cara ini paling mudah, tapi juga memiliki risiko besar: jika ada yang berhasil mencuri file password, atau ada yang berhasil membajak browser Anda (contoh kasus Team Viewer), maka autofill ini akan membahayakan. Saat ini browser bisa mensinkronisasi password Anda, jadi misalnya ketika login di Chrome  PC passwordnya bisa diingat juga ketika kita menggunakan Chrome versi Android.

Dari semua masalah tersebut, lahirlah beberapa tool untuk password management. Beberapa sifatnya open source dan offline, beberapa sifatnya online. Yang sifatnya offline (seperti KeePass) bisa dibuat semi online dengan menggunakan layanan seperti DropBox atau Google Drive.

Sebagian orang merasa takut menggunakan password manager. Jika ada yang mengakses file password Anda: siapapun bisa membrute force secara offline. Mencoba-coba jutaan password per detik bisa dilakukan tanpa takut diblok. Berbeda dengan mencoba membrute force password facebook Anda secara online (akan diblok).

Password manager offline boleh dibilang paling aman dan nyaman. Tapi jika Anda memiliki banyak mesin dan sering berpindah-pindah, maka Anda harus mau repot masalah sinkronisasi file password.

Password manager online, seperti misalnya LastPass memiliki kenyamanan yang tinggi: gampang sekali memasukkan password di browser, atau bahkan memasukkan password untuk app Android (mendukung fingerprint). Tapi layanan semacam ini sudah pernah kebobolan dan memiliki bug.

Kesimpulan saya saat ini: tidak ada cara sempurnya mengamankan password. Saya menggunakan berbagai campuran metode di atas untuk diri saya gabungan antara keamanan dan kenyamanan. Saya memakai lastpass untuk kemudahan mengingat berbagai password di situs yang tidak penting.

Saya memakai metode khusus untuk menghasilkan password di situs penting, tapi bisa dilakukan di kepala saya. Dengan lastpass, saya tidak perlu mengingat password sebuah situs dan aturannya, dengan tidak memakai metode khusus saya di semua situs (hanya di situs penting saja), maka kemungknan metode saya ketahuan juga makin kecil.

Saya juga menggunakan Google Account atau Facebook Account untuk login ke berbagai aplikasi. Khusus untuk Google, biasanya saya memakai account tambahan yang tidak penting (kita bisa login ke beberapa Google Account baik di browser maupun di Android). Facebook login ini sejauh ini aman, dan kita bisa dengan mudah merevoke akses sebuah situs dari halamannya.

Saya juga menggunakan pengamanan ekstra: mengaktifkan two factor authentication di semua layanan yang memungkinkan plus mengaktifkan semua notifikasi keamanan. Saya pernah mengimplementasikan OTP untuk jam pintar saya, dan bahkan jam yang belum benar-benar pintar.

Saya juga memakai Teensy U2F key di berbagai situs yang mendukung itu, dan bahkan mengimplementasikan sendiri protokolnya (dan sudah ada yang memakai ini di Kickstarter). Untuk koneksi ke server saya sendiri, saya akan menggunakan public key (jadi tidak perlu password).

Tentunya semuanya yang sudah saya lakukan itu bukan jaminan keamanan, jika kita sedang “sial” sebuah bug di web server atau librarynya (contoh bug heartbleed OpenSSL) bisa membuat semua usaha di atas menjadi sia-sia.

Menurut saya, minimal untuk Anda yang nggak mau repot: punyalah beberapa password. Segala macam layanan yang “penting” atau “ada duitnya” (misalnya saldo gojek) jangan sampai passwordnya sama dengan layanan lain. Untuk yang super penting (seperti online banking), jangan disamakan dengan password manapun.

 

Kesan pertama CHIP dan PINE64

Posting ini hanya sekedar review singkat, kesan pertama memakai CHIP dan PINE64. Semoga di lain waktu bisa saya buat posting baru yang lebih detail.

Di hari pertama kerja setelah liburan, saya disambut oleh dua paket yang tiba di kantor: Pine64 dan CHIP. Kedua benda ini sudah saya preorder lama sekali. CHIP saya pesan di Cyber monday 30 November 2015, dan PINE64 saya pesan 20 Maret 2016.

CHIP

Saya pertama kali mendengar CHIP dari Kickstarter yang fenomenal (2 juta dollar), tapi masih agak ragu mendukungnya karena agak mengkhawatirkan. Tapi akhirnya karena penasaran saya beli juga di Cyber Monday. Di Cyber Monday ada diskon CHIP, tadinya 9 USD menjadi 8 USD, jadi saya memesan dua dengan ongkos kirim 6 USD, jadi totalnya 22 USD untuk dua CHIP. Saat ini saya cek di website getchip.com harganya 9 USD belum termasuk kabel composite (5 USD), case (2 USD) dan ongkos kirim. Ketika saya menerima CHIP, di dalamnya sudah termasuk ada kabel composite dan case yang sudah dipasang, jadi saya benar-benar beruntung memesan jauh hari.

20160711_145513

Secara singkat CHIP ini adalah sebuah SBC berukuran mini dengan built in bluetooth, WIFI, NAND flash, USB, dengan RAM 512 MB. SOC yang dipakai benda ini adalah Allwinner R8. Tidak ada slot SD/MicroSD card di CHIP, dan tidak ada konektor Ethernet. Saat ini hanya ada satu model CHIP.

Karena sudah memiliki built in flash storage, maka kita tidak perlu mendownload atau mencari image lalu menuliskannya ke SD Card. Begitu dibuka, kita bisa mencolokkan CHIP ke monitor dan langsung bisa diboot dengan power dari micro USB.

Kendala pertama untuk CHIP adalah: konektor output built in hanya composite, sedangkan monitor komputer saya hanya bisa VGA, HDMI, dan DP. Sebenarnya ada board terpisah untuk menampilkan output CHIP via konektor VGA atau HDMI, tapi harganya mahal untuk VGA  harganya 10 USD, dan untuk HDMI harganya 15 USD, lebih mahal dari CHIP itu sendiri. Karena saya pelit, saya tidak membeli keduanya.

Untungnya saya ingat kalo masih punya TV kecil yang tadinya dipakai di mobil (sekarang yang di mobil sudah diganti yang agak besar).

IMG_0920

Karena hanya memiliki satu port USB host, maka saya memakai hub agar bisa memakai mouse dan keyboard sekaligus. Sebenarnya benda ini memiliki bluetooth, jadi teorinya bluetooth mouse dan keyboard bisa dipakai, tapi karena saat ini saya tidak punya keduanya, saya pakai USB saja.

Sebenarnya ada cara lain untuk mengakses CHIP ini, yaitu via USB di komputer, CHIP akan dianggap sebagai serial port dan bisa kita akses dari program terminal yang bisa mengakses serial port seperti Putty, Minicom, Screen dsb.  Saya ingin menghubungkan ke monitor karena penasaran seperti apa GUI-nya dan seperti apa proses bootnya.

ttylogin.png

Ukuran NAND flash-nya memang hanya 4GB, tapi yang dipakai OS hanya 528 MB, jadi cukup untuk menyimpan banyak hal tanpa perlu storage external. Kebanyakan SBC lain tidak memiliki built ini NAND (misalnya Raspberry Pi). Di satu sisi memiliki built in NAND ini sangat praktis: tidak perlu download image untuk bisa memulai, tidak perlu membeli SD Card terpisah, performanya lebih bagus dibandingkan SD Card. Tapi di lain pihak memiliki SD Card juga ada kelebihannya: mudah berganti OS (hanya perlu menukar SD Cardnya), kapasitasnya bisa kita beli sesuai keinginan kita.

Built in WIFI dan Bluetooth menurut saya akan sangat berguna untuk berbagai proyek. Salah satu yang kepikiran oleh saya adalah mengubah keyboard apapun menjadi bluetooth keyboard (misalnya mechanical keyboard biasa supaya jadi bluetooth enabled). Port micro USB di board ini sebenarnya adalah port OTG, jadi teorinya benda ini juga bisa mengemulasikan device USB apa saja.

Beberapa hal sudah saya lihat tapi belum dicoba, misalnya untuk melakukan flash ulang kita bisa menggunakan browser Chrome (ada API bagi Chrome Extension untuk bisa mengakses USB sehingga ini dimungkinkan). Ada juga konektor untuk batere dan ada sirkuit built in sehingga baterenya akan dicharge ketika kita mencolokkan micro USB ke CHIP.

Secara singkat, CHIP ini cocok sekali untuk menambahkan kapabilitas IOT pada benda lain. Harganya murah, ukurannya kecil, sudah ada konektivitas bluetooth dan WIFI, dan bahkan bisa menggunakan batere dengan sirkuit charging yang sudah built-in. Secara umum CHIP mendapatkan review yang positif dari banyak pihak, dan cukup cocok untuk pemula. Cocok untuk pemula di sini maksudnya: cara mulai memakainya mudah, komunitasnya cukup besar dan baik.

Kelemahan CHIP adalah jika kita butuh sesuatu yang ekstra maka harganya akan menjadi cukup mahal. Contoh: jika butuh ingin dihubungkan ke TV melalui HDMI maka kita perlu menambah  15 USD lagi. Jika ingin dihubungkan ke beberapa USB maka perlu hub (contohnya jika storage tidak cukup maka perlu USB disk atau USB Card reader + memory card-nya).

Jika keperluannya untuk menonton film atau sebagai media center, maka pasti butuh HDMI, jadi harganya minimal 9 USD (chip) + 15 USD (HDMI adapter) = 24 USD. Dengan 11 USD ekstra Anda bisa membeli Raspberry Pi terbaru dengan RAM 1 GB dan sudah quad core, memiliki WIFI dan Bluetooth, dan memiliki 4 port USB.

Saya sedang mempelajari lebih lanjut dan mempertimbangkan apakah akan membeli PocketCHIP atau tidak (saat ini sedang promo, 49 USD, harga biasanya 69 USD). PocketCHIP ini adalah casing berupa layar dan keyboard CHIP yang bisa dikantongi. Benda ini cukup unik karena SBC yang lain tidak menawarkan solusi seperti ini.

PINE64

Device berikutnya yang saya test adalah PINE64. SBC ini muncul di kickstarter dan cukup sukses (1.7 juta USD terkumpul). Review awalnya cukup negatif, tapi saya sudah terlanjur pesan. Alasan utama membeli benda ini adalah karena saya ingin bereksperiman dengan assembly ARM64 (board yang lain waktu itu masih sangat mahal).  Dari jumlah yang dikumpulkan di kickstarter (yang artinya banyak orang memiliki benda ini), saya berharap bisa terbentuk komunitas yang kuat seperti Raspberry Pi.

Sebagai catatan: saat ini meski belum didukung resmi, Raspberry Pi 3 sudah bisa menjalankan Linux ARM64. Jadi jika ingin sekedar belajar ARM64, Raspberry Pi3 juga bisa dipakai.

Ada beberapa opsi PINE64, memorinya bisa 512 MB, 1GB atau 2GB, dan apakah kita ingin ekstra WIFI/Bluetooth (semuanya memakai SOC Allwinner A64). Versi 1G dan 2GB memiliki ethernet gigabit (keduanya ini disebut juga PINE A64+). Karena tujuan saya ingin belajar di sisi software, saya pilih RAM terbesar yaitu 2GB, dengan harga 29 USD (RAM  yang terkecil 512 MB cuma 15 USD). Saya beli juga modul WIFI/Bluetooth (+10 USD), karena mungkin nanti berguna.  Ongkos kirimnya cukup mahal: 12 USD ke Thailand.

20160711_101658

Ketika saya membuka kotaknya, kesan pertama saya adalah: wow besar sekali ukurannya, lebih besar dari SBC lain yang saya punya. Dengan ukurannya yang besar, jelas ini kurang cocok untuk IOT, lebih cocok di taruh di atas meja sebagai server, media player atau desktop. Ternyata opsi WIFI/BT diberikan dalam bentuk board yang perlu kita pasang (sangat mudah, tidak mungkin terbalik).

IMG_0921

Untuk testing, saya mendownload Debian tanpa desktop. Saya tidak berharap akan langsung sukses mengingat review awal cukup jelek, tapi ternyata booting bisa lancar dan langsung muncul pesan boot di layar via konektor HDMI. Ini berbeda dengan ketika saya mencoba Orange Pi, kadang booting berhasil tapi tidak tampil apa-apa di layar walau bisa diakses via jaringan.

pine64

Saya baru mencoba benda ini sebentar sekali, jadi belum bisa berkomentar banyak. Kesan pertama: benda ini cepat, konektornya ada banyak selain baris konektor kompatibel dengan PI, ada baris konektor ekstra yang diberi nama Euler, ada konektor headphone, IR Receiver dan bahkan bisa memakai batere seperti CHIP juga.

Sesuai dengan tujuan utama: untuk mengetes software Arm64 bit, saya bisa dengan mudah mengcompile dan mendebug hello world seperti pada umumnya di platform lain.

arm64

Ada banyak yang belum saya test di PINE64 (dan saya tidak tahu apakah akan segera saya test atau tidak). Contoh hal-hal yang bisa ditest: Android di PINE64, memutar video di Pine64, GPIO, dsb. Yang jelas untuk saat ini saya hubungkan saja benda ini ke jaringan supaya bisa saya akses dan pelajari kapan saja.

Mudik Indonesia 2016

Posting ini sekedar merangkum beberapa posting sebelumnya, sekaligus untuk menceritakan hal-hal kecil di luar posting-posting yang lain. Liburan kali ini cukup lama, dari tanggal 22 Juni (tiba di sana) sampai 10 Juli (tiba di Chiang Mai).

20160622_101146

Karena pemesanan tiket sudah mendekati harinya, harga Air Asia ternyata sudah sangat mahal, jadi kami mengambil Singapore Air yang ternyata lebih murah. Ketika berangkat Joshua agak pilek. Terakhir saya ingat (mungkin 5 tahun yang lalu), di Singapore WIFI gratisnya agak ribet. Tapi kali ini ternyata mudah diakses dan bahkan sangat cepat.

Kami mendarat dijemput oleh orang tua saya, dan sekaligus menjemput mamanya Risna yang mendarat dari Medan di waktu yang hampir sama. Di hari pertama, saya bersama bapak berusaha menyelesaikan tujuan utama. Tujuan utama adalah membuatkan Visa untuk Joshua. Joshua perlu keluar dari Thailand untuk bisa mendapatkan Visa (yang adalah ijin untuk masuk ke Thailand). Di hari pertama ini pembuatan Visa gagal karena kurang syarat Company Registration Letter dan Tax Proof.

Di sore hari pertama, saya naik motor bersama Jonathan ke Ceria Mart, dan pulangnya dihadang hujan. Setelah menunggu lama dan mengecek Google Weather akhirnya kami memutuskan pulang gerimis.

20160623_171426

Di hari kedua kami memutuskan berangkat lagi untuk mengurus Visa Joshua. Kali ini semua sudah dipersiapkan (dokumen yang diperlukan sudah diemail dan dicetak), jadi tidak ada masalah lagi. Pulangnya kami menyampaikan titipan Kak Wanti, dan karena masih cukup sore kami memutuskan mampir di Monumen Pancasila Sakti (sudah dituliskan ceritanya di posting lain).

Di hari berikutnya, opungnya Joshua berhasil memangkas rambutnya, sekarang dia kelihatan lebih ganteng. Joshua bisa terdistract karena diberikan video Mother Goose Club. Bersama saudara saya, mas Adi, kami naik bus dan ke monas hari itu. Ini juga sudah diceritakan di posting terpisah.

Di hari Minggu kami beristirahat karena mempersiapkan diri untuk ke Jawa Tengah esok harinya. Adik Asty (sepupunya Jonathan) datang, dan mereka bisa bermain bersama.  Keesokan harinya kami berangkat ke kampung halaman dan ke Yogyakarta.

Sepulang dari Yogyakarta sudah tengah malam, jadi kami membiarkan anak-anak beristirahat, sementara Opung duluan datang ke acara adat sayur matua Inang Tua Kom pada dini hari. Kami datang ke Bekasi dengan menggunakan Grab dan kembali menggunakan Uber. Senangnya sekarang rumah Eyang sudah bisa dicari di peta sampai level nomer rumah dan posisinya pas, sehingga mudah memanggil Uber/Grab. Seperti pernah saya ceritakan di posting lain, ketika seseorang mencapai Sayur Matua maka acara adatnya adalah perayaan.

20160702_165728

Di hari Minggu kami kembali beristirahat lagi dan saya nyetir ke Hypermart untuk membeli beberapa benda (terutama alat pel yang lebih baik karena pembantu di rumah Eyang sedang mudik). Joshua bisa diajak makan di Solaria. Pulangnya kami mampir ke rumah Yosi. Keesokan harinya kami pergi ke Ancol, ini juga sudah dituliskan di posting terpisah.

20160703_135859

Sebenarnya kami ingin menyewa travel untuk pergi ke Bandung, tapi ternyata sudah penuh di hari sebelum lebaran, dan kebanyakan tutup di hari lebaran. Jadi akhirnya saya menyetir ke Bandung (ini juga diceritakan di posting terpisah).

Di rumah Eyang saya sempat mengajari Jonathan bermain api dan korek api. Ini sebenarnya sesuatu yang mau saya ajarkan dari dulu, tapi selalu lupa beli koreknya. Terakhir kali ingat pas musim panas di Chiang Mai dan waktu itu banyak kebakaran, jadi saya tunda lagi.

Hari Jumat kami membuat foto keluarga bersama. Terakhir kali foto keluarga, Joshua masih di dalam perut mamanya.

IMG_8308

Di hari Sabtu, Risna bertemu dengan teman-teman SMA-nya, sementara saya, Jonathan dan keluarga Yosi menonton film Finding Dory.

20160709_133710

20160709_154737

Kami kembali ke Chiang Mai hari Minggu pagi, diantar oleh keluarga Yosi. Kami agak khawatir karena di malam Minggu Joshua agak demam dan sempat muntah. Tapi Puji Tuhan Joshua hanya cranky sedikit di awal perjalanan. Sepanjang Jakarta Singapore dia tidur. Ketika transit kami biarkan dia merangkak berkeliaran. Di penerbangan terakhir dia agak bosan, tapi ada anak yang hampir seusianya di kursi dekat kami, jadi dia agak terhibur.

IMG_0887

Di sepanjang perjalanan berangkat dan kembali, Jonathan senang sekali karena biasanya pesawat yang dia naiki kecil (single aisle) sedangkan yang ini besar (double aisle). Dia juga senang sekali membaca instruksi keselamatan yang ada di tiap pesawat. Saya selalu diminta untuk memfoto supaya bisa dilihat lagi di rumah.

Liburan kali ini sangat melelahkan, penuh dengan perjalanan panjang, tapi kami bersyukur Joshua dan Jonathan tetap sehat. Kami tadinya sangat khawatir Joshua akan sakit, apalagi dengan perjalanan jauh dengan mobil (beberapa kali), dan juga mengunjungi sangat banyak tempat.

Kami bersyukur bisa tiba kembali di Chiang Mai dengan selamat, dijemput oleh Office Manager kami. Kami juga bersyukur rumah sudah dibersihkan oleh Asisten Rumah Tangga yang sudah dipesankan sebelumnya. Berbagai hal sudah dibereskan juga (tagihan listrik, air), tukang rumput juga sudah dipanggil untuk membereskan rumput. Bahkan dia sudah membelikan telur karena dia tahu kami akan sarapan itu. Kami juga bersyukur karena listrik, air, dan Internet semuanya berjalan lancar ketika tiba di rumah.