আমি কীভাবে আমার সেভ ডেটাটি নৈমিত্তিক হ্যাকিং থেকে রক্ষা করতে পারি?


32

সুরক্ষিত উপায়ে গেমের ডেটা সংরক্ষণের জন্য কী কী বিকল্প রয়েছে? আমি বিশেষত সি ++ এর জন্য তৈরি সমাধানগুলিতে আগ্রহী।

আমি এমন কিছু সন্ধান করছি যা দ্রুত এবং সহজেই ব্যবহারযোগ্য। আমি কেবল সাধারণ তথ্য সংরক্ষণ করার বিষয়ে উদ্বিগ্ন

  • কোন স্তরগুলি আনলক করা নেই

  • প্রতিটি স্তরের জন্য ব্যবহারকারীর স্কোর

আমি কী আগ্রহী তা আবার জানতে আগ্রহী, ব্যবহারের জন্য এমন কোনও ভাল গ্রন্থাগার যা আমাকে চমৎকার, সুরক্ষিত গেম ডেটা ফাইল দেয় যা গড় খেলোয়াড়ের সাথে গোলযোগ করতে পারে না।

আমি শুধু পাওয়া এই এখানে যা খুবই সুন্দর দেখায়, কিন্তু এটা সেখানে আউট সম্ভাব্য অন্যান্য লাইব্রেরি / বিকল্পগুলি কিছু মতামত পেতে মহান হতে হবে।


5
আপনি কেন সুরক্ষা প্রয়োজন? যদি কোনও খেলোয়াড় সেভ সম্পাদনা করে কোনও স্তর আনলক করতে প্রতারণা করতে চায় তবে তারা আটকে গেছে কেন কেবল তাদের তা করতে দিচ্ছে না?
আদম

2
ওয়েল, গেমটি আশা করি ইন্ডিসিটি.কম এ উঠবে, তাদের ব্যবহারের জন্য রয়েছে নিজস্ব কৃতিত্বের ব্যবস্থা। আমি বসগুলি সমন্বিত কয়েকটি স্তরকে পরাভূত করতে কয়েকটি অর্জনকেই বেস করতে চাই। খেলোয়াড়কে এই অর্জনগুলি আনলক করার পথে তার সাথে প্রতারণা করতে সক্ষম হওয়ার অনুমতি নেই। এটি "সিএপি" বিধিগুলির বিরোধিতা হিসাবে তাদের বলা হয়। সুতরাং আমার জায়গায় কিছুটা সুরক্ষা ব্যবস্থা রাখা দরকার,
অভিনেত্রী

1
এটি इंडিসিটি ডটকমকে বলার অপেক্ষা রাখে না যে সেই প্রয়োজনীয়তার সীমাবদ্ধতা রয়েছে কারণ সেভ গেমটি আপনার নিজের সার্ভারে না থাকলে সেভ গেমটি সুরক্ষিত করা আপনার পক্ষে অসম্ভব।
কাইলোটান

উত্তর:


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()];
}

তবে কিছুটা গুগল অনুসন্ধানের পরে আমি এই লিঙ্কগুলি খুঁজে পেয়েছি, যা কার্যকর হতে পারে:

সম্পাদনা:

@ V.oddou উল্লিখিত হিসাবে স্বাক্ষর করা চরটি "অপরিজ্ঞাত আচরণ" হওয়ার ভিত্তিতে, আমি অনুমান করি যে এক্সওআর ব্যবহার করা বা স্বাক্ষরবিহীন চরটিতে কাস্টিংয়ের ফলে নিরাপদ / আরও-ক্রস-প্ল্যাটফর্ম কোড দেখা যাবে। এটার মতো কিছু:

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()];
}

এটি একটি দুর্দান্ত ছোট পদ্ধতি :) বলে মনে হচ্ছে, কেবল আমার উদ্দেশ্যে যথেষ্ট। আমি এখানে আরও একটি প্রশ্ন জিজ্ঞাসা করতে আগ্রহী, একটি "কী" এর পরিপ্রেক্ষিতে, একটি গ্রহণযোগ্য কী কী? আমি কি কোনও কিছুতে লম্বা স্ট্রিং পাস করতে পারি?
dan369

এবং আপনি জানেন, আমি মনে করি আমি এই সাথে যেতে যাচ্ছি, এটি ঠিক যা চেয়েছিল আমি চাই। সহজ এবং ব্যবহার করা সহজ, এবং খুব অভিনব :)।
dan369

2
@ ডানরান হ্যাঁ, প্রতিটি জিনিসই এই কীটির জন্য গ্রহণযোগ্য, এটি একটি চরের স্ট্রিং হতে পারে যার ফলস্বরূপ সিজার সিফারের মতো বা অন্য কোনও বাক্যাংশ যেমন আপনার পছন্দ মতো অন্য দৈর্ঘ্যের সাথে দেখা দেয়। আপনি ডেটা অবস্থানগুলি স্ক্যাম্বল করতে অন্য কিছু অ্যালগরিদমও ব্যবহার করতে পারেন, যেমন। সমান এবং বিজোড় অবস্থানগুলিতে মানগুলি অদলবদল করে।
Ali1S232

আমি প্রস্তাব দিচ্ছি যে আপনি XORইনক্রিমেন্ট / হ্রাসের পরিবর্তে ব্যবহার করবেন , কারণ আপনি যে ধরণের ডেটা টাইপ করছেন তার সীমা ছাড়িয়ে গেলে আপনি দুর্নীতিগ্রস্ত ডেটা দিয়ে শেষ করতে পারেন ( charআমি ধরে নিই)
বম্মজ্যাক

2
এটি আসলে কোনও বিষয় নয়, হয় আপনি জোর ব্যবহার করেন, বা ইনক্রিমেন্ট / হ্রাস, তথ্য পুনরুদ্ধার করে। নোট করুন যে জেনারেটগুলি ওভারফ্লো বাড়িয়ে তুললে, পরবর্তীকালে হ্রাসগুলিও ভূগর্ভে উত্পন্ন করবে।
Ali1S232

24

কিছুই নিরাপদ ক্লায়েন্ট পক্ষ হিসাবে বিবেচনা করা যাবে না; যে কেউ আপনাকে বলছে যে সে মিথ্যা বলছে।

আপনি যে কোনও এনক্রিপশন এবং স্ক্যাম্বল পদ্ধতিটি চান তা ব্যবহার করতে পারেন তবে ক্লায়েন্টকে অবশ্যই এটি ডিকোড করতে সক্ষম হতে হবে এবং ব্যবহারকারীর ক্লায়েন্টের নিজস্ব অ্যাক্সেস থাকতে পারে, যদি তিনি যথেষ্ট পরিমাণে সম্পদশালী হন তবে তার ডিক্রিপশন কী / অ্যালগরিদমে অ্যাক্সেস থাকবে।

আপনি শুধুমাত্র কেউ এটা ফাটল ইচ্ছুক করার annoyances স্তর যোগ করতে পারেন, কিন্তু যথেষ্ট সময় দেওয়া এটা হবে কর্কশ করা , এবং আপনি যে সম্পর্কে কিছুই করতে পারবো না।


26
আপনি যা বলছেন তা সত্য হলেও, আমি মনে করি লেখক সচেতন যে একটি নির্ধারিত হ্যাকার সম্ভবত এখনও এটি পেতে পারে, যেহেতু তিনি স্পষ্টভাবে "নৈমিত্তিক হ্যাকিং" রোধ করার উপায় চেয়েছিলেন। : - \
একাকী

2
হুবহু, ভালভাবে অবগত যে কোনও হ্যাকার যদি নির্ধারিত হয় তবে এটি সহজেই আমার গেমের ডেটা অ্যাক্সেস করতে পারে। আমি চাইনি যে গড় / নৈমিত্তিক ব্যবহারকারী কেবল ফাইলগুলি সহজেই খুলতে এবং এডিট করতে শুরু করুন।
dan369

@ ডানরান: ঠিক আছে, আমি এটি খুব বেশি পছন্দ করি না তবে আমি অনুমান করি যে এটি কিছু প্রসঙ্গে উপলব্ধি করে। আমি উত্তরটি মুছে ফেলছি না কারণ আমি মনে করি এটি পড়ার লোকদেরকে এটি নির্দেশ করা গুরুত্বপূর্ণ।
o0 '

2
এছাড়াও, যদি এটি হ্যাকিংয়ের পক্ষে উপযুক্ত হিসাবে বিবেচিত হয় তবে এটি সম্ভবত এটি তৈরি করবে যাতে নৈমিত্তিক ব্যবহারকারীর দ্বারা এটি হ্যাকিং সম্ভব হয়। এটির জন্য নিবেদিত পুরো ফোরাম রয়েছে।
জেসি ডর্সি

@ নোট্রাইন: একটি সক্রিয় প্রতিক্রিয়া এই ক্ষেত্রে সহায়তা করতে পারে। আপনার খেলার চারপাশের সম্প্রদায়টি সম্পর্কে সচেতন থাকুন, যখন কিছু ক্র্যাক সরঞ্জাম খোলা জায়গায় থাকে, এনক্রিপশন কৌশলটি পরিবর্তন করুন এবং একটি প্যাচ প্রকাশ করুন। গেমটির কোনও উপাদান থাকলে এই প্যাচটি বাধ্যতামূলক করা যায়। অবশ্যই কোনও প্লেয়ার (এবং অবশ্যই আমি নয়) প্রথমে স্টাফ আপডেট করতে বাধ্য হতে পছন্দ করে না, বা সংযুক্ত হওয়ার দরকারও পছন্দ করি না। (ইএ অশুভ, সিমিটি বু ...)
ভি.ওডডু

10

আপনি অবশ্যই আপনার সেভ ফাইলটি এনক্রিপ্ট না করে রেখে দিতে পারেন তবে একটি চেকসাম যোগ করতে পারেন যা আপনি "প্রহরী" করতে চান এমন সমস্ত মানগুলির মধ্যে গণনা করা হয়।

ক্র্যাকার তাই হ্যাশিং পুনরায় উত্পাদন করতে সক্ষম হবে (যা আপনি অবশ্যই সঠিক লবণের সাথে ব্যবহার করবেন) এবং এর জন্য পুনরায় উত্পাদন করার চেষ্টা করার জন্য একটি সুখী সময় থাকবে will

এটি এখনও% 100 সুরক্ষিত হতে পারে না তবে সম্ভবত সেরা সময় কার্যকর সমাধান।


2

এটি কিছু সাধারণ এক্সওর এনক্রিপশন সরবরাহ করেছে:

#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

এখানে কয়েকটি প্রোগ্রাম রয়েছে (যে কোনও উপায়ে নিখরচায়) যা আপনাকে সহায়তা করতে পারে, তারা উভয়ই আপনার সমস্ত সংস্থানকে একক উদাহরণে একত্রিত করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.