Làm cách nào để phát hiện và ngăn chặn lạm dụng (đóng chai) API trò chơi trực tuyến?


49

Tôi đã làm việc một cách ngẫu nhiên trên một ý tưởng trò chơi trong thời gian rảnh. Trò chơi và nội dung cho thấy nó sẽ được thực hiện như một trò chơi nhiều người chơi trực tuyến được xây dựng với các công nghệ web được thiết lập tốt. Bạn nên biết rằng nó rơi vào thể loại chiến lược và mô phỏng. Điều đó có nghĩa là: Không chạy xung quanh với các ký tự hoặc tương tự mà chỉ có các hành động nguyên tử (liên quan đến giao tiếp giữa máy khách và máy chủ) như "xây dựng điều A trên vị trí X".

Tại một thời điểm, tôi nhận ra rằng có một vấn đề rất lớn: việc có một giao diện người dùng dựa trên trình duyệt dựa trên API REST làm cho nó trở thành mục tiêu tuyệt vời hơn cho các bot. Mặc dù tự động hóa là mong muốn cho kinh doanh, nó là độc hại đối với một trò chơi vui nhộn. Tôi đã trải nghiệm nó lần đầu tiên trong một trò chơi trình duyệt trong quá khứ là những người chơi thành công nhất là các bot đã khuất phục mọi người.

Từ quan điểm hiện tại của tôi, tôi không thấy bất kỳ khả năng nào để bảo vệ chống lại bot khi xây dựng trò chơi trực tuyến nhiều người chơi dựa trên API REST. Ngoại lệ: Làm cho nó trở thành nguồn mở để mọi người có thể lưu trữ cá thể của riêng mình cho các nhóm riêng tư hoặc thậm chí là chính mình (để không bị làm phiền bởi những cú giật với bot).

Có cách nào khác biệt giữa một người chơi trung thực, người vừa đặt báo thức cho hành động có thể tiếp theo và bot tự động nắm lấy mọi cơ hội xuất hiện của nó không? Bên cạnh những điểm dừng chương trình như captchas. Nếu không, tôi sẽ nghĩ về một ngăn xếp công nghệ khác khiến cho việc liên lạc với máy khách-máy chủ trở nên khó khăn hơn nhiều (giao thức nhị phân được mã hóa độc quyền trong một máy khách mã gốc).

Chỉnh sửa : Cảm ơn bạn, câu trả lời của bạn rất truyền cảm nhưng cũng khiến tôi nhận ra rằng các biện pháp đối phó cụ thể không thể được thực hiện bằng cách đi sâu hơn vào chi tiết của trò chơi. Tuy nhiên, đó sẽ là quá nhiều cho một câu hỏi trên Stack Exchange. Vì vậy, tôi chỉ muốn chỉ ra những điểm quan trọng nhất:

  • Người chơi đang khám phá, phát triển và quản lý bất cứ khi nào họ muốn. Doanh nghiệp của họ vẫn hoạt động tốt khi họ ngoại tuyến (đó là một trò chơi hòa bình, không có vũ khí liên quan). Chỉ có mở rộng và tiến độ cần người chơi hành động. Những hành động đó bị giới hạn bởi:
  • thời gian là một trong những tài nguyên quan trọng (như trong đào tạo kỹ năng EVE Online). Tất cả các quy trình trong trò chơi yêu cầu nó. Không có điểm nào trong việc trực tuyến 24/7. Người chơi trung bình nên thành công với việc dành không quá một giờ mỗi ngày trong một hoặc hai phiên ( đại khái , khái niệm này vẫn đang được phát triển).

9
Bạn không thể làm cho trò chơi sao cho người khác lập trình hoặc mua bot không phá hỏng niềm vui của người chơi? Và thứ hai, lập trình bot / AI để chơi trò chơi có thể tự nó vui vẻ; nó không nên phá hỏng niềm vui của người khác
Kasper van den Berg

26
"tự động hóa [...] là độc dược đối với một trò chơi vui nhộn." Mạnh mẽ phủ quyết. Nếu trò chơi của bạn thực sự thú vị, tại sao lại phạt người chơi bỏ qua những phần mà họ không có? Nếu các yếu tố trong trò chơi của bạn tẻ nhạt đến mức người chơi không muốn chơi và cảm thấy muốn có một kịch bản tiếp quản, thì đó là vấn đề thực sự cần được giải quyết.
Marcks Thomas

6
Ví dụ của bạn có một phản hồi dễ dàng: cung cấp cho người chơi các công cụ để họ không cần bot. ví dụ: để họ xếp hàng một hành động, thay vì khuyến khích họ trực tuyến tại một thời điểm chính xác hoặc nhận / tạo một công cụ để thực hiện việc đó cho họ.

4
Lý do chính khiến mọi người sử dụng bot là vì các phần của trò chơi rất tẻ nhạt và nhàm chán đối với họ (nếu vui, họ sẽ chỉ chơi chúng). Rõ ràng người chơi của bạn đang tận hưởng sự cạnh tranh và thử thách, nhưng không phải là lối chơi tự động. Bạn có thể thử thay đổi thiết kế trò chơi để loại bỏ các phần mà mọi người sử dụng bot để vượt qua hoặc cân bằng lại trò chơi của bạn để tạo ra các quyết định khó khăn và có ý nghĩa hơn mà chỉ người chơi mới có thể thực hiện và bot không thể (chẳng hạn như lựa chọn chiến lược sâu sắc) . Nếu không, bạn sẽ phải chịu một cuộc chạy đua vũ trang, và những người đóng chai sẽ giành chiến thắng.
Tuyệt vời nhất

6
tl; dr: Mọi người sẽ không thích cạnh tranh với anh chàng bằng báo thức và không có việc gì hơn là chống lại anh chàng với bot - và đó là điều sẽ thúc đẩy họ chạy bot.
Random832

Câu trả lời:


50

Nếu mọi người muốn bot, tôi không nghĩ bạn thực sự có thể ngăn chặn họ.

Tất nhiên bạn có thể thực hiện nhiều biện pháp khiến việc đóng chai ít nhiều gây đau đớn. Nhưng bạn chỉ có thể làm rất nhiều trước khi codebase của bạn biến thành một mớ hỗn độn khổng lồ để duy trì, dễ bị lỗi và gây khó chịu cho người dùng hợp pháp. Trong khi đó, những người đóng chai sẽ luôn tìm cách đánh bại các biện pháp đối phó của bạn:

  • Có nhiều người trong số họ hơn bạn
  • Họ có nhiều thời gian rảnh hơn trong tay (bạn phải phân chia thời gian giữa phát triển thực tế và chứng minh bot, họ có thể hack mã bot của họ suốt cả ngày)
  • Khi bạn tạo ra sự kỳ quặc, các biện pháp bảo vệ đầy thách thức, các tác giả bot sẽ được khuyến khích hơn nữa bởi vì thật vui khi phá vỡ sự bảo vệ bot của bạn
  • Nếu có một thị trường đen của những người thu lợi nhuận từ bot, bạn càng khó viết bot thì càng có nhiều bot hoạt động có giá trị, vì vậy bạn khuyến khích đóng chai

Về cơ bản, bạn sẽ bị mắc kẹt trong một cuộc chạy đua vũ trang với những người đóng chai, và dựa trên logic dọc theo các điểm trên, cũng như kinh nghiệm của tôi với những trò chơi như vậy, bạn sẽ không thể theo kịp.

Một số nhà phát triển trò chơi sử dụng các biện pháp chống gian lận cực kỳ tích cực: Chẳng hạn, Steam sẽ quét bộ nhớ và hệ thống tệp để tìm kiếm hack, và những kẻ phạm tội có thể bị trừng phạt bằng cách mất tài khoản trị giá hàng trăm đô la. Tuy nhiên, vẫn còn các bot và các bản hack khác cho các trò chơi Steam, và một số trong số chúng thậm chí còn hoạt động được một nửa thời gian. Không giống như họ, bạn có một API mở rộng cho người dùng và không kiểm soát máy tính của người dùng. Đó là một trận chiến khó khăn ngay từ đầu.

Vấn đề bạn đang cố gắng giải quyết về cơ bản là một bài kiểm tra Turing: Ngoại trừ đó là một bài kiểm tra Turing rất dễ dàng, bởi vì bạn không thể gian lận bằng cách yêu cầu các vấn đề AI khó như ngôn ngữ. Cho dù bạn tạo ra bao nhiêu phương pháp phỏng đoán, việc một botter thêm một chút ngẫu nhiên vào hành động của bot sẽ khiến nó bắt chước gần như chính xác con người. Thậm chí sẽ không khó để có chiếc đồng hồ bot bạn chơi một chút và học cách tính thời gian hành động chính xác như bạn. Sau đó, khi bạn cấm bot, các bài viết botter một rant khổng lồ trên diễn đàn về cách ông chỉ là một máy nghe nhạc chuyên dụng (và có lẽ ông thực sự là một dương tính giả) và khán giả cốt lõi của Hardcore người chơi sẽ tăng lên trong vòng tay chống lại bạn.

Làm cho trò chơi quá vui

Lý do chính khiến ai đó sử dụng bot là vì có một phần của trò chơi mà họ muốn bỏ qua. Nếu họ thích trò chơi và thấy nó thú vị, họ sẽ không cho bot chơi, họ sẽ tự chơi.

Nhưng nếu trò chơi nhàm chán như vậy, tại sao lại chơi nó? Có lẽ, một số phần của trò chơi là nhàm chán và bắt buộc để có được những phần thú vị. Ví dụ, trong các game MMO, mọi người đều thích tăng cấp, nhưng không ai muốn giết 42.324 con chuột độc hại khủng khiếp để lấy XP. Vì vậy, họ để bot nghiền và thả vào để chơi phần thú vị.

Đây không phải là một lời chỉ trích về bạn hoặc trò chơi của bạn, nhưng rõ ràng ít nhất một số người chơi thấy một số phần của trò chơi của bạn tẻ nhạt. Bạn nên xem liệu bạn có thể giảm bớt những phần tẻ nhạt này hay không và xem xét thêm những quyết định khó khăn, có ý nghĩa hơn: Bots không giỏi về chiến lược sâu sắc hay tư duy bên cạnh so với trí thông minh của con người, và bên cạnh đó con người thích đưa ra những quyết định khó khăn trong trò chơi.

Từ mô tả của bạn, tôi có ấn tượng rằng đây là một trò chơi trình duyệt tương tự Travian, nơi có một hàng đợi xây dựng với một thứ tự xây dựng tốt nhất và một số nhiệm vụ "bảo trì" (như duy trì các cuộc tấn công canh tác) phải được thực hiện. Bạn nói rằng không có xung đột, nhưng trong bất kỳ bộ phim MMO nào và chính trị nhỏ nhặt là không thể tránh khỏi (IMO đó là điểm thu hút chính) vì vậy tôi chắc chắn người chơi của bạn sẽ tìm mọi cách để đánh đầu. Với các loại trò chơi này, rất nhiều sự nhàm chán đến từ các nhiệm vụ "bảo trì" này - điều người chơi thực sự muốn làm là liên minh và chơi trò chơi ngoại giao với các gia tộc đối thủ, bảo trì sau đó trở thành một loại thuế mà bạn phải thức tỉnh đến một báo động vào giờ lẻ để được phép vào phần ngoại giao vui vẻ đó. Vì vậy, cắt ra tedium:

Cách tiếp cận này có thể không luôn luôn làm việc, không may. Không phải tất cả người chơi có cùng khả năng chịu đựng tedium hoặc cùng một khái niệm vui vẻ. Bạn có thể có một cơ chế nổi bật mà 99% người chơi của bạn thích, nhưng 1% thấy nhàm chán. Điều gì sẽ xảy ra nếu 1% sau đó bắt đầu viết bot, phá hỏng niềm vui cho 99%? Nhưng cuối cùng, đó là vấn đề bằng cấp. Bạn không bao giờ có thể loại bỏ đóng chai hoàn toàn, nhưng bạn có thể giảm thiểu thiệt hại.

Đóng chai Undercut

Rất nhiều tác động thực sự tiêu cực của bot đến từ các tác giả bot thương mại hóa công việc của họ. Nếu đây là trường hợp của bạn, bạn chỉ có thể cạnh tranh với các bot. Nhiều trò chơi trực tuyến dựa trên thời gian thực đã có các tính năng cao cấp cho phép bỏ qua thời gian và tự động hóa (chẳng hạn như hàng đợi xây dựng mở rộng). Số tiền này cho một bot chính thức bị nhà phát triển xử phạt. Nếu bạn có những thứ này và định giá chúng một cách thích hợp, người chơi sẽ mua phí bảo hiểm của bạn thay vì mua bot. Tin tốt là, bạn chịu trách nhiệm về API, vì vậy bạn luôn có lợi thế lớn trong việc phát triển tự động hóa chất lượng cho trò chơi của riêng mình, vì vậy lần này là một trận thua cho các nhà đóng chai.

Điều này sẽ không loại bỏ những người đóng chai nghiệp dư hoặc những người cảm thấy rằng phí bảo hiểm của bạn không xứng đáng với tiền, vì vậy một lần nữa hiệu quả của phương pháp này phụ thuộc vào tình huống.

Tự tìm chúng

Như tôi đã nói ở trên, những gì bạn đang làm về cơ bản là một bài kiểm tra Turing. Vì tương tác với con người nổi tiếng được coi là một thử thách Turing khó khăn, bạn có thể cố gắng tận dụng điều đó.

Kiểm tra thủ công các cầu thủ cấp cao nhất và xem nếu bạn tìm thấy bất cứ điều gì đáng ngờ. Bạn thậm chí có thể thoát khỏi việc thỉnh thoảng thăm dò chúng theo những cách chỉ giới hạn trong trí tưởng tượng của bạn, để xem liệu bạn có thể lừa bot làm điều gì đó mà nó sẽ không làm.

Mặc dù rất khó để viết một thuật toán sẽ phát hiện các bot đáng tin cậy, nhưng con người không quá khó để học cách phát hiện ra chúng. Tôi nghĩ rằng rất nhiều trò chơi trình duyệt sử dụng chiến lược này, và nó có thể khá hiệu quả. Nhược điểm là hoặc bạn cần phải làm rất nhiều công việc nhàm chán mọi lúc, hoặc bạn cần phải trả tiền cho các bậc thầy trò chơi để thực hiện tuần tra bot thường xuyên.


4
Tôi đã chọn câu trả lời này bởi vì nó xuất hiện với tôi như là suy nghĩ nhiều nhất thông qua việc nhìn lại câu hỏi một bước, tránh xa các chi tiết kỹ thuật. Tôi đã suy nghĩ rất lâu về việc chọn Adam Davis vì nó chứa một số ý tưởng rất hay về "cách làm".
Peter

1
@ Alomvar Tôi rất vui vì nó hữu ích. Vì câu hỏi nhận được rất nhiều phiếu bầu, bạn cũng có thể đặt một liên kết đến trò chơi của bạn trong hồ sơ của bạn :)
Tuyệt vời nhất

2
Ugh, Travian có còn ở đây không? Tôi đã chơi nó nhiều năm trước, sau đó dừng lại khi tôi nhận ra rằng trò chơi về cơ bản có thể được đun sôi để "có thể chiến thắng xã hội tốt nhất."
Mason Wheeler

25

Cách phòng thủ tốt nhất và duy nhất chống lại bot là thiết kế trò chơi của bạn theo cách mà người chơi không cảm thấy cần phải tự động hóa ngay từ đầu. Khi người chơi của bạn tự động hóa các tác vụ đơn giản không thực sự đòi hỏi kỹ năng, đó là dấu hiệu cho thấy giao diện người dùng của bạn thiếu và họ đang thay thế một tính năng UI mà họ đang thiếu.

  • Trò chơi của bạn có bao gồm các nhiệm vụ lặp đi lặp lại trong đó người chơi thực hiện cùng một hành động lặp đi lặp lại để nghiền không?

    Làm cho các khía cạnh của trò chơi của bạn ít lặp đi lặp lại và thú vị hơn để chơi và chơi lại.

  • Trò chơi của bạn có yêu cầu người chơi thực hiện các hành động vào những thời điểm bất tiện cho họ, như vào giữa đêm hoặc khi họ đang làm việc không?

    Cho phép họ xếp hàng các đơn hàng (như "xây dựng X1, rồi X2, sau đó là X3, bắt đầu từng đơn hàng ngay khi có sẵn tài nguyên") hoặc lên lịch hành động vào các thời điểm cụ thể trước (xây dựng X lúc 3:22 sáng).

  • Trò chơi của bạn có yêu cầu người chơi hành động trong các sự kiện trong khoảng thời gian rất ngắn không?

    Cho phép họ định cấu hình trò chơi theo cách các hành động này được kích hoạt tự động

    • khi tòa nhà X bị phá hủy, xây dựng lại ngay lập tức.
    • Khi ai đó cung cấp tài nguyên X với giá thấp hơn tiền Y, hãy mua ngay đơn vị Z.
    • Tự động bán tất cả tài nguyên X khi chứng khoán vượt quá đơn vị Y, nhưng không ít hơn tiền Z trên mỗi đơn vị.

Giám sát cộng đồng của bạn. Khi bạn nhận thấy rằng họ tự động hóa bất cứ điều gì khác, hãy đánh cắp ý tưởng và thêm tùy chọn để tự động hóa nó vào trò chơi cốt lõi.


5
Đây là một gợi ý tuyệt vời cũng làm cho trò chơi của bạn tốt hơn và giảm rủi ro cho trò chơi của bạn khiến người chơi của bạn trở nên giống bot hơn. ;-) Nếu là một bot làm cho một người chơi tuyệt vời của trò chơi của bạn, có lẽ trò chơi sẽ liên quan đến suy nghĩ của con người nhiều hơn. Tôi không đồng ý rằng đó là cách phòng thủ hiệu quả duy nhất, nhưng tôi đồng ý rằng đó là tổng thể tốt nhất. +1
Dronz

7
Mặc dù tôi đồng ý với tinh thần của việc này, nhưng thật không may, tiền đề mà bạn có thể làm cho trò chơi không tẻ nhạt là một ngụy biện. Điều gì sẽ xảy ra nếu có 10.000 người chơi của bạn yêu thích thợ máy X, nhưng 10 người thấy nó tẻ nhạt và viết bot, phá hỏng niềm vui của 10.000? Đây là những gì xảy ra với aimbots trong FPS: Giải pháp tương tự sẽ làm cho việc nhắm mục tiêu trở nên ít hơn, nhưng rất nhiều người chơi thích hoàn thiện các kỹ năng nhắm của họ. Chỉ có một số ít cảm thấy cần aimbot.
Tuyệt vời nhất

1
Tôi thực sự thích đề xuất của bạn, tôi muốn nhiều trò chơi hơn sẽ làm điều gì đó như thế này thay vì yêu cầu bạn có mặt 24/7 để hoạt động hiệu quả
meneldal

@Superbest thực sự tôi có thể thấy một giải pháp mà bạn có thể thiết kế nhằm mục đích quan trọng hơn nhưng vẫn khó khăn trong việc đóng chai để có hiệu quả, ví dụ nếu bạn thiết kế vũ khí để có tốc độ bắn chậm và nhắm chính xác thì hữu dụng hơn thì người chơi có thể tập trung vào botter vì anh ta không thể bắn đủ đạn cho mọi người chơi tấn công anh ta
Matthew Pigram

2
Đây là chính xác điểm! Nếu có một nút bấm dễ dàng hiệu quả tại thời điểm X bot có thể cho trò chơi của bạn, thì hãy tự viết nó và đưa cho mọi người! - Hãy để người chơi quyết định trước, những gì nên được xây dựng khi thời gian đã sẵn sàng ... Thú vị trong Trò chơi là về các quyết định!
Falco

23

Đừng làm cho trò chơi của bạn dễ bị tổn thương trước nỗ lực của johnny tại chỗ

Trước tiên, hãy đảm bảo rằng những người chơi chỉ chơi trò chơi của bạn trong hai mươi phút hoặc một giờ mỗi ngày trong một lần ngồi không gây bất lợi lớn cho những người chơi để nó mở tại nơi làm việc và chơi 16 giờ mỗi ngày.

Điều này có thể yêu cầu thay đổi cơ chế trò chơi của bạn - ví dụ: phân bổ di chuyển sẽ đầy khi bạn không chơi và cho phép người chơi thực hiện nhiều động tác nhanh khi họ có thể chơi, thay vì cơ chế yêu cầu liên tục.

Điều này sẽ làm mất lòng các nhà sản xuất bot vì họ có thể theo kịp trò chơi và họ không có nhu cầu cấp bách để tạo ra một máy tự động thực hiện các hành động cho họ.

Yêu cầu thông tin máy chủ cho từng hành động và làm cho máy chủ phản hồi chậm hơn

Khi một người chơi chơi trò chơi, họ yêu cầu một trang hiển thị cho họ giao diện người dùng mà họ tương tác để di chuyển. Bạn có thể chèn các phần tử, chẳng hạn như các phần tử biểu mẫu vô hình, để xác minh rằng chúng thực sự yêu cầu trang trước. Một số ngẫu nhiên mà máy chủ của bạn lưu trữ cùng với ID người dùng và trang nào họ yêu cầu lần cuối. Khi có hành động, máy chủ sẽ xác minh rằng người dùng này đã trả về cùng một số ngẫu nhiên và đang thực hiện một hành động trên trang họ nhìn thấy lần cuối. Điều này không chỉ có nghĩa là bot phải thực hiện hai lệnh gọi API cho mỗi hành động, mà người dùng thông thường không thể mở nhiều trang và thực hiện các hành động nhanh liên tiếp (nếu đây là sự cố với thiết kế của bạn).

Hai lệnh gọi API cung cấp cho bạn một cách để làm chậm các bot sau này. Cuối cùng, bạn sẽ thấy các mẫu đáng ngờ và bạn sẽ có thể chọn chúng. Khi máy chủ của bạn phát hiện một mẫu đáng ngờ, nó có thể trì hoãn phản hồi API trong cuộc gọi đầu tiên trong một giây - điều này sẽ gây khó chịu cho người dùng, nhưng sẽ thực sự làm chậm các bot. Hơn nữa, nếu yêu cầu thứ hai quay lại "quá nhanh" (bất cứ điều gì có ý nghĩa với trò chơi của bạn) thì bạn có thể từ chối hoặc tải lại trang với một số lỗi trong lý do hoặc lý do yêu cầu gửi lại. "Bạn không thể xây dựng nó nhanh chóng. Hãy dành thời gian của bạn." ví dụ.

Lắng nghe người dùng của bạn và bạn sẽ tìm thấy những gì họ thấy ổn và điều gì làm họ khó chịu.

Thực hiện các động tác và hành động đòi hỏi phải suy nghĩ

NẾU trò chơi là một nút bấm đơn giản, thì bạn không thể làm gì nhiều về bot. Cân nhắc thiết kế lại trò chơi của bạn để trò chơi tự thực hiện một thử nghiệm giống như hình ảnh xác thực.

Không biết gì về trò chơi, tôi không thể đề xuất nhiều. Nếu liên quan đến việc chọn nơi đặt tòa nhà, hãy thiết kế giao diện để người dùng có thể chọn bất cứ nơi nào, mặc dù có những vị trí rõ ràng sẽ không hoạt động. Hoặc có lẽ người dùng phải khớp chính xác hướng lên để vị trí thành công. Nếu nó liên quan đến việc chọn một hành động, bao gồm một danh sách dài hơn các hành động, một số trong đó sẽ không có ý nghĩa trong một tình huống nhất định.

Bao gồm kiểm tra bot rất đơn giản ngẫu nhiên

Thêm một hộp thoại thỉnh thoảng, "Bạn có chắc không?" ví dụ. Thay đổi câu hỏi và từ ngữ thường xuyên và sử dụng nó như một kiểm tra tại chỗ cho bot.

Thay đổi API

Thay đổi API thường xuyên, buộc chúng thực sự phân tích trang web cho các biến chính xác và cách chúng được trả về máy chủ web. Nếu bạn phát triển giao diện của mình bằng cách sử dụng một mẫu, hãy thay thế mẫu bằng mã sử dụng hàm băm muối hoặc trình tạo biến ngẫu nhiên cho mỗi tên biến. Sau đó bắt đầu sử dụng javascript để mã hóa các phản hồi và thay đổi mã hóa đó thường xuyên. Bạn có thể có thể viết phần mềm thực hiện tất cả điều này cho bạn và luôn có mọi thứ ngẫu nhiên hoặc chỉ cần làm một mẫu tĩnh mà bạn thỉnh thoảng thay đổi.


Nếu trò chơi trình duyệt của nó, API thay đổi và tất cả những điều đó sẽ không thành vấn đề. Trừ khi bạn sẵn sàng thay đổi tất cả văn bản trong máy khách mọi lúc (Điều đó thật kinh khủng đối với người chơi. Giao diện người dùng thay đổi mọi lúc .. ugh ..) và nếu Văn bản không thay đổi, thì việc tìm văn bản rất tầm thường. Ngay cả với chỉ jQuery. Khi tôi chơi Travian và tôi chuẩn bị tấn công, tôi đã mở một lượng lớn các tab, đặt tất cả thông tin sẵn sàng và khi hết thời gian, cuộn qua mọi thứ khi nhấp vào gửi. Không đóng chai, chỉ nhanh, nhưng sự chậm trễ api của bạn sẽ đánh tôi mạnh mẽ.
Katu

1
@Katu Tùy thuộc vào trò chơi, rất nhiều yếu tố UI có thể đã là hình ảnh. Thay đổi tên hình ảnh, thay đổi băm tập tin hình ảnh một chút, vv sẽ làm cho nó khó khăn hơn. Tối thiểu bạn đang buộc họ phải tải xuống mọi yếu tố chỉ để tìm ra những gì cần giải quyết. Họ có thể sử dụng javascript để tìm phần tử nào ở trên cùng tại một vị trí nhất định trên màn hình và sau đó cố gắng kích hoạt phần tử đó, nhưng thậm chí sau đó bạn có thể làm cho nó khó hơn bằng cách báo cáo ứng dụng khách javascript trở lại vị trí nhấp chuột thay vì nhấp chuột phần tử.
Adam Davis

@Katu Bạn hoàn toàn đúng, có thể xử lý được, nhưng nếu bạn nỗ lực đủ lớn thì bạn sẽ giảm số người sẵn sàng nỗ lực, điều đó có thể là đủ.
Adam Davis

2
Vấn đề với "phân bổ di chuyển" là bạn đang nói với tất cả người chơi của mình rằng họ chỉ có thể chơi trong 30 phút mỗi ngày hoặc mất bao lâu để sử dụng nó, điều đó làm họ khó chịu, hạn chế doanh thu quảng cáo của bạn và tạo ra sự cám dỗ lớn để cho họ mua nhiều hơn thông qua các giao dịch vi mô.
Random832

Tôi đồng ý với vị trí và định hướng xây dựng! Điều đó đồng thời là một điểm cộng cho người dùng hợp pháp và tiêu cực cho bot.
miva2

13

Bạn không thể ngăn chặn chúng. Nhưng bạn có thể làm cho cuộc sống của họ khốn khổ, vì họ phải dành nhiều thời gian để viết bot và cập nhật chúng. Bạn phải sử dụng bất cứ điều gì bạn phải xác minh nếu người dùng hợp lệ.

  • Kiểm tra các tiêu đề yêu cầu và từ chối các yêu cầu có giá trị không hợp lệ. Hoặc đặt kiểm tra tiêu đề tùy chỉnh cho hiện tại như tác nhân người dùng. Chắc chắn nó dễ dàng vượt qua, nhưng nó thậm chí còn dễ kiểm tra hơn. Nếu botwriter không có kinh nghiệm, có thể anh ta sẽ mất một thời gian để suy nghĩ về nó! Nhiệm vụ của bạn là buộc nhiều người trong số họ phải từ bỏ phải không?
  • Bạn có thể có một số loại chữ ký băm hoặc một cái gì đó trong các yêu cầu của bạn, được tạo ra ở phía máy khách với một số chức năng. Vâng, sau đó tiếp tục thay đổi nó! Làm cho nó thành tập lệnh không lưu trữ riêng biệt và thay đổi nó theo các khoảng thời gian ngẫu nhiên. Tạo một vài trong số chúng, hoặc chỉnh sửa khi đang bay, bằng cách thêm muối ngẫu nhiên vào quá trình băm. Mặc dù một lần nữa, dễ khắc phục, điều này sẽ buộc họ phải theo dõi chức năng của bạn. Họ cũng có thể cần một số loại đường ống triển khai liên tục để cập nhật cho người dùng. Khác, bot của họ sẽ bắt đầu gửi yêu cầu băm không chính xác. Bạn thậm chí có thể cấm người dùng đang làm điều đó quá thường xuyên. Người dùng hợp lệ sẽ di chuyển xung quanh khách hàng của bạn, vì vậy họ sẽ tải lại chức năng băm mỗi giờ. Chỉ cần nhớ cập nhật phía máy chủ quá (phụ trợ dựa trên kịch bản sẽ thực sự giúp đỡ ở đây).
  • Theo dõi hiệu quả sử dụng tài nguyên. Nếu họ chi tiêu ngay lập tức, sau khi một cái gì đó trở nên hợp lý hoặc nếu các cuộc tấn công mới luôn được gửi trong vòng 1-2 giây từ lần cuối cùng, 24/7, thì bạn đang giao dịch với một người chơi khó tính hoặc bot. Bạn yêu cầu captcha từ người đó và buộc đăng xuất anh ta. Nếu anh ta tiếp tục thực hiện các yêu cầu sau khi đăng xuất (bot viết kém!) Thì đó là bot. Nếu anh ta cố gắng đăng nhập nhiều lần mà không thành công, thì có lẽ anh ta là một bot. Nếu anh ta mất vài giờ để đăng nhập lại, thì anh ta có thể là một bot (bot có thể yêu cầu hỗ trợ của con người vào thời điểm này và chủ sở hữu có thể đang ngủ).
  • IP. Điều này có thể loại bỏ bán bot. Nếu ai đó viết bot với $$$ trong tâm trí, họ có thể không muốn chia sẻ nguồn. Họ sẽ bán bot thời gian thay thế. Nếu họ tham lam, họ có thể sử dụng máy đơn, với một / vài ips. Điều đó có nghĩa là rất nhiều người dùng sẽ bắt đầu chia sẻ IP. Điều này là rủi ro, bởi vì trường hợp tương tự là dành cho những người đang chia sẻ một mạng. Bạn sẽ phải kiểm tra xem bất kỳ kiểm tra nào trước đó có thành công trên một số IP nhất định hay không và quyết định thủ công nếu đó là nhóm người dùng hợp pháp hoặc một đội quân bot.

5
Mặc dù những ý tưởng này rất thông minh, nhưng chúng không chỉ dễ dàng đánh bại, mà tôi còn bị cám dỗ viết một bot đơn giản bởi vì nó rất vui khi đánh bại chúng, ngay cả khi tôi không quan tâm nhiều đến việc làm tốt trong trò chơi.
Tuyệt vời nhất

1
Hầu hết các điểm là vô dụng. Bạn đang suy nghĩ ngược. Bất kể bạn làm gì với tất cả các giá trị băm, tiêu đề, v.v., "liên kết để mua nâng cấp cho quán rượu của tôi" phải hoạt động, phải không? Bây giờ, tôi tạo một bot, tìm thấy liên kết đó, cứ sau 2 giờ nó lại nhấp vào liên kết đó. Tôi không quan tâm bạn làm phép thuật gì đằng sau điều đó, nhưng bot của tôi nhấp vào nó giống như người dùng sẽ làm. Điều sử dụng tài nguyên là tốt, nhưng có thể gây ra nhiều tích cực sai, đòi hỏi công việc của con người. IP .. Ví dụ: bot travian (không miễn phí) là một trình duyệt web tùy chỉnh, sẽ gửi mọi thứ từ ip của bạn.
Katu

@Superbest vâng, thật dễ dàng để đánh bại bảo mật này một lần. Nhưng nếu nó thay đổi một chút, bạn sẽ phải theo dõi những thay đổi đó và cập nhật bot của bạn. Điều đó có nghĩa là dành nhiều thời gian hơn, viết một bot để dành ít thời gian hơn để chơi :). Vô nghĩa.
Polan

@Katu bạn nói đúng, phương pháp của tôi sẽ không dừng bot là plugin cho trình duyệt và chỉ cần nhấp vào máy khách. Nhưng bất cứ điều gì bên ngoài, có thể có vấn đề. Chỉ cần tìm một liên kết và phát lại tấn công sẽ không hoạt động, bởi vì hàm băm có thể yêu cầu dấu thời gian và biết một khóa bán bí mật. Chức năng băm sẽ thay đổi mọi lúc và sau đó nếu bạn không có trình thông dịch javascript, bạn sẽ phải viết lại bot của mình mọi lúc để bao gồm những thay đổi đó. Những phương pháp đó sẽ không ngăn mọi người viết bot. Nó sẽ chỉ yêu cầu duy trì liên tục, vì vậy bạn sẽ không tiết kiệm được nhiều thời gian đó từ việc sử dụng bot :).
Polan

2
@Polan Không thành vấn đề nếu viết bot thú vị hơn chơi ở nơi đầu tiên.
Tuyệt vời nhất

8

Nói chung, phân biệt giữa bot và con người hoàn toàn tự động là khó, một số hình thức của quá trình ra quyết định hỗ trợ của con người hoạt động tốt nhất.

Những gì tôi sẽ làm: xác định một số heuristic gợi ý người dùng có thể là bot - thực hiện nhiều hành động, thực hiện 24/7, ... Sau đó, nếu các heuristic này vượt qua một ngưỡng nhất định, hãy kiểm tra xâm lấn.

Bạn có thể tự quét các hoạt động của người chơi và xem nó có ổn không. Hoặc bạn làm một captcha vào lần tới khi người dùng trực tuyến. Hoặc (thậm chí mạnh hơn) chỉ cần gửi cho anh ấy một tin nhắn trò chuyện trong đó bạn giải thích rằng bạn nghi ngờ anh ta là bot và muốn anh ta trả lời bằng thứ gì đó giống con người để chứng minh anh ta không phải là bot (ngày của bạn thế nào? Bộ phim yêu thích của bạn là gì? ... - bạn có thể có một loạt những thứ đó). Nếu anh ta không trả lời, có lẽ anh ta là một bot. Nếu anh ấy trả lời, bạn tự kiểm tra các câu trả lời cho sự giống người và cấm robot. Nếu heuristic của bạn là hợp lý, chỉ một số ít người dùng sẽ được hỏi và số lượng phản hồi để quét sẽ nhỏ. Và nếu bạn giữ bộ câu hỏi riêng tư và thay đổi, không có cách nào robot có thể được chuẩn bị, trừ khi có ai đó phát minh ra SkyNet.


8
Khi Skynet lần đầu tiên tự nhận thức được, mọi người đã cho rằng họ sẽ cố gắng chiếm lấy lực lượng quân sự của thế giới. Họ ít biết rằng mục tiêu duy nhất của nó là thống trị nền kinh tế của MMO yêu thích. Do đó, các cuộc chiến AI-con người vĩ đại đã bị ngăn chặn, bằng cách hướng tham vọng xâm lược của họ vào một địa điểm nơi mà tác hại hạn chế có thể được thực hiện.
Dan Bryant

1
Vấn đề với các tin nhắn là một botter có thể dễ dàng đăng nhập để chơi mỗi ngày và chạy bot trên cùng một tài khoản để giải quyết công việc bận rộn. Bot sẽ bỏ qua tin nhắn, con người sẽ trả lời vào sáng hôm sau, và thật khó để trừng phạt một người chơi vì đã trả lời một vài giờ quá muộn với một tin nhắn được gửi vào giữa đêm.
Tuyệt vời nhất

@Superbest Nếu bot cứ cố chơi trong khi con người ngủ, bạn có một dấu hiệu khá tốt rằng đó là bot. Vấn đề với việc đặt câu hỏi là nếu người chơi không nói tiếng Anh thì sao?
Loren Pechtel

@LorenPechtel Chà, làm sao bạn biết khi họ đang ngủ? Có rất nhiều người có lịch trình ngủ rất bất thường ngoài kia. Chỉ vì họ không trả lời không có nghĩa đó là bot, có lẽ họ không cảm thấy muốn trả lời và sau đó quyết định làm điều đó. Đối với ngôn ngữ, có lẽ người chơi nói ngôn ngữ của trò chơi, nếu không họ sẽ đồng ý với các quy tắc hoặc ToS như thế nào? Không khó để phân biệt bot với người nước ngoài trong một cuộc trò chuyện.
Tuyệt vời nhất

@Superbest Ấn tượng của tôi là trò chơi sẽ không tiếp tục trong khi câu hỏi vẫn chưa được giải đáp. Nếu họ tiếp tục gửi các lệnh vô ích thì rõ ràng đó là một bot làm việc đó.
Loren Pechtel

8

Ôm con botter. Bạn đã xây dựng một API yên tĩnh, hoàn hảo để một lập trình viên thử nghiệm tự động hóa trò chơi của bạn. Thiết kế lối chơi của bạn để bot không đạt được lợi thế so với người chơi do được tự động hóa - loại bỏ các lợi thế về tốc độ thực thi, v.v. mà máy có; thiết kế trò chơi của bạn để bot cung cấp doanh thu tương tự như một người chơi, nếu có thể - hoặc ít nhất cung cấp một môi trường phong phú hơn để thu hút nhiều người chơi hơn.

Câu hỏi là, tại sao mọi người tạo bot cho trò chơi của bạn và họ sẽ trả tiền cho đặc quyền?


4

Tôi không nhất thiết phải đồng ý với câu trả lời mềm khoa học nhưng những thứ kỹ thuật bạn có thể làm để phát hiện botters và một số điều mà chỉ làm cho cuộc sống khó khăn hơn cho họ.

  • Xếp hạng các tài khoản theo mức độ bạn nghi ngờ họ đang sử dụng bot. Điều này sẽ cung cấp cho một số kỹ thuật khác và bảo vệ người dùng hợp pháp khỏi cơn thịnh nộ của bạn.

  • Xoay khóa cookie phiên. Điều này đảm bảo bot bảo tồn cookie của nó nhưng cũng khiến botter khó chia sẻ cookie hơn giữa trình duyệt và bot (điều này thực sự tiện dụng trong khi phát triển và thử nghiệm).

  • Tỷ lệ giới hạn hành động nhất định. Làm việc nhanh nhất bạn thực sự có thể làm một cái gì đó, và theo dõi xem các bot này đang làm nó nhanh như thế nào. Cũng có thể đáng để giữ một bản ghi đang chạy và làm việc sai lệch tiêu chuẩn. Ngay cả khi ai đó chỉ làm điều gì đó cứ sau 10 giây, nếu họ thực hiện chính xác cứ sau 10 giây thì có lẽ họ là một con bot. Sửa đổi đánh giá của họ và đăng xuất chúng.

  • Làm cho việc đăng nhập trở nên khó khăn hơn trên các tài khoản mà bạn nghi ngờ có thể là bot. CAPTCHA và câu hỏi và những thứ không thể tránh khỏi khác khiến mọi thứ trở nên khó khăn hơn nhiều đối với một botter sẽ tự động viết kịch bản.

  • Theo dõi chuyển động chuột / trang. Điều này khá đơn giản với javascript ngày nay nhưng các bot không hữu cơ có bất kỳ chuyển động chuột nào. Nếu bạn không nhận được bất kỳ "nhấp chuột" nào, chúng có thể là thiết bị di động hoặc chúng có thể là bot. Điều tra. Có rất nhiều dữ liệu để đăng nhập mặc dù ... Vì vậy, bạn có thể muốn dành riêng dữ liệu này cho các tài khoản đã kích hoạt các bước trước đó.

  • Xây dựng các công cụ để liên kết các tài khoản theo hành vi, IP, chuỗi hành động, nhịp hành động. Nếu bạn định cấm mọi người, hãy đảm bảo bạn có các công cụ để tự xác minh hành vi sai trái của họ.

  • Xoay ra lược đồ URL, các biến CSRF, v.v. và làm điều đó thường xuyên. Đó là một bước tiến lớn và có thể đòi hỏi nhiều công việc trực tiếp hơn bao giờ hết nhưng nó sẽ có giá trị, nhưng ít nhất, bất kỳ tài khoản nào đột nhiên ngừng hoạt động (hoặc liên tục làm hỏng các URL cũ và gửi tên biến cũ - đăng nhập nó!) cần mức độ chỉ số bot của họ tăng lên.


3

Bạn đã xem việc biến bot thành một phần không thể thiếu của trò chơi chưa? Thật khó để các bot phá hỏng trò chơi cho những người khác nếu mọi người được khuyến khích tạo ra chúng. Thêm hỗ trợ cho kịch bản và tất cả các động lực của trò chơi thay đổi từ chiến lược quản lý tài nguyên thủ công sang chiến lược thiết kế bot.


3

Tạo một máy chủ chỉ bot riêng biệt. Tạo bảng xếp hạng và ăn mừng những người chiến thắng. Nhìn vào dữ liệu này tạo ra. Cấm người dùng từ các sever bình thường có hồ sơ hành vi trông giống như bot.


2

Dù bạn làm gì, hãy nhớ KHÔNG làm cho người chơi thực sự khó chịu hơn! Rất nhiều phản hồi tôi đã thấy (kết quả trang chậm hơn, không cho phép mở nhiều trang để tạo điều kiện cho đầu vào nhanh hơn, v.v.) cũng sẽ ngăn người chơi hợp pháp thực hiện mọi việc nhanh chóng, điều này sẽ khiến họ thất vọng.

Cách tiếp cận đơn giản nhất có thể là áp dụng kỹ thuật xã hội cho vấn đề: 1) thêm một điều khoản NO-BOT rõ ràng vào ĐKDV của bạn và thêm rằng việc phát hiện hoạt động bot sẽ xóa trình phát khỏi danh sách điểm cao (hoặc có nhãn "kẻ lừa đảo "Được đính kèm, vì vậy mọi người sẽ không nản lòng với họ; nếu bạn đi theo con đường đó, hãy cho phép mọi người ẩn hồ sơ gian lận).

2) kiểm tra hành vi giống như bot (ví dụ: ping thường xuyên hẹn giờ với máy chủ hoặc thời gian gần hoàn hảo trong nhiều giờ liên tiếp) và nếu vậy thì hãy đặt tài khoản vào "chế độ bot" - hiển thị hình ảnh chụp thường xuyên và không chú ý . nếu những thứ này bị bỏ qua nhưng người chơi tiếp tục chơi trò chơi, đánh dấu người chơi là "bot" và loại anh ta khỏi bảng xếp hạng. nếu họ được giải quyết, đánh dấu anh ta là "người chơi quyền lực" và đưa anh ta ra khỏi danh sách bot.

bằng cách này, đại đa số người chơi không bao giờ bị ảnh hưởng, những game thủ khó tính bị ảnh hưởng trong một thời gian ngắn và các bot không "phá hỏng trò chơi" cho bất kỳ ai khác.


Điều gì nếu một người chơi quyền lực quyết định bot? Tôi không nghĩ 'đánh dấu' người chơi là một điều gì đó có ý nghĩa, nó rất có thể khai thác. Chỉ cần chơi nhiều trong vài ngày sau đó khi bạn nhận được cờ, hãy kích hoạt bot và không bao giờ bị bắt
Dan Pantry
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.