บอทของเกมรับรู้โลกของเกมและเอนทิตีอื่น ๆ อย่างไร


52

คำถามนี้อยู่ในใจของฉันซักพัก ... ส่วนใหญ่เป็นเพราะฉันเห็นบอทสำหรับเกมทุกประเภทเช่น WoW และอื่น ๆ คำถามของฉันคือ; บอทรู้ได้อย่างไรว่าเกิดอะไรขึ้นบนหน้าจอ ฉันไม่ได้เล่น WoW ดังนั้นตัวอย่างของฉันอาจผิด แต่ถ้ามีตัวอย่างมีสัตว์ประหลาดบอทจะรู้ได้อย่างไรว่าสัตว์ประหลาดนั้นอยู่บนหน้าจอและรู้วิธีการโต้ตอบกับมันได้อย่างไร

คุณสามารถนำสิ่งนี้ไปใช้กับเกมใด ๆ หรือเฉพาะสำหรับแต่ละเกมได้หรือไม่? ฉันขอโทษถ้าคำถามไม่ชัดเจน ... และฉันไม่ได้ถามว่าจะทำบอทได้อย่างไรและถามเพิ่มเติมว่าพวกเขาตรวจจับสิ่งต่าง ๆ บนหน้าจอได้อย่างไรเพราะมันค่อนข้างน่าสนใจสำหรับฉัน!

ขอบคุณล่วงหน้า :)


14
เวลาส่วนใหญ่บอทเหล่านี้เชื่อมต่อกับหน่วยความจำของเกมและอ่านตำแหน่งขององค์ประกอบเกมโดยตรงแทนที่จะพยายามที่จะเข้าใจสิ่งที่อยู่บนหน้าจอ
Alexandre Desbiens

2
Aceboy1993 คุณเป็นโปรแกรมเมอร์หรือไม่? โปรดแก้ไขคำถามและแจ้งให้เราทราบด้วยวิธีใดวิธีหนึ่ง คำตอบอาจต้องทำแตกต่างกันเล็กน้อยขึ้นอยู่กับว่า
Panzercrisis

3
เพื่อให้ชัดเจน คุณกำลังพูดถึงระบบการเล่นเกมอัตโนมัติในตัวใช่ไหม? บอททองคำ, aimbots, และเช่นนั้น? หรือคุณแค่หมายถึงผู้เล่น AI?
Anko

สวัสดีฉันเป็นโปรแกรมเมอร์ ใช่ฉันกำลังพูดถึงบอทการขุดทองและเล็งบอท แต่ฉันก็สนใจผู้เล่น AI ด้วยเช่นกัน :)
TheRapture87

3
@ Aceboy1993 การครอบคลุมทั้งสองจะทำให้คำถามนี้กว้างเกินไป โปรดแยกพวกเขาออก
เสา

คำตอบ:


77

มีหลายจุดที่บอทสามารถฉีดเข้าไปในเกมได้

  • หน้าจอเป็นหนึ่งในพวกเขา แต่โดยไกลไม่ได้มีประโยชน์มากที่สุด อย่างไรก็ตามฉันเคยเห็น aimbot แรก ๆ สำหรับ Counter Strike ที่ใช้การเข้ารหัสสี มันมาพร้อมกับตัวละครแบบอื่นที่มีพื้นผิวเป็นสีเดียว (เกมนี้เหมาะสำหรับการดัดแปลง) และจากนั้นก็ตรวจจับพิกเซลของสีเหล่านั้น ไม่ใช่วิธีที่มีประสิทธิภาพมากนัก มันค่อนข้างล้าหลังแล้วและมีความเป็นไปได้น้อยลงเพราะเอ็นจิ้นกราฟิคมีประสิทธิภาพมากขึ้นซึ่งหมายถึงรายละเอียดที่มากขึ้นเพื่อสร้างความสับสนในอัลกอริธึมการรับรู้ด้วยแสง

  • อีกประเด็นหนึ่งคือการอ่านหน่วยความจำโดยตรง[1] เป็นไปได้ที่จะมีโปรแกรมหนึ่งโปรแกรมบนคอมพิวเตอร์ของคุณอ่านหน่วยความจำของโปรแกรมอื่น ดังนั้นผู้พัฒนาจำเป็นต้องค้นหาว่าหน่วยความจำใดที่อยู่ในเกมที่กำลังบันทึกข้อมูลที่เกี่ยวข้องกับบอท มีเครื่องมือที่ช่วยนักพัฒนาในการค้นหาสิ่งที่พวกเขาต้องการโดยการสร้างอิมเมจหน่วยความจำและจัดหาเครื่องมือการค้นหาที่หลากหลาย มาตรการตอบโต้คือการใช้การสุ่มเลย์เอาต์ที่อยู่ แต่สมาร์ทบ็อตอาจสามารถค้นหาสิ่งที่ต้องการได้โดยอัตโนมัติ

  • มันเป็นไปได้ที่จะแก้ไขเกมที่ปฏิบัติการได้เอง เพื่อที่จะทำสิ่งนี้ผู้พัฒนาบอตจำเป็นต้องสามารถอ่านและตั้งโปรแกรมในแอสเซมเบลอร์ซึ่งไม่ยากสำหรับการฝึกฝน จากนั้นพวกเขามองหารหัสที่จัดการกับข้อมูลที่พวกเขาสนใจและเขียนใหม่เพื่อส่งไปยังบอทของพวกเขา วิธีการแก้ไขที่เป็นไปได้จากมุมมองของผู้พัฒนาเกมคือการใช้ obfuscator เพื่อทำให้รหัสแอสเซมเบลอร์ของเกมอ่านได้น้อยลง แต่มักจะไม่ดีต่อประสิทธิภาพและมีเครื่องมือสำหรับผู้ obfuscators หลายคนที่ทำงาน

  • แล้วมีรหัสคือ ในเกมออนไลน์เซิร์ฟเวอร์จะส่งคุณสมบัติและตำแหน่งของวัตถุทั้งหมดในเกมผ่านเครือข่าย สตรีมข้อมูลเครือข่ายระหว่างเซิร์ฟเวอร์และไคลเอ็นต์สามารถดักจับและวิเคราะห์ได้ เครื่องมือยอดนิยมสำหรับการทำเช่นนี้คือwireshark. เมื่อนักพัฒนาทำการออกแบบวิศวกรรมโค้ดกลับพวกเขาสามารถเขียนบอทซึ่งขัดขวางการรับส่งข้อมูลเครือข่ายเช่นเดียวกับ Wireshark และใช้ข้อมูลเพื่อทำการตัดสินใจ เมื่อผู้พัฒนามีแรงจูงใจมากขึ้นพวกเขาสามารถพัฒนาไคลเอนต์เกมที่สมบูรณ์ตั้งแต่เริ่มต้นซึ่งใช้โปรโตคอลเครือข่ายและเล่นเกมโดยไม่ต้องมีกราฟิกเอาต์พุต บอทดังกล่าวเป็นที่นิยมมากในหมู่เกษตรกรทองคำเพราะหากปราศจากกราฟิกเอาท์พุทลูกค้ามักจะเป็นมิตรกับทรัพยากรมากกว่าซึ่งหมายความว่าพวกเขาสามารถเรียกใช้จำนวนมากได้ในคราวเดียวบนเซิร์ฟเวอร์ขนาดเล็ก


1:เนื่องจากคุณพูดถึง WoW เป็นสิ่งที่ควรค่าแก่การชี้ให้เห็นว่าโปรแกรม botting WoWGlider ที่เร็วและโด่งดังใช้การเข้าถึงหน่วยความจำโดยตรง Blizzard มีโปรแกรมย่อยชื่อ Warden ที่ออกแบบมาเพื่อตรวจจับและบล็อกโปรแกรมภายนอกไม่ให้เข้าถึงสถานะเกมภายในของ WoW เนื่องจากโปรแกรมบอทโกงการป้องกันนี้และอ่านหน่วยความจำที่ไม่ได้รับอนุญาตที่2,006 คดี MDY วี Blizzardก็ตัดสินใจในความโปรดปรานของพายุหิมะในบริเวณที่ชงบอทเป็นกำลังใจและช่วยให้ผู้ใช้ที่จะกระทำการละเมิดลิขสิทธิ์และละเมิดDMCA


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Josh

18

บอทเป็นผู้เล่น พวกเขาอ่านตำแหน่งของผู้เล่น / สัตว์ประหลาดจากเซิร์ฟเวอร์เหมือนกับที่ผู้เล่นคนอื่นทำและใช้ค่าเหล่านั้นรวมกับสคริปต์ AI แบบง่าย ๆ เพื่อดำเนินการในเกมโดยจำลองการกดแป้นพิมพ์และการคลิกเมาส์โดยทางโปรแกรม หากบอทมีอัลกอริทึมในการตรวจสอบว่ามอนสเตอร์ตัวใดที่อยู่บนหน้าจอและโต้ตอบกับมันนั่นจะเป็นซอฟต์แวร์ที่น่าประทับใจซึ่งมีมูลค่านับล้าน นั่นเป็นพื้น AI สำหรับหุ่นยนต์


2
มันง่ายกว่าที่จะทำการตรวจสอบการบดเคี้ยวและการฉายแสงเพื่อตรวจสอบว่าบอทจะเห็นสัตว์ประหลาดแล้วใช้สถานะภาพเคลื่อนไหวเพื่อตรวจสอบว่าสัตว์ประหลาดกำลังทำอะไรอยู่
วงล้อประหลาด

ในการทำเช่นนั้นคุณจะต้องทำวิศวกรรมย้อนกลับของเกมใช้การคัดเลือกเรย์และอ่านสถานะภาพเคลื่อนไหวของสัตว์ประหลาดซึ่งจะต้องใช้รหัสการฉีดและการแก้ไข. exe วิธีนี้ง่ายกว่าการอ่านแพ็กเกจเครือข่ายที่คุณได้รับจากเซิร์ฟเวอร์ (โดยใช้wiresharkตามที่ Phillip แนะนำ) แล้วเพียงแค่มีสคริปต์ AI เพื่อจำลองการทำงานของคีย์บอร์ด / เมาส์ตามแพ็กเก็ตเครือข่าย
dimitris93

2
ฉันสันนิษฐานว่าเป็นบอท "ฝ่ายตรงข้าม AI" มากกว่าบอตไคลเอนต์ที่ได้รับการดัดแปลง
วงล้อประหลาด

3
@ ratchetfreak โอ้ตอนนี้มันสมเหตุสมผลแล้ว การอ้างอิงของ WoW ในคำถามนั้นบอกเป็นนัยว่า "บอท" นั้นเป็นเกษตรกรทองคำไม่ใช่ฝ่ายตรงข้าม AI
dimitris93

7

Phillip ได้ให้ภาพรวมที่ยอดเยี่ยมเกี่ยวกับวิธีการทำงานของบอตส่วนใหญ่ แต่ฉันแค่อยากจะอธิบายรายละเอียดให้มากขึ้นเพราะฉันมีประสบการณ์ส่วนตัวเล็กน้อยที่พัฒนาขึ้นหรือสำหรับบอททุกประเภทที่เขาครอบคลุม

ใน Runescape มีโครงการขนาดใหญ่ (RSBot) ที่จะคัดลอกเนื้อหาของหน่วยความจำจากไคลเอนต์ Runescape ลงในหน่วยความจำท้องถิ่นซึ่งจะสามารถดูสถานะทั้งหมดของเกมโดยไม่มีความเสี่ยงที่ลูกค้าจะจับได้ จำเป็นต้องมีวิศวกรรมย้อนกลับเล็กน้อยเพื่อกำหนดตำแหน่งที่อยู่ในหน่วยความจำเพื่อค้นหาตัวชี้ไปยังข้อมูล แต่เมื่อพวกเขาทำเช่นนั้นพวกเขาเปิดเผย API เพื่อใช้ประโยชน์จากข้อมูล มันจะรู้ว่าอะไรอยู่ที่ไหนในโลกโดยการหาพิกัดของวัตถุแล้วแปลงมันด้วยกล้องเปลี่ยนเมทริกซ์เพื่อให้ได้ตำแหน่งบนหน้าจอ มาสก์ยอดฮิตสามารถอ่านได้ด้วยเช่นกันดังนั้นจึงเป็นเรื่องเล็กน้อยที่จะตัดสินว่าช่วงใดที่เลื่อนเมาส์ไปเพื่อให้ได้ผลลัพธ์ตามที่ต้องการ

บอทได้จัดเตรียมข้อมูลการดีบักไว้มากมายเช่นคำอธิบายประกอบที่บอกให้ผู้พัฒนาทราบว่าพิกัดใดที่ไทล์วัตถุนี้มี ID ใดที่ไอเท็มนั้นเป็นของไอเท็มที่กำหนดเป็นต้นข้อมูลนี้สามารถใช้เพื่อสร้างบอท กระบวนการจริงของการสร้างสคริปต์ bot นั้นค่อนข้างง่าย เฟรมเวิร์กนี้มีฟังก์ชั่นยูทิลิตี้มากมายเช่นmove_to(world_coordinates)หรือmouse_move(x,y)ที่จะทำการกระทำที่ระบุในทางที่ค่อนข้างน่าเชื่อ (เลื่อนเมาส์ไปตามเส้นโค้งแบบสุ่มเคลื่อนที่ซ้ำ ๆ ผ่านทั้งแผนที่ย่อและหน้าจอเป็นต้น)

นอกจากนี้ใน Runescape คุณมีตัวเลือกในการลดคุณภาพของกราฟิกลงอย่างมาก ที่จริงแล้วมันค่อนข้างง่ายที่จะทำบอทบางชนิดด้วยการถ่ายทำหน้าจอและใช้แนวคิดการมองเห็นคอมพิวเตอร์ขั้นพื้นฐานเพื่อสร้างแบบจำลองของโลก ฉันทำทั้งคำสาปบอทและการหลอมบอทโดยใช้เทคนิคนี้ซึ่งทั้งคู่ใช้ได้ผลดีทีเดียว มันแค่เอาเฟรมเพิ่มความอิ่มตัวของสีให้ได้มากที่สุดแล้วลองแยกรูปแบบออกมาจากที่มันสามารถสร้างแผนที่ความน่าจะเป็นสำหรับโซนคลิก

ในกรณีของคำสาปบอทเป้าหมายคือปีศาจน้อยกว่าซึ่งเป็นเพียงแค่สิ่งแดงขนาดใหญ่ซึ่งหาได้ง่าย ในกรณีของ ธ ​​ปท. ถลุงมันจะมองหาสี่เหลี่ยมคางหมูสีส้มเล็ก ๆ ล้อมรอบด้วยสีเทาและนั่นจะเป็นเตาหลอม นอกจากนี้ยังพยายามหารูปตัว L ขนาดใหญ่สีเทาอ่อนซึ่งจะเป็นโต๊ะทำงานของธนาคาร นั่นเป็นเพียงการลดขนาดและการวิเคราะห์พฤติกรรมพื้นฐาน นอกจากนี้ยังสามารถปรับทิศทางด้วยเข็มทิศที่มีประโยชน์ถัดจากแผนที่ย่อเพื่อให้สามารถปรับทิศทางกล้องให้อยู่ในตำแหน่งที่เชื่อถือได้มากขึ้นเพื่อค้นหาวัตถุเป้าหมาย

ในเกม Nexon ต่างๆเซิร์ฟเวอร์ต่างให้ความไว้วางใจกับลูกค้าเป็นอย่างมาก ฉันทารุณกรรมสิ่งนี้เป็นตันใน Maplestory โดยการแก้ไขแผนที่เพื่อกำจัดอันตรายหรือเพิ่มประลองยุทธ์เพื่อให้บอทไม่จำเป็นต้องมีความซับซ้อน ฉันจะตรวจสอบปริมาณข้อมูลเข้าและออกจากเซิร์ฟเวอร์เพื่อสร้างแบบจำลองของโลกซึ่งสามารถใช้เพื่อค้นหาและฆ่าสัตว์ประหลาดได้อย่างรวดเร็ว

เมื่อฉันรู้ว่าฉันไม่ได้เล่น MMO จริง ๆ อีกต่อไปและแค่เล่นมันอัตโนมัติฉันตัดสินใจที่จะหยุดเล่นทั้งหมด ถ้าฉันไม่กังวลเกี่ยวกับการเปิดเผยตัวเองอย่างถูกกฎหมายฉันอาจจะฆ่าบอท MMO ขาย แต่ฉันไม่อยากถูกฟ้อง นั่นคือเหตุผลที่ฉันใช้เวลาของฉันในการเขียนโปรแกรมจริงวันนี้!


อาเมนที่ย่อหน้าสุดท้าย ฉันพบว่าการเขียนโปรแกรมโดย 1) การเล่น WoW 2) การ botting WoW 3) เริ่มเขียน bot ของฉันเองสำหรับ WoW ความรู้ด้านการเขียนโปรแกรมที่ฉันได้รับในเวลาเพียง 2 ปีนั้นมีค่ามากกว่าสิ่งอื่นใดที่ฉันได้เรียนรู้ในขณะที่กำลังศึกษา
Sebastian Graf

2

คำตอบของ Phillip นั้นยอดเยี่ยม แต่เพียงบันทึกย่อเกี่ยวกับรูปแบบ Model / View / Controllerหรือ MVC สั้น ๆ

หน้าจอของคุณเป็นส่วนหนึ่งของ "มุมมอง" ซึ่งแสดงข้อมูลจาก "แบบจำลอง" ซึ่งเป็นสถานะที่แท้จริงของเกมหากคุณต้องการ บ็อตและตัวละครของคุณ 'มีอยู่' ทั้งหมด (ในแง่หนึ่ง) ภายในโมเดล ลองนึกภาพถ้าคุณถอดปลั๊กหน้าจอของคุณ - เกมจะดำเนินต่อไปแม้ว่ามุมมองจะหายไป

ในเกมเครือข่ายแนวคิดของ "แบบจำลอง" นั้นซับซ้อนเล็กน้อยเนื่องจากคุณมีแบบจำลองมากมาย คุณมีรูปแบบบนเซิร์ฟเวอร์และจากนั้นเป็นรูปแบบในแต่ละไคลเอนต์ซึ่งปรับปรุงตัวเองในส่วนหนึ่งเนื่องจากข้อมูลที่ได้รับจากเซิร์ฟเวอร์ คุณอาจคิดว่า "model" เป็นการรวมโมเดลของเซิร์ฟเวอร์และโมเดลของไคลเอ็นต์ของคุณหรือคุณอาจคิดว่ามันเป็นเพียงแค่โมเดลของลูกค้าของคุณเอง ไม่ว่าจะด้วยวิธีใดนี่คือที่ที่บ็อตอาศัยอยู่ ดังนั้น "การรับรู้" ของพวกเขาซึ่งเราสามารถใช้เป็นชวเลขสำหรับการป้อนข้อมูลและสถานะของพวกเขาจะขึ้นอยู่กับสถานะของรูปแบบในเวลานั้นและการมีปฏิสัมพันธ์ระหว่างหน่วยงาน / วัตถุที่แตกต่างกันภายในรูปแบบนั้น ในทางปฏิบัติบ็อตแต่ละตัวอาจมีฟังก์ชั่นที่เรียกว่า "refreshState" ซึ่งจะทำงานหนึ่งครั้งต่อเฟรมหรืออะไรบางอย่างและทำให้การอัพเดท '


0

พวกเขาสามารถอ่าน coords จากไฟล์หรือเซิร์ฟเวอร์ แต่ยังมีระบบตรวจจับการชน ray เป็นเรื่องปกติที่จะใช้รังสีที่ไปจากบอท (ในกรณีนั้น) ไปยังข้างนอกเขา หากรังสีปะทะกับบางสิ่งมันจะส่งคืนข้อมูลบางอย่างไปยังบอทเช่นถ้าสิ่งที่รังสีพบคือผู้เล่นบอทสัตว์หรือผนังเรียบง่าย นั่นเป็นเพราะในกรณีของผู้เล่นและบอทเช่นพวกเขามีแคปซูลที่มองไม่เห็นที่เกี่ยวข้องกับพวกเขาทั้งหมดด้วยข้อมูลเกี่ยวกับประเภทของมัน (มนุษย์ ธ ปท., ... ) โดยที่พวกเขาสามารถหลีกเลี่ยงการกระแทกกับผนังและองค์ประกอบอื่น ๆ หากพวกเขากำลังติดตามคุณเช่น

คุณสามารถดูส่วนการตรวจสอบการชนกันของหน้านี้


นั่นจะทำให้คุณต้องใส่รหัสเข้าไปในเกมจริง
dimitris93

ใช่แน่นอน มันเป็นโปรแกรมทั้งหมด แต่มันมีประโยชน์สำหรับเส้นทางฟรีหรือกรณีเช่นบอทดังต่อไปนี้คุณและอื่น ๆ ในเกมสามมิตินั้นเป็นวิธีที่พบได้บ่อยที่สุด AFAIK และได้ทำการศึกษาอย่างน้อยหนึ่งเกมที่ไม่ใช่ MMORPG ... อาจจะมีข้อมูลทั้งหมดบนเซิร์ฟเวอร์ แต่อาจแตกต่างจากเกม MMORK ขนาดใหญ่
Megasa3
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.