Bagaimana cara mendeteksi dan mencegah penyalahgunaan (botting) API game online?

50

Saya kadang-kadang mengerjakan ide permainan di waktu luang saya. Gameplay dan konten membuatnya untuk diimplementasikan sebagai game multiplayer online yang dibangun dengan teknologi web yang mapan. Anda harus tahu bahwa itu termasuk dalam genre strategi dan simulasi. Itu berarti: Tidak berkeliaran dengan karakter atau serupa tetapi hanya tindakan atom (mengenai komunikasi client-server) seperti "build thing A on location X".

Pada satu titik saya menyadari ada masalah besar: memiliki front end berbasis browser mengandalkan REST API back end membuatnya lebih dari target yang sangat baik untuk bot. Sementara otomatisasi diinginkan untuk bisnis, itu adalah racun bagi permainan yang menyenangkan. Saya mengalaminya secara langsung dalam permainan browser di masa lalu adalah pemain paling sukses adalah bot yang menaklukkan semua orang.

Dari sudut pandang saya saat ini, saya tidak melihat kemungkinan untuk melindungi terhadap bot ketika membangun game online multi-pemain berdasarkan REST API. Pengecualian: Menjadikannya sumber terbuka sehingga semua orang dapat meng-host instansnya sendiri untuk grup privat atau bahkan hanya diri sendiri (agar tidak terganggu oleh sentakan dengan bot).

Apakah ada cara untuk membedakan antara pemain yang jujur ​​yang baru saja mengatur alarm untuk tindakan selanjutnya yang mungkin dan bot secara otomatis mengambil setiap kesempatan pada penampilannya? Selain itu pertunjukan seperti sumbat seperti captcha. Jika tidak, saya akan berpikir tentang tumpukan teknologi lain yang membuatnya setidaknya jauh lebih sulit untuk mengacaukan komunikasi client-server (protokol biner terenkripsi eksklusif dalam klien kode asli).

Sunting : Terima kasih, jawaban Anda menginspirasi tetapi juga membuat saya menyadari bahwa tindakan penanggulangan khusus tidak dapat dilakukan dengan melangkah lebih jauh ke detail permainan. Namun, itu akan terlalu banyak untuk pertanyaan di Stack Exchange. Jadi saya hanya ingin menunjukkan poin yang paling penting:

  • Pemain mengeksplorasi, mengembangkan, dan mengelola kapan pun mereka mau. Bisnis mereka masih berjalan dengan baik ketika offline (ini adalah permainan yang damai, tidak ada senjata yang terlibat). Hanya ekspansi dan kemajuan yang membutuhkan aksi pemain. Tindakan tersebut dibatasi oleh:
  • waktu adalah salah satu sumber daya utama (seperti dalam pelatihan keterampilan EVE Online). Semua proses dalam game membutuhkannya. Tidak ada gunanya online 24/7. Pemain rata-rata harus sudah sukses dengan menghabiskan tidak lebih dari satu jam setiap hari dalam satu atau dua sesi ( kira-kira , konsepnya masih dalam pengembangan).
Peter
sumber
9
Tidak bisakah kamu membuat game sedemikian rupa sehingga orang lain memprogram atau membeli bot tidak merusak kesenangan para pemain manusia? Dan kedua, memprogram bot / AI untuk bermain game bisa menyenangkan dengan sendirinya; seharusnya tidak merusak kesenangan orang lain.
Kasper van den Berg
27
"Otomatisasi [...] adalah racun bagi permainan yang menyenangkan." Sangat tidak setuju. Jika permainan Anda benar-benar menyenangkan, mengapa menghukum pemain karena melewatkan bagian di mana mereka tidak memilikinya? Jika elemen dari gim Anda begitu membosankan sehingga para pemain lebih memilih untuk tidak bermain dan merasakan keinginan untuk mengambil alih naskah, itulah masalah sebenarnya yang harus diatasi.
Marcks Thomas
6
Contoh Anda memiliki respons yang mudah: berikan alat kepada pemain agar mereka tidak membutuhkan bot. mis. biarkan mereka mengantri suatu tindakan, daripada mendorong mereka untuk online pada saat yang tepat atau mendapatkan / membuat alat untuk melakukannya untuk mereka.
4
Alasan utama orang menggunakan bot adalah karena bagian dari permainan itu membosankan dan membosankan bagi mereka (jika mereka bersenang-senang mereka hanya akan memainkannya). Jelas pemain Anda menikmati kompetisi dan tantangan, tetapi bukan gameplay yang dapat diautomatiskan. Anda bisa mencoba mengubah desain game untuk menghapus bagian-bagian yang digunakan orang untuk bot, atau menyeimbangkan kembali game Anda untuk membuat keputusan yang lebih sulit dan bermakna yang hanya bisa dibuat oleh pemain manusia, dan bot tidak bisa (seperti pilihan strategi yang mendalam) . Jika tidak, Anda akan ditakdirkan untuk perlombaan senjata, dan pembotolan akan menang.
Biasa
6
tl; dr: Orang-orang tidak akan suka bersaing dengan pria dengan alarm dan tidak ada pekerjaan apa pun selain melawan pria dengan bot - dan itulah yang akan mendorong mereka untuk menjalankan bot.
Random832

Jawaban:

51

Jika orang ingin bot, saya pikir Anda tidak bisa menghentikan mereka.

Tentu saja Anda dapat menerapkan banyak tindakan yang membuat pembotolan lebih atau kurang menyakitkan. Tetapi Anda hanya dapat melakukan banyak hal sebelum basis kode Anda berubah menjadi kekacauan raksasa yang harus dipertahankan, rawan kesalahan, dan mengganggu pengguna yang sah. Sementara itu botters akan selalu menemukan cara untuk mengalahkan tindakan balasan Anda:

  • Ada lebih banyak dari mereka daripada kamu
  • Mereka memiliki lebih banyak waktu luang (Anda harus membagi waktu antara pengembangan aktual dan pemeriksaan bot, mereka dapat meretas kode bot mereka sepanjang hari)
  • Saat Anda membuat pelindungan yang aneh dan menantang, pembuat bot akan didorong lebih lanjut karena menyenangkan untuk merusak perlindungan bot Anda
  • Jika ada pasar gelap orang yang mendapatkan keuntungan secara komersial dari bot, semakin sulit Anda membuatnya untuk menulis bot, bot kerja yang lebih berharga menjadi, jadi Anda memberi insentif pembotolan

Anda pada dasarnya akan terjebak dalam perlombaan senjata dengan botters, dan berdasarkan logika di sepanjang garis poin di atas, serta pengalaman saya dengan permainan seperti itu, Anda tidak akan bisa mengimbangi.

Beberapa pengembang game menerapkan langkah-langkah anti-kecurangan yang sangat agresif: Misalnya, Steam akan memindai memori dan sistem file untuk mencari peretasan, dan pelanggar dapat dihukum dengan kehilangan akun senilai ratusan dolar. Namun masih ada bot dan peretasan lainnya untuk permainan Steam, dan beberapa dari mereka bahkan bekerja separuh waktu. Tidak seperti mereka, Anda memiliki API yang terbuka lebar untuk pengguna, dan tidak ada kontrol atas komputer pengguna. Ini adalah perjuangan berat sejak awal.

Masalah yang Anda coba selesaikan pada dasarnya adalah tes Turing: Kecuali itu adalah tes Turing yang sangat mudah, karena Anda tidak dapat menipu dengan memerlukan masalah AI yang sulit seperti bahasa. Tidak peduli berapa banyak heuristik yang Anda buat, itu akan sepele bagi seorang botter untuk menambahkan sedikit keacakan ke tindakan bot untuk membuatnya meniru hampir persis manusia. Bahkan tidak akan terlalu sulit untuk membuat bot menonton Anda bermain sedikit, dan belajar bagaimana tindakan waktu persis seperti Anda. Kemudian ketika Anda melarang bot, tulisan botter kata-kata kasar besar pada forum tentang bagaimana dia hanya pemain yang berdedikasi (dan mungkin dia adalah benar-benar positif palsu) dan penonton inti Anda dari hardcore pemain akan bangkit mengangkat senjata melawan Anda.

Buat game ini terlalu menyenangkan untuk di-bot

Alasan utama seseorang menggunakan bot adalah karena ada bagian dari permainan yang ingin mereka lewati. Jika mereka menikmati permainan dan merasa senang, mereka tidak akan membiarkan bot memainkannya, mereka akan memainkannya sendiri.

Tetapi jika gim ini sangat membosankan, mengapa memainkannya? Agaknya, beberapa bagian permainan membosankan dan wajib untuk sampai ke bagian yang menyenangkan. Misalnya, dalam MMOs semua orang suka naik level, tetapi tidak ada yang mau membunuh 42.324 tikus racun undead yang mengerikan untuk mendapatkan XP. Jadi mereka membiarkan bot menggiling dan jatuh untuk memainkan bagian yang menyenangkan.

Ini bukan kritik terhadap Anda atau game Anda, tetapi jelas setidaknya beberapa pemain merasa membosankan. Anda harus melihat apakah Anda dapat mengurangi bagian-bagian yang membosankan ini, dan melihat ke dalam menambahkan keputusan yang lebih sulit dan bermakna: Bot tidak pandai strategi yang dalam atau berpikir lateral dibandingkan dengan kecerdasan manusia, dan selain itu manusia menikmati membuat keputusan permainan yang sulit.

Dari uraian Anda, saya mendapat kesan bahwa ini adalah permainan peramban yang mirip dengan Travian, di mana ada antrean bangun dengan satu urutan bangunan terbaik dan "pemeliharaan" tertentu (seperti menjaga serangan pertanian tetap berjalan) tugas-tugas yang harus dilakukan. Anda bilang tidak ada konflik, tetapi dalam drama MMO apa pun dan politik kecil tidak bisa dihindari (IMO itu adalah daya tarik utama) jadi saya yakin para pemain Anda menemukan cara untuk bertukar pikiran. Dengan jenis permainan ini, banyak kebosanan berasal dari tugas "pemeliharaan" ini - yang benar-benar ingin dilakukan pemain adalah membuat aliansi dan memainkan permainan diplomasi dengan klan lawan, pemeliharaan kemudian menjadi semacam pajak di mana Anda harus bangun hingga alarm di jam ganjil untuk diizinkan masuk ke bagian diplomatik yang menyenangkan. Jadi hentikan kebosanan:

Sayangnya, pendekatan ini mungkin tidak selalu berhasil. Tidak semua pemain memiliki toleransi yang sama terhadap kebosanan atau konsep kesenangan yang sama. Anda bisa memiliki mekanik terkemuka yang dinikmati 99% pemain Anda, tetapi 1% terasa membosankan. Bagaimana jika 1% kemudian mulai menulis bot, merusak kesenangan untuk 99%? Tetapi pada akhirnya, itu adalah masalah derajat. Anda tidak akan pernah bisa menghapus pembotolan sepenuhnya, tetapi Anda dapat meminimalkan kerusakan.

Botol undercut

Banyak efek yang sangat negatif dari bot berasal dari penulis bot mengkomersilkan karya mereka. Jika ini masalahnya, Anda cukup bersaing dengan bot. Banyak game online real-time yang sudah memiliki fitur premium yang memungkinkan skipping waktu dan otomatisasi (seperti antrian build yang diperluas). Jumlah ini untuk bot resmi yang disetujui pengembang. Jika Anda memilikinya, dan memberi harga dengan tepat, pemain akan membeli premi Anda alih-alih membeli bot. Kabar baiknya adalah, Anda bertanggung jawab atas API, sehingga Anda selalu memiliki keuntungan yang kuat dalam mengembangkan otomatisasi kualitas untuk gim Anda sendiri, jadi kali ini ini merupakan pertarungan yang sulit bagi para pembotolan.

Ini tidak akan menghilangkan pembotolan amatir, atau orang-orang yang merasa bahwa premi Anda tidak bernilai baik untuk uang, jadi sekali lagi efektivitas pendekatan ini tergantung pada situasinya.

Cari mereka secara manual

Seperti yang saya katakan di atas, apa yang Anda lakukan pada dasarnya adalah tes Turing. Karena interaksi dengan manusia terkenal dianggap sebagai tantangan tes Turing yang sulit, Anda dapat mencoba memanfaatkannya.

Periksa pemain tingkat atas secara manual dan lihat apakah Anda menemukan sesuatu yang mencurigakan. Anda bahkan mungkin bisa lolos dengan sesekali menyelidiki mereka dengan cara yang hanya terbatas pada imajinasi Anda, untuk melihat apakah Anda dapat menipu bot untuk melakukan sesuatu yang tidak akan dilakukan.

Walaupun sulit untuk menulis algoritma yang akan mendeteksi bot secara andal, tidak sulit bagi manusia untuk belajar cara menemukannya. Saya pikir banyak game browser menggunakan strategi ini, dan itu bisa sangat efektif. Kerugiannya adalah bahwa Anda harus melakukan banyak pekerjaan yang membosankan sepanjang waktu, atau Anda perlu membayar master game untuk melakukan patroli bot biasa.

Hebat
sumber
4
Saya memilih jawaban ini karena menurut saya itu adalah pertanyaan yang paling dipikirkan dengan melihat pertanyaan satu langkah ke belakang, jauh dari detail teknis. Saya sudah lama berpikir untuk memilih Adam Davis 'karena berisi beberapa ide yang sangat bagus tentang "bagaimana caranya".
Peter
1
@Alvvar Saya senang itu membantu. Karena pertanyaannya mendapat begitu banyak suara, Anda mungkin juga memasang tautan ke permainan Anda di profil Anda :)
Superbest
2
Ugh, apakah Travian masih ada? Saya bermain itu bertahun-tahun yang lalu, lalu berhenti ketika saya menyadari gameplay pada dasarnya bisa dirubah menjadi "semoga menang sosiopat terbaik."
Mason Wheeler
25

Pertahanan terbaik dan satu-satunya yang efektif terhadap bot adalah mendesain gim Anda sedemikian rupa sehingga para pemain tidak merasa perlu mengotomatisasi sejak awal. Ketika pemain Anda mengotomatiskan tugas-tugas sederhana yang sebenarnya tidak memerlukan keterampilan, itu adalah pertanda bahwa antarmuka pengguna Anda kurang dan mereka mengganti fitur UI yang tidak ada.

  • Apakah gim Anda menyertakan tugas berulang di mana pemain melakukan aksi yang sama berulang-ulang untuk mengerjakan sesuatu?

    Jadikan aspek-aspek ini dari gim Anda kurang berulang dan lebih menarik untuk dimainkan dan dimainkan ulang.

  • Apakah permainan Anda mengharuskan pemain untuk melakukan tindakan pada saat-saat yang tidak nyaman bagi mereka, seperti di tengah malam atau ketika mereka sedang bekerja?

    Izinkan mereka untuk mengantre pesanan (seperti "build X1, lalu X2, lalu X3, mulai masing-masing segera setelah sumber daya tersedia") atau jadwalkan tindakan pada waktu tertentu di muka (build X pada 3:22 AM).

  • Apakah game Anda mengharuskan pemain untuk bertindak atas peristiwa dalam rentang waktu yang sangat singkat?

    Izinkan mereka untuk mengkonfigurasi permainan dengan cara yang memicu tindakan ini secara otomatis

    • ketika membangun X dihancurkan, segera bangun kembali.
    • Ketika seseorang menawarkan sumber daya X dengan kurang dari uang Y, segera beli hingga Z unit.
    • Jual otomatis semua sumber daya X saat stok melebihi Y unit, tetapi tidak kurang dari Z uang per unit.

Pantau komunitas Anda. Ketika Anda memperhatikan bahwa mereka mengotomatiskan hal lain, mencuri ide dan menambahkan opsi untuk mengotomatiskannya ke permainan inti.

Philipp
sumber
5
Ini adalah saran bagus yang juga membuat permainan Anda lebih baik, dan mengurangi risiko permainan Anda membuat pemain Anda menjadi lebih seperti bot sendiri. ;-) Jika menjadi bot membuat pemain hebat dalam gim Anda, mungkin gim tersebut harus melibatkan lebih banyak pemikiran manusia. Saya tidak setuju bahwa itu satu-satunya pertahanan yang efektif, tetapi saya setuju bahwa itu adalah yang terbaik secara keseluruhan. +1
Dronz
7
Meskipun saya setuju dengan semangat ini, sayangnya premis bahwa Anda dapat membuat permainan tidak membosankan adalah kekeliruan. Bagaimana jika ada 10.000 pemain Anda suka mekanik X, tetapi 10 merasa membosankan dan menulis bot, merusak kesenangan 10.000? Inilah yang terjadi dengan aimbot di FPSs: Solusi analognya adalah membuat hal yang bertujuan kurang, tetapi banyak pemain suka menyempurnakan keterampilan membidik mereka. Hanya sedikit yang merasakan kebutuhan untuk aimbot.
Biasa
1
Saya sangat menyukai saran Anda, saya berharap lebih banyak game mau melakukan sesuatu seperti ini daripada meminta Anda untuk berada di sekitar 24/7 untuk menjadi efisien
meneldal
@Superbest sebenarnya saya bisa melihat solusi di mana Anda dapat merancang bertujuan menjadi lebih penting tetapi masih sulit untuk botting menjadi efektif, misalnya jika Anda merancang senjata untuk memiliki laju tembakan yang lambat dan sasaran yang tepat lebih bermanfaat maka pemain dapat mengeroyok botter karena dia tidak bisa menembakkan peluru yang cukup untuk setiap pemain yang menyerangnya
Matthew Pigram
2
Inilah intinya! Jika ada klik mudah satu tombol pada saat X bot memungkinkan untuk gim Anda, maka tulis sendiri dan berikan ke semua orang! - Biarkan pemain memutuskan sebelumnya, apa yang harus dibangun setelah waktunya siap ... Kegembiraan dalam Game adalah tentang keputusan!
Falco
23

Jangan membuat game Anda begitu rentan terhadap upaya johnny-on-the-spot

Pertama, pastikan bahwa pemain yang hanya memainkan permainan Anda selama dua puluh menit atau satu jam sehari dalam sekali duduk tidak merugikan besar bagi pemain yang membiarkannya terbuka di tempat kerja dan bermain 16 jam sehari.

Ini mungkin memerlukan perubahan dalam mekanika permainan Anda - misalnya jatah gerakan yang mengisi saat Anda tidak bermain dan memungkinkan pemain untuk melakukan banyak gerakan cepat ketika mereka bisa bermain, daripada mekanisme yang membutuhkan pemeliharaan konstan.

Ini akan melemahkan pembuat bot karena mereka dapat mengikuti permainan, dan mereka tidak memiliki kebutuhan mendesak untuk membuat robot yang melakukan tindakan untuk mereka.

Membutuhkan info server untuk setiap tindakan, dan membuat respons server lebih lambat

Ketika seorang pemain memainkan game, mereka meminta halaman yang menampilkan UI yang berinteraksi dengan mereka untuk bergerak. Anda bisa menyisipkan elemen, seperti elemen formulir yang tidak terlihat, yang memverifikasi mereka benar-benar meminta halaman terlebih dahulu. Nomor acak yang disimpan server Anda bersama dengan ID pengguna dan halaman apa yang terakhir mereka minta. Ketika suatu tindakan masuk, server memverifikasi bahwa pengguna ini telah mengembalikan nomor acak yang sama, dan sedang melakukan suatu tindakan pada halaman yang terakhir kali mereka lihat. Ini tidak hanya berarti bot harus melakukan dua panggilan API untuk setiap tindakan, tetapi pengguna biasa tidak dapat membuka banyak halaman dan melakukan tindakan cepat berurutan (jika ini merupakan masalah dengan desain Anda).

Dua panggilan API memberi Anda cara untuk memperlambat bot nanti. Pada akhirnya Anda akan melihat pola yang mencurigakan, dan Anda akan dapat menemukannya. Ketika server Anda mendeteksi pola yang mencurigakan, ia dapat menunda respons API dalam panggilan pertama satu detik - yang akan mengganggu pengguna, tetapi akan sangat memperlambat bot. Lebih lanjut, jika permintaan kedua kembali "terlalu cepat" (apa pun artinya untuk game Anda) maka Anda dapat menolaknya, atau memuat kembali halaman dengan beberapa kesalahan dalam game atau alasan untuk meminta pengiriman kembali. "Kamu tidak bisa membangun secepat itu. Luangkan waktu kamu." misalnya.

Dengarkan pengguna Anda dan Anda akan menemukan apa yang mereka sukai, dan apa yang mengganggu mereka.

Buat gerakan dan tindakan membutuhkan pemikiran

JIKA game ini adalah tombol klik sederhana, maka Anda tidak bisa berbuat banyak tentang bot. Pertimbangkan untuk mendesain ulang gim Anda sehingga gim itu sendiri melakukan tes seperti captcha.

Tidak tahu apa-apa tentang permainan, saya tidak bisa menyarankan banyak Jika melibatkan memilih tempat meletakkan bangunan, desain antarmuka sehingga pengguna dapat memilih di mana saja, meskipun ada penempatan yang jelas yang tidak akan berfungsi. Atau mungkin pengguna harus mencocokkan orientasi dengan benar agar penempatan berhasil. Jika melibatkan memilih tindakan, sertakan daftar tindakan yang lebih panjang, beberapa di antaranya tidak masuk akal dalam situasi tertentu.

Sertakan pemeriksaan bot acak yang sangat sederhana

Tambahkan dialog sesekali, "Apakah Anda yakin?" misalnya. Ubah pertanyaan dan susun kata dengan sering dan gunakan itu sebagai pemeriksaan langsung untuk bot.

Ubah API

Ubah API sesering mungkin, memaksa mereka untuk benar-benar melewatkan halaman web untuk variabel yang benar dan bagaimana mereka dikembalikan ke server web. Jika Anda mengembangkan antarmuka menggunakan templat, ganti templat dengan kode yang menggunakan hash atau generator variabel acak untuk setiap nama variabel. Kemudian mulailah menggunakan javascript untuk menyandikan respons, dan ubahlah penyandian itu sesering mungkin. Anda mungkin dapat menulis perangkat lunak yang melakukan semua ini untuk Anda, dan apakah semuanya acak sepanjang waktu, atau cukup lakukan templat statis yang sesekali Anda ubah.

Adam Davis
sumber
Jika permainan browsernya, perubahan API dan semua itu tidak masalah. Kecuali jika Anda bersedia untuk mengubah semua teks di klien setiap saat (Itu akan mengerikan bagi pemain. UI berubah sepanjang waktu .. ugh ..) dan jika Teks tidak berubah, maka sangat sepele untuk menemukan teks. Bahkan hanya dengan jQuery. Ketika saya bermain Travian dan saya baru saja akan menyerang, saya membuka banyak tab, mengatur semua info siap dan ketika waktu habis, gulir melalui semua yang mengklik kirim. Tidak membotolkan, hanya cepat, tetapi penundaan api Anda akan memukul saya dengan keras.
Katu
1
@ Katu Bergantung pada gimnya, banyak elemen UI mungkin sudah berupa gambar. Mengubah nama gambar, mengubah hash file gambar sedikit, dll akan membuatnya lebih menantang. Minimal Anda memaksa mereka untuk mengunduh setiap elemen hanya untuk mencari tahu apa yang harus dihadapi. Mereka dapat menggunakan javascript untuk menemukan elemen apa yang ada di atas di lokasi tertentu di layar, dan kemudian mencoba mengaktifkannya, tetapi meskipun begitu Anda dapat membuatnya lebih sulit dengan meminta klien javascript melaporkan kembali lokasi klik mouse daripada klik elemen.
Adam Davis
@ Katu Anda pada akhirnya benar, itu bisa diatasi, tetapi jika Anda membuat upaya yang diperlukan cukup besar maka Anda akan mengurangi jumlah orang yang mau pergi ke upaya, yang mungkin cukup.
Adam Davis
2
Masalah dengan "memindahkan penjatahan" adalah Anda memberi tahu semua pemain bahwa mereka hanya bisa bermain selama 30 menit sehari atau berapa lama untuk menggunakannya, yang mengganggu mereka, membatasi pendapatan iklan Anda, dan menciptakan godaan besar-besaran untuk membiarkan mereka membeli lebih banyak melalui transaksi mikro.
Random832
Saya setuju dengan penempatan dan orientasi bangunan! Itu sekaligus merupakan nilai tambah bagi pengguna yang sah dan negatif untuk bot.
miva2
13

Anda tidak bisa menghentikan mereka. Tetapi Anda dapat membuat hidup mereka sengsara, karena mereka harus menghabiskan banyak waktu untuk menulis bot mereka, dan memperbarui mereka. Anda harus menggunakan apa pun yang harus Anda verifikasi jika pengguna valid.

  • Periksa header permintaan, dan tolak permintaan dengan nilai yang tidak valid. Baik setel header khusus atau cek untuk agen pengguna seperti yang ada. Tentu itu mudah diatasi, tetapi bahkan lebih mudah untuk diperiksa. Jika botwriter tidak berpengalaman, mungkin perlu beberapa saat baginya untuk memikirkannya! Tugas Anda adalah memaksa banyak dari mereka untuk menyerah, kan?
  • Anda mungkin memiliki semacam tanda tangan hash atau sesuatu dalam permintaan Anda, yang dihasilkan di sisi klien dengan beberapa fungsi. Nah, terus ganti saja! Jadikan sebagai skrip non-cacheable yang terpisah, dan ubah secara acak. Buat beberapa dari mereka, atau sunting dengan cepat, dengan menambahkan garam acak ke proses hashing. Meskipun sekali lagi, mudah diatasi, ini akan memaksa mereka untuk mengawasi fungsi Anda. Mereka mungkin juga membutuhkan semacam pipa penyebaran konstan untuk menjaga pengguna diperbarui. Jika tidak, bot mereka akan mulai mengirim permintaan hash yang salah. Anda bahkan dapat mencekal pengguna yang melakukannya terlalu sering. Pengguna yang valid akan tetap bergerak di sekitar klien Anda, sehingga mereka akan mengambil kembali fungsi hashing setiap saat. Hanya ingat untuk memperbarui sisi server juga (backend berbasis script akan sangat membantu di sini).
  • Pantau efisiensi penggunaan sumber daya. Jika mereka dibelanjakan secara instan, setelah sesuatu menjadi terjangkau, atau jika penggerebekan baru selalu dikirim dalam 1-2 detik dari yang terakhir, 24/7, maka Anda berurusan dengan beberapa pemain hardcore atau bot. Anda meminta captcha dari orang tersebut, dan memaksanya logout. Jika dia terus membuat permintaan setelah keluar (bot ditulis dengan buruk!) Maka itu adalah bot. Jika dia mencoba masuk berkali-kali tanpa hasil, maka dia mungkin bot. Jika dia butuh beberapa jam untuk relog, maka dia mungkin menjadi bot (bot mungkin meminta bantuan manusia pada saat ini, dan pemilik mungkin tidur).
  • AKU P. Yang ini mungkin menghilangkan penjualan bot. Jika seseorang menulis bot dengan $$$ dalam pikiran, mereka mungkin tidak ingin membagikan sumber. Mereka akan menjual waktu bot sebagai gantinya. Jika mereka serakah, mereka mungkin menggunakan mesin tunggal, dengan satu / beberapa ips. Itu berarti banyak pengguna akan mulai berbagi IP. Ini berisiko, karena kasus yang sama adalah untuk orang yang berbagi jaringan. Anda harus memeriksa apakah ada pemeriksaan sebelumnya yang berhasil pada IP tertentu, dan memutuskan secara manual apakah itu kelompok pengguna yang sah, atau sepasukan bot.
Polan
sumber
5
Walaupun ide-ide ini cerdas, mereka tidak hanya mudah dikalahkan, tetapi saya akan tergoda untuk menulis bot hanya karena tampaknya sangat menyenangkan untuk mengalahkan mereka, bahkan jika saya tidak terlalu peduli dengan melakukan yang terbaik dalam permainan.
Biasa
1
Sebagian besar poin tidak berguna. Anda berpikir mundur. Tidak peduli apa yang Anda lakukan dengan semua hash, header, dll, "tautan untuk membeli peningkatan untuk kedai saya" harus bekerja, bukan? Sekarang, saya membuat bot, yang menemukan tautan itu, setiap 2 jam klik itu. Saya tidak peduli sihir apa yang Anda lakukan di balik itu, tetapi bot saya mengkliknya persis seperti yang dilakukan pengguna. Penggunaan sumber daya adalah hal yang baik, tetapi dapat meningkatkan banyak kesalahan positif, yang membutuhkan kerja manusia. IP .. Misalnya bot travian (tidak bebas) adalah browser web khusus, yang mengirim semuanya dari ip Anda.
Katu
@Superbest ya mudah untuk mengalahkan keamanan ini sekali. Tetapi jika itu sedikit berubah, Anda harus melacak perubahan itu dan memperbarui bot Anda. Itu berarti menghabiskan lebih banyak waktu, menulis bot untuk menghabiskan lebih sedikit waktu bermain :). Tak berarti.
Polan
@ Katu Anda benar, metode saya tidak akan menghentikan bot yang merupakan plugin untuk browser dan hanya mengklik pada klien. Tapi apa pun di luar, mungkin ada masalah. Hanya menemukan tautan dan serangan replay tidak akan berhasil, karena hash mungkin memerlukan cap waktu dan mengetahui kunci semi-rahasia. Fungsi Hashing akan berubah setiap sekarang dan kemudian jadi jika Anda tidak memiliki penerjemah javascript, Anda harus menulis ulang bot Anda setiap saat untuk memasukkan perubahan itu. Metode-metode itu tidak akan menghentikan orang dari menulis bot. Itu hanya akan membutuhkan pemeliharaan yang konstan, jadi Anda tidak akan menghemat banyak waktu dari menggunakan bot :).
Polan
2
@Polan Tidak masalah jika menulis bot lebih menyenangkan daripada bermain di tempat pertama.
Hebatnya
8

Secara umum, membedakan antara bot dan manusia sepenuhnya secara otomatis adalah sulit, beberapa bentuk proses pengambilan keputusan yang dibantu manusia berfungsi paling baik.

Apa yang akan saya lakukan: mendefinisikan beberapa heuristik yang mengisyaratkan pengguna mungkin bot - melakukan banyak tindakan, melakukan hal-hal 24/7, ... Lalu jika heuristik ini melewati batas tertentu, lakukan pemeriksaan invasif.

Anda dapat secara manual memindai aktivitas pemain dan melihat apakah tampaknya OK. Atau Anda melakukan captcha saat berikutnya pengguna online. Atau (bahkan lebih kuat) kirimkan kepadanya pesan obrolan di mana Anda menjelaskan bahwa Anda mencurigai dia adalah bot dan ingin dia merespons dengan sesuatu yang mirip manusia untuk membuktikan bahwa dia bukan bot (bagaimana harimu? Apa film favoritmu? ... - Anda dapat memiliki banyak dari mereka). Jika dia tidak merespons sama sekali, dia mungkin seorang bot. Jika dia merespons, Anda secara manual memeriksa jawaban untuk persamaan manusia dan larangan robot. Jika heuristik Anda masuk akal, hanya sebagian kecil pengguna yang akan ditanyai dan jumlah respons yang akan dipindai akan sedikit. Dan jika Anda menyimpan serangkaian pertanyaan pribadi dan berubah, tidak mungkin robot dapat dipersiapkan, kecuali seseorang menemukan SkyNet.

Martin Modrák
sumber
8
Ketika Skynet pertama kali menjadi sadar diri, semua orang mengira itu akan mencoba mengambil alih kekuatan militer dunia. Mereka tidak tahu bahwa satu-satunya tujuannya adalah untuk mendominasi ekonomi MMO favoritnya. Demikianlah perang manusia-AI yang hebat dicegah, dengan mengarahkan ambisi agresif mereka ke suatu tempat di mana kerusakan terbatas dapat dilakukan.
Dan Bryant
1
Masalah dengan pesan adalah bahwa botter dapat dengan mudah masuk untuk bermain setiap hari, dan menjalankan bot pada akun yang sama untuk menangani kesibukan. Bot akan mengabaikan pesan, manusia akan menjawab keesokan paginya, dan sulit untuk menghukum pemain karena membalas beberapa jam terlambat untuk pesan yang dikirim di tengah malam.
Biasa
@Superbest Jika bot terus berusaha bermain saat manusia tidur, Anda memiliki indikasi yang cukup bagus bahwa itu adalah bot. Masalah dengan mengajukan pertanyaan adalah bagaimana jika pemain tidak berbicara bahasa Inggris?
Loren Pechtel
@ LorenPechtel Nah, bagaimana Anda akan tahu kapan mereka tidur? Ada banyak orang dengan jadwal tidur yang sangat tidak biasa di luar sana. Hanya karena mereka tidak menjawab bukan berarti itu bot, mungkin mereka hanya merasa tidak ingin menjawabnya dan memutuskan untuk melakukannya nanti. Adapun bahasa, mungkin pemain berbicara bahasa permainan, jika tidak, bagaimana mereka setuju dengan aturan atau ToS? Bukan berarti sulit membedakan bot dari orang asing dalam percakapan.
Superbest
@Superbest Kesan saya adalah bahwa permainan tidak akan berlanjut sementara pertanyaannya tetap tidak teratasi. Jika mereka terus mengirim perintah yang sia-sia, cukup jelas itu adalah bot yang melakukannya.
Loren Pechtel
8

Merangkul botter. Anda telah membangun API yang tenang, sempurna untuk seorang pembuat kode untuk bereksperimen dengan otomatisasi permainan Anda. Rancang gameplay Anda sehingga bot tidak mendapatkan keuntungan lebih dari pemain manusia karena sedang otomatis - menghilangkan keuntungan dari kecepatan eksekusi dll yang dimiliki mesin; desain game Anda sehingga bot memberikan pendapatan yang sama dengan pemain manusia, jika mungkin - atau setidaknya menyediakan lingkungan yang lebih kaya untuk menarik lebih banyak pemain manusia.

Pertanyaannya adalah, mengapa orang membuat bot untuk gim Anda, dan apakah mereka akan membayar uang untuk hak istimewa?

MatthewHari ini
sumber
4

Saya belum tentu setuju dengan jawaban lembut-ilmu tapi ada yang hal-hal teknis yang dapat Anda lakukan untuk mendeteksi botters dan beberapa hal yang hanya membuat hidup lebih sulit bagi mereka.

  • Nilai peringkat akun berdasarkan seberapa besar Anda mencurigai mereka menggunakan bot. Ini akan memberi makan ke beberapa teknik lain dan melindungi pengguna yang sah dari murka Anda.

  • Memutar kunci cookie sesi. Ini memastikan bot menjaga cookie-nya tetapi juga membuat botter lebih sulit membagikan cookie antara browser dan bot (yang sangat berguna saat mengembangkan dan menguji).

  • Nilai-batas tindakan tertentu. Berolahraga paling cepat Anda benar-benar bisa melakukan sesuatu, dan memantau seberapa cepat bot ini melakukannya. Mungkin juga layak menyimpan log yang sedang berjalan dan mengetahui standar deviasi. Bahkan jika seseorang hanya melakukan sesuatu setiap 10 detik, jika mereka melakukannya tepat setiap 10 detik mereka mungkin bot. Ubah peringkat mereka dan keluarkan.

  • Buat login lebih sulit di akun yang Anda curigai mungkin bot. CAPTCHA dan pertanyaan serta hal-hal lain yang tak terhindarkan membuat segalanya menjadi lebih sulit bagi calon perampok untuk secara otomatis menuliskan sesuatu.

  • Pantau pergerakan mouse / halaman. Ini cukup sederhana dengan javascript akhir-akhir ini, tetapi bot tidak akan memiliki gerakan mouse secara organik. Jika Anda tidak mendapatkan apa pun di antara "klik", itu mungkin seluler atau bot. Menyelidiki. Meskipun begitu, ini banyak data untuk dicatat ... Jadi, Anda mungkin ingin memesan ini untuk akun yang telah memicu langkah sebelumnya.

  • Buat alat untuk menautkan akun berdasarkan perilaku, IP, urutan tindakan, irama tindakan. Jika Anda akan melarang orang, pastikan Anda memiliki alat untuk memverifikasi kesalahan mereka secara manual.

  • Putar skema URL, variabel CSRF, dll dan sering-seringlah melakukannya. Ini adalah langkah besar dan mungkin membutuhkan lebih banyak pekerjaan di muka daripada yang layak, tetapi paling tidak, setiap akun yang tiba-tiba berhenti bekerja (atau terus memalu URL lama dan mengirim nama variabel lama - log it!) perlu tingkat indeks bot mereka meningkat.

Oli
sumber
3

Sudahkah Anda mempertimbangkan menjadikan bot sebagai bagian integral dari permainan? Sulit bagi bot untuk merusak gim untuk orang lain jika semua orang didorong untuk membuatnya. Tambahkan dukungan untuk skrip dan tiba-tiba dinamika permainan berubah dari strategi manajemen sumber daya manual ke strategi desain bot.

Kenneth Cochran
sumber
3

Buat server bot saja yang terpisah. Buat papan peringkat dan rayakan pemenangnya. Lihatlah data yang dihasilkannya. Larang pengguna dari severs normal yang profil perilakunya mirip bot.

dugaan
sumber
2

Apa pun yang Anda lakukan, ingat untuk TIDAK membuatnya lebih menjengkelkan bagi pemain sungguhan! Banyak tanggapan yang saya lihat (hasil halaman yang lebih lambat, tidak memungkinkan banyak halaman terbuka untuk memfasilitasi input yang lebih cepat, dll) juga akan mencegah pemain yang sah melakukan sesuatu dengan cepat, yang hanya akan membuat mereka frustrasi.

imho pendekatan termudah mungkin untuk menerapkan rekayasa sosial untuk masalah: 1) menambahkan klausa NO-BOT eksplisit untuk KL Anda, dan menambahkan bahwa mendeteksi aktivitas bot akan menghapus pemain dari daftar skor tinggi (atau memiliki label "penipu" "terlampir, jadi orang tidak frustrasi dengan mereka; jika Anda pergi ke rute itu, izinkan orang untuk menyembunyikan catatan penipu).

2) memeriksa perilaku bot-like (mis. Ping yang diatur waktunya secara teratur ke server, atau waktu yang hampir sempurna selama berjam-jam berturut-turut), dan jika demikian, masukkan akun ke "mode bot" - tampilkan captcha sesekali dan yang lainnya . jika ini diabaikan tetapi pemain tetap aktif memainkan game, tandai pemain sebagai "bot" dan singkirkan dia dari peringkat. jika mereka dialamatkan, tandai dia sebagai "pemain kekuatan" dan lepaskan dia dari daftar bot.

dengan cara ini sebagian besar pemain tidak pernah terpengaruh, gamer hardcore terpengaruh untuk waktu yang singkat, dan bot tidak "merusak permainan" untuk orang lain.

TI Troll
sumber
Bagaimana jika pemain listrik memutuskan untuk melakukan bot? Saya tidak berpikir 'menandai' pemain sebagai sesuatu yang masuk akal, itu sangat bisa dieksploitasi. Hanya bermain banyak selama beberapa hari kemudian setelah Anda mendapatkan bendera, jalankan bot dan tidak pernah ditangkap
Dan Pantry