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.

 

3 thoughts on “Hacking In App Purchase”

  1. Untuk hack IAP ini mas, apakah bisa dilakukan juga dengan membongkar aplikasi androidnya ? dengan mengedit code – code dalam smali atau code javanya ?

    1. Bisa, kan saya tuliskan di bagian “App Hacking” : “… patching aplikasinya. Jarang sekali saya sampai harus menggunakan level ini, karena di versi berikutnya, app ini harus dipatch lagi …”

Leave a Reply

Your email address will not be published. Required fields are marked *