Unity Game Hacking 101

Sebelum kita mulai…

Sebelum kita mulai mendalami artikel ini, perlu untuk diperhatikan terlebih dahulu bahwa pihak penulis dan Cyber Security Community tidak mendorong ataupun menyarankan kepada para pembaca untuk melakukan “Game Hacking” untuk hal-hal yang tidak etikal. Artikel ini hanya ditujukan untuk sebatas pembelajaran saja dan bukan untuk disalahgunakan. Pihak Cyber Security Community tidak bertanggung jawab jika ada yang menyalahgunakan pengetahuan “Game Hacking” dengan menggunakan sumber dari artikel ini.

 

Apa itu Game Hacking?

Game hacking adalah kegiatan mengubah kode gim untuk mendapatkan keuntungan yang seharusnya tidak bisa digunakan. Tidak hanya itu, game hacking juga dapat dilakukan dengan mengubah isi variabel di dalam memori gim yang sedang berjalan sehingga mengubah jalannya permainan atau mengubah skor gim.

Terdapat berbagai alat ataupun cara untuk melakukan game hacking, seperti misalnya mengubah alur permainannya lewat memori pada offset-offset tertentu yang menyimpan data-data mengenai konten dari gim yang sedang dijalankan (health-bar, score, attack damage, jump-force, dash, dan sebagainya).

Meskipun begitu, ada beberapa-beberapa teknik game hacking yang tidak akan berhasil jika dioperasikan terhadap permainan yang berbasis online atau Online Games dikarenakan permainan online mengeksekusi kode-kode gim nya (source code) di sisi server dan tidak diberikan kepada pengguna, sehingga dalam beberapa kasus aktivitas meretas gim pun dapat dicegah. Namun, peretasan terhadap gim tetap saja bisa terjadi jika source-code gim yang ada pada server harus mendapatkan update dari client atau pengguna. Kita tetap dapat memodifikasi alur kode gimnya terkait bagaimana cara server dapat berinteraksi dengan client, sehingga akan sangat memungkinkan jika adanya cheat pada game-online seperti contohnya Bunny-Hoppada game CS:GO.

Namun, di kesempatan kali ini, kami akan berfokus pada game hacking berbasis Unity yang dijalankan di dalam platform Windows.

 

Apa itu Unity?

Unity adalah sebuah cross-platform game engine yang bermanfaat untuk mempermudah developer menciptakan video games atau permainan berbasis dunia maya yang dimana platform ini juga dapat digunakan untuk membuat games berbasis 2D maupun 3D sehingga tidak hanya orang-orang tertentu saja seperti “Game Developer” bersertifikasi yang dapat membuatnya, namun masyarakat umum yang mempunyai keahlian dan pengertian dalam menciptakan sebuah permainan ini juga dapat menuangkan ide kreatifnya di platform Unity ini.

Sebagai cross-platform engine, Unity memiliki kemampuan untuk membuat games berbasis Windows, iOS, Android, Linux, WebGL, Console, Virtual Reality, dan sebagainya. Selain dapat membuat gim yang berbasis multi-platform, Unity editor juga dapat berjalan di Windows, Linux, dan iOS. Inilah yang menjadi salah satu kelebihan dari unity.

Namun, seiring banyaknya gim atau games yang diperjualbelikan ataupun diberikan secara gratis sehingga orang-orang dapat mengunduhnya untuk dapat memainkannya, muncul pikiran-pikiran dari beberapa orang yang ingin melanggar peraturan yang sudah ditetapkan dari gim tersebut. Dikarenakan ada banyak gim pada platform game engine Unity yang memberikan source-code nya secara langsung kepada pengguna yang berarti permainannya berbasis offline, maka pengguna yang mengerti hal-hal seperti Reverse Engineering, Source-Code Extraction dan Memory Hacking akan dapat mengubah alur permainannya dan akhirnya menimbulkan kerugian atau ketidaknyamanan terhadap pemain-pemain yang lainnya.

 

Bagaimanakah konsep dari Unity Game Hacking?

Unity menggunakan “Mono”, sebuah cross-compiler DotNet. Penggunaan mono ini yang mendukung developer untuk menambahkan script C# di dalam gim. Script tersebut berperan menjadi sumber logika sehingga gim dapat berjalan sesuai keinginan developer.

Ketika gim akan didistribusikan kepada customer, gim akan di-build terlebih dahulu. Ketika gim di-build, script tersebut akan di compile oleh Unity dan dijadikan satu dengan file-file pendukung lainnya untuk menjalankan gim. Compiled script ini yang umumnya menjadi “target” kita.

Script C# yang di-compile oleh Unity akan menjadi DLL (Dynamic Link Library) bernama Assembly-CSharp.dll. File ini dapat ditemukan oleh user di /gamesname_data/Managed/Assembly-CSharp.dll. Untuk melakukan patching dari compiled script, kita dapat menggunakan dnSpy (https://github.com/dnSpy/dnSpy). dnSpy adalah sebuah debugger dan editor .NET assembly sekaligus Unity assembly.

Selain menargetkan code sebagai target utama, attacker seringkali juga menargetkan memori yang sedang diakses oleh gim. Attacker dapat mengubah isi dari memori-yang-sedang-diakses gim untuk mengubah skor, HP, waktu, dan sebagainya.

User dapat melakukan serangan ini dengan bantuan aplikasi Cheat Engine (https://www.cheatengine.org/). Cheat engine adalah aplikasi yang berfungsi untuk melakukan scanning dan debugging memory yang dapat dijalankan di Windows.

Selain melakukan serangan yang dapat mengubah alur gim ataupun skor, kegiatan cheating lainnya yang dapat dilakukan oleh penyerang adalah melakukan extracting assets. Extracting assets adalah sebuah kegiatan yang lebih berfokus pada pengambilan assets di dalam game seperti gambar, animasi, objek, dan lain sebagainya. Attacker dapat menggunakan Assets Studio (https://github.com/Perfare/AssetStudio).

 

Demo

Pada bagian demo ini, kami akan mendemonstrasikan kegiatan game hacking menggunakan gim bernama Flaggy Bird yang dapat diakses melalui https://mega.nz/file/jm4WzAya#wpqtoWAYgCY_leNKmsNU_YwlxENfMap12uRI_-t4Y98.

Pada permainan flaggy bird ini, user diharuskan mencapai skor 73317331 untuk memenangkan permainan, tidak lebih atau kurang. Namun, user yang ingin memenangkan permainan akan sangat susah untuk memenangkan permainan dengan cara manual. Oleh sebab itu, game hacking bisa menjadi alternatif. Penulis tidak menyarankan pemain untuk bertindak curang pada permainan yang ada di dunia nyata. Oleh sebab itu, penulis membuat permainan bernama flaggy bird ini untuk menjadi alat latihan bagi para pembaca. Penulis akan memaparkan dua cara untuk memenangkan permainan ini. Cara pertama dengan melakukan patching code dan cara kedua dengan mengganti skor ketika permainan berjalan menggunakan memory hacking.

Patching dilakukan untuk merubah kode permainan. Sehingga patching ini dilakukan ketika permainan belum dijalankan. Hal ini berbeda dengan cara hacking kedua, yaitu dengan mengganti isi dari memori skor yang harus dilakukan ketika permainan berjalan. Perbedaan utama dari kedua cara ini adalah pada persistensinya. Patching akan melekat pada game secara terus menerus. Sedangkan memori hacking hanya bertahan selama permainan dijalankan.

 

Extracting and Editing Code (Patching)

Seperti yang telah dijelaskan pada bagian sebelumnya, kita dapat melakukan extracting dan editing code menggunakan bantuan dnSpy. Kalian dapat mendownload versi terbaru dari dnSpy 64 bit melalui https://github.com/dnSpy/dnSpy/releases/download/v6.1.8/dnSpy-net-win64.zip.

Setelah unzip file dnSpy-net-win64.zip, kita dapat melihat file dnSpy.exe. Untuk menjalankan dnSpy, kita dapat membuka file tersebut. Tampilan dnSpy adalah seperti berikut.

Kemudian, untuk memasukkan file Assembly-CSharp.dll, kita dapat melakukan drag-and-drop file tersebut ke dalam dnSpy.

Class-class di dalam file Assembly-CSharp.dll dapat dilihat pada gambar di atas, misalnya ada AddScore, FlyLittleBird, GameManager, dan sebagainya.

Apabila kita telusuri class-class tersebut, kita mengetahui bahwa skor akan dibandingkan dengan nilai 73317331 pada class FlyLittleBird. Ketika skor bernilai 73317331, maka permainan akan memanggil fungsi WinGame().

Untuk melakukan patching, kita klik kanan pada baris 19 dan pilih “Edit Method (C#)…”.

Kita ganti nilai 73317331 dengan 0.

Kemudian, kita pilih compile.

Setelah memilih compile, halaman editor akan tertutup dan perubahan telah terlihat.

Selanjutnya, kita simpan perubahan dengan memilih File > Save All…

Apabila ada pop up seperti berikut, pilih OK.

Sekarang, ketika kita menjalankan permainan tersebut, kita klik pada layar dan permainan akan langsung mengarahkan pemain ke halaman menang.

Patching dapat dilakukan dengan berbagai cara. Seperti merubah skor awal menjadi 73317331, mengganti penambahan skor, yang semula bertambah 1 setiap melewati rintangan menjadi bertambah 73317331, dan lain sebagainya.

 

Hacking Memory

Pada hacking memory, kita akan menggunakan aplikasi Cheat Engine. Mungkin bagi sebagian pembaca, cheat engine sudah tidak asing lagi atau bahkan pernah menggunakannya :). Oke, langsung saja kita coba bersama hacking memory menggunakan Cheat Engine.

Pertama-tama, kita nyalakan Cheat Engine dan permainan kita.

Kemudian, kita monitor memori yang diakses oleh Flaggy Bird. Pilih logo monitor pada kiri atas Cheat Engine.

Pilih Flaggy Bird dan Open.

Kemudian, langsung saja kita mulai! kita dapat memainkan permainan sehingga skor bernilai 3, 4, 5 atau sebagainya terlebih dahulu. Kemudian kita pause permainannya. Kenapa harus 3, 4, atau 5? Tidak dari 0 saja? Hal ini dilakukan untuk meringankan kerja Cheat Engine. Pada memori, nilai 0 ataupun 1 umumnya sangat banyak. Sehingga, memulai pencarian dari 3, 4, 5, dan seterusnya akan mempermudah Cheat Engine. Walaupun, kita bisa saja memulai pencarian dari nilai 0.

Pada contoh di atas, penulis memainkan Flaggy Bird hingga skor 3. Kita masukkan nilai 3 pada kolom pencarian dan menekan tombol First Scan.

Cheat Engine menemukan 17847 memori yang menampung nilai 3. Kemudian, kita lanjutkan permainan hingga memiliki skor 4 dan memasukkan nilai 4 kedalam kolom pencarian dan menekan next scan.

Dari 17847 buah memori yang menampung nilai 3, hanya tersisa 11 memori yang berubah menjadi 4. Kita lanjutkan lagi hingga tidak terjadi pengurangan jumlah memori lagi.

 

Penulis lanjutkan hingga skor 6 dan tetap hanya tersisa 2 memori yang memiliki nilai yang sama. Oleh sebab itu, penulis ambil kesimpulan bahwa 2 memori tersebut menampung nilai yang sama dengan skor.

Kita double-click kedua memori tersebut. Dapat kita lihat bahwa kedua memori tersebut telah bertambah pada kolom di bagian bawah Cheat Engine seperti pada gambar di bawah ini.

Kita double-click pada value 6 dan merubahnya menjadi 73317331 hingga seperti gambar di bawah ini.

Kita kembali pada permainan dan ketika kita meng-klik pada layar, skor telah berubah dan muncul tampilan bahwa kita telah menang.

Extracting Assets

Extracting assets pada unity dapat menggunakan bantuan aplikasi Assets Studio seperti yang telah dijelaskan sebelumnya.

Kita jalankan AssetStudioGUI.exe seperti tampilan di bawah ini.

Kemudian, kita pilih File > Load Folder

Pilih folder Flaggy Bird dan klik Select Folder.

Pilih Assets List

Pada Asset List, kita temui ada terdapat banyak objek, seperti Font, Sprite, dan sebagainya.

Untuk mengekstrak semua objek sekaligus, kita pilih Export > All Assets.

Pilih folder dimana Anda ingin menyimpannya, dan pilih Select Folder.

Enjoy “your Assets” 🙂

 

Cara Mitigasi

Untuk dapat memitigasi atau mencegah kecurangan yang diakibatkan oleh peretasan terhadap source-code game, banyak Game Developer yang mengimplementasikan sistem atau program Anti-Cheat seperti misalnya untuk vendor Steam (VAC – Valve Anti Cheat) ataupun vendor lainnya yang menggunakan Battleye Anti-Cheat, Vanguard, dan juga berbagai program software lainnya yang dapat mendeteksi adanya program eksternal yang memiliki fungsi untuk berintegrasi dengan game source-code nya.

Sebagai penutup artikel kali ini, penulis menemukan artikel menarik mengenai
Game Hacking terhadap permainan CS:GO.

Writing a CS:GO Bhop Script – CTF-wiki (csea-iitb.github.io)

 

Referensi :

Hackers breach Electronic Arts, stealing game source code and tools | CNN Business

Game Hacking Introduction – CTF-wiki (csea-iitb.github.io)

https://github.com/imadr/Unity-game-hacking

Hacking Unity Games – Hypn.za.net

Hackers breach Electronic Arts, stealing game source code and tools | CNN Business

Introduction to Game Hacking | Offensive Security (offensive-security.com)

GHB1 – Start Here Beginner Guide to Game Hacking (guidedhacking.com)

 

Erik Hendrawan Putra Wijaya & Raymond Nolasco