2009-11-03 27 views
10

Tôi có 2 trò chơi flash (được viết bằng chữ as3). Cả hai giá trị điểm cao bị tấn công. Phạm vi bình thường của mỗi điểm số trò chơi không quá 5000 (người dùng thông thường, sẽ chỉ nhận được 2000 - 3000 điểm). Phương pháp chống hack hiện tại của tôi là:Trò chơi flash hack, điểm số là 49700 ?? Làm thế nào để cải thiện an ninh trò chơi flash?

Sau khi kết thúc trò chơi, flash sẽ sử dụng thông số bài gửi: username = mike & score = 2000 & hash = md5 (bí mật. Username. Score). Trong trang php, tôi đã kiểm tra, nếu băm! = Md5 (bí mật. Tên người dùng. Điểm), nó sẽ trả về lỗi, và WONT chèn dữ liệu vào cơ sở dữ liệu.

Tôi tin rằng phương pháp này là không đủ hoặc trò chơi flash của tôi sẽ không bị tấn công. Có bất cứ điều gì tôi có thể làm để cải thiện trò chơi flash của tôi bảo mật/chống hack?

Làm thế nào để tin tặc tấn công? Sử dụng phần mềm của bên thứ ba như, Cheat Engine, dữ liệu Tamper (firefox ext), tamperIE etc ??

Bạn có thể liệt kê tất cả các phương pháp hack tiêu chuẩn không? (bằng cách biết các phương pháp hack/vấn đề, phương tiện đã giải quyết được 50% vấn đề, ít nhất tôi biết được vấn đề ở đâu, và cẩn thận trước điều đó)

Vâng, tiêu đề của tôi có "49700" vì cả hai trò chơi điểm cao là 49.700 (trên thực tế Alots giá trị số này được đưa vào cơ sở dữ liệu của tôi, người dùng khác nhau nghĩ), vì vậy tôi tin rằng họ đang sử dụng cùng một phương pháp

Cảm ơn

+0

Bạn có tạo "bí mật" không? Làm thế nào để bạn làm điều đó và nó kéo dài bao lâu? –

+0

có .. bí mật là một số chuỗi ngẫu nhiên, ví dụ: MN! FAH5736ghs^& –

+1

Hãy nhớ tìm kiếm các câu hỏi tương tự trước khi bạn tự hỏi. Kiểm tra điều này: http://stackoverflow.com/questions/73947/what-is-the-best-way-to-stop-people-hacking-the-php-based-highscore-table-of-af Có một số câu trả lời khá hay trong đó. –

Trả lời

2

cuối cùng Bạn đang cố gắng trì hoãn thời gian cần thiết cho mọi người để hack hệ thống của bạn, hoặc làm cho nó không đáng giá trong thời gian của họ. Bạn có thể thử thêm muối vào hàm băm cho một chút phức tạp hơn. Điều này có thể được gửi dưới dạng giá trị cho trò chơi flash (thêm nó làm tham số cho đối tượng flash trong HTML) và bao gồm trong mã xác minh băm. Bạn có thể gửi một số loại id phiên hoặc số ngẫu nhiên để nó luôn khác nhau. Bạn thậm chí có thể tạo ra hai băm bằng các phương thức khác nhau và kiểm tra cả hai.

Tất nhiên, đừng giảm khả năng mọi người đã tìm ra cách để hack chức năng trò chơi thực tế. Hoặc họ chỉ là những người chơi thực sự tốt ...

1

Nếu tôi muốn hack trò chơi của bạn, tôi có thể dịch ngược lại trò chơi của bạn và tìm ra "bí mật" md5. Lưu ý rằng tôi đặt bí mật trong dấu ngoặc kép, vì thực tế là nó được cung cấp trong nhị phân trò chơi flash của bạn có nghĩa là nó không thực sự là một bí mật.

Nó có thể không thể làm cho điểm số của bạn không thể ngăn cản được, tất cả những gì bạn có thể hy vọng làm là làm cho nó khó hơn.

+0

Bạn có thể vui lòng cho tôi biết, cách nào để làm cho khó có thể hack hơn? =) –

+0

Cuối cùng, điều này không giúp người hỏi. Câu hỏi đặt ra ở đây là làm thế nào để làm cho nó an toàn hơn. Bảo mật không có nghĩa là "hoàn toàn an toàn". Nếu ngôi nhà của bạn được bảo vệ bằng một cái chốt chết, một hệ thống an ninh và một con chó, điều đó không có nghĩa là tôi không thể phá vỡ cửa sổ của bạn, bắn con chó của bạn và ăn cắp TV của bạn trước khi cảnh sát xuất hiện. Nhưng tôi chỉ giả định cướp hàng xóm vì họ để cánh cửa mở. ;) –

+0

"Làm thế nào để các tin tặc hack? Bạn có thể liệt kê tất cả các phương pháp hack tiêu chuẩn?" Tôi đã trả lời một số câu hỏi của anh ấy. Nhận xét của bạn phàn nàn rằng tôi không giúp người hỏi không giúp anh ta hoặc tôi khi bạn không trả lời bất kỳ câu hỏi nào của anh ấy hoặc cung cấp thêm thông tin về câu trả lời của tôi. – frankster

8

Nó không thực sự có thể làm cho xác nhận điểm số của bạn an toàn nếu nó chạy hoàn toàn ở phía khách hàng. Bạn phải làm ít nhất một phần của nó ở phía máy chủ để nó thậm chí còn được bảo mật từ xa. Tôi thấy 2 cách để làm điều này:

  • bạn gửi thông tin cập nhật điểm định kỳ để máy chủ và trên phía máy chủ bạn kiểm tra xem điểm số không nhảy "quá nhiều" (được định nghĩa trong bối cảnh của bạn trò chơi). Nếu nó "nhảy", bạn có thể an toàn cho rằng người chơi đang hack.

  • bạn gửi toàn bộ chuỗi chuyển động trò chơi (cùng với bất kỳ lần phát ngẫu nhiên hoặc bất kỳ sự kiện nào) đến máy chủ với điểm số ở cuối và xác minh rằng điểm số thực sự chính xác. Điều này rõ ràng sẽ không hoạt động cho mọi trò chơi, nhưng đối với một số trò chơi, nó có thể hoạt động. Bạn đã không nói bất cứ điều gì cụ thể về trò chơi của bạn vì vậy tôi sẽ để lại điều này ở đây.

+0

Viên đạn đầu tiên không ngăn một hacker lấy điểm cao nhất. Viên đạn thứ hai của bạn là một ý tưởng tuyệt vời! – rook

+0

Yea nhưng nó không áp dụng cho nhiều trò chơi, đặc biệt là game bắn súng hoặc những trò chơi nhảy vọt nơi quá nhiều xảy ra. Nó có thể làm việc cho những thứ như trò chơi Tetris hoặc Logic nói chung. – Blindy

+0

Tại sao nó không thể áp dụng cho game bắn súng hay trò chơi nhảy? Có điều gì tôi không nhận thức được điều đó làm cho nó không thực tế hoặc không thể để giữ một kiểm đếm hoạt động của các sự kiện gây ra một sự gia tăng điểm số? Giữ một danh sách các kẻ thù bị trả về, kiểm tra xem danh sách không vượt quá số lượng thực tế hiện diện trong game? Tùy thuộc vào cơ chế trò chơi cá nhân tất cả các loại điều có thể. Không gian khả năng trong platformers và game bắn súng là hạn chế hơn bạn có thể nghĩ. – Breton

-1

Như bạn đã nói tùy thuộc vào những gì đang được thực hiện để tấn công, có các lỗ khác nhau cần sửa. Khi bạn đang gửi thông tin thực tế trong tin nhắn của bạn, và "bí mật" được chứa trong mã nó trở thành một mục tiêu dễ dàng hơn nhiều. Một số trong những điều bạn có thể làm để cải thiện an ninh

  • sai sót Sử dụng một hàm băm khác nhau, MD5 đã biết nó có thể tạo ra các thông điệp với cùng một chữ ký mà không biết nội dung, SHA1, SHA2 cung cấp bảo mật cao hơn, điều này sẽ ngăn chặn một cuộc tấn công thông qua một điểm yếu của MD5

  • Làm cho 'bí mật' trở thành duy nhất đối với mỗi thư, ví dụ: gửi nó từ máy chủ cho mỗi bài đăng, điều này sẽ ngăn mọi người sử dụng lại cùng một mã băm và làm cho việc xem xét mã khó hơn và tạo ra mã băm

  • Băm kết quả nhiều lần, ví dụ: value = hash(hash(hash(...,salt),salt),salt) điều này sẽ không giúp ích nếu mọi người đang dịch ngược chương trình của bạn nhưng nó sẽ giúp ích nếu họ chỉ cố tự tạo lại băm.

  • Hãy tìm phần mềm để bảo vệ SWF của bạn chống lại dịch ngược, tôi không làm được gì nhiều đèn flash vì vậy tôi không có bất kỳ liên kết đáng tin cậy cho rằng

5

Cho đến nay phương pháp đơn giản nhất và khó khăn nhất để đánh bại trong Flash là sử dụng CheatEngine để chỉ cần tìm kiếm vị trí bộ nhớ lưu trữ điểm số, sau đó thay đổi giá trị thành bất kỳ thứ gì bạn muốn. Tất cả việc băm/băm/xác minh máy chủ gửi trên thế giới sẽ không khắc phục điều đó bởi vì trò chơi của bạn cho rằng nó hợp lệ trước khi nó đóng gói trong một mã băm hợp lệ hợp lệ để gửi.

Bạn có thể thực hiện 'kiểm tra độ chính xác' trên điểm nếu chúng luôn nằm trong các giá trị được xác định trước, nhưng ngay cả khi đó, một hacker xác định có thể đơn giản tìm ra giá trị tối đa cho phép và luôn gửi giá trị đó.

Bạn có thể cố gắng làm xáo trộn các giá trị điểm của bạn trong bộ nhớ để làm cho chúng khó tìm hơn với CheatEngine, ví dụ như lưu trữ chúng dưới dạng giá trị nhân, sau đó trong getters và setters của bạn cho giá trị điểm, bao gồm phép nhân/phân chia các giá trị để có được/thiết lập số điểm thích hợp cho các tiện ích con số lượt xem và số điểm của bạn. Ngay cả điều này chỉ là một chiến thuật gian hàng mặc dù.

Trừ khi điểm số không có thật khiến bạn mất tiền, đừng lo lắng về việc lãng phí thời gian trên 0,01% số người đang gian lận hoặc chỉ cần kiểm duyệt các bảng điểm của bạn theo cách thủ công.

Điều quan trọng cần xem xét trong việc ngăn chặn gian lận là: 'Điều này thực sự quan trọng đến mức nào?' Nếu bạn đang chạy một số loại cạnh tranh dựa trên điểm số cao với một giải thưởng tiền mặt, thì đó là một ưu tiên khá cao. Nếu bạn chỉ miffed rằng một số người ngẫu nhiên là rối lên bảng điểm số cao của bạn, nó không có giá trị thời gian của bạn để ngăn chặn chúng, chỉ cần kiểm tra nó một lần một tuần và thả các điểm xấu.

1

Hệ thống mã hóa bạn đang sử dụng rất giống với HMAC, nhưng việc triển khai của bạn kém an toàn hơn. Thuật toán md5 bị hỏng, tuy nhiên MAC của bạn không bị tấn công tiền tố để tạo ra xung đột băm vì sự khởi đầu của bí mật của bạn. Kẻ tấn công phải có khả năng kiểm soát việc ăn xin của chuỗi để tạo ra một va chạm băm.

TamperData là một công cụ hack rất hữu ích để sửa đổi/Capture/Phát lại lưu lượng truy cập đến từ trình duyệt. Vì vậy, bạn nên ngăn chặn chống lại các cuộc tấn công replay bằng cách xác thực ngày hiện tại và thời gian: hmac (bí mật, date_time.score.username).

Các tin tặc có thể đang sử dụng SWF Decompiler để tìm giá trị bí mật của bạn trong tệp SWF. Để chống lại điều này, bạn nên thử và chôn bí mật bằng cách sử dụng SWF obfuscation chẳng hạn như http://www.amayeta.com/.

Không ai trong số này là "viên đạn bạc", điều này chỉ gây khó khăn cho hacker. Một hacker sẽ luôn có thể sửa đổi điểm số của mình vì bạn tin tưởng khách hàng để cho bạn biết điểm chính xác. Ngay cả khi bạn thực hiện các thay đổi được đề xuất, bạn vẫn sẽ vi phạm CWE-602.

+0

+1 Câu trả lời liên tục. –

0

Sẽ không chỉ đơn giản là chạy các trò chơi trên phía máy chủ ngăn chặn hack điểm? Nếu trò chơi đang được chạy như một trò chơi ngẫu nhiên thì bạn gửi các giá trị ngẫu nhiên tới trình duyệt của người dùng sẽ không có nhiều ý nghĩa trong việc họ cố gắng gian lận, thậm chí việc biên dịch tập tin flash sẽ không mang lại lợi thế cho họ.

+0

Flash qua trình duyệt web là phía máy khách. –

+0

@blesh: Trò chơi * logic * sẽ ở phía máy chủ và kết quả của logic đó sẽ được gửi tới ứng dụng khách, sẽ được hiển thị bằng ứng dụng Flash. –

+0

@ Casey: Những gì bạn đang đề xuất được sử dụng cho các trò chơi poker/roulette trực tuyến, nhưng cách viết các trò chơi này càng khó hơn và do đó không cho phép phát triển nhanh (cũng sẽ gây căng thẳng đáng kể cho máy chủ, vài trăm trường hợp cho người dùng) ... nhưng nó đã được sử dụng rồi. – Sigtran

0

Điều tôi nghĩ là vì trò chơi xuất hiện yêu cầu xác thực, tôi cho rằng có các cuộc gọi yêu cầu phải có tên người dùng và thông tin khác.

Thảo luận vấn đề từ lời khuyên thir nhà phát triển khác là sử dụng các thành phần Ajax. Idk.

Hầu hết các tin tặc sẽ tìm cách giải quyết các vấn đề bảo mật, cách tốt nhất là ngăn không cho mọi người quay lại máy chủ khác với những gì cần thiết để trò chơi hoạt động.

Có ai sử dụng ngẫu nhiên dựa trên lượng bộ nhớ tiêu cực có sẵn không? thay vì tìm kiếm vị trí bộ nhớ cụ thể với các phần mềm đó.

Tại sao không gửi nhiều giá trị giả mạo để ghi nhớ và lấy được kết quả dựa trên vị trí bộ nhớ mở?

Vui lòng không tấn công tôi vì đề xuất này Tôi là người học giống hầu hết những người khác.

0

Bạn có thể thêm một số loại mã hóa RSA (bất đối xứng) vào ứng dụng Flash của mình. Bạn sẽ đặt khóa công khai trong ứng dụng Flash của mình và sử dụng khóa riêng ở phía máy chủ để giải mã số điểm đã gửi.

Điều này sẽ không nhất thiết ngăn chặn tin tặc xâm nhập vào ứng dụng Flash của bạn, nhưng nó sẽ làm cho nó đau hơn một chút ở mông.

Here is an AS3 library for RSA encryption.

Bên ngoài nó sẽ phụ thuộc vào công nghệ máy chủ bạn đang sử dụng (PHP, .Net hoặc bất kỳ thứ gì) về cách bạn triển khai RSA ở phía bên kia.

Cũng cần lưu ý rằng this question has already been answered.

Các vấn đề liên quan