Reverse Engineering APK

Saya sudah menulis beberapa artikel terpisah mengenai reverse engineering APK Android (misalnya di http://yohan.es/security/android/) . Di posting ini saya ingin menggabungkan berbagai tulisan yang pernah saya buat dalam satu posting, supaya lebih gampang dibaca. Topik yang lebih umum mengenai Pengantar Reverse Engineering sudah pernah saya bahas di blog ini (tidak spesifik Android).

 

Tujuan Reversing

Pertama, tentukan tujuannya apa ingin bisa reversing APK. Ini bisa digolongkan jadi dua bagian: apakah ingin mengetahui cara kerjanya? (sekedar membaca kode) atau ingin mengubah aplikasinya? (memodifikasi kode) Yang termasuk dalam kategori pertama: apakah ingin ekstrak API-nya, ingin membaca file yang dibuat oleh aplikasi, ingin tahu protokol aplikasi.

Tujuan yang kedua lebih rumit: intinya ingin memodifikasi aplikasi. Beberapa tujuannya: memperbaiki bug, mengubah sifat aplikasi, menambah fitur, mencurangi game, dsb.

APK itu apa?

Pertama APK itu apa? APK adalah format aplikasi Android, berupa file ZIP yang di dalamnya ada classes.dex yang berisi kode Java, resource dalam bentuk XML (yang diencode khusus), file-file gambar, video, suara, dsb.

Selain itu ada juga bagian lain seperti native code (kode dalam bahasa mesin) yang ditulis dalam C/C++/Rust atau bahasa lain. Jika APK dibuat dengan teknologi selain Java, maka kemungkinan ada file-file dalam bahasa lain (misalnya pyc untuk Python, JS untuk JavaScript dsb).

Bagaimana APK dibuat?

APK dibuat dari kode program yang umumnya ditulis dalam bahasa Java dan C/C++, tapi tidak selalu harus demikian. APK bisa dibuat dengan kode HTML dan JavaScript, dari kode Python, Ruby, Unity, dsb. Semuanya sangat fleksibel.

Sebenarnya yang didukung langsung oleh Android hanya bisa ada dua jenis kode: Java atau Native. Native artinya kode yang dikompilasi ke bahasa mesin, biasanya ditulis dalam bahasa C/Assembly. Tapi baik kode Java maupun Native bisa meload interpreter bahasa lain, misalnya dari Java kita bisa langsung menggunakan komponen WebView yang mendukung JavaScript. Dari Java kita juga bisa menggunakan library JRuby/JPython untuk menjalankan kode Ruby/Python (dan masih banyak juga library untuk bahasa lain). Dari bahasa C kita juga bisa meload library apapun (termasuk juga interpreter Python, Ruby, Lua, dsb) dan menjalankan kode dalam bahasa itu.

Tapi fakta ini disembunyikan jika kita menggunakan tools tertentu. Misalnya ketika memakai cordova, maka kode Java disembunyikan dari programmer, dan programmer hanya memikirkan kode dalam HTML/JavaScript saja. Demikian juga dengan Unity, programmer tidak akan melihat kode Java dan Native yang disertakan oleh unity untuk menjalankan kode .NET.

Kode Java akan dikompilasi menjadi .class (file Class Java) lalu dikonversi menjadi bytecode dalvik.   Satu aplikasi terdiri dari banyak kelas dan semua ini disimpan dalam file DEX. Bytecode dalvik ini sifatnya biner, agar lebih mudah dibaca, dibuatlah format kode smali yang berupa teks. Dengan format smali, bytecode menjadi lebih mudah diedit.

Supaya lebih terbayang, berikut ini contoh kode dalam bahasa Java

    public int nextInt(int i) {
                return f++;
   }

Versi .class (bytecode Java):

  public int nextInt(int);
    Code:
       0: getstatic     #2                  // Field f:I
       3: dup
       4: iconst_1
       5: iadd
       6: putstatic     #2                  // Field f:I
       9: ireturn

Versi smali

.method public nextInt()I
    .locals 2
    .prologue
    .line 15
    sget v0, LMyRandom;->f:I
    add-int/lit8 v1, v0, 0x1
    sput v1, LMyRandom;->f:I
    return v0
.end method

Ketika sebuah aplikasi dibongkar, maka minimal ada sedikit kode Java. Lebih tepatnya lagi dari DEX kita bisa kembalikan menjadi file-file .class atau .smali, dan dengan decompiler biasanya bisa dikembalikan ke java.Jika APK tidak dibuat dengan bahasa Java, maka biasanya logika utama aplikasi berada di file lain, dan file Java ini hanya me-load file tersebut.

Membaca Source Code

Sebelum membongkar sebuah APK. Coba tanyakan dulu pada diri sendiri: andaikan saya diberikan source code lengkap sebuah aplikasi, apakah saya bisa akan paham? Andaikan diberi source code yang diberi nama jelas, diberi komentar, diberi dokumentasi tetap belum bisa mengerti, maka sebaiknya Anda kembali ke dasar dulu.

Intinya tool-tool untuk membongkar APK paling jauh hanya akan bisa mengembalikan menjadi source code. Bahkan terkadang jika ada proteksi tertentu, source codenya bisa salah, sulit dimengerti, atau bahkan source code tidak bisa dihasilkan, dan kita harus melihat ke smali code. Jadi jika source code saja tidak bisa dimengerti, maka langkah berikutnya akan sulit.

Mendapatkan APK

Sekarang jika sudah siap reverse engineering APK. Pertama adalah mendapatkan APK. Ini bisa didapatkan dari berbagai situs, misalnya APKPure. Perhatikan APK yang didapat mungkin bukan yang terbaru di Play Store.

APK juga bisa diterima dari programmer yang mengirimkan Anda file APK-nya. Pada kegiatan pentest, biasanya metode ini yang dipakai karena aplikasi belum diterbitkan.

APK juga bisa diekstrak dari aplikasi yang sudah terinstall di  handphone dengan berbagai aplikasi  di handphone misalnya Apk Extractor, ES File Explorer, dsb). APK juga bisa diambil dari desktop melalui Android Debug Bridge (ADB).

Android Debug Bridge (ADB)

Sebelum Anda mulai lebih jauh, pelajari juga tools dasar Android, terutama ADB. Carilah cara untuk mengaktifkan developer mode pada ponsel Anda, dan ikuti tutorial untuk menjalankan ADB, masuk ke shell adb, mem-push dan pull file ke/dari device, menginstall dan uninstall APK. Untuk device tertentu kadang Anda perlu menginstall device driver khusus untuk bisa melakukan koneksi ke ADB.

Hal penting lain adalah mendapatkan log dengan adb logcat dan memfilter isi log. Kemungkinan besar aplikasi akan crash ketika dimodifikasi, jadi mengetahui log akan membantu mencari tahu di mana crash terjadi.

Ekstraksi APK

Sekarang APK bisa diekstrak dengan apktool. Tool ini adalah tool command line yang sangat dasar. Ada beberapa tool lain yang “membungkus” tool ini agar lebih mudah dipakai dengan klik saja. Menurut saya, jika masih pemula, justru bagus untuk bisa mengetahui cara manual ekstraksi file.

Untuk orang yang tujuannya hanya ingin memahami kode Java saja, maka tool jadx akan lebih mudah dipakai. Tool ini juga memiliki GUI yang memudahkan kita membuka file dan melakukan dekompilasi langsung menjadi kode dalam Java. Tool ini memiliki kelemahan: ketika kode dipoteksi maka akan sulit memahami kodenya. Kelemahan lainnya adalah: kita tidak bisa memodifikasi kodenya, ini hanya sekedar untuk melihat saja.

Sebagai catatan: sebagian orang suka menggunakan dua langkah: dex2jar yang akan mengubah APK menjadi file  Jar (yang berisi file .class Java), lalu mendekompilasi file jar-nya dengan decompiler Java (misalnya JD atau CFR).

Perhatikan bahwa jika program tidak ditulis dalam bahasa Java, maka Anda harus memakai tools lain untuk reverse engineering. Beberapa teknologi yang pernah saya temui misalnya:

  • Unity. Ada yang masih memakai kode .NET, dan ada yang dikompilasi menjadi native code dengan il2cpp.
  • HTML/JS (Apache Cordova)
  • Ruby
  • Python
  • Cocos-2DX (native code), kadang dicampur Lua

Teknologi non-Java berada di luar scope posting blog ini. Jika memang tertarik, carilah informasi di internet mengenai masing-masing teknologi untuk tahu cara membongkarnya.

Memahami Program

Jika sudah berhasil diekstrak, maka langkah berikutnya adalah memahami programnya. Bagian ini adalah tersulit. Kembali lagi ke nasihat awal: jika diberikan source code sebuah program apakah Anda bisa mengerti? Jika dihapus semua nama fungsi-nya dan diganti dengan “a”, “b”, “c” apakah kira-kira Anda masih mengerti bahwa sebuah kode melakukan “sorting” atau “searching”?

Selain dengan membaca kode, seorang programmer bisa berusaha memahami program dengan menggunakan “debugger”. Ini juga bisa diaplikasikan ketika melakukan reverse engineering: debugger bisa membantu memahami cara kerja program. Selain itu programmer juga bisa menambahkan logging untuk membantu memahami alur program.

Seorang programmer yang baik akan menggunakan berbagai library yang populer. Pengetahuan mengenai library populer ini akan sangat berguna ketika mereverse engineer sesuatu. Kita bisa mengabaikan banyak kode yang bukan inti dari aplikasi. Misalnya jangan sampai pusing  dan berkutat membaca kode di package android.support.

Modifikasi kode

Sama halnya dengan modifikasi kode: jika ada kode open source di github, apakah Anda bisa menambahkan sendiri fitur yang Anda inginkan? misalnya sekedar mengganti teks, memindahkan tombol, menambah tombol. Jika jawabannya adalah: tidak bisa, maka memodifikasi APK juga akan sulit dilakukan.

Beberapa modifikasi sederhana, seperti bypass root checking, atau SSL Pinning mungkin masih bisa dilakukan dengan sekedar mengubah sebuah kondisi atau if. Tapi modifikasi seperti: mengganti user interface atau menambahkan fitur baru akan sangat sulit dilakukan jika Anda tidak mengerti bagaimana memprogram Android.

Jika ingin mulai dengan benar, belajarlah dulu membuat Aplikasi Android dasar. Materi untuk ini bisa didownload secara gratis. Tutorial dalam bentuk video juga banyak tersedia. Beberapa cara modifikasi APK baik secara permanen maupun temporer pernah saya tuliskan di sini.

Sangat sering saya temui orang yang ingin memodifikasi APK tapi masih bingung dengan konsep app signing. Bertanya: kenapa hasil modifikasi saya nggak  bisa diinstall? (masih lebih bagus jika pertanyaannya eksak seperti ini, ada yang bertanya: kenapa aplikasi saya nggak jalan? lalu setelah muter nanya jauh, ternyata maksudnya tidak bisa diinstall). Tanpa modifikasi apapun, jika aplikasi diunpack dan dipack ulang tapi tidak disign maka tidak bisa diinstall (dengan perkecualian Androidnya sudah dipatch dengan aplikasi tertentu agar mengabaikan code signing, tapi ini berbahaya dari segi security).

Sebelum belajar melakukan modifikasi, minimal belajar dulu packaging ulang aplikasi: ekstrak aplikasi, tidak usah dimodifikasi, lalu package ulang, sign ulang dan install ulang. Pelajari apa itu “signing”, dan bagaimana caranya signing aplikasi. Program tanpa proteksi harusnya akan berjalan normal setelah repackage (tanpa modifikasi).

Jika aplikasi berjalan normal ketika direpackage sebelum dimodifikasi, tapi  kemudian program crash setelah dimodifikasi maka kemungkinan Anda salah memodifikasi. Lihat pesan pada logcat untuk mencari tahu kenapa.

Proteksi

Untuk aplikasi yang diproteksi, maka proses reverse engineerig menjadi lebih sulit. Misalnya proteksi yang paling sederhana sekedar obfuscation. Nama-nama method dan variabel diubah agar sulit dimengerti. Ini bisa sekedar menjadi a,b,c, d tapi juga agar namanya tidak valid untuk OS Windows (misalnya CON atau NUL).

Contoh kode yang gagal didekompilasi

Proteksi tingkat lanjut juga ada, misalnya dengan mengenkrip kode program yang kemudian diload ketika program berjalan. Di tingkat yang lebih lanjut lagi, digunakan native code sehingga harus melihat kode assembly (bahasa mesin) bukan sekedar kode smali.

Ketika proteksi mulai digunakan, maka yang berikutnya dipahami adalah berbagai trik dan pengalaman. Misalnya konstanta MD5/SHA1/AES bisa digunakan untuk mencari tahu algoritma apa yang digunakan. Kadang yang paling mudah adalah dari berbagai string yang muncul dalam sebuah method, misalnya ada pesan tentang error AES, maka kemungkinan kelas itu berhubungan dengan enkripsi AES. Bahkan kemungkinan besar seluruh package tempat kelas tersebut berada berhubungan dengan AES.

Menelusuri Kode

Ketika seseorang bertanya: kok tahu kalau kode enkripsinya ada di kelas yang ini? Jawabannya biasanya adalah: dari pengalaman dan dari penelusuran kode program.

Yang saya maksud dengan menelusuri kode adalah membaca secara manual dan kadang dicampur dengan logging untuk melihat apakah method tertentu dipanggil. Contohnya begini: jika kita tahu di Activity tertentu teks dimasukkan (dalam bentuk plaintext alias belum dienkrip), dan ketika di kirimkan melalui HTTP sudah terenkrip, maka kita bisa menelusuri method yang dipanggil sampai data terkirim untuk mencari di mana method enkripsi.

Secara umum, computational thinking membantu sekali karena ini seperti menyelesaikan sebuah puzzle. Kadang kita harus menelusuri dari belakang, dari depan, atau dari tengah.

Library

Pemakaian library tertentu menunjukkan programmer menggunakan paradigma tertentu dalam memprogram. Contohnya adalah jika library RX Java digunakan maka reactive programming digunakan.

Penggunakan AspjectJ menunjukkan bahwa Aspect Oriented Programming digunakan. Dalam kasus seperti ini, pengetahuan mengenai berbagai paradigma pemrograman akan sangat berguna.

Malware Android

Berbagai malware memiliki proteksi yang di atas rata-rata software biasa. Proteksi malware tertentu sangat kompleks, karena mungkin hanya menargetkan HP jenis tertentu, dan jika crash ya sudah (emangnya ada yang mau kirim bug report?), jadi berbagai proteksi yang sifatnya advanced bisa diterapkan.

Banyak software banking juga memiliki proteksi tapi biasanya lebih mudah dari malware, karena sebuah aplikasi banking dibatasi oleh beberapa hal: mereka ingin aplikasinya tetap berjalan di berbagai ponsel, mereka tidak ingin terdeteksi sebagai malware, mereka tidak ingin aplikasi menjadi terlalu lambat, mereka tetap ingin bisa mendebug aplikasi jika ada masalah.

Jadi secara umum: membongkar malware levelnya lebih susah. Sebuah malware juga kadang mengandung exploit yang mewajibkan kita mengerti internal Android untuk bisa mengerti eksploitnya.

Security

Jangan kira jika sudah berhasil membongkar sebuah APK kita pasti bisa menemukan masalah security. Sebuah APK biasanya hanyalah salah satu “client” dari sebuah aplikasi server. Artinya segala pemrosesan dilakukan di server, dan jika aplikasinya bagus, maka bagaimanapun kita akali, tetap akan dicek di server.

Contohnya dalam aplikasi banking: jika kita bisa mengubah request kita ke bank, maka seharusnya tidak mungkin kita mengubah jumlah saldo, nilai transaksi, nomor rekening, dsb.

Tapi bukan berarti kita langsung menyerah membongkar APK penting karena dianggap sudah aman. Dalam beberapa kasus saya pernah menemukan bahwa aplikasi yang penting dan sudah dipakai umum masih memiliki bug. Saya pernah menemukan bisa mentransfer dari rekening orang ke diri sendiri. Bug itu tidak ditemukan oleh yang lain karena aplikasinya memakai enkripsi custom dengan socket (bukan HTTP), dan tanpa reverse engineering tidak akan bisa ditamper dengan tool seperti burpsuite. Sebagai catatan: dalam hal ini yang salah bukan sisi app-nya, tapi sisi servernya.

Tools

Bagi saya tools-tools ini sudah cukup untuk membongkar dan menyusun 95% APK yang saya temui:

  • apktool
  • jadx
  • compiler Java dan atau IDE (Intellij/Netbeans/Android Studio)

Tools yang komersial juga ada: JEB tapi harganya relatif mahal.

Beberapa tool lain yang juga saya pakai:

Network

Jika niatnya tidak ingin tahu aplikasi secara dalam, tapi hanya sekedar melihat trafficnya saja, saya memakai tool berikut:

Tools-tools tersebut tidak jalan jika ada certificate pinning. Untuk mengatasinya ada banyak metode yang bisa dipakai, tergantung metode pinning yang dipakai oleh program. Dalam kasus sederhana memakai JustTrustMe (Xposed module) atau Frida sudah cukup, tapi di aplikasi tertentu kita perlu patch kode smali untuk bypass SSL Pinning. Artikel berikut ini membahas metode umum untuk bypass SSL Pinning.

Untuk native code saya menggunakan tools lain: IDA Pro dan  Radare. Saya tidak akan membahas native code reverse engineering di sini.

Memulai

Jadi bagaimana untuk memulai? apa yang perlu dipelajari?. Menurut saya urutan ini cukup baik:

  • Belajar membuat aplikasi Android sederhana (minimal hello world), belajar membuat beberapa user interface sederhana (misalnya halaman login), ini terutama jika ingin mengubah/menambah user interface dari APK yang sudah ada. Sudah ada materi gratis dari Google yang bisa didownload di Internet, berbahasa Indonesia.
  • Ekstrak aplikasi tersebut dengan apktool dan jadx
  • Belajar menggunakan proguard, lalu buat atau download aplikasi dari github, kemudian coba compile, bongkar. Setelah itu coba compile dan obfuscate dengan proguard, lalu bongkar.
  • Download aplikasi dari Google Play yang diinginkan, coba ekstrak aplikasinya. Coba bongkar beberapa aplikasi. Langkah ini bisa diganti dengan mendownload soal CTF Android

Penutup

Berbagai jawaban di atas seharusnya sudah cukup menjawab pertanyaan awal. Banyak pertanyaan lanjutan akan bisa dicari jawabannya di Internet, dan beberapa pertanyaan akan sangat spesifik aplikasi dan bahkan spesifik pada versi aplikasi itu.

Contohnya: banyak aplikasi yang versi awalnya tidak diobfuscate sama sekali (misalnya Gojek, BBM) tapi kemudian diobfuscate. Kebanyakan aplikasi juga akan berubah nama kelasnya, dan bahkan library yang dipakai di versi yang baru bisa berbeda. Di sisi server berbagai hal juga bisa berubah, dari mulai URL, format yang dipakai, metode signature yang dipakai, dsb.

Jadi kalau ada orang yang nanya sesuatu di Gojek terbaru, saya gak akan bisa langsung jawab. Ini seperti nanya isi buku terbaru, saya harus baca dulu apa saja yang berubah dari versi lama, harus tracing lagi nama-nama fungsi, nama library dsb. Dan ini butuh waktu, tidak sebentar apalagi jika pertanyaannya sangat spesifik.

Tergantung kompleksitas aplikasi dan tujuan reversing, mengerjakan satu APK bisa butuh waktu beberapa menit, beberapa jam, dan bahkan berhari-hari. Di kasus ekstrem game Pokemon Go yang proteksinya sangat baik, bahkan dulu dibutuhkan waktu ribuan man-hour (banyak orang bekerja berhari-hari) sebelum mereka berhasil membongkarnya (dan setelah itu sudah diganti lagi algoritmanya, sementara orang-orang sudah menyerah).

Waktu adalah sesuatu yang berharga. Buat apa saya membongkar sebuah APK spesifik secara gratis, sedangkan saya membongkar APK lain (untuk pentest) dibayar? Tapi saya juga tidak pelit, jika memang kebetulan saya pernah atau sedang membongkar APK iseng, saya akan memberikan petunjuk/jawaban (ingat, hanya APK iseng, bukan  APK di mana saya menandatangani NDA untuk pentesting).

Khusus untuk yang masih banyak nanya mengenai APK Gojek: saya tidak lagi tertarik pada Gojek sejak beberapa tahun yang lalu. Saya bahkan belum pernah memakai jasa Gojek (saya tinggal di Thailand). Saya tidak kenal dengan orang-orang di Gojek.

Semoga rangkuman di atas ini cukup buat menjawab berbagai pertanyaan seputar reverse engineering APK.

Ponsel Anda disadap? (bagian 2)

Setelah Anda membaca bagian pertama posting ini, pertanyaan yang kemungkinan muncul adalah: jadi bagaimana saya tahu kalau ponsel saya sudah terinstall program untuk menyadap? Jawaban sederhananya: jika yang menyadap level biasa, maka penyadapan akan sangat mudah dideteksi. Jika yang menyadap level negara, akan sangat sulit dideteksi.

Sebelum mengecek Ponsel

Sebelum mencurigai ponsel Anda, cek dulu semua account online Anda. Cek sejarah login Anda untuk melihat ada yang mencurigakan atau tidak.  Seperti telah dibahas sebelumnya: cara seseorang bisa masuk ke HP Anda ada banyak, jadi meskipun Anda bisa membersihkan HP, kalau cara masuknya masih terbuka ya masih bisa kena lagi.

Cek juga desktop/laptop Anda. Tidak ada satu resep khusus untuk melakukan ini, jika ragu: backup data, lalu reinstall semuanya, dan update semua software yang Anda pakai ke versi terbaru. Hati-hati dengan software bajakan, meski pembajak awal mungkin jujur dan tidak memberikan backdoor, orang lain mungkin menambahkan backdoor.

Cek juga apakah kecurigaan Anda bisa dijelaskan dari sudut pandang lain. Misalnya apakah informasi yang bocor hanya yang diterima orang tertentu saja. Mungkin orang tersebut dihack, mungkin pula dia yang membocorkan informasinya.

Pemeriksaan Ponsel

Ada beberapa titik di HP yang bisa diperiksa. Pertama coba perhatikan semua notifikasi yang muncul. Lihatlah jika ada yang tidak wajar atau mencurigakan. Dalam kasus di bawah ini saya memang sengaja menginstall certificate supaya bisa melakukan monitoring koneksi jaringan. Informasi mengenai WhatsApp juga wajar karena saya sedang mengakses WhatsApp via web.

Salah satu metode yang dipakai untuk memata-matai adalah dengan tidak menginstall aplikasi baru, tapi mengganti aplikasi Anda dengan versi lain yang sudah dimodifikasi. Versi yang sudah dimodifikasi ini bisa mengirimkan pesan ke orang lain. Ini yang dilakukan dengan software dari Hacking Team yang dijual ke berbagai pemerintah.

Sebagai catatan: beberapa orang memang dengan sengaja memodifikasi WhatsAppnya untuk mengaktifkan fitur tertentu, misalnya agar meskipun kita sudah membaca pesan seseorang, tapi tidak diketahui oleh orang lain sampai kita tekan sebuah tombol (tujuannya supaya tidak dikira malas, bisa beralasan belum baca message).

Aplikasi yang sudah dimodifikasi ini tentunya tidak bisa diupdate dari Google Play, jadi cara pertama adalah: coba install lagi aplikasi Whats App dari Google Play. Jika ada WhatsApp “palsu”, maka akan muncul opsi “Install” (dianggap belum terinstall).

Berikutnya lagi kemungkinan HP Anda sudah diroot. HP yang sudah diroot bisa dimodifikasi sehingga aplikasi tertentu bisa membaca aplikasi lain.  Tergantung versi Android yang Anda pakai (dan dari vendor mana), proses ini bisa memakan waktu beberapa menit saja. Jika Anda adalah orang awam yang merasa tidak pernah me-root HP Anda, maka Anda perlu mengecek apakah HP Anda sudah diroot oleh orang lain. Sebagai catatan tambahan: HP China yang tidak bermerk kadang sudah diroot “dari pabriknya”.

Sebagai catatan tambahan: “membaca aplikasi lain” ini bisa sekedar screen capture saja. Saya pernah membuat aplikasi Blackberry dan aplikasi Dekstop sehingga kita bisa mengendalikan Blackberry dari PC. Prinsip program tersebut hanyalah melakukan screen capture secara kontinyu dan mengirimkan ke PC (via USB/Bluetooth/WIFI), dan tentu saja ini bisa dimodifikasi untuk mengirim ke komputer lain jika dideteksi aplikasi yang aktif adalah aplikasi tertentu. Program serupa bisa dibuat untuk sistem operasi lain, tapi di OS lain  butuh akses root.

Anda bisa memakai aplikasi Root Checker untuk mengecek apakah HP Anda sudah diroot. Alternatif lain adalah menginstall aplikasi bangking seperti Sakuku, tidak perlu sampai mendaftar, ketika dijalankan aplikasi ini langsung mengecek apakah HP Anda diroot atau tidak dan tidak mau jalan jika diroot.

Jika Anda merasa tidak pernah me-root tapi sudah ter-root, maka cara terbaik adalah mereset HP Anda ke factory setting. Lebih bagus lagi kalau diinstall ulang dengan stock firmware dari web produsennya.

Keberadaan root juga bisa disembunyikan dengan aplikasi tertentu atau dengan modul XPosed. Dengan ini hampir semua aplikasi tidak bisa mendeteksi keberadaan root dan keberadaan program penyadap. Saat ini Google memiliki fitur Safety Net untuk bisa mengetahui apakah HP dimodifikasi atau tidak. Salah satu caranya adalah memakai SafetyNet Playground. Sayangnya ini hanya berlaku untuk ponsel bermerk, bukan ponsel murah dari China (akan gagal Safety Net karena dianggap sudah dimodifikasi).

Apakah setelah dicek dengan Safety Net sudah pasti aman? belum tentu juga, dalam bahasa orang awam: di Android versi tertentu ada cara supaya aplikasi bisa mengakses aplikasi lain. Dalam bahasa teknis: mungkin saja sebuah aplikasi melakukan kernel exploit temporer, dan menghapus lagi jejaknya setelah itu. Ada juga software bernama Magisk yang biasanya bisa membypass SafetyNet (tapi biasanya tiap beberapa bulan diupdate oleh Google).

Jika Anda adalah orang security, maka tentunya pernah mendengar mengenai rootkit level kernel di berbagai sistem operasi. Android pada dasarnya memakai kernel Linux, jadi tidak sulit membuat rootkit yang sulit dideteksi.

Selain ponselnya sendiri, pengecekan berikutnya yang bisa dilakukan adalah pengecekan paket jaringan. Cara ini lebih sulit karena mewajibkan kita tahu mengenai koneksi jaringan yang umum dan tidak umum oleh aplikasi. Inipun tidak selalu berhasil, bisa saja program penyadapnya mengirimkan hasil sadapan jam 3 pagi ketika semua orang tertidur.

Penutup

Secara umum cukup sulit bagi orang awam untuk mendeteksi penyadapan di ponselnya. Kemungkinan yang dirasakan adalah efeknya (misalnya akses jaringan jadi lambat, atau secara umum HP menjadi lambat). Pengecekan yang proper hanya bisa dilakukan ahlinya.

JIka Anda cukup mahir, cara termudah yang bisa dilakukan jika mencurigai ada penyadapan adalah: backup semua data, reset/reinstall firmware ponsel, reinstall PC Anda. Ganti semua password Anda.

Dan yang paling penting adalah: Jika Anda tidak ingin ada informasi yang penting tersebar, jangan gunakan ponsel untuk mengkomunikasikan hal tersebut. Jangan simpan foto atau video yang tidak boleh tersebar.

HP Lama untuk IOT

Setelah membaca blognya pak Budi Raharjo yang mempertanyakan apakah HP lama bisa untuk IOT (Internet Of Things), saya ingin berkomentar , tapi karena panjang jadi saya tulis saja jadi posting blog tersendiri.

cimg1988

HP sudah ada cukup lama, saya memakainya sejak 1999, dan sekarang sudah ada banyak generasi HP. Generasi awal biasanya bisa dimanfaatkan sebagai modem SMS, baik menggunakan kabel data serial ataupun FBUS/MBUS. LCD Nokia tertentu (misalnya 5110) bisa dikanibal untuk menjadi display (bahkan sekarang LCD ini masih dijual di Aliexpress dan berbagai situs lain). Generasi berikutnya yang mendukung GPRS bisa dipakai menjadi modem.

Dulu sempat ada usaha juga membuat firmware alternatif untuk Nokia tertentu. Dengan firmware tersebut, teorinya kita bisa menggunakan ponsel sebagai “otak” sebuah benda iOT. Untuk ponsel berbasis TI Calypso (misalnya Motorolla C115/123/140/155, Sony Ericsson J100i) firmware dari OsmocomBB bisa digunakan (proyek ini masih aktif).

Sekilas ponsel yang mendukung J2ME bisa diprogram untuk mengendalikan benda lain via bluetooth/IR/Internet. Pada praktiknya ini sulit karena biasanya tiap kali akan melakukan koneksi, user akan ditanya dulu: boleh atau tidak. Jaman dulu sebuah aplikasi harus minta ijin user untuk melakukan koneksi apapun. Supaya bisa diset agar tidak minta ijin, kita perlu menandatangani secara digital (inipun tidak universal, signing dengan certificate dari pihak tertentu kadang hanya berlaku di beberapa merk HP saja).

Ponsel dengan OS Symbian, Palm OS (sempat ada beberapa smartphone berbasis PalmOS), Windows Mobile cukup terbuka untuk bisa diprogram melakukan apa saja. Saya dulu pernah memprogram driver untuk Windows Mobile dan tidak perlu code signing.

Ponsel dengan OS modern seperti Android dan iOS bisa dimanfaatkan dengan dua cara. Pertama ponsel bisa menjadi otak, dan pengendalian benda bisa dilakukan dengan bluetooth, WIFI, USB dan bahkan NFC. Koneksi Bluetooth iOS hanya bisa dilakukan di versi baru dengan BLE (Blutooth Low Energy) sedangkan bluetooth di Android bisa dikoneksikan ke modul hardware murah (sekitar 4 USD). Beberapa ponsel Android mendukung mode Host sehingga bisa dihubungkan ke device USB apa saja.

Pemanfaatan kedua adalah memanfaatkan sensor di ponsel (yang jumlahnya sangat banyak) dan datanya distream ke Raspberry atau benda lain. Bagian ini belum saya coba, tapi sudah ada saudara yang mencoba:

Using phone’s accelerometer x & y axis as controller #raspberrypi

A video posted by Andi Dinata (@mdinata) on

Sejujurnya: meskipun ponsel dan hardware lama masih bisa dimanfaatkan, saya lebih suka membeli hardware baru saja. Dokumentasi lebih banyak, harga juga relatif terjangkau, jadi saya tidak mengorbankan banyak waktu ataupun biaya. Tapi jika Anda punya banyak ponsel yang ingin dimanfaatkan, mungkin beberapa hal yang saya share ini bisa berguna.

Facebook Instant Articles dan Google Accelerated Mobile Pages

Akhir-akhir ini ketika membuka Facebook app mobile, semakin banyak berita atau artikel yang bisa dibaca secara instan. Ketika kita men-tap linknya, artikel langsung muncul instan di dalam aplikasi Facebook (bukan di browser). Artikel semacam ini memiliki versi Instant Articles yang disimpan oleh Facebook, dan ada simbol petir di kanan atas link untuk menunjukkan hal tersebut.

Screenshot_2016-06-15-06-53-54

Tujuan FB membuat Instant Articles adalah agar orang bisa lebih nyaman membaca artikel, dan tidak meninggalkan aplikasi FB ketika membaca artikel. Ketika Instant Articles diperkenalkan dan spesifikasinya belum dibuka untuk umum, sebagian orang sempat mengkhawatirkan bahwa ini bisa “memecah belah” web dengan artikel yang hanya bisa diakses dari FB saja. Ternyata fitur ini memakai teknologi yang terbuka.

Lanjutkan membaca “Facebook Instant Articles dan Google Accelerated Mobile Pages”

Catatan Apps: Android

Sejak jaman dulu saya suka memakai HP yang bisa diinstall aplikasi. Saya dulu bahkan membeli SL45i, HP pertama dengan J2ME. Sejak jaman dulu sudah ada banyak aplikasi saya coba baik itu di J2ME, Symbian, Blakcberry, iOS, Windows Mobile maupun Android. Tidak seperti aplikasi PC yang mudah sekali untuk kembali bernostalgia dengan DOSBox, VirtualBox dan aplikasi sejenis lainnya, agak sulit kembali mengenang aplikasi mobile yang dipakai jaman dulu. Jadi seri posting ini hanya sekedar jadi catatan aplikasi yang saya pakai sekarang untuk dikenang di masa depan.

Screenshot_2016-06-14-15-55-22

Dulu saya sangat rajin mengoprek Android, tapi sekarang lebih berfokus ke bagian securitynya (terutama pentesting, atau kadang iseng membongkar exploit seperti ini). Ngoprek yang saya maksud mulai dari mengcompile ulang kernel, mengcompile ulang aplikasi open source (dengan modifikasi saya), sampai mengcompile seluruh ROM juga (waktu dulu masih memakai Nexus).

Sekarang ini HP Android yang saya pakai ada dua: Samsung Note 4 (HP Utama), dan Android One (IQ Mobile II) untuk dioprek (misalnya bisa untuk beta test Android N). Lanjutkan membaca “Catatan Apps: Android”

Tips Android: XPosed Framework dan XPrivacy

Kalau dulu saya nulis tips soal Blackberry, gantian sekarang mau menulis soal Android. Sekarang ini saya mau tulis soal aplikasi yang menarik, tapi sepertinya nggak banyak diketahui orang.

XPosed Framework adalah framework yang memungkinkan untuk membuat (dan menjalankan) aplikasi yang bisa mengintercept API Android apapun. Ada banyak modul yang memanfaatkan framework ini, salah satunya adalah XPrivacy. Dengan XPrivacy, kita bisa memblock atau menipu aplikasi Android yang meminta akses tertentu. Aplikasi ini butuh root access, jadi Android Anda perlu bisa diroot. Perhatikan bahwa aplikasi ini hanya untuk Anda yang cukup expert bermain Android.

Saya berikan beberapa contoh kemampuan modul Xprivacy ini. Ketika sebuah aplikasi atau game meminta koneksi Internet, kita bisa bilang: sedang tidak ada koneksi internet. Ketika aplikasi berusaha mengakses SD Card, aplikasi bisa ditipu dengan menyatakan bahwa SD Card tidak dimasukkan. Aplikasi ini gratis, tapi ada fitur ekstra di Versi pro, misalnya bisa merestriksi aplikasi yang membaca contact list agar bisa membaca dari account tertentu saja. Restriksi ini bisa dilakukan permanen, atau setiap 15 detik. Misalnya kita cuma perlu akses internet sekali untuk aktivasi, kita bisa ijinkan sekali saja, lalu sisanya tidak diijinkan.

Hal yang “menyeramkan” dari Android adalah: ada banyak aplikasi yang meminta banyak permission, contohnya ini ada satu aplikasi yang “recommended” karena teman saya ada yang menginstall. Ketika tombol install ditekan:

small

(ini aplikasi game atau apaan sih?)

Dengan XPrivacy, ketika aplikasi berjalan, kita bisa memblok berbagai permintaan aplikasi tersebut. Misalnya layarnya seperti ini:

phoneid

Pertama kali kita menjalankan sebuah aplikasi, pertanyaan semacam ini akan banyak muncul, dan seminggu pertama memakai XPrivacy akan terasa mengesalkan. Tapi lama-lama jadi terbiasa juga, dan jadi tau banyak mengenai permission yang diminta oleh banyak aplikasi.

Selain untuk masalah privacy, XPrivacy ini berguna karena bisa memblok iklan. Untuk game yang jelas-jelas tidak butuh koneksi internet (misalnya game anak-anak), kita bisa blok akses internet untuk game tersebut, dan efek sampingnya adalah iklan jadi hilang (walau ada juga yang jadi menampilkan iklan default).

Banyak game yang berusaha menshare dirinya via facebook, bahkan game anak-anak. Dengan XPrivacy, kita bisa memblok aplikasi ini, sehingga jika anak tak sengaja memencet logo facebook, efeknya tidak ada.

Jonathan, PlayBook, BB10 dan Portathon

Kami mendapat PlayBook gratis pertama ketika saya mengirimkan aplikasi Contraction Counter untuk PlayBook tahun 2011. Aplikasi ini diilhami dari kesulitan menghitung kontraksi ketika Jonathan lahir (kesulitannya karena di Blackberry waktu itu belum ada aplikasinya). Ternyata dari PlayBook itu, kami menempuh perjalanan panjang bersama BlackBerry. Dengan PlayBook gratis ini saya membuat aplikasi Four Colors dan Baby Coloring Book. Baby Coloring Book-nya menang juara 2 lomba BBDevID.

Aplikasi anak-anak untuk PlayBook masih sedikit, jadi kami memutuskan membelikan Jonathan iPad. Terinspirasi dari game-game iPad, kami mulai mengembangkan game untuk anak-anak untuk Jonathan. Salah satu pendorongnya waktu itu adalah: iPad berat jadi sulit dibawa-bawa ketika keluar rumah, sementara PlayBook kecil dan ringan tapi aplikasinya kurang (ini sebelum iPad mini dirilis). Saya mulai mengembangkan aplikasi puzzle untuk Jonathan. Setelah engine utamanya selesai, Risna mulai bisa ikut membantu membuat puzzle. Sebenarnya skrip-skrip untuk membuat puzzlenya masih sulit dipakai (banyak melibatkan skrip Python, inkscape, imagemagick), tapi Risna bisa menyesuaikan diri dengan cepat.

Game anak-anak di iPad banyak yang serupa (enginenya sama), hanya beda temanya saja, dan ini sangat wajar. Misalnya untuk anak laki-laki, temanya biasanya adalah mobil, transportasi, dan untuk anak perempuan temanya adalah boneka, princess, dsb. Game yang sama juga kadang memiliki banyak edisi, misalnya edisi Natal atau Tahun Baru. Kami juga mengambil pendekatan yang sama untuk PlayBook: kami membuat banyak game dengan tema yang berbeda-beda (Construction, Fruits, Transportation, Christmas, dsb) dengan beberapa engine saja.

Ketika beberapa game sudah selesai kami buat dan terbitkan untuk PlayBook, pada saat yang tepat, RIM mengumumkan Got Game Portathon. Inti acaranya adalah: Jika kita mengirimkan aplikasi dalam kategori game untuk BB10 dalam batas waktu 36 jam yang ditentukan, maka RIM akan membayar langsung 100 USD per game. Waktu itu kami sudah memiliki game-game playbook, dan hanya perlu menyesuaikan ukuran layar BB10. Dalam event ini kami mengirimkan 12 game, dan Puji Tuhan, semuanya diterima. Setelah selesai portathon tersebut, saya ikut Blackberry Jam di Bangkok, dan pulang dari sana membawa Dev Alpha B. Device development untuk BlackBerry 10.

Ternyata RIM tidak berhenti dengan satu portathon itu saja. Mereka pun mengadakan beberapa portathon lagi (kali ini tidak hanya game): Community Portathon, Marmalade Portathon, All Aboard Portathon, Android Portathon, dan terakhir Last Chance Portathon. Kami ikut di hampir semua portathon (kecuali Android). Hasilnya lumayan, plus kami juga mendapatkan beberapa Dev Alpha lagi. Dev alpha ini akan ditukarkan dengan device BB10 versi rilis sekitar bulan Februari/Maret. Masing-masing device nilainya kira-kira 500 USD.

Kenapa RIM mengadakan portathon? Jawabannya adalah untuk meningkatkan jumlah aplikasi (kuantitas) di Blackberry World (nama baru dari Blackberry AppWorld), mereka juga mengadakan sayembara lain Blackberry 10K, garansi bahwa aplikasi yang bagus akan mendapatkan minimal 10 ribu dollar dalam setahun. Untuk BB 10K, mereka mengadakan testing ekstensif, ini untuk mengejar jumlah aplikasi berkualitas di Blackberry World. Jadi mereka berusaha meningkatkan kuantitas aplikasi dan kualitas aplikasi. Dalam portathon yang kami ikuti, kami tidak mengejar untuk ikut BB10K, karena persyaratannya cukup sulit (dan rasanya sulit diaplikasikan ke game untuk bayi).

Mungkin sebagian dari Anda mikir: RIM putus asa ya, bagi-bagi uang untuk developer?. Sebagai pengingat: dulu Google juga mengadakan lomba aplikasi terbaik untuk Android (ADC), sebelum Android diluncurkan (tepatnya ADC pertama diadakan 2 Januari 2008 sampai 14 April 2008, sementara device Android pertama diluncurkan 22 Oktober 2008), jadi pendekatan RIM ini cukup wajar untuk menambah jumlah aplikasi. Sebagai catatan juga, total hadiah yang dikeluarkan Google dalam satu acara ADC (mereka mengadakannya sudah dua kali): 5 juta dollar. Sementara RIM menghabiskan kurang dari itu (sekitar 4.2 juta dollar, total semua portathon).

Game-game saya tulis dalam Haxe (kecuali Baby Coloring Book dan Four Colors yang memakai HTML5). Karena memakai Haxe, game-game tersebut bisa dengan mudah diporting ke iOS dan Android, asalkan kami mau menyesuaikan gambar ke ukuran layarnya. Selain game, saya juga menulis beberapa aplikasi sederhana untuk BB10, yang dibuat menggunakan Cascade (C++ dengan Qt/QML). Daftar aplikasi dan game kami bisa dilihat di situs appworld.

Secara umum, development dengan BlackBerry ini sangat menyenangkan. Untuk menjadi developer tidak perlu bayar apa-apa (misalnya untuk iOS butuh 99 USD/tahun + punya Mac/Hackintosh, Android butuh 25 USD, dst), pengembangan bisa dilakukan di Mac, Windows, ataupun LInux. Orang-orang yang memakai BlackBerry umumnya mau membeli aplikasi berbayar. Walau jumlah pengguna PlayBook saat ini kurang dari sejuta orang, tapi penjualan kami di PlayBook cukup bagus. Cukup bagi Risna untuk membayar pembantu per bulan, jadi Risna bisa agak santai di rumah dan sesekali bekerja membuat aplikasi baru. Rencananya Risna tidak hanya akan merilis aplikasi game untuk anak-anak, tapi juga membuat aplikasi untuk umum (mungkin dalam 1-2 bulan ini aplikasinya akan dirilis).

Rasanya tentram membuat aplikasi untuk mobile device karena kita tidak berurusan dengan berbagai proyek (yang rawan korupsi di pemerintahan), tidak berurusan dengan client yang bawel, bisa mengatur sendiri kapan akan merilis dan mengupdate produk, dan jam kerjanya bisa kapan saja dan di mana saja.

Satu hal yang kami sayangkan adalah ketika ada orang-orang yang berniat jahat pada kami, misalnya sengaja membuat review jelek, dan ini dilakukan dengan sangat niat, misalnya ada yang mencoba menulis review jelek beberapa kali untuk game Natal, tapi berkali-kali ditolak appworld karena menggunakan kata-kata kotor, dan tiap kali dia mengedit lagi kalimatnya sedikit sampai reviewnya diterima. Kejadian semacam ini sudah terjadi cukup lama (sejak saya merilis BiblePlus juga sudah terjadi), tapi baru saya tuliskan sekarang ini. Harapannya: semoga sebagian orang-orang itu membaca dan sadar. Kami kasihan pada orang-orang itu, karena mereka sangat pathetic, menyedihkan, tidak bisa membuat apa-apa tapi berusaha merusak kerja orang lain. Biasanya orang yang bisa membuat sesuatu, tidak akan menghabiskan waktu untuk menjelek-jelekkan karya orang lain, cukup menunjukkan bahwa karya mereka lebih baik.

Saya tidak merasa software kami sempurna, tapi kami sangat senang kalau ada yang mereview jujur, atau memberi kritik membangun. Misalnya jika ada software versi lite, dan dideskripsinya ditulis: hanya 5 puzzle yang free, dan ada yang memberi satu bintang sambil bilang “jelek, cuma 5 yang gratis”, maka jelas-jelas yang mereview adalah orang yang bodoh dan patut dikasihani. Atau jika ada software puzzle untuk toddler (gratis, dalam kategori game anak-anak), dan dibilang “jelek, terlalu sederhana”, maka review semacam itu juga sama sekali tidak berguna. Oh iya, saya katakan bahwa memberi review jelek (tanpa alasan jelas) itu hal yang jahat karena biasanya pengguna akan menghindari aplikasi dengan review rendah, mereka masih lebih mencari aplikasi yang belum ada reviewnya sama sekali. Tapi lama-lama kami maklum: orang-orang itu mungkin iri karena tidak bisa membuat sesuatu sendiri, dan mungkin juga pengangguran, menghabiskan bermenit-menit sekedar untuk menyusahkan orang lain.

Sesekali saya merasa kesal kalau baru membaca review jelek seperti yang saya ceritakan di atas, tapi kadang ada juga orang yang berniat sangat baik: orang-orang itu mengemail saya dulu, menanyakan pada saya masalah yang mereka hadapi (dan setelah selesai saya bantu menyelesaikan masalahnya, mereka memberi review 5 bintang). Senang rasanya kalau menemui pengguna seperti itu.

BlackBerry 10 belum pasti sukses, tapi dari uang yang dihasilkan (plus dari portathon), cukup untuk memodali kami untuk melirik platform lain. Jika BlackBerry 10 sukses, maka kami sangat senang, jika tidak sukses, kami tetap bisa memporting aplikasi kami ke platform lain (dan sudah ada modalnya).