เทคนิคในการป้องกันลูกค้าที่ไม่เป็นทางการในการเล่นเกมเครือข่าย?


22

ในเกมเครือข่ายผู้เล่นหลายคนมีเทคนิคอะไรบ้างที่จะพยายามให้แน่ใจว่าผู้ใช้เชื่อมต่อกับแอปพลิเคชันไคลเอนต์อย่างเป็นทางการไม่ใช่แอพไคลเอ็นต์แฮ็กบางตัว

ฉันรู้ว่าอาจไม่มีวิธีที่แน่นอนในการทำเช่นนี้ แต่ฉันสนใจในเทคนิคที่สามารถใช้เพื่อลดปัญหาได้

ฉันสนใจเป็นพิเศษเกี่ยวกับเทคนิคใด ๆ ที่สามารถใช้สำหรับเกมบนเว็บ แต่ฉันคิดว่าส่วนใหญ่สามารถใช้งานได้ทั่วไป

ขอขอบคุณ!


บางคนเชื่อว่าการเล่นเกมบนคลาวด์ทั่วไปนั้นอยู่ใกล้ ๆ เป็นการแก้คำถามนี้อย่างสิ้นเชิง
Laurent Couvidou

คำตอบ:


13

นั่นเป็นปัญหาที่น่าสนใจ แต่ฉันคิดว่าคุณกำลังถามคำถามผิดที่นี่ ให้ฉันเริ่มต้นจากการตรวจหาวิธีไคลเอ็นต์ที่แฮ็ก:

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

นอกจากนั้นผู้ใช้สามารถใช้ไคลเอนต์ของคุณเองเพื่อโกง - โดยการจำลองการเคลื่อนไหวของเมาส์และคลิกเช่น

ดังนั้นคำถามควรจะเป็นวิธีการตรวจสอบผู้เล่นบอทหรือไม่

ที่นี่คุณมีตัวเลือกน้อย - วัดเวลาระหว่างการคลิก, การวัดความเร็วของการเคลื่อนไหวของเมาส์ - เมาส์เคลื่อนตรงจากจุด A ถึงจุด B หลาย ๆ ครั้งและเข้ากันได้กับ coords เดียวกันหรือไม่? การเคลื่อนไหวของผู้ใช้ทำซ้ำได้หรือไม่? หากเมื่อทรัพยากรใดที่ผู้ใช้กำลังรวบรวมหมดผู้ใช้จะไปดำเนินการอื่นหรือไม่รออีกหลายชั่วโมง? ในตอนท้ายของวันที่คุณสิ้นสุดการเขียนรหัสการจดจำรูปแบบ


4
เทคนิคการตรวจสอบบ็อตของคุณสามารถเอาชนะได้ภายในไม่กี่นาทีด้วยการเพิ่มเสียงรบกวนรอบ ๆ บอท
AsTeR

+1 ถึงสิ่งนี้; เนื่องจากการป้องกันนั้นเป็นไปไม่ได้ (และถ้ามีคนตั้งใจแน่วแน่จริงๆพวกเขาสามารถไปไกลถึงแฮ็คไดรเวอร์ซึ่งควรเน้นความจริงนั้น) การมุ่งเน้นของคุณควรจะตรวจจับแทน ฉันยังกล่าวเพิ่มเติมว่าชุมชนที่มีเหตุผลที่อาจสร้างเกมขึ้นมาจะมีการตรวจสอบตัวเองดังนั้นคุณจึงสามารถนำเสนอเครื่องมือที่ช่วยในเรื่องนั้นได้
Maximus Minimus

2
การป้องกันแบบเป็นโปรแกรมเป็นไปไม่ได้ซึ่งเป็นเหตุผลว่าทำไมเกมอย่าง WoW มีผู้ดูแลระบบจำนวนมากที่ตรวจสอบผู้คนที่ทำสิ่งที่ซ้ำ ๆ กันและถามคำถามเพื่อพิสูจน์ว่าพวกเขาเป็นมนุษย์
DampeS8N

1
@AsTeR นั่นเป็นเพียงแนวคิดบางส่วนที่จะผลักดันไปในทิศทางที่ถูกต้อง มีบทความจำนวนมากและการนำเสนอผลงานที่จัดการปัญหานี้อย่างลึกซึ้งยิ่งขึ้นเช่นนี้สำหรับตัวอย่างเช่น: iis.sinica.edu.tw/~swc/pub/bot_trajectory.html
Kamil

5
"ดังนั้นคำถามควรจะเป็นวิธีการตรวจสอบผู้เล่นบอท?" ฉันไม่เห็นด้วยมีหลายวิธีที่จะโกงโดยไม่ต้องมีบอท ตัวอย่างเช่นการให้ลูกค้าได้รับข้อมูลมากเกินไปหรือไว้วางใจลูกค้า
Matsemann

9

ในเกมเครือข่ายผู้เล่นหลายคนมีเทคนิคอะไรบ้างที่จะพยายามให้แน่ใจว่าผู้ใช้เชื่อมต่อกับแอปพลิเคชันไคลเอนต์อย่างเป็นทางการไม่ใช่แอพไคลเอ็นต์แฮ็กบางตัว

ฉันไม่คิดว่านี่เป็นวิธีที่ถูกต้องในการเข้าใกล้สิ่งนี้หรืออย่างน้อยก็ไม่ใช่สิ่งเดียวที่คุณควรให้ความสนใจ

  1. ตรวจสอบให้แน่ใจว่าคุณส่งข้อมูลเฉพาะลูกค้าไปยังลูกค้าทุกคน (เช่นลูกค้าไม่จำเป็นต้องรู้ว่ามอนสเตอร์ตัวใดสามารถยกตัวอย่างเช่นส่งข้อมูลหลังจากฆ่ามันและไปยังลูกค้าที่ระบุเท่านั้น)

  2. ทำการคำนวณส่วนใหญ่ทางฝั่งเซิร์ฟเวอร์ (การวางตำแหน่ง ฯลฯ ) ลูกค้ากำลังทำการคำนวณของตัวเอง แต่ไม่สามารถส่งค่าของเขาเองได้เฉพาะการกระทำของเขา เซิร์ฟเวอร์ต้องตรวจสอบว่าการกระทำนี้ถูกต้องหรือไม่และจะมีผลกับเกมอย่างไร

  3. 1 และ 2 มักจะรวมกับการคาดการณ์ ไคลเอนต์และเซิร์ฟเวอร์พยายามทำนายพฤติกรรมบางอย่าง ตัวอย่างเช่นลูกค้าย้ายผู้เล่น แต่ทุก ๆ x วินาทีหรือ ms ได้รับการแก้ไขโดยเซิร์ฟเวอร์

  4. เรียกเก็บเงินจากผู้ใช้สำหรับบัญชีของพวกเขาไม่ใช่สำหรับลูกค้าด้วยวิธีนี้ผู้ใช้อาจได้รับเวอร์ชันที่แตก แต่ไม่สามารถเล่นได้หากไม่มีบัญชี

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

แก้ไข:

บทความที่เขียนดีมากสำหรับผู้เริ่มต้น: http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/


ใช่ฉันเห็นด้วยไม่ใช่สิ่งเดียวที่เราควรเกี่ยวข้อง เรากำลังทำสิ่งเหล่านี้ส่วนใหญ่แล้ว แต่องค์ประกอบที่เปิดเผยบางอย่างในฝั่งไคลเอ็นต์จะหลีกเลี่ยงไม่ได้
UpTheCreek

@UpTheCreek คุณช่วยบอกเราเกี่ยวกับสิ่งที่คุณกังวลมากที่สุด? บอตการเปลี่ยนแปลงข้อมูลชนิดของข้อมูลที่ถูกส่งไปยังลูกค้าหรือจากลูกค้าที่ต้องได้รับการคุ้มครอง ในขณะที่คุณสังเกตเห็นว่าการทำให้ลูกค้าร้าวปลอดภัยไม่ใช่เรื่องง่าย แต่บางทีเราสามารถช่วยคุณได้ดีขึ้นเล็กน้อยโดยไปที่รากของความกังวลของคุณ

สำหรับเราแล้วมันเป็นเรื่องของการปรับสมดุลการตรวจสอบ / จำลองฝั่งเซิร์ฟเวอร์ด้วยต้นทุนเซิร์ฟเวอร์ เราไม่สามารถรวมทุกสิ่งที่เราต้องการ ฉันคิดเกี่ยวกับเรื่องนี้ค่อนข้างมาก แต่ฉันต้องการดูว่ามีเทคนิคใด ๆ ที่แยบยลที่นั่นเพื่อปกป้องลูกค้าได้ดีขึ้นหรือไม่ :) ไคลเอนต์ใช้จาวาสคริปต์ดังนั้นคุณสามารถจินตนาการได้ว่ามันง่ายกว่าปกติสำหรับผู้ใช้ที่จะแฮ็ค !
UpTheCreek

4

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

แก้ไข: เพื่ออธิบายรายละเอียดเล็กน้อยด้านบนให้พิจารณาโค้ดที่ตรวจสอบความถูกต้องของฝั่งไคลเอ็นต์ มันมีงานที่ยากมากสองงาน: ตรวจสอบว่ามีการใช้รหัสดั้งเดิม (และไม่มีสิ่งใดที่แสดงอยู่ซึ่งสามารถรบกวนรหัสเดิมแบบไดนามิก / ที่รันไทม์ (!)) และสื่อสารผลลัพธ์นี้กลับไปที่เซิร์ฟเวอร์ในลักษณะดังกล่าว ที่การสื่อสารนี้ไม่สามารถแกล้ง ในขณะที่ส่วนแรกยากอย่างบ้าคลั่งส่วนที่สองเป็นไปไม่ได้เลยทีเดียว

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

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

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


+1 ฉันมาที่นี่เพื่อพูดถึงความคิดในการเปลี่ยนความลับบ่อยครั้งซึ่งหมายความว่าแฮกเกอร์จะต้องทำงานซ้ำ ความลับที่ซับซ้อนจะทำให้ดียิ่งขึ้นเช่น สิ่งหนึ่งที่เปลี่ยนแปลงไปตามสิ่งที่เซิร์ฟเวอร์ส่ง
Kylotan

4

คุณไม่ได้ระบุประเภทของเกมดังนั้นฉันจะเอนตัวไปยังเกม RPG / MMO อย่างหนัก แต่สิ่งเหล่านี้สามารถนำไปใช้กับเกม FPS กลยุทธ์และเกมแอ็คชั่นได้ วิธีที่ บริษัท เกมใหญ่หลายรายเช่น Blizzard จัดการกับปัญหานี้ในเกมของพวกเขาคือ:

  1. ทำการคำนวณทั้งหมดและฝั่งเซิร์ฟเวอร์แอ็คชั่นไคลเอนต์เป็นเพียงเทอร์มินัลโง่และเอ็นจิ้นกราฟิก ดังนั้นหากผู้เล่นใช้ไคลเอนต์อื่นมันไม่สำคัญในแง่ของเกมพวกเขาไม่สามารถโกงฟิสิกส์ของเกมได้
  2. ตรวจสอบโปรแกรม / ไคลเอนต์ bot ที่ชัดเจนโดยมองหาการทำงานของคอมพิวเตอร์ที่ชัดเจนเช่นการทำซ้ำเหตุการณ์การคลิกและการเคลื่อนไหวของเมาส์อย่างสมบูรณ์แบบ
  3. ตรวจสอบโปรแกรม / ไคลเอนต์ bot ที่ไม่ชัดเจนและแจ้งเตือนผู้ดูแลในเกมถึงปัญหา

จากนั้นพวกเขาจะปรากฏในเกม (ถ้าเป็นไปได้สำหรับเกมเดียวกันเช่น Starcraft 2 ไม่ใช่) หรือดู / พูดคุยกับผู้เล่นเกี่ยวกับการกระทำของพวกเขาในฐานะ 'เช็คของมนุษย์' หรืออย่างน้อยนั่นคือวิธีจัดการ Blizzard ค่อนข้างดีเกี่ยวกับเรื่องนี้ แต่ในอดีต บริษัท MMO อื่น ๆ นั้นยังไม่เคยมีมาก่อน

การตรวจสอบบ็อตที่ไม่ชัดเจนนั้นไม่ใช่เรื่องง่าย แต่มีกฎพื้นฐานเล็กน้อยที่ต้องปฏิบัติตามรวมถึง

  • กำลังมองหาผู้เล่นที่มีการเปลี่ยนแปลงเพียงเล็กน้อยเท่านั้นกำลังทำการกระทำที่เหมือนกันซ้ำแล้วซ้ำอีก นี่อาจจะนั่งอยู่ที่โหนดทรัพยากรใน MMO และเลี้ยงมันเมื่อมันเกิดใหม่หรือมันอาจจะวิ่งเป็นวงกลมระหว่างแพ็คสุขภาพ / กระสุนใน FPS และไม่เคยเบี่ยงเบนจากเส้นทางที่เฉพาะเจาะจงและใช้ปืนเดียวกันเสมอ (บอตย่อยที่ดีที่สุดใน FPSs นั้นหายาก แต่ถ้าเกมของคุณมีบันไดที่จะปีนขึ้นไปที่จำนวนของเกมมีความสำคัญมากกว่านั้นความสามารถของผู้เล่นเช่น FPSs ที่ทันสมัยบางอย่างจะกลายเป็นบอตอีกครั้ง)
  • กำลังมองหาผู้เล่นที่ดำเนินการเร่งด่วนเดียวกันหรือใช้กลยุทธ์ซ้ำไปซ้ำมาใน RTS มีคำสั่งสร้างใน Starcraft ที่สามารถเอาชนะได้เกือบเมื่อดำเนินการโดยบอท
  • กำลังมองหาผู้เล่นที่ได้รวบรวมทรัพยากรจำนวนมหาศาลและตอนนี้กำลังบดไอเท็มหนึ่งอย่างไม่มีที่สิ้นสุด นี่เป็นปัญหาใหญ่ใน Ultima Online

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

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

Tanget

แน่นอนที่สุดใครบางคนจะสร้างบอทที่แยกไม่ออกจากคนจริงผ่านการทดสอบของทัวริง และมีนักเขียนบอทมากมายที่ตั้งเป้าที่จะทำสิ่งนั้น

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

/ สัมผัส

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

สุดท้ายคุณยังสามารถใช้ชีวิตอยู่กับบอทในความเป็นจริงของพื้นที่เกมของคุณและกระตุ้นให้พวกเขาใช้งาน สิ่งนี้ต้องการการออกแบบเกมของคุณเกี่ยวกับการใช้บอทผู้ฝึกสอนและผู้ช่วยในที่สุด ฉันอยากจะบอกว่ามี MMO ที่ทำสิ่งนี้เมื่อประมาณ 10 ปีที่แล้ว แต่ฉันจำไม่ได้ว่ามันคืออะไร มันสะกดจุดจบของเกมเพราะ MMOs มีการบดหนักและนั่นหมายความว่า 95% ของผู้เล่นที่เราออกห่างจากคีย์บอร์ดของพวกเขาในเวลาใดก็ตามและทำลายชุมชน ถ้าคุณไปเส้นทางนี้ระวัง


3
ในย่อหน้าสุดท้ายของคุณกาแล็กซี่สตาร์วอร์สของ SOE เป็นตัวอย่างของ MMO ที่มีการเขียนสคริปต์ / ภาษามาโครที่แข็งแกร่ง แต่มันก็ไม่ได้มีปัญหาบอทมากนัก สิ่งที่เกิดขึ้นก็คือมีความจำเป็นในเกมที่น่าเบื่อบางอย่างถูกสคริปต์ (starports ส่วนใหญ่มีคิวของผู้เล่นต่อหน้าผู้รักษาบัฟ - ไอเอ็นจีแบบอัตโนมัติอย่างสมบูรณ์) และ XP ระดับต่ำมักทำแบบนี้ เกินไป. IMO สิ่งนี้เพิ่มขึ้นอย่างมากในเกมสิ่งที่ฆ่ามันเป็นการตัดสินใจที่ไม่ดีอย่างไม่น่าเชื่อและการเปลี่ยนแปลงของเกมโดยไม่มีการเตือนหรือการสื่อสาร
GAThrawn

3

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

หากฟีเจอร์เกมที่กำหนดสามารถเล่นได้ทำไมถึงมีฟีเจอร์นั้นในเกมอยู่ดี? คุณลักษณะนั้นเรียกผู้ใช้อย่างชัดเจนว่าจะสร้างบอท

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

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

อย่างไรก็ตามกระบวนทัศน์นี้อาจใช้ไม่ได้อีกต่อไปในยุคปัจจุบัน ... แต่ฉันก็ยังเชื่อว่านี่เป็นเกมที่ดี


1
+1 วิธีที่มีประสิทธิภาพเพียงวิธีเดียวในการโกงคือการออกแบบเกมในลักษณะที่การโกงไม่มีประสิทธิภาพตั้งแต่แรก
API-Beast

ประโยคสุดท้ายของฉันถูกต้องเพราะฉันประหลาดใจโดยไม่มีใครคิดว่าเป็นไปได้ ...
Jorge Leitao

2

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

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

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

วิธีนี้คุณจะได้รับการปกป้องที่ดีจากการโกงโดยใช้พลังงานเซิร์ฟเวอร์เพียงอย่างเดียวที่คุณสามารถสำรองไว้ได้ (แม้ว่าจะใกล้เคียงกับการตรวจสอบทุกการกระทำของคุณมากขึ้นเท่านั้น


1

ฉันไม่คิดว่าจะมี "the-Ultiamte-soltution" คุณสามารถเข้ารหัสชุดข้อมูลและให้เซิร์ฟเวอร์ที่รับแพ็กเกจบางกฎ ตัวอย่างเช่นคุณสามารถตั้งค่าว่าการเคลื่อนไหวที่เหมือนจริง / ได้รับอนุญาตที่ใหญ่ที่สุดคือ +1 และไม่เหมือนกับ cheater / แฮ็กเกอร์ที่จะตั้งค่าเป็น 5 หรือสูงกว่าเพื่อให้เร็วขึ้น แค่คิดว่าแฮ็กเกอร์ทำอะไรได้ดีกว่าผู้เล่นคนอื่นและตั้งกฎให้


0

วิธีที่ง่ายที่สุดคือการทำให้ลูกค้าเป็นเครื่องปลายทาง ทุกอย่างทำบนเซิร์ฟเวอร์และลูกค้าเพิ่งส่งคำสั่งไปยังเซิร์ฟเวอร์ วิธีนี้เซิร์ฟเวอร์ควบคุมทุกอย่างได้อย่างสมบูรณ์

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

นอกจากนี้เพียงส่งลูกค้าในสิ่งที่ "ควร" รู้ ตัวอย่างเช่นหากผู้เล่นศัตรูอยู่หลังกำแพงอย่าส่งข้อมูลนั้นไปยังไคลเอนต์มิฉะนั้นไคลเอนต์ที่ถูกแฮ็กจะสามารถแยกแยะข้อมูลนี้ได้ (อ่าน: Wallhack)


-1

แก้ไข:ฉันเข้าใจผิดคำถาม ฉันตีความว่าเป็น "ป้องกันคีย์ละเมิดลิขสิทธิ์ / แฮ็ก" แทน "ซอฟต์แวร์ที่ถูกแฮ็กที่สามารถส่งข้อความเพื่อสร้างทองคำ 1 พันล้านเหรียญให้ผู้เล่น"

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

ด้วยความแพร่หลายของอินเทอร์เน็ตความเร็วสูงและการถ่ายโอนไฟล์ P2P บริษัท จึงเปลี่ยนจาก cd-keys ที่จัดเก็บไว้ในเครื่องบนเครื่องลูกข่ายเป็นรหัสที่เชื่อมโยงกับบัญชีบนเซิร์ฟเวอร์ของพวกเขา ไม่มีซอฟต์แวร์ไคลเอ็นต์ "เป็นทางการ" หรือ "ไม่เป็นทางการ" อีกต่อไปเนื่องจากทุกคนสามารถดาวน์โหลดไคลเอ็นต์ได้ แต่คุณสามารถเล่นได้เฉพาะเมื่อคุณมีบัญชีที่มีสิทธิ์เข้าถึงเพื่อเล่น

สิ่งนี้ยังมีประโยชน์ต่อ บริษัท เนื่องจากไม่จำเป็นต้องใช้สำเนาซอฟต์แวร์จริง


ฉันไม่ใช่คนที่ลงคะแนนให้คุณ แต่สำหรับฉันมันไม่ได้ให้ความคุ้มครองใด ๆ ดูเหมือนว่าคุณกำลังพูดถึงเพียงให้ผู้ใช้ที่ได้รับอนุญาตเชื่อมต่อเท่านั้น - ซึ่งจัดการได้อย่างง่ายดาย แต่ปัญหาคือไม่มีอะไรที่จะหยุดยั้งคนที่มีบัญชีย้อนกลับที่ถูกต้องในการเขียนข้อความและเขียนลูกค้าที่ถูกแฮ็กของฉันเอง
UpTheCreek

-1 สิ่งนี้ไม่ตอบคำถามการมีบัญชีออนไลน์ไม่ได้ป้องกันไม่ให้ใครบางคนเชื่อมต่อกับไคลเอนต์ที่ถูกแฮ็กตัวอย่างเช่นการกระทำในเกมโดยอัตโนมัติ wow เป็นระบบออนไลน์ทั้งหมดและยังคงถูกแฮ็กอย่างต่อเนื่อง เพื่อป้องกันพายุหิมะนี้ใช้ซอฟต์แวร์ป้องกันการโกง "พัศดี" ของพวกเขาซึ่งเป็นตัวอย่างของการจัดการกับปัญหาที่เป็นปัญหา
dreta

อาร์คคุณพูดถูก ฉันเข้าใจผิดคำถาม
Orin MacGregor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.