1 poin oleh GN⁺ 2025-01-21 | 1 komentar | Bagikan ke WhatsApp
  • TAC (Treyarch Anti-Cheat) di Black Ops Cold War adalah anticheat mode pengguna tanpa driver kernel Ricochet, tetapi memiliki struktur kode yang sangat mirip dengan seri Call of Duty terbaru
  • Lapisan perlindungannya menggunakan enkripsi executable, checksum, obfuscation jmp, obfuscation entry point dari Arxan, bersama enkripsi pointer ala Treyarch/IW
  • TAC melakukan berbagai deteksi mode pengguna seperti lookup hash API saat runtime, pemeriksaan pola hook API, pengecekan debug register, deteksi test signing Windows, deteksi alokasi console, serta deteksi DirectX/overlay
  • Overlay eksternal dikumpulkan melalui style window, posisi, display affinity, dan daftar modul proses lalu diunggah ke server, sedangkan pemindai memori seperti Cheat Engine dapat terdeteksi lewat honeypot memori virtual
  • Teknik yang paling unik adalah syscall stub kustom terenkripsi, yang melewati hook ntdll dan membuat asal syscall tampak seperti berasal dari fungsi ntdll lain sehingga lebih sulit dimonitor

Target analisis dan cakupan

  • Objek analisis adalah anticheat mode pengguna di dalam Black Ops Cold War, yang disebut TAC (Treyarch Anti-Cheat)
  • Black Ops Cold War tidak memiliki komponen mode kernel Ricochet yang ada pada Modern Warfare 2019 dan judul-judul setelahnya
  • Perbedaan besar dengan Call of Duty terbaru adalah driver mode kernel, sementara sebagian besar kode anticheat berada di mode pengguna dan sangat mirip dengan TAC
  • Pseudocode fungsi disusun ulang karena hasil dekompilasi aslinya rumit akibat obfuscation dan kode resolver
  • Sebagian isi dihapus untuk menghindari promosi cheating atau bypass

Arxan dan perlindungan executable

  • Arxan adalah alat obfuscation dan perlindungan yang digunakan di banyak game Call of Duty sejak Black Ops 3
  • Dekripsi executable saat runtime
    • Executable game dipack dan dienkripsi
    • Arxan menyisipkan kode pada proses startup untuk unpack dan mendekripsi executable game yang sebenarnya
  • Checksum executable
    • Arxan terus memantau patch pada executable game
    • Jika debugger atau ketidakcocokan checksum terdeteksi, proses akan dihentikan
  • Obfuscation jmp
    • Banyak jmp disisipkan di antara instruksi fungsi untuk mempersulit analisis statis
    • Jika ratusan lompatan disisipkan ke fungsi besar, analisis IDA bisa rusak dan memerlukan alat eksternal
  • Obfuscation entry point
    • Kode Arxan yang dilindungi akan unpack dan mengeksekusi entry point yang sebenarnya
    • Bagian ini juga dapat berisi obfuscation jmp, sehingga pelacakan alur menjadi sulit

Enkripsi pointer

  • Pointer penting dienkripsi dan didekripsi tepat sebelum digunakan
    • objek global game saat ini
    • array entitas
    • pointer objek dan sebagainya
  • Skema enkripsi yang sama memiliki 16 variasi, dan alamat PEB saat ini menentukan skema mana yang dipakai
  • Metode ini mengganggu pointer scan Cheat Engine
    • Hanya nilai terenkripsi yang disimpan pada nilai global
    • Nilai yang sudah didekripsi hanya ada di stack
  • Untuk mendapatkan pointer yang sudah didekripsi, dibutuhkan alat pelacak instruksi dekripsi, atau hook pada titik saat game sudah mendekripsinya

Lookup API saat runtime dan deteksi hook

  • TAC menggunakan fungsi lookup API saat runtime yang di-inline
    • Menerima hash modul dan hash nama API
    • Melakukan iterasi daftar modul yang dimuat dan meng-hash namanya
    • Melakukan iterasi fungsi export modul dan membandingkannya dengan hash waktu kompilasi
  • Identifikasi hash dilakukan menggunakan daftar modul yang dimuat pada proses game dan fungsi hashing milik game
    • Menghitung hash nama modul dan nama export
    • Mengambil base hash dan function hash secara manual dari hasil dekompilasi untuk mencocokkan API yang dipanggil
  • Hash tidak selalu sama di setiap versi game
  • Karena pointer fungsi disimpan di variabel global, identifikasi juga bisa dilakukan dengan membandingkan alamat virtual dengan fungsi export dari DLL yang dimuat
  • Deteksi hook API TAC saat ini hanya memeriksa 7 pola
    • stub tipe push/movabs/xchg/ret
    • push imm lalu ret
    • call
    • jmp [rip+x]
  • TAC tidak memeriksa semua API penting, tetapi memeriksa hook pada API yang digunakannya sendiri

Debug register dan deteksi test signing driver

  • Debug register dapat dipakai sebagai metode hook tanpa patch kode untuk melewati pemantauan patch .text oleh Arxan
  • TAC memeriksa nilai DR0~DR3 dari konteks thread
    • Jika ada nilai, callback dipanggil dengan pesan berbeda tergantung apakah itu berada di dalam proses saat ini
    • Setelah itu alur berpindah ke fungsi terminasi
  • DR0~DR3 adalah privileged register sehingga tidak bisa dibaca langsung lewat assembly biasa, dan harus diperoleh melalui kernel Windows atau pengiriman exception
  • Mode test Windows memungkinkan driver mode kernel tanpa tanda tangan normal dijalankan
  • TAC memeriksa apakah test signing aktif melalui NtQuerySystemInformation
    • Deteksi ini sendiri tidak langsung menyebabkan ban, tetapi akun akan diberi flag

Cara terminasi proses

  • TAC menghentikan proses dengan dua cara
  • Cara pertama adalah membersihkan register lalu memanggil NtTerminateProcess
    • RCX diatur ke -1
    • Jika NtTerminateProcess terdeteksi di-hook, cara ini tidak digunakan
  • Cara kedua adalah membersihkan register lalu melompat ke 0x0 untuk membuat proses crash
  • Kedua cara ini menghapus register penting sehingga pemulihan sulit dilakukan

Deteksi console, visualisasi, dan overlay

  • Cheat internal dapat menggunakan AllocConsole untuk output log atau implementasi menu
  • TAC memeriksa window console atau ConsoleHandle di PEB untuk mendeteksi alokasi console
  • Visualisasi internal biasanya digambar ke layar melalui hook API grafis
    • Call of Duty modern menggunakan DirectX 12
    • Target hook yang umum adalah IDXGISwapChain::Present
    • Pada DirectX 12 dibutuhkan command queue, dan ID3D12CommandQueue::ExecuteCommandLists adalah titik perolehan yang umum
  • OBS Studio, Streamlabs OBS, Discord game overlay, dan Steam game overlay juga dapat bekerja di lokasi serupa
    • Steam dan Discord melakukan rendering
    • Keluarga OBS menangkap gambar render saat menggunakan game capture
  • TAC saat ini tidak memindai fungsi DXGI present itu sendiri, melainkan memeriksa pointer present di vtable

Cheat eksternal dan deteksi berbasis window

  • Cheat eksternal kemungkinan membuat overlapped window yang menutupi window game
  • TAC melakukan iterasi atas semua window dan memeriksa style WS_EX_LAYERED lewat GetWindowLongA
  • Lalu membandingkan apakah window itu bertumpang tindih dengan window game menggunakan GetWindowRect
    • Jika rasio tumpang tindih 0.5 atau lebih dan jumlah cache kurang dari 8, hwnd tersebut disimpan
    • Ada nilai yang sesuai dengan contoh resolusi layar 1920x1080
  • Window yang di-cache diselidiki lebih lanjut di fungsi terpisah
    • Memeriksa teks window dengan GetWindowTextW
    • Memeriksa nama class dengan GetClassNameA
    • Memeriksa display affinity dengan GetWindowDisplayAffinity
  • TAC juga memeriksa kasus saat SetWindowDisplayAffinity dan WDA_EXCLUDEFROMCAPTURE digunakan untuk menyembunyikan diri dari alat rekam atau screenshot
  • Informasi terkait window disimpan dalam buffer terenkripsi dan diunggah ke server
    • teks window
    • nama class
    • posisi dan style window
    • display affinity
    • daftar modul dan nama exe dari proses window yang bertumpang tindih
  • Proses dari window yang bertumpang tindih dibuka dengan OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION), lalu nama modul dikumpulkan melalui K32EnumProcessModules dan K32GetModuleFileNameExW

Deteksi pemindai memori seperti Cheat Engine

  • Cheat Engine mudah dideteksi karena perilaku memori virtual Windows
  • Meski program mengalokasikan memori virtual lewat VirtualAlloc, sebelum diakses memori itu belum diback oleh memori fisik
  • Game dapat mengalokasikan memori lalu tidak menggunakannya
  • Jika tab memori di Cheat Engine atau Process Hacker memindai area tersebut, akses akan terjadi dan memori menjadi valid
  • Honeypot ala TAC mendeteksi pemindai memori dengan memeriksa apakah alamat virtual itu benar-benar telah diakses menggunakan K32QueryWorkingSetEx

Mengganggu signature scanning

  • Peretas game sering menggunakan signature scanning agar cheat tetap berjalan otomatis setelah update
  • Ide Treyarch adalah melindungi area di sekitar return address pada fungsi yang tidak dipanggil lagi dengan PAGE_NOACCESS
  • Signature scanner membaca byte executable dari awal hingga akhir untuk mencari pola
  • Karena memeriksa apakah setiap byte dapat diakses sangat lambat, proses bisa crash saat mencapai area PAGE_NOACCESS
  • Ini bukan langkah pencegahan yang sempurna, tetapi dapat menyulitkan banyak analis

Anti-debugging

  • Pemeriksaan anti-debug TAC sendiri sederhana, tetapi Arxan juga menyediakan teknik anti-debug tersendiri
  • TAC melakukan iterasi atas semua thread dalam proses saat ini
    • Menggunakan CreateToolhelp32Snapshot dan thread snapshot
    • Memeriksa DbgSsReserved di TEB tiap thread untuk mendeteksi keberadaan DebugObject
  • Ada juga teknik menulis ke memori tidak valid untuk memicu access violation
    • Jika kode mencapai titik setelah exception, dianggap debugger telah menangani atau melewatinya
  • CheckRemoteDebuggerPresent juga digunakan
  • ThreadHideFromDebugger mengirim exception ke proses, bukan ke debugger
    • Saat debugger mencoba menghentikan proses, exception STATUS_BREAKPOINT dapat terjadi dan membuat proses berakhir
    • Di mode pengguna, flag ini tidak dapat di-unset
    • Taktik ini dijalankan dalam TLS callback sebelum entry point executable

Pemantauan lalu lintas jaringan

  • TAC tidak menyimpan semua koneksi aktif, hanya mencari kondisi tertentu
  • Target deteksinya adalah metode membuat server jaringan lokal di dalam proses game
    • Cheater menulis shellcode ke proses game
    • Memulai server jaringan di dalam proses game
    • Aplikasi eksternal bertukar informasi dengan server lokal ini
  • TAC mengambil tabel TCP melalui GetTcpTable2, lalu mendeteksi kondisi dengan membandingkan koneksi yang dibuat proses saat ini dengan hubungan port milik proses lain

Syscall stub kustom terenkripsi

  • Banyak API export di ntdll menjalankan syscall secara internal
  • Dengan memakai syscall stub kustom, cheat mode pengguna bisa melewati hook pada fungsi ntdll
  • Syscall dapat terlihat oleh instrumentation callback
    • instrumentation callback dipanggil setelah syscall
    • return address akan berada tepat setelah instruksi syscall
  • TAC mempersulit analisis statis dengan syscall stub terenkripsi
  • Stub dibangun setelah area besar yang dialokasikan di section .text diproteksi sebagai write/execute
  • Instruksi syscall dicari dari NtReadFile, lalu posisinya diubah dengan memakai nilai waktu CPU sebagai unsur acak
  • Dari sisi pemantauan, syscall itu dapat tampak seolah berasal dari fungsi ntdll acak
    • syscall yang sebenarnya mungkin bukan NtReadFile
    • Jika indeks syscall pada eax tidak diperiksa, sulit mengetahui syscall apa yang dipanggil
  • Ada contoh lokasi instruksi syscall yang berubah saat dieksekusi ulang

Deteksi bypass penyembunyian anti-debugger

  • Untuk mengatur ThreadHideFromDebugger, NtSetInformationThread harus dipanggil
  • Cheater dapat meng-hook API ini agar mengembalikan sukses
    • Dengan begitu anticheat percaya penyembunyian berhasil, padahal sebenarnya tidak terjadi apa-apa
  • TAC memeriksa hasil pemanggilan dengan argumen yang sengaja salah untuk menangkap hook yang dibuat buruk
    • Jika pemanggilan yang seharusnya gagal karena argumen panjang yang tidak cocok justru berhasil, maka terdeteksi
    • Ada contoh nilai balik yang berbeda antara debugger dan lingkungan ScyllaHide
    • Juga ditemukan hook yang selalu mengembalikan sukses untuk permintaan ThreadHideFromDebugger dengan handle palsu

Mencegah pembuatan thread jarak jauh

  • TAC memasang exception handler yang memanggil TerminateThread pada thread saat ini ketika exception STATUS_PRIVILEGED_INSTRUCTION terjadi
  • DLL manual mapping membutuhkan cara untuk menjalankan shellcode di proses jarak jauh, dan metode umum adalah CreateRemoteThread
  • TLS callback pada PE Windows dapat dipanggil sebelum thread entry point saat thread dibuat
  • TAC memeriksa start address pada konteks thread baru
    • Mengambil Win32 start address melalui NtQueryInformationThread
    • Melakukan iterasi daftar modul yang dimuat untuk memeriksa apakah start address berada dalam rentang modul yang valid
  • Jika start address tidak berada dalam rentang modul mana pun yang dimuat, TAC menyimpan deteksinya lalu memicu exception privileged instruction untuk menghentikan thread tersebut

Pemeriksaan lain dan kesimpulan

  • Ada kode pemeriksaan yang belum diketahui fungsinya yang memeriksa apakah AllocationGranularity dari NtQuerySystemInformation bernilai 0x10000
    • Ini tampaknya menandai virtual machine atau versi Windows kustom
  • Karena TAC sangat bergantung pada daftar modul yang terhubung, TAC memeriksa apakah InMemoryOrderModuleList di PEB adalah daftar kosong
    • Membuatnya kosong kemungkinan besar juga akan merusak proses itu sendiri
  • Pada akhirnya, TAC adalah anticheat mode pengguna dengan kemampuan berikut
    • lookup API saat runtime
    • deteksi hook yang dibuat buruk
    • deteksi overlay eksternal
    • deteksi hook DirectX internal
    • pemeriksaan hook pada API yang digunakan
    • pemeriksaan debugger dan jejak debugging
    • deteksi AllocConsole
    • deteksi CreateRemoteThread
    • syscall stub spoofed dan terenkripsi
  • Arxan membantu TAC dengan obfuscation kuat, penghambat analisis statis, teknik yang merusak IDA Pro, pemantauan modifikasi .text, serta fungsi anti-debug miliknya sendiri
  • Kode yang mirip TAC juga digunakan pada game Call of Duty modern

1 komentar

 
GN⁺ 2025-01-21
Komentar di Hacker News
  • Pada 2021, akun CS:GO Linux mengalami masalah pada indikator trust, turun ke kuning lalu merah, dan meski bukan pemblokiran resmi, pada praktiknya berfungsi seperti sanksi
    Akibatnya, ia terus dipasangkan dengan cheater sehingga sulit mencari rekan tim
    Belakangan diketahui bahwa pengguna Linux lain yang memakai GPU Radeon dan VRAM 16GB atau lebih juga mengalami masalah serupa, lalu dibuatlah issue GitHub untuk melacak masalahnya: https://github.com/ValveSoftware/csgo-osx-linux/issues/2630
    Setelah diselidiki, tampaknya Valve menjatuhkan sanksi kepada pengguna Linux dengan konfigurasi hardware tertentu, terutama kartu Radeon dengan VRAM 16GB atau lebih yang saat itu tergolong cukup baru
    Pada akhirnya masalah itu diperbaiki setelah seorang pengguna menghubungi gaben secara langsung: https://github.com/ValveSoftware/csgo-osx-linux/issues/2630#...
    Ada dugaan bahwa ini mungkin karena Valve, yang sedang menyiapkan peluncuran Steam Deck, mulai memperhatikan pengalaman pengguna Linux

    • Mungkin saja Gabe Newell memang orang baik?
    • Saya kurang paham bagaimana menjatuhkan sanksi kepada pengguna Linux bisa membuat pengalaman pengguna Linux jadi lebih baik
      Tapi tetap menarik
    • Saya penasaran bagaimana mereka bisa tahu indikator trust turun ke kuning lalu merah
      Apakah itu disimpulkan dari kualitas permainan yang memburuk, atau memang ada cara untuk memastikannya
      Setahu saya, indikator trust disembunyikan untuk mencegah penyalahgunaan
  • Cheating pada akhirnya adalah masalah manusia
    Dengan pengaman dan heuristik yang dijelaskan dalam tulisan itu, 90% cheater terang-terangan bisa disaring, dan anti-cheat seperti itu pada dasarnya saya anggap sebagai arah yang baik
    Namun anti-cheat harus bekerja secara konservatif, dan pada akhirnya pemain serta adminlah yang harus menyelesaikannya
    Game multiplayer online harus berjalan di server yang dikelola manusia, dan harus ada admin selama sebagian besar waktu saat pemain terhubung
    Lebih baik lagi jika adminnya dikenal oleh pemain, dan saat tidak ada admin, moderasi ringan seperti vote kick atau vote ban juga harus dimungkinkan
    Tidak ada perbedaan mendasar antara mengusir cheater dan mengusir orang yang menyalahgunakan chat
    Pada akhirnya, saya pikir satu-satunya bentuk server yang realistis untuk game multiplayer online adalah server privat atau server komunitas
    Proses mengendalikan cheater dan pelaku penyalahgunaan tidak boleh berupa sistem laporan yang diterima lalu diproses secara asinkron; admin game harus cepat melakukan kick atau ban
    Jika sebuah game hanya memungkinkan permainan online melalui server matchmaking milik publisher, dan penanganan cheater atau penyalahguna chat hanya berupa laporan lewat formulir web, jangan beli atau mainkan game itu; pilihlah dengan dompet Anda

    • Syarat bahwa game multiplayer online harus berjalan di server yang dikelola manusia terdengar cukup absurd jika mempertimbangkan skalanya
    • Kedengarannya seperti mengusulkan agar setiap game punya wasit yang terlihat semua orang, lalu setiap kali ada pelanggaran dilakukan peninjauan video
      Bisa saja ada organisasi terpisah yang mengawasi para wasit, tapi lebih baik main game saja
    • Saya tidak mengerti mengapa pengelolaan oleh manusia dianggap satu-satunya solusi yang memungkinkan
      Apex Legends berjalan baik dengan sistem laporan dan anti-cheat yang kuat, dan di Rocket League moderasi yang sebagian besar otomatis juga bekerja efektif
    • Secara umum saya setuju, tetapi ada cara lain juga
      Nomor telepon, verifikasi manual lewat foto, kewajiban bermain 10 jam sebelum mode kompetitif, rekomendasi dari pemain lain, atau di atas syarat-syarat semacam itu, game pass sekali bayar seharga 5 dolar juga bisa dipakai
      Jika belum melihatnya, saya merekomendasikan presentasi anti-cheat AI dari Valve
      Pekerjaannya cukup menarik, dan mereka mengklaim dapat menangkap 99% cheater
      Tentu saja, metode cheating yang sangat halus tetap ada
  • Ia menjalani pertarungan hukum selama 2 tahun untuk membatalkan pemblokiran permanen palsu dari Activision, dan Activision kalah karena tidak bisa menunjukkan satu pun bukti cheating: https://antiblizzard.win/2025/01/18/my-two-year-fight-agains...

    • Saya mengalami hal yang sama di League of Legends
      Saya sama sekali tidak pernah cheating, tetapi diblokir tanpa penjelasan; saya rutin memainkan tiga akun, dan dua akun lainnya tidak diblokir
      Customer support terus hanya berkata, “setelah ditinjau, pemblokiran ini benar,” dan tidak memberi informasi apa pun agar saya bisa memperbaiki apa yang dianggap salah
      Saya punya beberapa skin paling langka di game itu, sudah bermain ribuan jam sejak 2009, dan hanya bermain ARAM; tidak masuk akal kalau saya mempertaruhkan akun yang punya nilai emosional besar untuk cheating di mode paling kasual
      Belum pernah ada pengalaman terkait game yang membuat saya se-stres itu, dan berkat seorang kenalan di industri yang memeriksa secara internal, pemblokiran itu dicabut tanpa alasan yang jelas
      Saya masih bermain, tetapi hampir setiap kali saya teringat pemblokiran palsu itu, dan sepertinya League akan menjadi game multiplayer kompetitif terakhir yang saya luangkan waktu untuk mainkan
      Ada juga perasaan tidak ingin bermain lagi karena takut hal seperti itu terjadi lagi
    • Saya juga pernah terkena pemblokiran permanen palsu
      Di konsol, cheating hampir mustahil; butuh waktu sangat lama bagi saya hanya untuk mencapai Gold 1 biasa-biasa saja di ranked, dan saya tidak pernah mendapat peringatan atau laporan atas tindakan apa pun, tetapi saya diblokir permanen tanpa penjelasan
      Alih-alih berjuang seperti penulis itu, saya memutuskan tidak akan pernah lagi mengeluarkan uang untuk produk Activision, dan menurut saya semua orang seharusnya begitu
    • Bagian yang mengatakan bahwa jika Anda bermain bagus, seseorang bisa melihat profil Anda, memeriksa jam bermain, lalu langsung melihat label merah “saya cheater” membuat saya penasaran apakah label itu bisa dianggap pencemaran nama baik
      Di AS mungkin lebih sulit, tetapi setahu saya di Inggris atau England, pihak tergugat harus membuktikan bahwa pernyataan itu benar
    • Mengerikan membayangkan harus menjalani perjuangan seperti itu
      Untung saya hampir tidak bermain shooter multiplayer, dan saya benar-benar tidak ingin kehilangan library Steam saya yang sangat besar
    • Tulisan itu sendiri layak diajukan sebagai kiriman terpisah, dan sangat menarik
  • Saya sangat penasaran dengan obfuscation jump
    Semoga ada orang yang pernah melakukan lebih banyak reverse engineering bisa menjawab
    Saya penasaran apakah unconditional jump memang begitu umum sampai sulit disaring dengan prasyarat tertentu; akhir fungsi punya return sehingga tampaknya mudah ditemukan, tetapi apakah mungkin menganalisis stack untuk mengetahui ke mana fungsi melakukan return lalu mencari call tepat sebelum return address
    Saya belum banyak melakukan pemrograman assembly x86, jadi mungkin saja saya salah memahami cara kerjanya

    • Ada teknik-teknik keren untuk mengurai control flow graph flattening dengan melakukan symbolic execution memakai emulator seperti angr atau https://github.com/cea-sec/miasm
      Dengan framework PIN dari Intel juga bisa dilakukan analisis yang menarik
      Tulisan yang mungkin membantu ada di sini: https://calwa.re/reversing/obfuscation/binary-deobfuscation-..., https://www.nccgroup.com/us/research-blog/a-look-at-some-rea...
    • Unconditional jump sangat umum, dan assembly x86 setelah optimisasi secara umum sangat berantakan
      Banyak fungsi tidak berakhir dengan ret
    • Video yang melakukan reverse engineering sebagian Guitar Hero 3 ini mungkin menarik karena membahas teknik serupa yang dipakai untuk mengobfuscate kode game secara kuat: https://www.youtube.com/watch?v=A9U5wK_boYM
    • Ada beberapa masalah umum
      Sebagian jump palsu, dan sebagian jump masuk ke tengah instruksi
      Decompiler tidak bisa menangani situasi ketika ada dua instruksi di lokasi yang sama
      Misalnya, pada jmp 0x1234, opcode jmp dilewati dan 0x1234 diasumsikan sebagai instruksi yang valid
      Pada sebagian branch, stack rusak, tetapi itu bisa saja disengaja untuk memicu exception
      Jadi instruksi seperti lea RAX, [rsp + 0x99999999999] bisa diganti menjadi nop untuk memperbaiki dekompilasi, tetapi exception yang disengaja juga bisa terlewat
      IDA tidak menangani hal semacam ini dengan baik, jadi saya memakai lisensi Binary Ninja, dan mudah membuat skrip untuk meng-inline fungsi bagi decompiler
      Menurut saya IDA sulit menangani dengan benar situasi ketika jump saling memakai ulang potongan kode, karena potongan kode di antara jump hanya bisa menjadi milik satu fungsi
      Sepertinya orang-orang lebih jarang memakai Binary Ninja karena pernah ada bug pada game Blizzard, tetapi itu sudah diperbaiki lewat laporan bug sekitar setahun lalu
    • Jump spesifik ini tampaknya cukup mudah disaring
      Ini adalah obfuscation yang dimaksudkan untuk merepotkan pengguna tool jadi yang umum, terutama IDA Pro
      Kebanyakan obfuscation tujuannya hanya membuat orang cukup kesal sampai pindah ke proyek lain
  • Tindakan mencabut fitur produk setelah penjualan harus dilarang oleh hukum, sekalipun ada dalam kontrak atau EULA
    Pemblokiran tidak boleh merampas kepemilikan game itu sendiri, dan jika itu terjadi harus ada refund
    Jika harus sampai putusan pengadilan agar refund terdorong, maka di atas biaya lisensi, biaya pengacara, dan biaya pengadilan harus ada ganti rugi tiga kali lipat
    Misalnya, bentuk di mana seseorang diblokir dari Steam sehingga semua pembeliannya dibatalkan harus mustahil secara hukum
    Meski login akun diblokir, item dan inventaris harus tetap bisa diperdagangkan, karena itu diperoleh pelanggan yang membayar dengan meluangkan waktu nyata
    Jika ingin menegakkan aturan etika dalam game multiplayer, game itu tidak boleh menarik uang, atau pengguna berbayar harus memiliki hak terkait pemblokiran
    Pemblokiran harus mengikuti prinsip proporsionalitas, melibatkan manusia, serta memiliki prosedur dan catatan sidang banding yang biayanya dibatasi pada harga lisensi dan hanya ditanggung jika kalah

    • Melakukan cheating pun tidak membuat seseorang diblokir dari Steam
      Paling parah, akun diberi tanda public shaming pada game VAC
      Orang bermain game multiplayer untuk bersenang-senang dan berinteraksi dengan orang lain, jadi jika cheating atau perilaku buruk lain berdampak pada orang lain, penggunaan layanan multiplayer memang harus diblokir
    • Saya tidak tahu apa bedanya dengan ngebut saat mengemudi
      Kalau mengganggu masyarakat, membayar konsekuensinya adalah prinsip yang cukup universal
    • Menurut saya tidak masalah kalau cheater benar-benar kena akibatnya
      Saya pikir mereka boleh saja kehilangan uang sungguhan
      Namun pemblokiran karena kesalahan adalah masalah lain
      Dan yang diblokir itu bukankah game terkait yang tidak bisa lagi dimainkan, bukan seluruh akun Steam?
    • Mungkin lebih baik diberi label cheater saja, lalu hanya dibuat bermain dengan cheater lain
    • Jika melakukan cheating atau merusak permainan pemain lain, sudah sepantasnya kehilangan hak akses
      Pemain lain juga sudah membayar
  • Di COD sebenarnya tidak perlu repot-repot cheating
    Bug-nya begitu banyak sampai game-nya melakukannya untuk Anda
    Di ranked, game kadang memuat senjata api alih-alih pisau, dan hal itu mungkin terjadi karena ada case atau if-else yang jelas salah dalam pemeriksaan loadout senjata ranked; kalau senjata yang terlihat di pemilih loadout tidak diizinkan, sepertinya default-nya menjadi XM4
    Ini hampir satu-satunya game yang saya tahu di mana versi ranked lebih rusak daripada versi casual

  • Saya penasaran orang-orang belajar hal seperti ini dari mana
    Saya ingin belajar lebih banyak sampai setidaknya bisa memahami separuh tulisannya, tapi tidak tahu harus mulai dari mana

    • Sekitar 15 tahun lalu saya banyak belajar dengan membaca buku Eldad Eilam, Reversing: Secrets of Reverse Engineering
      Bukunya sudah lama, tetapi sangat bagus, dan membuat kita mengikuti berbagai teknik serta latihan praktik
      Tool modern memang agak berbeda dibanding saat itu, tetapi instruction set x86 dan assembly secara umum tidak banyak berubah
      Salah satu hasil terbesar bagi saya adalah mengenal crackme
      Itu adalah binary tantangan kecil yang dibuat untuk belajar reverse engineering, semacam gembok latihan dalam komunitas lockpicking
      Seingat saya, buku itu menyertakan beberapa di CD-ROM, dan kalau dicari online juga banyak
      Mencoba latihan seperti ini sendiri adalah jalan untuk belajar
      Jangan langsung mencoba me-reverse engineer COD dari awal; harus membangunnya secara bertahap
    • Dulu saya mulai dari tutorial Lena151: https://github.com/kosmokato/Lena151
    • Kalau dulu, saya mungkin akan menyarankan pergi ke Gamedeception dan bergaul di sana, tapi sepertinya situs itu menghilang beberapa tahun lalu
      Salam untuk orang-orang yang dulu membaca UnknownCheats, cs.rin.ru, dan sebagainya
    • UnknownCheats adalah salah satu tempat terbaik untuk materi semacam ini
      Saya juga aktif di sana, dan terutama lebih tertarik pada anti-cheat di ruang pengguna Linux, khususnya bagaimana VAC bekerja
    • https://pwn.college adalah materi edukasi yang sangat bagus
  • Saya pernah sedikit me-reverse engineer sebuah MMO populer berbasis Horde/Alliance, dan ternyata hampir mengikuti langkah-langkah yang sama, termasuk hash ekspor FNV32
    Karena melihat trik yang sangat mirip, rasanya hampir seperti cara yang sama
    Saya penasaran apakah itu dipacking dengan teknologi proteksi yang sama

    • Engine Source 2 juga menggunakan fnv untuk melakukan hash pada skema, yaitu properti entitas
    • Masuk akal kalau setelah merger mereka memakai ulang Warden pada kekayaan intelektual Activision
  • Signature scanning benar-benar kuat
    Itu juga bagian paling adiktif bagi saya dalam reverse engineering
    Proses membuat daftar signature lalu menulis binding bahasa skrip agar bisa memanggil function pointer tersebut terasa menyenangkan
    Ini juga menjadi dasar banyak platform mod pihak ketiga, karena mereka perlu menyediakan API bermakna bagi modder yang tidak diekspos oleh developer utama

    • Saya tidak tahu apa itu signature scanning, tetapi menemukan materi untuk yang penasaran: https://www.unknowncheats.me/forum/general-programming-and-r...
    • Benar
      Setahu saya beberapa plugin Source engine juga memakai cara ini saat diperlukan
      Namun kebanyakan tampaknya memakai offset dari pointer virtual function table
  • Saya bertanya-tanya apakah mungkin atau masuk akal untuk mencegah cheating dengan menandatangani status game secara digital secara berkala, atau memasukkan semacam proof of work
    Saya mulai merasa bahwa cheating adalah masalah yang terlalu sulit untuk dicegah
    Saya sedang membuat FPS online kecil dan murah, dan alih-alih memakai software anti-cheat, saya mempertimbangkan untuk membiarkan pengguna saling percaya dan mencari cheater sendiri, atau menggunakan AI seperti Valve
    Sepertinya saya akan membiarkan pemain mengelola dan menjalankan server sendiri
    Bisa saja ada syarat seperti menghubungkan nomor ponsel, skor reputasi dari pemain lain, KTP atau metode autentikasi kuat lain, verifikasi manual lewat foto seperti aplikasi kencan, atau 10 jam bermain sebelum mode kompetitif
    Menurut saya pemain hardcore akan bersedia menjalani prosedur seperti ini demi mengurangi cheater

    • Kalau Anda sudah cukup banyak bermain game online, Anda akan tahu bahwa pemain tanpa henti mengajukan tuduhan cheating hanya dengan bukti yang sangat sedikit
      Ada juga penyalahgunaan sosial dengan melaporkan pemain yang tidak disukai agar diblokir
      Dalam sistem seperti itu, false positive akan jauh lebih banyak daripada anti-cheat mana pun
    • Pada level tinggi, cukup simulasikan game tanpa cheat, tanda tangani itu, lalu tangani cheat secara terpisah