Pertanyaan ini telah ada di pikiran saya untuk sementara waktu ... terutama karena saya melihat bot untuk semua jenis permainan seperti WoW dan lainnya. Pertanyaanku adalah; bagaimana bot tahu apa yang muncul di layar? Saya tidak bermain WoW jadi contoh saya mungkin salah tetapi jika misalnya ada monster, bagaimana bot tahu di mana monster itu ada di layar dan bagaimana ia tahu bagaimana berinteraksi dengannya?
Bisakah Anda menerapkan ini pada game apa pun atau spesifik untuk setiap game? Saya minta maaf jika pertanyaannya tidak jelas ... dan saya tidak bertanya bagaimana membuat bot, lebih bertanya bagaimana mereka mendeteksi sesuatu di layar sebagai hal yang cukup menarik bagi saya!
Terima kasih sebelumnya :)
Jawaban:
Ada banyak titik di mana bot bisa menyuntikkan dirinya ke dalam gim.
Layar adalah salah satunya, tetapi sejauh ini bukan yang paling berguna. Namun, saya pernah melihat aimbot yang sangat awal untuk Counter Strike yang menggunakan kode warna. Itu datang dengan model karakter alternatif dengan tekstur satu warna (permainan mod-friendly cukup untuk memungkinkan ini) dan kemudian hanya mendeteksi piksel dari warna-warna itu. Namun, bukan metode yang sangat efektif. Itu sudah cukup kikuk saat itu, dan menjadi kurang dan kurang layak karena mesin grafis menjadi lebih dan lebih kuat, yang berarti semakin detail untuk membingungkan algoritma pengenalan optik.
Poin lainnya adalah membaca memori secara langsung [1] . Dimungkinkan untuk memiliki satu program di komputer Anda membaca memori yang lain. Jadi pengembang hanya perlu mencari tahu di mana memori alamat permainan menyimpan informasi yang relevan dengan bot. Ada alat yang membantu pengembang menemukan apa yang mereka inginkan dengan membuat gambar memori dan menyediakan berbagai alat pencarian. Penanggulangannya adalah dengan menggunakan pengacakan tata letak alamat, tetapi bot pintar mungkin masih dapat menemukan apa yang mereka cari secara otomatis.
Dimungkinkan untuk memodifikasi game executable itu sendiri. Untuk melakukan ini, pengembang bot harus dapat membaca dan memprogram assembler, yang tidak sulit dengan beberapa latihan. Mereka kemudian mencari kode yang menangani informasi yang mereka minati dan menulis ulang untuk meneruskannya ke bot mereka. Sebuah langkah pencegahan yang mungkin dari perspektif pengembang game adalah menggunakan obfuscator untuk membuat kode assembler game kurang mudah dibaca, tetapi ini biasanya tidak baik untuk kinerja dan ada alat untuk banyak obfuscator yang membalikkan pekerjaan mereka.
Dan kemudian ada netcode. Dalam game online, server mengirimkan properti dan posisi semua objek dalam game melalui jaringan. Aliran data jaringan antara server dan klien dapat dicegat dan dianalisis. Alat populer untuk melakukan ini adalah wireshark. Saat pengembang merekayasa balik netcode, mereka dapat menulis bot yang memotong lalu lintas jaringan seperti yang dilakukan Wireshark dan menggunakan informasi tersebut untuk mengambil keputusan. Ketika pengembang lebih termotivasi, mereka bahkan dapat mengembangkan klien game lengkap dari awal yang mengimplementasikan protokol jaringan dan memainkan game tanpa memiliki output grafis. Bot seperti itu sangat populer di kalangan petani emas karena tanpa output grafis klien biasanya jauh lebih ramah sumber daya, yang berarti mereka dapat menjalankan banyak dari mereka sekaligus di server kecil.
1: Karena Anda menyebutkan WoW, ada baiknya menunjukkan bahwa program pembotolan WoWGlider awal dan terkenal menggunakan akses memori langsung. Blizzard memiliki subprogram bernama Warden yang dirancang untuk mendeteksi dan memblokir program luar agar tidak mengakses kondisi permainan internal WoW. Karena program bot menghindari perlindungan ini dan membaca memori tanpa izin, gugatan 2006 MDY v Blizzard diputuskan mendukung Blizzard dengan alasan bahwa pembuat bot mendorong dan memungkinkan penggunanya untuk melakukan pelanggaran hak cipta dan melanggar DMCA .
sumber
Bot adalah pemain. Mereka hanya membaca posisi pemain / monster dari server sama seperti yang dilakukan pemain lain dan menggunakan nilai-nilai tersebut dikombinasikan dengan skrip AI sederhana untuk melakukan tindakan dalam permainan dengan mensimulasikan ketukan keyboard dan klik mouse secara terprogram. Jika bot benar-benar memiliki algoritma untuk mendeteksi monster apa yang ada di layar dan berinteraksi dengannya, itu akan menjadi perangkat lunak yang cukup mengesankan yang akan bernilai jutaan. Itu pada dasarnya AI untuk robot.
sumber
Phillip sudah memberikan tinjauan yang luar biasa tentang bagaimana sebagian besar bot beroperasi, tetapi saya hanya ingin membahas beberapa hal dengan lebih detail, karena saya memiliki sedikit pengalaman pribadi yang berkembang pada atau untuk semua jenis bot yang dia bahas.
Di Runescape, ada sebuah proyek besar (RSBot) yang akan menyalin isi memori dari klien Runescape ke dalam memori lokalnya, di mana ia kemudian dapat melihat seluruh keadaan permainan tanpa ada risiko klien menangkapnya. Dibutuhkan sedikit rekayasa terbalik untuk menentukan di mana dalam memori untuk mencari untuk menemukan pointer ke data, tetapi begitu mereka melakukannya, mereka membuka API untuk mengambil keuntungan dari informasi. Itu akan tahu persis apa yang ada di dunia dengan mendapatkan koordinat suatu objek dan kemudian mengubahnya dengan matriks transformasi kamera untuk mendapatkan posisi di layar. Topeng hit juga dapat dibaca, jadi sepele untuk menentukan dengan tepat berapa kisaran untuk memindahkan mouse ke dalam untuk mendapatkan hasil yang diinginkan.
Bot menyediakan banyak informasi debug, seperti anotasi yang memberitahu pengembang koordinat genteng mana, ID mana yang dimiliki objek ini, ID apa yang dimiliki item yang diberikan, dll. Informasi ini kemudian dapat digunakan untuk membuat bot. Proses pembuatan skrip bot sebenarnya sebenarnya cukup sederhana. Kerangka kerja ini menyediakan banyak fungsi utilitas, seperti
move_to(world_coordinates)
ataumouse_move(x,y)
yang akan melakukan tindakan yang ditentukan dengan cara yang agak dapat dipercaya (menggerakkan mouse di sepanjang spline acak, berulang kali bergerak melalui minimap dan layar, dan sebagainya)Juga di Runescape, Anda memiliki opsi untuk secara drastis mengurangi kualitas gambar. Sebenarnya cukup mudah untuk membuat bot jenis tertentu dengan memfilmkan layar dan menerapkan beberapa konsep visi komputer dasar untuk membangun model dunia. Saya membuat bot kutukan dan bot peleburan menggunakan teknik ini, yang keduanya bekerja cukup baik. Itu hanya akan mengambil bingkai, meningkatkan saturasi sebanyak mungkin, dan kemudian mencoba untuk mengekstrak pola dari itu yang kemudian dapat menghasilkan peta probabilitas untuk zona klik.
Dalam kasus bot kutukan, targetnya adalah iblis yang lebih rendah, yang hanya merupakan benda merah besar, yang sepele untuk ditemukan. Dalam kasus peleburan bot, ia akan mencari trapesium oranye kecil yang dikelilingi oleh abu-abu, dan itu akan menjadi tungku. Itu juga akan mencoba untuk menemukan bentuk besar, abu-abu 'L', yang akan menjadi meja bank. Itu hanya dilakukan dengan downscaling dan heuristik dasar. Itu juga bisa mengarahkan dirinya dengan kompas yang berguna di sebelah minimap, sehingga bisa mengarahkan kamera pada posisi yang lebih dapat diandalkan untuk menemukan objek target.
Di berbagai game Nexon, server sangat mempercayai klien. Saya menyalahgunakan ini satu ton di Maplestory dengan memodifikasi peta untuk menghilangkan bahaya atau menambahkan warps sehingga bot tidak harus hampir sama canggihnya. Saya juga akan memonitor lalu lintas ke dan dari server untuk membangun model dunia yang kemudian dapat digunakan untuk dengan cepat menemukan dan membunuh monster.
Setelah saya menyadari bahwa saya tidak benar-benar memainkan MMO lagi dan hanya mengotomatiskannya, saya memutuskan untuk berhenti bermain sama sekali. Jika saya tidak khawatir mengekspos diri secara legal, saya mungkin bisa melakukan pembunuhan dengan menjual bot MMO, tetapi saya benar-benar tidak ingin digugat. Itu sebabnya saya menghabiskan waktu saya melakukan pemrograman nyata hari ini!
sumber
Jawaban Phillip bagus, tetapi hanya catatan singkat tentang pola Model / View / Controller , atau singkatnya MVC.
Layar Anda adalah bagian dari "tampilan", yang menyajikan data dari "model", yang merupakan keadaan sebenarnya dari permainan jika Anda mau. Bot, dan karakter Anda, semua 'ada' (dalam arti tertentu) dalam model. Bayangkan jika Anda mencabut layar Anda - permainan akan terus berlanjut meskipun tampilan telah hilang.
Dalam gim berjejaring, konsep "model" sedikit rumit, karena Anda sebenarnya memiliki banyak model. Anda memiliki model di server, dan kemudian model di setiap klien, yang memperbarui sendiri sebagian karena data yang diterimanya dari server. Anda dapat menganggap "model" sebagai meliputi model server dan model klien Anda, atau Anda dapat menganggapnya sebagai hanya model klien Anda sendiri. Either way, ini adalah tempat bot tinggal. Jadi, "persepsi" mereka, yang dapat kita gunakan sebagai singkatan untuk input dan status data mereka, didasarkan pada keadaan model pada waktu itu dan interaksi antara entitas / objek yang berbeda dalam model itu. Dalam praktiknya, setiap bot mungkin memiliki fungsi yang disebut "refreshState" yang berjalan sekali per frame atau sesuatu, dan yang menyebabkannya memperbaruinya '
sumber
Mereka dapat membaca coords dari file atau server tetapi juga dengan sistem deteksi tabrakan sinar. Adalah umum untuk menggunakan sinar yang bergerak dari bot (dalam kasus itu) ke luarnya. Jika ray bertabrakan dengan sesuatu maka ia mengembalikan beberapa informasi ke bot seperti jika apa yang ditemukan ray adalah pemain, bot, binatang atau dinding sederhana. Itu karena dalam kasus pemain dan bot misalnya mereka memiliki kapsul tak terlihat yang melibatkan mereka sepenuhnya dengan informasi tentang jenisnya misalnya (manusia, bot, ...). Dengan itu mereka dapat menghindari menabrak dinding dan elemnts lainnya jika mereka mengikuti Anda misalnya.
Anda dapat melihat bagian Pendeteksian tabrakan dari Halaman ini
sumber