मैं अपने डेटा को कैज़ुअल हैकिंग से कैसे बचा सकता हूं?


32

गेम डेटा को सुरक्षित तरीके से सहेजने के लिए क्या विकल्प हैं? मैं विशेष रूप से C ++ के अनुरूप तैयार किए गए समाधानों में रुचि रखता हूं

मैं ऐसी चीज की तलाश कर रहा हूं जो तेज और उपयोग में आसान हो। मैं केवल इस तरह के रूप में सरल जानकारी के भंडारण के बारे में चिंतित हूँ

  • कौन से स्तर हैं और अनलॉक नहीं हैं

  • प्रत्येक स्तर के लिए उपयोगकर्ता का स्कोर

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

मुझे बस यहाँ यह मिला जो बहुत अच्छा लग रहा है, लेकिन संभावित अन्य पुस्तकालयों / विकल्पों पर कुछ राय प्राप्त करना बहुत अच्छा होगा।


5
आपको सुरक्षा की आवश्यकता क्यों है? अगर कोई खिलाड़ी सेव को संपादित करके किसी स्तर को अनलॉक करने के लिए धोखा देना चाहता है क्योंकि वे फंस गए हैं तो बस उन्हें ऐसा करने क्यों नहीं देते?
एडम

2
खैर, खेल उम्मीद है कि IndieCity.com पर ऊपर जाएगा, उनके पास उपयोग करने के लिए स्वयं की उपलब्धि प्रणाली है। मैं केवल कुछ उपलब्धियों को आधार बनाना चाहता हूं जिसमें कुछ स्तरों को हरा दिया जाता है। खिलाड़ी को इन उपलब्धियों को अनलॉक करने के तरीके को धोखा देने में सक्षम होने की अनुमति नहीं है। इसे "CAP" नियमों के विरुद्ध कहा जाता है। इसलिए मुझे जगह में कुछ सुरक्षा उपाय करने की ज़रूरत है, कुछ भी नहीं फैंसी लेकिन सिर्फ आकस्मिक खिलाड़ी को डेटा को बदलने से रोकने के लिए
dan369

1
यह IndieCity.com बताने योग्य हो सकता है कि उस आवश्यकता की सीमाएं हैं, क्योंकि आपके लिए एक सहेजे गए खेल को सुरक्षित करना असंभव है जब तक कि सहेजने का खेल आपके स्वयं के सर्वर पर नहीं रहता है।
काइलोटन

जवाबों:


24

पहली बार कहने दें कि आपके पास एक बहुत ही सरल फ़ाइल है, आप पाठ फ़ाइल का उपयोग कर सकते हैं।

सबसे सरल विचारों में से एक डेटा को लॉक / अनलॉक करने के लिए एक स्ट्रिंग कुंजी का उपयोग करना है:

void encrypt(string& data,string key)
{
    for(unsigned i=0;i<data.size();i++)
        data[i] += key[i%key.size()];
}

void decrypt(string& data,string key)
{
    for(unsigned i=0;i<data.size();i++)
        data[i] -= key[i%key.size()];
}

लेकिन थोड़ी सी Google खोज के बाद मुझे ये लिंक मिल गए हैं, जो उपयोगी हो सकते हैं:

संपादित करें:

जैसा कि @ v.oddou ने उल्लेख किया है कि हस्ताक्षर किए गए चार्ट को "अपरिभाषित व्यवहार" के आधार पर, मुझे लगता है कि XOR या अहस्ताक्षरित चार का उपयोग करने से सुरक्षित / अधिक-क्रॉस-प्लेटफ़ॉर्म कोड हो जाएगा। कुछ इस तरह:

void encrypt(string& data,string key)
{
    for(unsigned i=0;i<data.size();i++)
        data[i] ^= key[i%key.size()];
}

void decrypt(string& data,string key)
{
    for(unsigned i=0;i<data.size();i++)
        data[i] ^= key[i%key.size()];
}

यह एक अच्छा सा तरीका लगता है :), बस मेरे उद्देश्यों के लिए पर्याप्त है। Im एक "कुंजी" के संदर्भ में यहां एक और सवाल पूछने के लिए उत्सुक है, एक स्वीकार्य कुंजी क्या है? क्या मैं कुछ भी कर सकता हूं यानी एक लंबी स्ट्रिंग?
dan369

और तुम्हें पता है, मुझे लगता है कि im बस इस के साथ जाने वाला है, यह वही है जो मैं चाहता था। सरल और प्रयोग करने में आसान, और कुछ भी नहीं फैंसी :)।
dan369

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

मेरा सुझाव है कि आप XORवेतन वृद्धि / वेतन वृद्धि के बजाय उपयोग करते हैं, जैसा कि आप भ्रष्ट डेटा के साथ समाप्त कर सकते हैं यदि आप उस डेटा-प्रकार की सीमा को पार कर रहे हैं जिसके साथ आप ( charमुझे लगता है)
bummzack

2
यह वास्तव में मायने नहीं रखता है, या तो आप xor का उपयोग करते हैं, या वेतन वृद्धि / गिरावट, डेटा पुनर्प्राप्त करते हैं। ध्यान दें कि अगर वेतन वृद्धि ओवरफ्लो होती है, तो बाद में अपवाह भी अंडरफ्लो उत्पन्न करेगा।
अली

24

कुछ भी सुरक्षित ग्राहक पक्ष नहीं माना जा सकता है; जो कोई भी आपको बताता है, वह झूठ बोल रहा है।

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

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


26
जबकि आप जो कह रहे हैं वह सच है, मुझे लगता है कि लेखक को पता है कि एक निर्धारित हैकर शायद अभी भी इसे प्राप्त कर सकता है, क्योंकि उसने स्पष्ट रूप से "कैज़ुअल हैकिंग" को रोकने का तरीका पूछा है। : - \
लोनबोट

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

@ दान: ठीक है, मुझे वह बहुत पसंद नहीं है लेकिन मुझे लगता है कि यह कुछ संदर्भों में समझ में आता है। मैं उत्तर नहीं हटा रहा हूं क्योंकि मुझे लगता है कि इसे पढ़ने वाले लोगों को इंगित करना महत्वपूर्ण है।
ओ ० '।

2
इसके अलावा, अगर इसे हैक करने के लायक समझा जाता है, तो किसी को इसकी संभावना हो जाएगी ताकि यह हैकिंग आकस्मिक उपयोगकर्ता द्वारा संभव हो सके। वहाँ के लिए समर्पित पूरे मंच हैं।
जेसी दोर्से

@ नोक्ट्रीन: एक सक्रिय प्रतिक्रिया इस मामले में मदद कर सकती है। अपने खेल के आसपास समुदाय से अवगत रहें, जब खुले में कुछ क्रैक टूल होता है, तो एन्क्रिप्शन तकनीक को बदलें और एक पैच जारी करें। इस पैच को अनिवार्य किया जा सकता है यदि खेल में ऑनलाइन घटक है। बेशक कोई भी खिलाड़ी (और निश्चित रूप से मुझे नहीं) पहली जगह में सामान अपडेट करने के लिए मजबूर होना पसंद करता है, और न ही मुझे कनेक्ट होने की आवश्यकता है। (ईए बुराई, simcity बू ...)
v.oddou

10

आप निश्चित रूप से अपनी सहेजने वाली फ़ाइल को अनएन्क्रिप्टेड छोड़ सकते हैं, लेकिन एक चेकसम को जोड़ सकते हैं, जिसकी गणना उन सभी मूल्यों के माध्यम से की जाती है जिन्हें आप "गार्ड" करना चाहते हैं।

इसलिए पटाखा फिर से हैशिंग (जिसे आप उचित नमक के साथ उपयोग करेंगे) का उत्पादन करने में सक्षम होंगे और इसके बाद फिर से उत्पादन करने की कोशिश करने में खुशी होगी।

यह अभी भी 100% सुरक्षित नहीं होगा लेकिन, शायद सबसे अच्छा समय प्रभावी उपाय है।


2

यह कुछ सरल XOR एन्क्रिप्शन प्रदान करता है:

#include <iostream>

using namespace std;

string encryptDecrypt(string toEncrypt) {
    char key[3] = {'K', 'C', 'Q'}; //Any chars will work
    string output = toEncrypt;

    for (int i = 0; i < toEncrypt.size(); i++)
        output[i] = toEncrypt[i] ^ key[i % (sizeof(key) / sizeof(char))];

    return output;
}

और इसका उपयोग कैसे करें:

int main(int argc, const char * argv[])
{
    string encrypted = encryptDecrypt("kylewbanks.com");
    cout << "Encrypted:" << encrypted << "\n";

    string decrypted = encryptDecrypt(encrypted);
    cout << "Decrypted:" << decrypted << "\n";

    return 0;
}

इस कोड का आउटपुट यह है:

Encrypted: :=.43*-:8m2$.
Decrypted:kylewbanks.com

0

यहां कुछ कार्यक्रम (वैसे भी मुफ्त) हैं जो आपकी मदद कर सकते हैं, वे दोनों मूल रूप से आपके सभी संसाधनों को एक ही निर्वासन में जोड़ते हैं।

  • NBinder , अब एक वाणिज्यिक उत्पाद है, यह एक पुराना लेकिन कार्यात्मक संस्करण है।

  • पहेली वर्चुअल बॉक्स , इसी तरह की सुविधाओं के साथ एक और उपकरण।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.