2008-08-25 2 views
24

मैं एक देशी (गैर-वेब) सिंगल-प्लेयर गेम के साथ खेल रहा हूं, जिसे मैं लिख रहा हूं, और यह मेरे लिए हुआ कि दैनिक/साप्ताहिक/सभी समय ऑनलाइन हाईस्कॉर सूची (लगता है कि Xbox लाइव लीडरबोर्ड) गेम को और अधिक दिलचस्प बना देगा, जिसमें कुछ (छोटी) समुदाय और प्रतिस्पर्धा शामिल होगी। हालांकि, मुझे डर है कि लोगों को हैकिंग के निमंत्रण के रूप में ऐसी सुविधा दिखाई देगी, जो असंभव उच्च स्कोर के कारण नियमित खिलाड़ियों को हतोत्साहित करेगी।गैर-वेब खेलों के लिए सुरक्षित ऑनलाइन हाईस्कोर सूचियां

मैंने इस तरह के प्रयासों (उदाहरण के लिए सार्वजनिक/निजी कुंजी एन्क्रिप्शन) को रोकने के स्पष्ट तरीकों के बारे में सोचा, लेकिन मुझे लगता है कि हैकर्स मेरे सभी विचारों को बाधित कर सकते हैं (बाइनरी से सार्वजनिक कुंजी निकालने और इस प्रकार नकली एन्क्रिप्टेड स्कोर भेजना, उदाहरण के लिए)।

क्या आपने कभी ऑनलाइन हाईस्कॉर सूची या लीडरबोर्ड लागू किया है? क्या आपको इसे लागू करने का एक उचित हैकर-सबूत तरीका मिला? यदि ऐसा है, तो आपने यह कैसे किया? हैकिंग प्रयासों के साथ आपके अनुभव क्या हैं?

उत्तर

39

दिन के अंत में, आप ग्राहक पर भरोसा करने पर भरोसा कर रहे हैं। यदि ग्राहक सर्वर पर प्रतिलिपि भेजता है, तो एक सफल प्लेथ्रू को दोहराने या संशोधित करने के लिए पर्याप्त है और उसे सर्वर पर भेजना आसान है।

आपकी सबसे अच्छी शर्त यह है कि एक खिलाड़ी को ऊपर उठाने के लिए धोखा देने के लिए बार बढ़ाने के लिए बार बढ़ाया जाना चाहिए। ऐसा करने के लिए, आप कई सिद्ध (लेकिन अनियमित) तकनीकों का उपयोग कर सकते हैं जिनका उपयोग आप कर सकते हैं:

  1. एक हनीपॉट में ब्लैकलिस्टेड धोखेबाज़ छोड़ दें। वे अपने स्कोर देख सकते हैं, लेकिन कोई और नहीं कर सकता है। जब तक वे एक अलग खाते से लॉग इन करके सत्यापित नहीं करते हैं, तो उन्हें लगता है कि उन्होंने आपके गेम को सफलतापूर्वक हैक कर दिया है।
  2. जब किसी को धोखेबाज के रूप में ध्वजांकित किया जाता है, तो किसी भी खाते के परिणाम को भविष्य में किसी दिए गए बिंदु तक स्थानांतरित करने से रोकें। इस बिंदु को यादृच्छिक बनाएं, एक से तीन दिनों के भीतर। आम तौर पर, एक धोखेबाज कई तरीकों का प्रयास करेगा और अंततः सफल होगा। बाद की तारीख तक खाता स्थिति प्रतिक्रिया को परिभाषित करके, वे यह समझने में असफल हो गए कि उन्हें क्या पकड़ा गया।
  3. सभी गेम उपयोगकर्ता आदेशों को कैप्चर करें और उन्हें सर्वर पर भेजें। दिए गए डेल्टा के भीतर उन्हें अन्य स्कोर के खिलाफ सत्यापित करें। उदाहरण के लिए, यदि खिलाड़ी ने 200 बार शूट एक्शन का इस्तेमाल किया, लेकिन 200,000 का स्कोर प्राप्त किया, लेकिन गेम में पड़ोसी खिलाड़ियों ने 210,000 के स्कोर प्राप्त करने के लिए 5,000 बार गोली मार दी, तो यह एक थ्रेसहोल्ड ट्रिगर कर सकता है जो व्यक्ति को आगे या मानव के लिए झुकाता है जाँच पड़ताल।
  4. अपने उपयोगकर्ता खातों में मूल्य और दृढ़ता जोड़ें। यदि आपके उपयोगकर्ता खातों में आपके गेम के लिए अनलॉक करने योग्य हैं, या यदि आपके गेम को खरीद की आवश्यकता है, तो प्रतिबंध का वजन अधिक है क्योंकि उपयोगकर्ता वेब-आधारित प्रॉक्सी के माध्यम से बस एक नया खाता बनाकर अपनी पिछली खाता स्थिति वापस नहीं प्राप्त कर सकता है।
6

मैं ईमानदारी से यह नहीं सोचता कि यह संभव है।

मैंने एक संपीड़ित बाइनरी के साथ बहुत सरल कुंजी एन्क्रिप्शन का उपयोग करने से पहले इसे किया है जो मुझे आवश्यक सुरक्षा के लिए काफी अच्छा काम करता है लेकिन मुझे ईमानदारी से लगता है कि अगर कोई आपके ऑनलाइन उच्च स्कोर तालिका को एक हैक को क्रैक करने पर विचार करता है तो यह किया जाएगा।

वहां कुछ बहुत उदास लोग हैं जो बहुत उज्ज्वल होने लगते हैं जबतक कि आप उन्हें सभी खोने का कारण नहीं बना सकते।

5

मैं अपने फ़्लैश गेम्स के साथ ऐसा कुछ कर रहा हूं, और यह वास्तव में एक हारने वाली लड़ाई है। विशेष रूप से एक्शनस्क्रिप्ट के लिए जिसे बिना किसी प्रयास के कुछ हद तक पठनीय कोड में डिकंपिल्ड किया जा सकता है।

जिस तरह से मैं इसे कर रहा हूं वह सादा पाठ में स्कोर और खिलाड़ी का नाम भेजने और फिर दो (ठीक से नमकीन) का हैश भेजने का एक पारंपरिक दृष्टिकोण है। बहुत कम लोग इसे समझने के लिए प्रयास करने के लिए पर्याप्त निर्धारित किए जाते हैं, और जो लोग इसे करते हैं, वैसे भी, जो भी आप इसे डालते हैं, उन्हें अस्वीकार करते हैं।

संक्षेप में, मेरा दर्शन खेल को बेहतर बनाने के लिए समय बिताना है और इसे धोखा देने के लिए पर्याप्त कठिन बनाना है।

एक चीज जो कि बहुत प्रभावी हो सकती है, यह गेम हर बार सर्वर पर स्कोर जमा करने के लिए होता है, जब आप खेल रहे हैं, तो प्रत्येक बार गेमप्ले की जानकारी भेजना, जिससे आप "यथार्थवादी" होने पर मान्य हो सकते हैं। लेकिन यह वास्तव में थोड़ा ऊपर हो सकता है।

23

कोई समाधान कभी, जबकि खेल उपयोगकर्ता के नियंत्रण में एक प्रणाली पर चल रहा है सही होने जा रहा है, लेकिन वहाँ कुछ ही कदम आप इस प्रणाली की हैकिंग अधिक मुसीबत बनाने के लिए ले सकता है कर रहे हैं। अंत में, लक्ष्य केवल सिस्टम को हैकिंग को इसके लायक होने की तुलना में अधिक परेशानी बनाना है।

  • सर्वर के पक्ष को सत्यापित करने के लिए उच्च स्कोर अनुरोधों के साथ कुछ अतिरिक्त जानकारी भेजें। यदि आपको प्रत्येक एक्स के लिए 5 अंक मिलते हैं, और गेम में केवल 10 एक्स होते हैं, तो आपके पास हैकर को अपने स्कोर को मान्य के रूप में स्वीकार करने के लिए कुछ अतिरिक्त हुप्स मिलते हैं।
  • क्या सर्वर एक यादृच्छिक चुनौती भेजता है जिसे उस ऑफ़सेट से गेम की बाइनरी के कुछ बाइट्स से मुलाकात की जानी चाहिए। इसका मतलब है कि हैकर को बाइनरी की एक पुरानी प्रतिलिपि रखना चाहिए (बस थोड़ा और परेशानी)।
  • आप लाइसेंस कुंजियों है, तो उन्हें शामिल करने के लिए उच्च स्कोर की आवश्यकता होती है, तो आप प्रणाली की हैकिंग पकड़ा लोगों पर प्रतिबंध लगाने के कर सकते हैं। यह आपको ऊपर परिभाषित अनुसार अमान्य प्रयासों को ट्रैक करने देता है, लोगों को कभी भी वैध स्कोर सबमिट करने से पहले प्रोटोकॉल का परीक्षण करने पर प्रतिबंध लगाने के लिए।

हालांकि, सभी लोगों को हैक की देखभाल करने के लिए पर्याप्त लोकप्रिय खेल मिलना शायद यह एक बड़ी चुनौती है।

+6

महान पंक्ति: "सभी में हालांकि, लोगों को हैक करने की देखभाल करने के लिए पर्याप्त लोकप्रिय गेम प्राप्त करना शायद यह एक बड़ी चुनौती है।" –

2

जैसा कि दूसरे उत्तर में कहा गया है, आपको संभावित रूप से दुर्भावनापूर्ण ग्राहक पर भरोसा करने के लिए मजबूर होना पड़ता है, और एक साधारण निवारक प्लस थोड़ा मानव निगरानी एक छोटे से खेल के लिए पर्याप्त होने जा रहा है।

यदि आप फैंसी प्राप्त करना चाहते हैं, तो आपको स्कोर डेटा में धोखाधड़ी पैटर्न देखना होगा, जो चार्ज डेटा को देखते हुए क्रेडिट कार्ड कंपनी के समान है। क्लाइंट जितना अधिक राज्य क्लाइंट आपके सर्वर पर संचार करता है, कोड के माध्यम से सही या गलत व्यवहार के पैटर्न को ढूंढना संभवतः आसान होता है। उदाहरण के लिए। कहें कि क्लाइंट को स्कोर के समय-आधारित ऑडिट लॉग को अपलोड करना था (जो शायद आप किसी अन्य क्लाइंट को शीर्ष गेम देखने के लिए भी उपयोग कर सकते हैं), तो सर्वर तब मान्य कर सकता है जब स्कोर लॉग किसी भी गेम नियम को तोड़ देता है।

अंत में, यह अभी भी स्कोरबोर्ड को धोखा देने के लिए पर्याप्त महंगा बनाने के बारे में है। आप एक प्रणाली चाहते हैं जहां आप अपने सत्यापन प्रणाली पर किसी भी नए हमले से निपटने के लिए सर्वर कोड को हमेशा (अपडेट करने में आसान) सुधार सकते हैं।

3

यह वास्तव में एक कठिन सवाल है।

मैंने कभी ऐसी चीज लागू नहीं की है लेकिन यहां एक सरल अपरिवर्तनीयता है।

आपकी मुख्य चिंता हैकर अनुमान लगा रही है कि आपका एप्लिकेशन क्या कर रहा है और फिर अपने स्वयं के परिणाम भेज रहा है।

ठीक है, सबसे पहले, जब तक कि आपके आवेदन की कोई बड़ी सफलता न हो, मैं चिंतित नहीं होगा। ऐसी चीज करना बेहद मुश्किल है।

एन्क्रिप्शन समस्या से मदद नहीं करेगा। आप देखते हैं, एन्क्रिप्शन डेटा को अपने तरीके से सुरक्षित रखने में मदद करता है लेकिन यह डेटा एन्क्रिप्टेड होने से पहले लेनदेन के दोनों पक्षों की रक्षा नहीं करता है (जहां मुख्य भेद्यता हो सकती है)। इसलिए यदि आप निश्चित रूप से एन्क्रिप्ट करते हैं, तो डेटा निजी रहेगा लेकिन यह सुरक्षित नहीं होगा।

यदि आप इसके बारे में वास्तव में चिंतित हैं तो मैं कोड को खराब करने और स्कोर सिस्टम को इस तरह से डिजाइन करने का सुझाव दूंगा जो पूरी तरह से स्पष्ट नहीं है कि क्या कर रहा है। यहां हम कुछ चीजें एन्क्रिप्शन प्रोटोकॉल से उधार ले सकते हैं।

  1. कहते स्कोर कुछ नंबर मीटर
  2. कंप्यूट (स्कोर से अधिक की जाँच किसी तरह का उदाहरण सीआरसी या किसी अन्य प्रणाली आप पैर को देखने के लिए है चलो वास्तव में, यदि आप सिर्फ आविष्कार: यहाँ एक उदाहरण है। एक, कोई फर्क नहीं पड़ता कि यह कितना लंगड़ा है यह बेहतर काम करेगा)
  3. अपने रिमोट सर्वर (स्पष्ट रूप से एक सुरक्षित कनेक्शन पर) उपयोगकर्ता (डी) की निजी कुंजी प्राप्त करें। आप अकेले हैं जो इस कुंजी को जानते हैं।
  4. कंप्यूट एक्स = m^डी आधुनिक एन (एन अपने सार्वजनिक/निजी कुंजी एल्गोरिथ्म के सार्वजनिक मॉड्यूल किया जा रहा है) (कि है, यह एन्क्रिप्ट: पी)

जैसा कि आप देख कि सिर्फ एक और तरह का कहानियो है। जब तक आप चाहें तब तक नीचे जा सकते हैं। उदाहरण के लिए आप एक्स के निकटतम दो प्राइम नंबर देख सकते हैं और सीआरसी को एन्क्रिप्ट करने के लिए उनका उपयोग कर सकते हैं और इसे सर्वर पर भी भेज सकते हैं ताकि आपके पास सीआरसी और स्कोर अलग-अलग और विभिन्न एन्क्रिप्शन योजनाओं के साथ हो।

यदि आप इसका उपयोग obfuscation के संयोजन के साथ करते हैं तो मैं कहूंगा कि हैक करना मुश्किल होगा। फिर भी यह उल्टा उलटा हो सकता है, यह सब हैकर की रुचि और क्षमता पर निर्भर करता है लेकिन ...गंभीरता से, किस तरह का सनकी खेल पर अपने परिणामों को बदलने के लिए इतना प्रयास करता है?

एक आखिरी टिप्पणी

Obfuscator for .NET

Obfuscator for Delphi/C++

Obfuscator for assembler (x86)

5

अपने खेल पुनरावृत्ति प्रणाली में बनाया गया है, तो आप सर्वर से रिप्ले प्रस्तुत कर सकते हैं (जब तक वाह या कुछ और है) और सर्वर रीप्ले से स्कोर की गणना करता है।

यह विधि सही नहीं है, आप अभी भी खेल को धीमा कर (यदि यह क्रिया-आधारित है), या एक बॉट लिखकर धोखा दे सकता है।

2

@ मार्टिन।

इस तरह मेरा मानना ​​है कि मारियो कार्ट वाईआई काम करता है। जोड़ा गया बोनस यह है कि आप अन्य सभी खिलाड़ियों को देख सकते हैं कि उच्च स्कोर धारक को उच्च स्कोर कैसे मिला। इसके बारे में मजाकिया बात यह है कि यदि आप सबसे तेज़ "Grumble Volcano" समय का निशान देखते हैं, तो आप देखेंगे कि किसी को एक शॉर्टकट मिला है जो आपको ट्रैक का 95% छोड़ने देता है। मुझे यकीन नहीं है कि क्या वे अभी भी सबसे तेज़ समय के रूप में हैं।

+0

हां, यह गेम डिज़ाइन बनाम हैकिंग में एक शोषण है। मेरे मोबाइल गेम्स में से किसी एक खिलाड़ी ने एक शोषण पाया जो वास्तव में गेमप्ले को और अधिक मजेदार बना देता है, मैंने इसे छोड़ दिया है, कुछ लोगों ने हाईस्कॉर्स के बारे में शिकायत की है, लेकिन शीर्ष 20 वे शोषक और प्रतिस्पर्धा को समझने के लिए पर्याप्त स्मार्ट हैं एक दूसरे के साथ। – Marc

2

आप इसे एक अविश्वसनीय क्लाइंट प्लेटफॉर्म पर नहीं कर सकते हैं। व्यावहारिक रूप से कुछ "भरोसेमंद" प्लेटफार्मों को भी हराना संभव है।

सामान्य हमलों में पता लगाने के लिए असंभव हैं जो आम तौर पर स्मृति में चर को संशोधित करना असंभव हैं। यदि आप अपने कार्यक्रम के चर पर भरोसा नहीं कर सकते हैं, तो आप वास्तव में बहुत कुछ हासिल नहीं कर सकते हैं।

उपरोक्त उल्लिखित अन्य तकनीकें मदद कर सकती हैं, लेकिन एक नॉनट्रस्टेड प्लेटफॉर्म पर चलने की मूल समस्या को हल नहीं करती हैं।


ब्याज से, क्या आप सुनिश्चित हैं कि लोग उच्च स्कोर तालिका को हैक करने का प्रयास करेंगे? मेरे पास दो साल से अधिक समय तक ऑनलाइन गेम रहा है, जिसमें एक छोटी-छोटी-क्रैकबे उच्च स्कोर तालिका है। बहुत से लोगों ने इसे खेला है लेकिन मेरे पास कोई सबूत नहीं है कि किसी ने उच्च स्कोर को तोड़ने की कोशिश की है।

1

आमतौर पर, धोखाधड़ी और हैकिंग के खिलाफ सबसे बड़ा बचावकर्ता समुदाय की घड़ी है। यदि स्कोर अपेक्षाकृत संदिग्ध लगता है, तो उपयोगकर्ता धोखाधड़ी के लिए स्कोर की रिपोर्ट कर सकता है। और यदि पर्याप्त लोग उस स्कोर की रिपोर्ट करते हैं, तो वैधता के लिए व्यवस्थापक द्वारा रीप्ले की जांच की जा सकती है। एक वास्तविक खिलाड़ी के बीच अंतर को देखना काफी आसान है, अगर पूरी तरह से वैधता में गेम खेलने वाले खिलाड़ियों का समूह है।

व्यवस्थापकों को केवल उन स्कोरों की देखरेख करनी चाहिए जो पूछताछ की जाती हैं, क्योंकि वहां एक छोटा सा मौका है कि उपयोगकर्ताओं का एक समूह पूरी तरह से कड़ी मेहनत के स्कोर को हटाने के लिए बैंडवैगन हो सकता है। और व्यवस्थापक को केवल कुछ स्कोर देखना पड़ता है जो रिपोर्ट प्राप्त करते हैं, इसलिए यह उनके समय का बहुत अधिक नहीं है, यहां तक ​​कि एक छोटे से खेल के लिए भी कम है।

यहां तक ​​कि सिर्फ यह जानकर कि यदि आप एक बॉट बनाने के लिए कड़ी मेहनत करते हैं, तो रिपोर्ट सिस्टम द्वारा फिर से शूट करने के लिए, अपने आप में एक निवारक है।

शायद रीप्ले डेटा को एन्क्रिप्ट करने से भी कोई दिक्कत नहीं होगी। रीप्ले डेटा अक्सर छोटा होता है, और इसे एन्क्रिप्ट करने में बहुत अधिक जगह नहीं लगती है। और इसे सुधारने में मदद के लिए, सर्वर स्वयं नियंत्रण लॉग द्वारा रीप्ले को आज़माएगा, और सुनिश्चित करेगा कि यह प्राप्त स्कोर के साथ मेल खाता है।

यदि कुछ चीज एंटी-चीट सिस्टम नहीं मिल पाती है, तो उपयोगकर्ता इसे पा सकते हैं।