The Story of Cheating on Game Cheat Provider

Last Update Article: 2023-09-04 13:38:10


Background Story

السلام عليكم ورحمة الله وبركاته, halo teman-teman pada artikel kali ini saya akan membagikan sebuah cerita di mana saya dapat “mencurangi” sebuah “service game cheat provider” saya sedari kecil sampai sekarang remaja ini sangat senang memainkan gim online yang santai, yang dapat digunakan untuk sekedar “melepas” penat, namun beberapa orang tidak bisa “mengilhami” bermain gim untuk “kesenangan”, banyak dari teman-teman ini sangat kompetitif memainkan gim yang secara design dikembangkan untuk “bermain santai” banyak dari mereka yang tingkat kompetitifnya sangat tinggi sampai menggunakan program illegal (cheat) untuk mendominasi permainan karena memiliki skill issue *eh.

Singkat cerita pada suatu malam yang indah pada bulan Agustus 2023 saya bermain gim yang dapat kita sebut MT saja mulai saat ini, karena gimnya harusnya hanya bertarung sederhanya saja tiba-tiba saya mendapatkan lawan yang “sangat” try hard untuk bisa menang, dikarenakan saya cukup jago dalam memainkan gim ini (peringkat 100 besar lah) saya merasa ada yang aneh dalam gerak-gerik dari lawan saya ini dan terjadilah tashtalk (hampir semua nama binatang keluar), setelah beberapa saat saya konfrontasi, lawan saya lalu melakukan direct message ke saya seperti di bawah inilah mungkin hasil percakapannya

citer: mau bli gk?
saya: Apaan ha?
citer: jamu murah kok
saya: Berapa? di mana?
citer: diweb luar $2/1hari
saya: Yaudah mana webnya
citer: https://*.*

Dari percakapan dengan si ‘citer’-lah saya akhirnya mendapatkan informasi ada sebuah service cheat game provider yang menjual hampir seluruh cheat game online yang umum di pasaran, sebut saja Valorant,PB,ML (Mobile), PUBG dan banyak lainnya tapi saya hanya berfokus pada cheat game MT dan transaksi dapat dijalankan, pembayaran via paypal dan semua ready to setup.

Explaining the Cheat Mechanism

Setelah diberikan sebuah binary PE32 (pocket edition) oleh penjual cheat dan berikut inilah detail yang saya terima

Untitled

File yang saya terima adalah PE32 berukuran sekitar 2Mb dengan Hash biar saya saja yang tau 🕵️‍♀️ karena mungkin takutnya pemilik usaha tau eh. Saat aplikasi dijalankan akan menampilkan tampilan seperti berikut ini

Untitled

“Kok hash disensor, tapi tampilan aplikasinya enggak?” Karena saya cuman mengantisipasi pemiliki usaha melakukan crawling content hash value dan kebetulan website saya “tersaring” dan jika yang ter-crawling adalah gambarnya masih “aman” karena kemungkinannya kecil, tapi jika pemilik usaha tau, yaudalah haha, mari lanjut ke cara kerja sederhana dari cheat ini secara garis besar

Untitled

Saat cheat dibuka dan memilih menu no 1 cheat akan melakukan auth ke server yang mana akan memastikan HWID milik PC ini apakah memang terdaftar pada server atau tidak, jika terdaftar dan masa sewa cheat masih aktif maka cheat dengan otomatis akan berjalan, jika tidak base cheat akan menutup dengan sendirinya, lalu pertanyaanya dari mana server tau ada HWID itu terdaftar? saat pertama kali membuka cheat, cliet cheat akan mengirimkan data sebagai berikut sebagai identifier ke server

{
    "hwid": "XXX",
    "oslang": "XXX",
    "pcname": "XXX",
    "idtrx": "xxx",
}

Dari data-data di atas, asumsi saya adalah data tersebut sebagai identifier awal dari client dan server untuk melakukan handshake, dari informasi yang telah saya terima di atas, ada banyak asumsi liar yang mulai muncul di kepala saya untuk mulai mempelajari base cheat ini, lets open the base cheat.

Dive Deeper into Base Cheat

Langkah pertama yang biasanya saya lakukan dalam menganalisa sebuah PE yang memiliki banyak proteksi-proteksi anti decompiler adalah dengan mengetahui Windows API apa yang sedang dipanggil dengan Frida, saya menggunakan fitur firda-disover dan frida-trace untuk sekedar mengerti fungsi-fungsi apa saja yang tersedia pada cheat ini, hasil dari frida-discover memperlihatkan bahwa binary yang ada telah mengalami perubahan nama internal functionnya

Untitled

Jika diharuskan untuk melakukan reversing satu per satu dalam setiap function yang ada, jujur ya tidak punya waktu tidak mampu untuk melakukan hal tersebut, cara tercepatnya untuk sekedar mengerti cheat sedang melakukan apa adalah dengan melakukan tracing internal function dari windows untuk mengerti apa-apa saja yang sedang dilakukan oleh si cheat, beberapa internal API yang saya targetkan adalah

  1. fileapi.h
  2. winreg.h

Kedua Family API tersebut biasanya harus digunakan, dikarenakan dari behaviour base cheat yang mengirimkan hwid,pcname dan lainnya hal-hal tersebut harus dibaca melalui Regedit dan API yang mampu membacanya berasal dari winreg dan untuk melakukan operasi write,load dan delete dari file .dll yang telah diunduh pastinya membutuhkan API internal dari family fileapi. Selanjutnya tinggal mentargetkan function apa saja yang sekiranya ingin dilakukan trace, dari family fileapi saya mentargetkan *File* command yang dapat dijalankan adalah

frida-trace -i "*File*" ./cheat.exe
frida-trace -i "*File*" -p (ps cheat.exe).id

Untitled

Idenya dari command tersebut adalah saya ingin mengetahui semua function yang memiliki prefix ataupun sufix dari function yang memiliki nama File terlihat dari tangkapan layar di atas, ada beberapa Internal API yang memang terpanggil, hal-hal yang menarik dari function yang ter-list adalah

  1. WriteFile
  2. CreateFileA
  3. CreateFileW

Dikarenakan fungsi seperti WriteFile terpanggil, maka cara yang terpikirkan oleh saya adalah mengetahui string apa yang sedang ditulis ke storage saya, kita dapat menggunakan frida untuk mengetahui hal ini, berikut script yang saya gunakan

var addr = Module.getExportByName(null, "WriteFile");

//https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-writefile
// ```
// BOOL WriteFile(
//     [in]                HANDLE       hFile,
//     [in]                LPCVOID      lpBuffer,
//     [in]                DWORD        nNumberOfBytesToWrite,
//     [out, optional]     LPDWORD      lpNumberOfBytesWritten,
//     [in, out, optional] LPOVERLAPPED lpOverlapped
//   );
// ```

Interceptor.attach(addr, {
    onEnter: function (args) {

        console.log("lpBuffer:\n" + hexdump(args[1]));

    },
    onLeave: function (retval) {
        console.log("Retval Status: " + retval);
    },
});

Hasilnya akan berbentuk seperti tangkapan layar di bawah ini

  1. Buffer 1

Untitled

  1. Buffer 2

Untitled

Setelah mendapatkan isi buffer yang memang benar adalah sebuah HWID (HardwareID) dan Storage Device Information hal yang perlu dipastikan adalah dari mana base cheat mendapatkan hal tersebut, kita lagi2 dapat menggunakan frida untuk hal ini

frida-trace -i "Reg*" ./cheat.exe
frida-trace -i "Reg*" -p (ps cheat.exe).id

Untitled

Yang bisa dilihat pada tangkapan layar di atas, beberapa fungsi Read Regedit telah dipanggil di antaranya terlihat

  1. RegOpenKeyExW
  2. RegGetValueA
  3. RegGetValueW
  4. RegCloseKey

Setelahnya kita dapat menggunakan script yang sama seperti yang digunakan untuk melakukan tracing buffer untuk memastikan fungsi-fungsi di atas sedang melakukan query apa dan di mana

var addr = Module.getExportByName(null, "RegOpenKeyExW");

Interceptor.attach(addr, {
    onEnter: function (args) {
    },
    onLeave: function (retval) {
    },
});

Beberapa data query regedit yang dapat saya trace dari base cheat akan disajikan dalam bentuk tabel di bawah ini

No Key Type Fungsi
1 HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\CRYPTOGRAPHY REG_SZ Value dari Register ini digunakan untuk mendapatkan HWID (Hardware ID)
2 HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS REG_DWORD Value dari Register ini digunakan oleh base cheat untuk berkomunikasi dengan server memastikan tidak ada proxy yang menghalangi (anti intercept)
3 HKEY_LOCAL_MACHINE\SYSTEM\CONTROLSET001\CONTROL\COMPUTERNAME\ACTIVECOMPUTERNAME REG_SZ Value dari Register ini digunakan oleh base cheat untuk mendapatkan computer name milik saya
4 HKEY_LOCAL_MACHINE\SYSTEM\CONTROLSET001\CONTROL\NLS\SORTING\VERSIONS REG_SZ Value dari Register ini digunakan oleh base cheat untuk mapping identitas OS, Bahasa dan Lokasi saya

.

Sepertinya telah cukup untuk menganalisa bagaimana base cheat bekerja, banyak hal yang telah bisa dipahami dari sekedar mempelajari bagaimana regedit memberikan informasi kepada provider cheat, namun hal yang belum saya dapatkan dari regedit tersebut adalah bagaimana base cheat mengetahui type Storage Device (pict pada buffer 2) yang saya gunakan? asumsi liar saya sejauh ini base cheat menggunakan command* sejenis wmic untuk mendapatkan informasinya, berikuit ini contohnya

wmic diskdrive get caption,size,model

Untitled

Minidump for Discover More

Setelah cukup “mendapatkan” informasi dari bagaimana binary base cheat bekerja, hal lain yang saya lakukan adalah membuat minidump dari task manager, untuk menganalisa beberapa hal yang mungkin bermanfaat bagi step selanjutnya, pertama lihat detail base cheat yang sedang berjalan

Untitled

Terlihat pada tangkapan layar di atas, bahwa name yang sedang berjalan berbeda dengan Description dikarenakan pada saat base cheat berjalan, dia akan merename dirinya sendiri untuk tujuan apa yang pasti itu adalah bagian dari proteksi dirinya sendiri, selanjutnya kita bisa mendapatkan minidump dari base cheat tersebut

Untitled

Hasil yang didapatkan akan menjadi sebuah file yang berlokasi biasanya pada ~TMP berikut detail hasil minidump yang saya dapatkan

Untitled

Besar minidump yang saya dapatkan adalah sekitar 30Mb dan tipe filenya adalah Mini DuMP crash report, salah satu cara untuk menganalisanya adalah dengan menggunakan WinDBG, namun karena saya sendiri sudah cukup puas untuk mendapatkan infromasi tentang mekanisme kerja, pada minidump ini saya lebih berharap mendapatkan strings yang mungkin bermanfaat dengan menggunakan minidump parser

Untitled

Terlihat base cheat yang berjalan dan semua modules yang di-load oleh base cheat, hal yang perlu di-dump adalah address dari si base cheat itu sendiri, namun sayangnya pada proses ini tidak mendapatkan informasi yang ‘berharga’

Untitled

Dari jarak 0000000000d61000 -> 0000000000d699 tidak ada yang berharga, proses ini saya berharap mendapatkan sesutu, namun isinya hanyalah dari binary itu sendiri, proses ini persis seperti melakukan strings cheat.exe namun, pada proses ini sebenarnya dapat menelusuri alamat memory yang lainnya, namun karena tidak mampu malas kita skip saja, fokus melakukan digging string yang ada pada minidump tersebut

Untitled

Setelah melakukan strings pada hasil log-nya kita mendapatkan file yang cukup kecil lagi yaitu 3.5Mb saja, dari sini harapannya ada strings yang bermanfaat, dari raw data logg.txt memang terlihat banyak sekali string yang mungkin dapat bermanfaat fokus saya kali ini adalah mencari suatu endpoint maka saya dapat menggunakan grep seperti di bawah ini

grep -Eo 'https?://\S+\.[A-Za-z]{2,}[^[:space:]]*' logg.txt

Untitled

Dari regex tersebut saya mendapatkan 6 endpoint yang berfungsi sebagai checker dari base cheat tersebut, isinya adalah 2 domain yang berbeda namun dalam 1 rumpun yang sama, maksudnya adalah misal domain utama provider cheat adalah [cheat.com](http://cheat.com) maka domain yang lainnya adalah [recheat.com](http://recheat.com) bukan subdomain, asumsi saya adalah domain2 reseller dari provider tersebut. Hal lainnya yang saya dapatkan adalah tempat di mana .dll disimpan

Untitled

Untitled

Dari data-data tersebut saya cukup puas dengan apa yang telah saya dapatkan, saya mendapatkan endpoint saya mendapatkan path dan saya mendapatkan flow hal-hal ini harusnya bisa dimanfaatkan untuk proses selanjutnya.

Hacking the Cheat Provider

Dari banyak informasi yang telah saya dapatkan di atas, hal pasti yang saya dapat pahami adalah aktivasi cheat dilakukan lewat HTTP REST API, maka dari itu salah satu cara untuk dapat melakukan hacking pada provider ini adalah dengan cara intercept http requests yang dimiliki lalu melakukan modifikasi, dikarenakan target kita adalah sebuah desktop application maka kita butuh aplikasi yang dapat melakukan ‘pembelokan’ proxy dari base cheat ke burpsuite, pada kasus ini saya menggunakan proxifier silahkan gunakan versi trial 31 Hari sudah lebih dari cukup, seperti berikut inilah flow yang akan kita praktekan

Untitled

Pada gambar di atas, flow nomal dari cheat adalah dari client langsung mengarah ke REST API activation, namun dengan proxifier kita dapat membelokan request http dari base cheat ke burpsuite untuk dilakukan modifikasi, pertama koneksikan proxifier dengan burpsuite sebagai proxy server.

Untitled

Jika sudah dapat terkoneksi seperti pada tangkapan layar di atas, langkah selanjutlah adalah membuat sebuah rule proxifier agar requests dari base cheat client dapat diarahkan ke burpsuite

Untitled

Untitled

Cukup seperti gambar di atas, kita sudah dapat mengarahkan base cheat agar terhubung dengan burpsuite proxy server, sekarang jika base cheat dijalankan seperti berikut ini hasil yang tertera pada proxifier di atas.

Untitled

Pada burpsuite kita dapat melihat reqeusts dan response dari client base cheat, yang mana pada request yang saya sensor mengirimkan pc-name berisi nama pc milik saya, lalu User-Agent berisi detail dari OS PC saya, mulai dari Storage Information sampai hal-hal yang saya tidak tau mengapa dikumpulkan, lalu response yang didapatkan oleh REST API adalah mirip seperti berikut ini

SFdJRHwzMS0wOC0yMDIzIDEyOjEwOjAwfGh0dHBzOi8veHh4eHh4eHguY29tL2luamVjdG9yLnBkYg==

Server akan mengirimkan base64 encode yang jika dilakukan decoding akan menghasilkan informasi seperti berikut ini.

HWID|31-08-2023 12:10:00|https://xxxxxxxx.com/injector.pdb

Server akan mengirimkan ulang HWID, kapan tanggal expired lalu mengirimkan juga uri yang berisi injector.pdb yang akan diunduh dan di-load jika masa penyewaan dari HWID masih aktif, jika tidak aktif uri injector tidak akan diunduh dan base cheat hanya akan mengeluarkan status expired pada UI-nya, jika digambarkan menggunakan Pseudocode / Flowchart maka akan menjadi seperti di bawah ini

hwid,date,uri = response.spli by "|"

if date >= datenow():
    download(uri)
      load(uri)
else:
    print(hwid)
    print(status: epired)
    close()

Untitled

Dari Flow yang ada di atas, saya dapat memikirkan beberapa cara untuk dapat cheating terhadap provider cheat ini, berikut adalah penjabarannya.

  1. Melakukan Response Tamper menggunakan Burpsuite
  2. Membuat Response yang sama persis dengan mengarahkan domain server ke server local saya

Melakukan tindakan nomor 1 cukup menguras energi, dikarenakan sebelum membukan cheat saya harus mengulangi proses intercept dari awal yang sangat melelahkan, maka cara yang saya lakukan adalah menggunakan pendekatan nomor 2, dikarenakan lebih sederhana pengaplikasiannyna jika cheat ingin digunakan terus menerus.

LET’S HACK THEM

Pada proses ini, idenya adalah membuat fake server yang mengsimulasikan server yang kirimkan oleh server yang asli, tujuannya adalah agar saya dapat memodifikasi exipired date yang dikirimkan oleh server, berikut inilah gambaran setup yang saya gunakan

Untitled

Terlihat cukup ribet dan overkill bukan? tapi saya melakukan ini dikarenakan memang keadaan setup di lingkungan rumah saya sudah begini adanya, pertama idenya adalah membuat fake response. cara utama dan terbaiknya adalah mengarahkan [servercheat.com](http://servercheat.com) ke arah RasberryPI1 yang mana RasberryPI1 mengambil data real response dari database RasberryPI2 kenapa harus seperti ini? dikarenakan saya membutuhkan real path uri dari response real server, agar saya tetap mendapatkan lastest update dari server asli. Kenapa saya tidak langsung melakukan crawlling dengan RasberryPI1 alasannya dikarenakan node tersebut tidak memiliki akses ke internet di rumah saya, hanya sebagai local server saja. Lalu? bagaimanna caranya untuk mengarahkan computer gaming saya ke RasberrryPI1 sebagai fake server? tentu saja cara sederhananya tinggal melakukan bind address ke C:\Windows\System32\drivers\etc\hosts

192.168.1.99    servercheat.com   api.servercheat.com otherserver.com

Pada server 192.168.1.99 milik RasberryPI1 kita tinggal implementasi SSL dengan menggunakan [certbot](https://certbot.eff.org/) dan semua sudah siap untuk dijalankan, script fake server yang saya gunakan sebenarnya tidak ada yang spesial, dikarenakan hanya melakukan select ke database RasberryPI2

<?php 

$servername = "192.168.1.10"; 
$username = "remote";
$password = "123";
$dbname = "wa";

$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error);
}

$query = "SELECT * FROM `pengeluaran` ORDER BY id DESC LIMIT 1";
$result = mysqli_query($conn, $query);

$data = mysqli_fetch_array($result);
$returning = base64_decode($data['response']);
$pecah = explode("|", $returning);
$hwid = $pecah[0];
$date = "2030-08-20 12:10:00";
$uri = $pecah[2];
$concat = $hwid."|".$date."|".$uri;
$base64 = base64_encode($concat);
echo $base64;

Intinya pada script fake server di atas, saya hanya perlu mengganti index pertama dari exploded data yang telah didapatkan dari hasil scraping, kenapa sampai butuh beberapa nodes? dikarenakan environtment di rumah saya yang mengharuskan seperti itu. Dari sini cheat sudah berjalan normal dan sistem sewa saya sudah sampai 2030 padahal saya sendiri tidak yakin game yang sayan mainkan ini bisa bertahan sampai akhir tahun 2023, haha.

End of this Story

Terima kasih sudah membaca cerita ini, mohon maaf jika ada kesalahan penyebutan atau kesalahan teori yang saya jabarkan, saya menulis cerita fakta dan nyata ini sekaligus sebagai akhir dari perjalanan saya untuk bermain game yang sedang saya bahas ini, beberapa alasan kenapa saya meninggalkan game ini padahal self proclaimed ‘Jago’.

  1. Developer sudah sangat acuh dengan keberadaan para Cheater ini
  2. Cheater pada game ini sudah pada tahap destructive ke player lain
  3. Tidak ada progress balancing character yang sedang Meta
  4. TOOO PAY 2 WIN (P2W), ew
  5. Sepi

Game yang sedang saya suka mainkan ini sangat well known namanya, jika ada turnament antara pengiat cyber security pada game ini, saya seminimal mungkin dapat juara HAHAHA, tapi teman-teman saya dari security gak ada yang pernah menang lawan saya pada game ini, game ini sangat-sangat sudah tidak sehat dalam sisi apapun, developer tidak peduli pada cheater, ada karakter yang terlalu OP tidak di-nerf selama setahun lebih lalu konsep P2W yang terlalu kental juga sudah mulai ‘sepi’ terkalahkan games baru yang lebih aktif komunitasnya (Dota2,Valorant,etc).

What is Pay 2 Win for Me?

Sederhananya yang dapat saya pahami konsep P2W ini adalah, jika kamu punya uang, maka kamu punya kuasa, dalam analogi yang mungkin salah tapi akan selamanya saya percayai dengan konsep P2W ini adalah dengan mengibaratkan 1 orang pro player dilakukann clonning, sebut saja namanya Arteezy, pro player ini sekarang ada 2 manusia, identik. Lalu 2 orang ini bermain dengan 2 akun berbeda dengan start level misal sama-sama 0, namun Arteezy ke 2 mendapatkan cash in game sebesar 1000$, dengan skill yang sama dengan kemampuan identik, jika Arteezy 1 dan Arteezy 2 dipertemukan dengan sama-sama level 100 siapakah yang akan menang? jika Arteezy 2 dapat menang dengan “mudah” dikarenakan mendapatkan cash in game maka game tersebut bagi saya P2W, seperti game yang sedang saya bahas ini, anyway im quiting that game after that article goes up on my blog, also i will deleting all that game stuff related also the cheat, this game is fucked up can’t even saved by anyone.

Appendix

Banyak sekali pelajar yang bisa saya dapatkan dari kegiatan reverse engineering ala-ala pada kasus ini, sebenarnya banyak sekali yang tidak saya tulis pada kegiatan ini, salah satunya mungkin adanya SQL Injection pada salah satu endpoint yang saya temukan, eh? skip. Pada sesi ini yang saya ingin tambahkan adalah cara remediasi dari kasus ini

  1. Implementation SSL Pinning on Base Cheat Client
  2. Change Flow of Activation Cheat

Dengan mengimplementasi SSL Pinning, pertama akan menyusahkan melakukan intercepting pada aplikasi, kedua serangan serupa dengan fake server methode tidak akan dapat dilakukan, kedua mengganti flow dari base cheat tersebut, mengirimkan uri .pdb cheat seharusnya jika HWID dalam keadaan aktif saja, jika tidak tidak usah mengembalikan uri tersebut.