السلام عليكم ورحمة الله وبركاته, 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.
Setelah diberikan sebuah binary PE32 (pocket edition) oleh penjual cheat dan berikut inilah detail yang saya terima
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
“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
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.
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
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
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
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
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
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
Yang bisa dilihat pada tangkapan layar di atas, beberapa fungsi Read Regedit telah dipanggil di antaranya terlihat
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
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
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
Hasil yang didapatkan akan menjadi sebuah file yang berlokasi biasanya pada ~TMP
berikut detail hasil minidump yang saya dapatkan
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
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’
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
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
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
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.
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
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.
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
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.
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()
Dari Flow yang ada di atas, saya dapat memikirkan beberapa cara untuk dapat cheating terhadap provider cheat ini, berikut adalah penjabarannya.
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.
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
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.
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’.
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).
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.
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
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.