Cheat dan Anti-Cheat pada Video Game

Salah satu tujuan banyak orang melakukan Reverse Engineering adalah mencurangi (cheating) game. Sudah banyak orang menanyakan ini ke saya, jadi akan saya bahas sekarang ini.

Cheat by Nick Youngson CC BY-SA 3.0 Alpha Stock Images
Cheat by Nick Youngson CC BY-SA 3.0 Alpha Stock Images

Tapi supaya tidak kecewa, saya tekankan dulu: cheating game modern dan populer saat ini (misalnya pubg) sangat sulit. Teknologi anti cheat selalu diupdate, dan tidak ada satu artikel di internet yang bisa membuat Anda bisa mencurangi game terbaru.

Sebagai catatan: banyak video sampah di Youtube yang mengajari cara cheat game padahal yang dijelaskan di situ tidak masuk akal sama sekali.

Cheating Game Jaman Dulu vs Sekarang

Mungkin Anda membaca beberapa artikel lama tentang cheating game dan berpikir cheating itu mudah. Sebelum membahas berbagai teknik cheat dan anti-cheat, saya tuliskan dulu tentang cheating jaman dulu dan sekarang.

Jaman dulu, terutama masa sebelum internet, cheating game relatif mudah. Berbagai perkembangan teknologi (termasuk juga kecepatan CPU, ketersediaan multi core) membuat cheating game makin sulit dilakukan.

Versi Game

Pertama adalah masalah update. Dulu Versi game tidak berubah sejak dirilis karena distribusinya sulit menggunakan CD-ROM/DVD, jadi jika ada game versi 1.0, kemungkinan tidak akan berubah sampe bertahun-tahun kemudian. Di masa awal internet, game juga masih didistribusikan via CD/DVD walau sudah bisa dimainkan online.

Dulu jika ada yang menemukan atau membuat cheat tertentu, maka pembuat game tidak bisa mengupdate kodenya. Sekarang: dalam hitungan hari sudah ada update di play store/app store/steam/dsb. Tentunya masih banyak game sederhana/tidak populer yang dibiarkan saja oleh pembuatnya..

Tulisan/Artikel tentang cheating

Dulu banyak orang dengan sukarela menuliskan ilmu tentang cheat yang dikembangkan, ini tidak apa-apa karena meskipun pembuat game membaca artikelnya, tidak ada yang bisa dilakukan sampai versi berikutnya beberapa tahun lagi atau beberapa bulan lagi.

Sekarang ini jika seseorang menemukan cheat game, mereka akan menyembunyikan atau tidak men-share tekniknya. Kalau dishare, maka pembuat game akan membaca artilel tersebut dan segera mengubah kodenya.

Resource Anti Cheat

Dulu teknik anti cheat dilakukan oleh pembuat game yang teamnya kecil. Mereka ini sering kali adalah programmer game yang bagus, tapi kurang mengerti teknologi cheating. Sekarang ini untuk game besar, sering ada team khusus yang melakukan development anti cheat.

Pekerjaan membuat anti cheat di berbagai perusahaan game yang besar gajinya mencapai puluhan/ratusan ribu USD/tahun (atau dalam rupiah 1-5 milyar/tahun). Game-game ini menghasilkan jutaan USD per bulan. Jadi mereka yang sudah dibayar mahal ini tidak tinggal diam melihat para cheater yang berpotensi mengurangi pendapatan mereka.

Sebagai pembanding: para pembuat cheat kebanyakan sukarela, karena ingin sekedar menang dalam game. Jika levelnya sudah terlalu sulit, mereka akan menyerah. Tapi ada juga group-group yang menjual cheat, motivasi mereka lebih besar dan tentunya mereka tidak mau sharing ilmu karena akan mengurangi pendapatan mereka.

Selain menyewa orang secara khusus, ada juga beberapa perusahaan yang mengembangkan teknologi anti cheat untuk dipakai oleh berbagai game lain. Contohnya adalah BattleEye. Mereka bahkan punya lowongan spesifik: membuat teknologi anti cheat.

Sebenarnya bukan cuma game yang butuh anti cheat. Contoh aplikasi non game yang sering dicurangi orang adalah Snapchat. Biasanya fitur yang diinginkan adalah bisa menyimpan/screencapture foto tanpa ketahuan. Snapchat bahkan sampai mengakuisisi sebuah perusahaan untuk meningkatkan keamanannya.

Kompleksitas Anti-Cheat

Ketika resource CPU masih sangat rendah, game harus sangat dioptimasi, jadi biasanya anti cheat hanya dijalankan sekali saja ketika game dimulai atau ketika pergantian level.

Sekarang ini dengan CPU multi core yang bahkan sudah ada di HP Android low end, bisa ada thread khusus yang melakukan pengecekan berkala. Jika satu pengecekan berhasil dibypass di awal, masih ada pengecekan lain yang dijalankan secara periodik.

Contoh aneka jenis teknik cheating

Jenis cheating untuk berbagai game beraneka ragam, tergantung jenis gamenya. Kadang-kadang cara cheating di satu game tidak berlaku sama sekali di game lain.

Untuk game jenis fighting, misalnya bisa dibuat aimbot yang otomatis mengarahkan (aim) senjata ke target, atau untuk melihat pemain lain meski terhalang dinding. Untuk game jenis puzzle bisa dibuat solver otomatis yang memberi tahu solusi gamenya.

Jadi tidak ada satu jenis cheat, dan teknik anti cheat untuk berbagai jenis cheat juga berbeda-beda. Di sini saya akan bahas contoh saja beberapa jenis cheating yang umum.

Memory/File Editing

Jaman dulu cheating game single player hanya sekedar mengubah jumlah koin di memori atau di file (untuk game yang ada savefile-nya), atau mengaktifkan sesuatu fitur yang seharusnya tidak aktif. Ini sangat mudah dilakukan dengan berbagai tool yang melakukan scanning memori, mencari value, lalu mengganti value tersebut.

Sekarang ini sebagian besar nilai sudah disimpan di server. Jadi meskipun kita mengganti nilai koin di game lokal, ketika gamenya dimulai (atau ketika akan membeli item) game akan meload lagi nilainya dari server via internet dan akan diverifikasi pembeliannya di internet.

Sebagian nilai kadang masih bisa disimpan lokal, misalnya beberapa game ada fitur agar profile kita memakai kostum tokoh tertentu dan pengecekan fitur ini dilakukan lokal/offline.

Logika cheat ini sangat sederhana: misalnya di layar tertampil koin kita 120500, kita search nilai 120500 di memori. Kemungkinan ada beberapa memori yang memiliki nilai itu, berikutnya: kita belanjakan uangnya, misalnya jadi 110000. Lalu kita search lagi nilai 110000 itu, hasilnya: akan ada daftar memori yang berkurang nilainya. Kalau masih ada kandidat lain, kita coba belanjakan koin lagi atau beli koin lagi, sampai ketemu: di memori ini tersimpan nilai koinnya.

Cheating jenis ini levelnya sangat mudah, berlaku untuk banyak game sederhana yang kurang populer. Tool yang dibutuhkan juga banyak tersedia di internet (misalnya Game Guardian untuk Android). Untuk mengedit savefile kadang hanya butuh hex editor saja. Biasanya tidak dibutuhkan coding untuk cheat jenis ini.

Function Hooking/Library Patching

Cheat level berikutnya butuh coding. Fungsi-fungsi tertentu bisa diganti implementasinya dengan milik kita sendiri. Contoh sederhana: jika ada fungsi bernama “isVisible()” yang gunanya untuk mengecek apakah sebuah objek terlihat atau tidak bisa diganti dengan fungsi yang selalu mengembalikan “true”.

Ada banyak library untuk function hooking, tergantung platform/sistem operasi yang dipakai. Contoh: di iOS ada fishhook (untuk hooking fungsi library), substrate (hooking fungsi sembarang). Di Android bisa memakai library Frida (butuh root). Di Windows ada banyak teknik hooking yang bisa dicari sendiri.

Contoh hooking yang lain adalah melakukan intercept terhadap paket jaringan. Sebelum data dikirim ke server, data bisa diubah (misalnya yang tadinya “miss” jadi “hit”). Sebaliknya: data dari server yang tidak ditampilkan oleh game, bisa ditampilkan ke user.

Di level ini cheating sudah butuh coding. Coding biasanya perlu dilakukan di level native code (biasanya C) tapi kadang sampai harus level assembly. Ini semua tergantung proteksi gamenya dan dalam bahasa apa game itu ditulis..

Banyak tutorial cheat di Youtube yang cuma sampah. Mereka memperlihatkan mengedit file .so dengan hex editor saja. Seringkali nilai yang diberikan ngawur, dan jelas tidak akan jalan di versi lain file .so tersebut. File .so isinya adalah kode mesin, untuk memahaminya diperlukan disassembler/decompiler.

Bentuknya apa function hooking ini? bisa berupa aplikasi baru yang melakukan injeksi ke aplikasi asli atau bisa berupa library (dll di Windows, .so di Linux/Android .dylib di OSX/iOS). Library ini bisa berupa library baru, atau hasil patch dari library lama.

Bot

Bentuk cheat lain yang umum adalah bot. Artinya: bukan manusia yang main gamenya, tapi program lain. Jenis bot ini bisa banyak: ada yang full bisa memainkan game dari awal, atau ada yang dipakai untuk melakukan aksi tertentu saja (mengumpulkan koin, dsb).

Bot ada yang bisa dijalankan di device, ada yang bisa dijalankan di PC. Bot ada yang butuh aplikasi gamenya, dan ada juga bahkan yang hanya berupa skrip yang langsung melakukan request ke server.

In App Purchase (IAP) Hack

Untuk game di mana pemain bisa membeli koin dengan in app purchase, maka ini bisa dicurangi untuk game yang tidak mengecek di sisi server. Semua game besar/populer punya server untuk mengecek receipt dari app store dan biasanya tidak bisa dicurangi.

Flow pembelian adalah: aplikasi meminta app store untuk meminta uang dari user. Setelah selesai, app store akan memberi tahu aplikasi bahwa pembelian selesai, dan ini tanda terima (receiptnya). Aplikasi kemudian bisa mengecek ke server app store untuk memeriksa apakah receiptnya valid. Nah masalahnya: jika aplikasi meminta langsung ke app store, fungsi ini bisa dihook dan hasilnya: “ok ini receiptnya valid”.

Anti Cheating

Setelah memberi contoh teknik cheating, saya akan menjelaskan “anti cheating” yang umum dilakukan. Saya akan mengambil contoh dari teknik cheating di atas.

Anti Memory/File Editing

Supaya savefile tidak dimodifikasi, filenya bisa dihash dengan digital signature. Jika signature tidak valid, maka game tidak mau meload savefile-nya. Jadi jika file diedit dengan hex editor, hasilnya: game tidak mau meload filenya karena signaturenya tidak valid lagi.

Bagaimana dengan nilai di memori? misalnya kita ingin menyimpan nilai score, bisa saja scorenya disamarkan, misalnya dengan minus N. Jadi jika nilai koin saat ini 100000, dengan N = 12000, maka tersimpan di memori: 88000. Ketika akan ditampilkan di layar, nilai N-nya ditambah dulu dengan 12000. Teknik anti cheating ini terlalu sederhana, dan beberapa engine cheating bisa mendeteksi seperti ini. Tentunya kita bisa juga menggunakan enkripsi yang lebih rumit seperti AES.

Sebagai programmer, tentunya banyak kreativitas yang bisa dilakukan untuk menyembunyikan nilai koin ini. Misalnya bisa saja nilainya disimpan di 10 tempat, masing-masing ditambah/dikurangi dengan nilai berbeda. Tiap kali gamenya dijalankan bisa juga dibuat nilai random untuk mengecoh fitur “value finder” dari sebuah cheat engine.

Cara paling efektif adalah: nilai koin disimpan di server, dan segala pembelian item diproses oleh server, sehingga cheat jenis ini tidak bisa dilakukan.

Anti Function Hooking/Library Patching

Jika sudah belajar teknik malware tingkat lanjut, kita akan tahu bahwa mengganti fungsi akan meninggalkan jejak. Cara termudah mengecek ini adalah: dengan melakukan checksum binary di memori, lalu nilainya dikirimkan ke server. Server bisa mengecek apakah nilai sesuai seharusnya.

Cara lain adalah dengan mengecek header tiap fungsi, apakah ada tanda-tanda bahwa fungsi tersebut sudah di-hook/intercept. Ketika melakukan patching kode, berbagai library akan mengubah header fungsi dengan instruksi assembly untuk “jump”. Jika ini terdeteksi, maka berarti fungsi sudah diubah.

Anti Bot

Ketika diluncurkan, banyak sekali orang yang membuat bot Pokemon Go. Versi pertama aplikasi ini proteksinya kurang bagus, jadi seseorang bisa mempelajari dengan mudah. Versi-versi berikutnya menjadi sangat sulit dan sekarang tidak ada lagi library yang bisa dipakai untuk melakukan koneksi ke server Pokemon Go.

Teknik anti bot yang mereka pakai adalah gabungan dari banyak hal. Mereka membuat koneksi yang dihash secara custom, versi pertama masih bisa dibongkar. Berikutnya mereka membuat versi berikutnya yang terenkripsi. Selain itu mereka mendeteksi berbagai macam perilaku (behavior) bot yang tidak masuk akal atau tidak konsisten. Ini digabung dengan berbagai cara untuk mendeteksi function hooking/library patching.

Anti IAP Hack

Jika sebuah aplikasi/game cukup sukses, developer bisa memiliki server yang bisa mengecek receipt In App Purchase dengan melakukan koneksi ke server. Jadi ketika seseorang membeli koin:

  • Transaksi dilakukan di device
  • Aplikasi mengirimkan receipt ke server pembuat aplikasi
  • Server pembuat aplikasi akan melakukan validasi ke server apple/google (koneksi langsung tidak bisa diintercept)
  • Status koin/fitur di server pembuat aplikasi akan diupdate jika valid
  • Aplikasi mendapatkan informasi dari server
  • Ketika akan menggunakan koin untuk membeli item, server memakai informasi yang ada di server, jadi tidak bisa diubah oleh aplikasi

Kadang masih ada kebocoran, terutama jika ada metode lain seseorang bisa mendapatkan koin misalnya jika pengguna aplikasi bisa mendapatkan koin/reward dari menonton iklan.

Anti-anti Cheating

Apakah para cheater segera menyerah dengan adanya berbagai teknologi anti cheat? Tentunya tidak. Tapi di level ini sudah dibutuhkan pemahaman kode yang dalam.

Anti-anti memory patching/editing

Jika sebuah nilai hanya disamarkan di memori, maka dengan melakukan reverse engineering (membaca disassembly dan hasil dekompilasi) bisa ditemukan nilai apa yang dikurangi/ditambah. Jika sudah tahu perubahannya, maka teknik pertama kembali bisa dilakukan, cukup dengan menambah/mengurangi/melakukan decrypt terhadap nilai di memori.

Jika aplikasi mendapatkan nilai dari server, mungkin nilainya bisa diintercept dengan function hooking agar bisa diubah sebelum sampai ke aplikasi.

Jika memang aplikasi butuh nilai di memori dan terlalu lambat untuk meminta nilainya dari server, apakah pembuat aplikasi akan menyerah di level ini? pembuat aplikasi bisa mengubah metodenya tiap rilis baru gamenya. Cheat yang berjalan di versi 1.0, tidak akan jalan lagi di versi minggu depan.

Anti-anti function patching

Dalam kasus anti function patching: ada kode yang memeriksa apakah fungsi ini diubah atau tidak. Kode pemeriksa ini bisa dipatch agar hasilnya selalu mengembalikan OK. Tentunya mencari kode pemeriksa ini juga tidak mudah, butuh reverse engineering lagi.

Lalu apa respond pembuat game? sekarang sebagian game memiliki kode (X) yang akan mengecek apakah ada patching. Lalu ada kode (Y) yang memeriksa apakah fungsi pengecek (X) tersebut tidak dipatch. Contoh lain: ada game yang memiliki dua fungsi yang saling mengecek satu sama lain.

Apakah para pembuat cheat menyerah? tidak juga, banyak teknik yang bisa dipakai misalnya emulasi kode menggunakan emulator tertentu (misalnya Unicorn Engine atau Qemu), merelokasi kode (misalnya dengan Gum Relocator bagian dari Frida) dan mempatch kode aslinya.

Anti-Anti IAP

Khusus untuk In App Purchase, di sini cheater memiliki keterbatasan. Untuk pengecekan di sisi server, tidak ada lagi yang bisa dilakukan, kecuali ada yang nekat menghack servernya.

Untuk game yang punya fitur voucher/kode: sering kali hacker membeli voucher dengan kartu kredit curian, lalu menjual vouchernya. Di dalam kasus lain, kadang server penjual voucher yang dihack untuk mendapatkan kode voucher gratis.

Anti Reverse Engineering

Berbagai teknik anti cheat bisa dipelajari jika kita bisa membaca kodenya. Untuk mempersulit, kebanyakan game memakai teknik Anti-RE. Biasanya yang paling dasar adalah obfuscation.

Obfuscation adalah teknik untuk membuat kode lebih sulit dibaca oleh manusia, dan tetap bisa dieksekusi langsung oleh mesin. Jangan kaget misalnya ketika melakukan reverse engineering berbagai aplikasi, bahkan IDA Pro bisa diakali agar tidak mengenali function boundary (mana awal/akhir fungsi). Decompiler juga bisa menghasilkan kode yang membuat kita pusing.

Untuk native code, standar yang dipakai saat ini adalah LLVM Obfuscator. Versi lama bisa ditangani dengan plugin khusus IDA Pro. Tapi banyak perusahaan memiliki varian khusus dari obfuscator ini sehingga tools deobfuscator sederhana tidak bisa digunakan.

Selain itu teknik RE yang lain adalah anti debugging. Dengan ini kode program tidak bisa dengan mudah dijalankan dalam debugger.

Anti-anti-anti …

Untuk setiap teknik cheat yang diciptakan, akan ada teknik anti-cheat. Dan untuk tiap teknik anti-cheat, akan ada teknik anti-anti-cheat, sampai batas tertentu.

Pembuat game bisa membuat anti cheat yang sangat hebat dan rumit, tapi jika terlalu rumit dan membuat gamenya terlalu lambat dimainkan atau butuh spec terlalu tinggi, atau membuat HP menjadi sangat panas, maka pemain akan berhenti bermain. Jadi pembuat game punya batasan pemeriksaan yang bisa dilakukan.

Tiap platform punya batasan masing-masing sehingga tidak semua teknik anti cheat bisa dipakai. Misalnya aplikasi iOS yang masuk ke app store tidak mungkin memiliki self modifying code seperti di Android

Sementara biasanya batasan pembuat cheat adalah kesabaran. Jika pembuat game mengubah anti cheatnya tiap bulan, lama-lama mereka akan lelah. Ingat: pembuat anti cheat dibayar mahal, sedangkan pembuat cheat biasanya pendapatannya tidak seberapa.

Tiap level baru membutuhkan skill baru. Untuk bisa melakukan hacking game modern, minimal perlu pengetahuan reverse engineering yang dalam, plus pengetahuan spesifik untuk platform tertentu (Android/iOS/yang lain).

Selain itu ada banyak teknologi spesifik yang perlu dipelajari, tergantung gamenya. Ada game yang dibuat menggunakan Unity, dan untuk patching gamenya kita perlu mengenai engine Unity. Game dengan Unity gampang diedit jika masih menggunakan mode .NET murni, tapi jadi sulit jika ditranslasikan ke C (dengan il2cpp) dan dilewatkan ke obfuscator. Ada game yang memakai game engine Corona yang memakai Lua jadi perlu mengenal bahasa pemrograman Lua.

Sampai di titik tertentu, ketika sudah paham berbagai hal low level, banyak hacker game yang akhirnya memilih jalan lain. Menjadi programmer atau melakukan pekerjaan security yang pendapatannya lebih besar. Di jangka panjang, menjadi pembuat cheat juga cukup membuat stress karena tiap versi bisa ada proteksi baru yang perlu dipelajari.

Resource

Saya bisa menyarankan resource-resource ini untuk mulai mengenal dunia hacking game:

Atau cari informasi spesifik mengenai teknik yang ingin Anda ketahui. Contohnya teknik anti reversing di Android ada di resource ini. Sebagai catatan: ini baru resource untuk memulai, ketika mulai berusaha cheating, akan ada banyak hal lain yang perlu dipelajari: tentang berbagai format data, tentang enkripsi, dan masih banyak lagi.

Jika ingin yang bentuknya video, sudah ada yang membuat serial belajar game hacking (ketik artikel ini ditulis, levelnya masih sampai level dasar, tidak akan bisa mencurangi game modern dengan yang diajarkan di level ini):

https://guidedhacking.com/threads/squally-cs420-game-hacking-course.14191/

Penutup

Saran saya buat yang ingin hacking game: cobalah dari game yang sederhana. Lebih bagus lagi kalau Anda mencoba membuat game sendiri supaya lebih paham mengenai struktur sebuah game.

Buat Anda yang ingin terjun sampai game yang sulit: silakan saja, tapi jika modalnya hanya ingin mengedit file dengan hex editor saja, Anda tidak akan sampai ke mana-mana. Keahlian Reverse Engineering wajib dikuasai.

Dan jangan tanya saya bagaimana memakai tools IDA Pro, Ghidra, Radare. Berbagai tools tersebut banyak tutorialnya di Internet. Tapi intinya bukan pada toolnya, tapi kemampuan membaca kode. Mengajari memakai microsoft Word bisa dilakukan dengan cepat, tapi mengajari cara membuat Novel yang indah dengan Microsoft Word akan butuh waktu sangat lama. Word di sini hanyalah sekedar tool.

Sebenarnya saya juga tidak keberatan berdiskusi mengenai berbagai teknik cheat/anti-cheat. Tapi kalau level ilmunya masih terlalu jauh, maaf saya nggak sabar, karena harus banyak sekali menjelaskan segala sesuatu. Seringkali yang bertanya:

  • Tidak menyebutkan apa gamenya, untuk platform apa (iOS/Android/PC), padahal tekniknya berbeda untuk berbagai OS
  • tidak pernah memakai IDA pro atau tool sejenis
  • tidak pernah memakai debugger
  • tidak tahu berbagai teknik cheat, hanya ingin tahu bagaimana bypass anti cheat. Padahal setiap bagian anti cheat itu dibuat karena jenis cheat tertentu

Ini seperti anak kelas 2 Sekolah Dasar yang minta dijelaskan matematika untuk pemrograman game 3D, tapi (sesuai kurikulum kelas 2 Sekolah Dasar ):

  • belum bisa mengalikan bilangan besar
  • belum tahu perpangkatan
  • belum tahu notasi matriks
  • belum tahu berbagai konsep geometri (koordinat 3D), fungsi trigonometri (sin, cos, tan), dsb.

Nah jika ada anak SD bertanya seperti itu, apakah Anda mau menjelaskan? apakah bisa punya kesabaran menjelaskan setiap bagian sampai anak SD-nya mengerti? dan andaikan bisa, kira-kira akan butuh berapa lama? bersedia menjelaskan itu semua tanpa dibayar? Atau Anda akan menyuruh anak SD itu untuk belajar dulu dasar-dasarnya?

Jika pertanyaannya sangat spesifik, maka saya bisa memberikan petunjuk, seperti misalnya bagaimana mendeteksi method swizzling di Objective C? (banyak dipakai untuk mencurangi game/aplikasi iOS) dan bagaimana membypass deteksinya?

Jangan juga meminta saya membuat cheat untuk game tertentu. Saya sudah pernah menulis biaya reverse engineering itu mahal. Kalau ingin gratis ya silakan belajar sendiri.

Jawaban di Reddit yang saya temukan ini cukup mewakili jawaban saya terhadap yang ingin bertanya tentang cara reverse engineering anti cheat pada sebuah game. Intinya adalah: “get good”.

One thought on “Cheat dan Anti-Cheat pada Video Game”

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.