প্রতারণার জন্য মেমরি সম্পাদকদের পরাজিত করার কৌশলগুলি - ডেস্কটপ গেমস [বন্ধ]


35

আমি ধরে নিচ্ছি যে আমরা ডেস্কটপ গেমগুলির বিষয়ে কথা বলছি - এমন কিছু যা প্লেয়ার তাদের স্থানীয় কম্পিউটারে ডাউনলোড করে এবং চালায়। অনেকগুলি মেমরি সম্পাদক যা আপনাকে আপনার প্লেয়ারের স্বাস্থ্যের মতো মানগুলি সনাক্ত করতে এবং হিমায়িত করতে দেয়।

আপনি কীভাবে মেমরি-সংশোধন করে প্রতারণা প্রতিরোধ করবেন? এই জাতীয় প্রতারণার বিরুদ্ধে লড়াইয়ের কৌশলগুলি কী কার্যকর?

রেফারেন্সের জন্য, আমি জানি যে খেলোয়াড়রা পারবেন: - মান বা ব্যাপ্তির দ্বারা কোনও কিছুর সন্ধান করুন - মান পরিবর্তিত এমন কোনও কিছুর জন্য অনুসন্ধান করুন - মেমরির মানগুলি সেট করুন - মেমরির মানগুলি হিমায়িত করুন

আমি কিছু ভাল জন্য সন্ধান করছি। আমি দুটি সাধারণ ব্যবহার করি যা হ'ল:

  • সংখ্যার পরিবর্তে শতাংশ হিসাবে মানগুলি প্রদর্শন করা (যেমন 46/50 = 92% স্বাস্থ্য)
  • একটি নিম্ন স্তরের শ্রেণি যা একটি অ্যারেতে মান ধরে এবং প্রতিটি পরিবর্তনের সাথে তাদের সরিয়ে দেয়। (উদাহরণস্বরূপ, কোন int এর পরিবর্তে, আমার কাছে একটি ক্লাস রয়েছে যা একটি ইনটসের অ্যারে, এবং যখনই মান পরিবর্তন হয়, আমি মানটি ধরে রাখতে এলোমেলোভাবে বেছে নেওয়া অ্যারে আইটেম ব্যবহার করি)

গেমটি অফলাইনে, বিনামূল্যে এবং একক প্লেয়ার।

সম্পাদনা করুন: উত্তরোত্তর জন্য, আমি এটি (সি # তে) সমাধান করেছি এবং আমার সমাধানটি এখানে আমার ব্লগে পোস্ট করেছি ।

উত্তর:


21

আরেকটি সম্ভাবনা (পূর্ণসংখ্যার মানগুলির জন্য) দ্বিতীয় সদস্য-পরিবর্তনশীল থাকা যা একটি বিদ্যমান ভেরিয়েবলের বিটওয়াস পরিপূরক ধারণ করে।

সুতরাং কল্পনা করুন যে আপনি পেয়েছেন health, আপনি হবে healthComplement। আপনার বাস্তবায়নটি এর মতো দেখতে পারে:

// setter sets value and complement
void setHealth(int value){
    health = value;
    healthComplement = ~value;
}

// getter checks if value was changed outside of the setter
int getHealth(){
    if(value != ~healthComplement){
        // launch some cheat-counter-measure, like crashing the game?
        exit;
    }
    return health;
}

যে কেউ প্রতারণা করতে চায় তাকে স্বাস্থ্য এবং স্বাস্থ্য সংক্রান্ত সমস্যাগুলি সঠিকভাবে সেট করতে হবে, অন্যথায় গেমটি ক্র্যাশ হয়ে যাবে।

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


12

এখানে একটি স্কিম নিয়ে এসেছি যখন যখন কেউ খুব আগে কোনও বোর্ডে এটি জিজ্ঞাসা করছিল। শতাংশ বা দ্বিগুণ ভেরিয়েবলগুলি ব্যবহার করা সত্যই কার্যকর হয় না, কারণ আপনি "যে কোনও" মানগুলি সন্ধান করতে এবং সেগুলিকে হিমায়িত করতে পারেন।

পরিবর্তে, একটি ডেটা ধরণের একটি দৈত্য তৈরি করুন।

মূলত, আপনার গুরুত্বপূর্ণ মানগুলি একটি কাঠামো হিসাবে এটি সহ সংরক্ষণ করুন:

  • বিট 32 পয়েন্টার
  • দ্রুত পড়ার জন্য, স্ট্রাক্টটিতে বর্তমান মানটি একটি সমতল হিসাবে অন্তর্ভুক্ত করুন

কারসাজির জন্য, পৃথকভাবে বরাদ্দ করা বিটগুলি (যা সত্য / মিথ্যা আইটেম হতে পারে) থেকে বর্তমান মানটি সংগ্রহ করুন, মানটি পরিবর্তন করুন এবং তারপরে সেগুলি সংরক্ষণ করুন।

এখানে দুষ্টু বিট: প্রতিবার আপনি মানটি নিরপেক্ষ করুন, বিনামূল্যে এবং বিটগুলি আবার বরাদ্দ করুন। বরাদ্দ এলোমেলো ক্রমে হওয়া উচিত , তাই ডেটা মেমরির চারপাশে লাফ দেয় এবং সহজে হিমায়িত করা যায় না।

অতিরিক্ত সুরক্ষা হ'ল মানগুলির চেকসামগুলি সংরক্ষণ করা (পাশাপাশি "প্লেইন" ইনট) এবং ম্যানিপুলেশন কলগুলির সময়ও এগুলি তুলনা করা। যদি মিল না পাওয়া যায় তবে সূক্ষ্ম কিছু করুন, যেমন গেমের অগ্রগতির জন্য দরজা আনলক করতে প্রয়োজনীয় একটি এলোমেলো কী সরিয়ে ফেলুন।

সম্পাদনা: আরও স্মৃতিচারণের জন্য, পুরানোগুলি মুক্ত করার আগে নিশ্চিত করুন যে আপনি নতুন "বিট" বরাদ্দ করেছেন।

সম্পাদনা: মাল্টিপ্লেয়ার গেমসের জন্য, ডেটা স্ট্রাকচারকে সিরিয়ালাইজ করা, সংকোচিত করা এবং এটি নেটওয়ার্কের মাধ্যমে প্রেরণ করাও সম্ভব। নেটওয়ার্কের সর্বাধিক দক্ষ ব্যবহার নয়, তবে প্যাকেট স্নিফিংয়ের মাধ্যমে খুঁজে পাওয়া শক্ত er


9

আপনি যখন স্বাস্থ্য সঞ্চয় করবেন তখন প্রতিবার যখন আপনি এটি সঞ্চয় করেন তখন এলোমেলো মান উত্পন্ন হয়। এটি স্বাস্থ্যের সন্ধানের জন্য স্মৃতিতে বর্ধমান / হ্রাসমানগুলির সন্ধান করার সহজ পদ্ধতিকে কমপক্ষে পরাভূত করবে।

class Player
{
  int m_Health;
  int m_RandomHealth;
  Random m_Rnd = new Random();

  public int Health {
    get
    {
      return m_Health ^ m_RandomHealth;
    }

    set
    {
      m_RandomHealth = m_Rnd.Next();
      m_Health = value ^ m_RandomHealth;
    }
  }
}

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

বোনাস: প্রতিবার এটি পরিবর্তন হওয়ার সাথে সাথে একটি নতুন অবজেক্ট তৈরি করুন যাতে মেমরি অ্যাড্রেসেস পরিবর্তিত হয় এবং প্রতিবার পড়ার সময় স্বাস্থ্যটিকে এলোমেলো সংখ্যা, জোরড মান এবং ঠিকানা পরিবর্তন করতে সেট করে :

class Player
{
  int [] m_HealthArray; // [0] is random int, [1] is xored health
  Random m_Rnd = new Random();

  public Player() {
    this.Health = 100;
  }

  public int Health {
    get
    {
      int health = m_HealthArray[0] ^ m_HealthArray[1];
      Health = health; // reset to move in memory and change xor value
      return health;
    }

    set
    {
      m_HealthArray = new int[2];
      m_HealthArray[0] = m_Rnd.Next();
      m_HealthArray[1] = m_HealthArray[0] ^ value;
    }
  }
}

8

যদিও আমি আপাত কোনও লাভের জন্য আপনার শ্রোতার একটি অংশের অভিজ্ঞতা হ্রাস করার পয়েন্টটি নিয়ে প্রথম মন্তব্যটি করেছি, তবুও আমি প্রযুক্তিগত দৃষ্টিকোণ থেকে এটি একটি আকর্ষণীয় প্রশ্ন পাই।

আমার এই ধারণাটি ছিল: চিটকারীরা যা করে তা হ'ল মানগুলি যা সেগুলি পরিবর্তন করে এবং হিমায়িত করে find অনুসন্ধানটি তখন কেবল মৃত্যু বা ইভেন্টের মধ্যে ঘটে যা খেলোয়াড়ের স্বাস্থ্যের পরিবর্তন করে। তদুপরি, প্রতারক যখন "মরে যাচ্ছেন না" তখন কী পরিবর্তন হয়েছিল তা ফিল্টার করে অনুসন্ধানটিকে পরিমার্জন করতে পারে।

"স্বাস্থ্য" কাউন্টার পুরো সময় পরিবর্তন যদি? এটিকে একটি পয়েন্টার করুন এবং পারফরম্যান্স হিট খুব বড় হলে এটি প্রতিটি ফ্রেম বা প্রতিটি এন ফ্রেমে পুনরায় সেট করুন। বা এলোমেলো মান সহ এটি XOR করুন যা প্রতিটি ফ্রেমকে পরিবর্তন করে (নতুন এলোমেলো মানের সাথে এনক্রিপ্ট করার আগে ডিক্রিপ্ট করার জন্য একই মানের বিরুদ্ধে আবার XORing)।

আপনার যদি অন্যান্য ইন-গেমের ডেটাও পুরো সময় পরিবর্তন করে (প্লেয়ারের চরিত্রের এক্স এবং ওয়াই পজিশন, বা টাইম কাউন্টার সহ) পরিবর্তন করে থাকে তবে পরিবর্তিত সমস্ত ডেটা হ'ল স্বাস্থ্যটি খুঁজে পাওয়া আরও কঠিন হতে পারে। এবং পুরো গেমের স্থিতি জমা করা প্রতারকদের জন্য কোনও উপকার নয়।

আরও বিভ্রান্ত করার জন্য, আপনি প্রকৃতপক্ষে স্বাস্থ্যকে মধুর পাত্র হিসাবে বোঝানো কেবল একটি সরল লিখন-কেবল পরিবর্তনশীলতে সঞ্চয় করতে পারেন।

সম্পাদনা করুন :

তবুও, প্রতারণাকারী পুরো সময় পরিবর্তন করে চলেছে এমন কোন ভেরিয়েবল অনুসন্ধান এবং ত্রুটির মধ্য দিয়ে স্থির করার চেষ্টা করতে পারে। সম্ভাব্য সমাধান হ'ল ভেরিয়েবলগুলি একসাথে করা couple

একটি উদাহরণ:

স্বাস্থ্য (এইচ) এবং অবস্থান (এক্স) সংরক্ষণের পরিবর্তে আপনি এগুলি দুটি এবং দুটি ভেরিয়েবলের মধ্যে সংরক্ষণ করেন, যেখান থেকে আপনি পরে মানগুলি পুনরুদ্ধার করতে পারেন:

a = x+h; b = x-h
x = (a+b)/2; h = (a-b)/2

এইভাবে, যদি প্রতারক তাদের মধ্যে কেবল একটিকে হিমশীতল করে এবং তারপরে চরিত্রটি সরিয়ে দেয়, অবস্থানটি ক্ষতিগ্রস্থ হয় এবং যার উপর নির্ভর করে কোনটি হিমায়িত হয়েছিল, h নেগেটিভ হয় (তাত্ক্ষণিক মৃত্যু)। আপনি উপরের সূত্রগুলির মধ্যে পরিবর্তন করতে পারেন এবং:

a = x-h; b = x+h
x = (a+b)/2; h = (b-a)/2

একটানা ফ্রেমগুলিতে এবং আপনি গ্যারান্টি দিচ্ছেন যে কোনও একটি ভেরিয়েবলের পরে সর্বাধিক 2 ফ্রেমের মধ্যে স্বাস্থ্যকে হিমায়িত করা হবে মুহুর্তের এক্স পরিবর্তনের সাথে 0 পরিবর্তন হবে। মনে রাখবেন আপনি কেবল একটি এবং খ সংরক্ষণ করছেন। উপরে বর্ণিত হিসাবে অবিচ্ছিন্ন XOR এর সাথে এটি একত্রিত করুন। ফলাফলটি ভেরিয়েবলগুলির সংকলন যা প্রতিটি ফ্রেমকে আপাতদৃষ্টিতে এলোমেলো মানগুলিতে পরিবর্তন করে এবং কোনও একক বা সেগুলির একটি উপসেটকে কেবল গেমটিতে অনাকাঙ্ক্ষিত পার্শ্ব প্রতিক্রিয়া তৈরি করে, তাত্ক্ষণিক মৃত্যু তাদের অন্যতম being


7

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

যদি আপনি প্রতারণা শনাক্ত করেন তবে আপনি এখন সর্বাধিক শোকের জন্য উপযুক্ত হিসাবে খেলাটির নিয়মগুলি পরিবর্তন করতে পারেন, যদি এটি আপনার উদ্দেশ্য হয়। যদি আপনার উদ্দেশ্য প্রতারণাকে উপেক্ষা করে এবং গেমটি অব্যাহত রাখার চেষ্টা করে, তবে স্মৃতিতে অন্য কোথাও স্বাস্থ্যটি পুনরায় বিবেচনা করুন এবং আপনার পয়েন্টারগুলি পরিবর্তন করুন যাতে নতুন মানটি ব্যবহার হয় এবং পুরানো উপেক্ষা করা হয়। বিজ্ঞাপনের পুনরাবৃত্তি করুন।


6

নিখুঁতভাবে উদ্বিগ্ন যে কোনও প্রচেষ্টা থিওরিতে ব্যর্থ হতে বাধ্য, তবে অনুশীলনে আপনাকে কেবল এটির পক্ষে যথেষ্ট কঠিন করা দরকার যে চ্যালেঞ্জটি খেলায় সাফল্যের চেয়ে কম মজাদার হয়ে ওঠে। আমি জানি না আপনার গেমটি কী, তাই আমি ডেটা অবলম্বন পদ্ধতিগুলির পরামর্শ দেওয়ার ঝুঁকি নেব না, কারণ আমি বিশ্বাস করি যে তারা অর্থহীন।

এটি বলেছিল, এবং আপনি সম্ভবত এটি পছন্দ করবেন না, আমি বিশ্বাস করি আপনি মেমোরি পর্দার সন্ধান করছেন , এটি একটি বিশ্বস্ত কম্পিউটিং ধারণা।


3

কিছু রগুয়েলাইক (ডুমআরএল, ব্রোগ) দ্বারা ব্যবহৃত একটি খুব কার্যকর কৌশল হ'ল আসল ভেরিয়েবলগুলি মাস্ক করা। এর অর্থ হ'ল স্বাস্থ্যকে "2/10 হিসাবে দেখানোর পরিবর্তে" "20%" হিসাবে দেখান।

মনে রাখবেন, বেশিরভাগ মেমরি সম্পাদকগুলি নির্দিষ্ট মান সন্ধান / ফিল্টারিংয়ের সাথে ভাল কাজ করে। আপনি যদি সুনির্দিষ্ট মানটি জানেন না, তবে আপনি এটি এখনও ট্র্যাক করতে পারেন (উদাহরণস্বরূপ, প্লেয়ারের স্বাস্থ্য হ্রাসের পরে পরিবর্তিত / হ্রাসকৃত মানগুলির সন্ধান), যদিও এটি সেভাবে করতে অনেক বেশি সময় নেয়।

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


2

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


দেখে মনে হচ্ছে আপনি নিম্ন-স্তরের প্রয়োগের বিশদ সম্পর্কে কথা বলছেন (উইন্ডোজ এপিআই?) আমি সাধারণ, উচ্চ-স্তরের কৌশল সম্পর্কে জিজ্ঞাসা করছি।
ashes999

2

আপনি কেন খেলোয়াড়দের নিজেদের প্রতারণা করা থেকে বিরত করবেন (একক প্লেয়ারের খেলায় কোন প্রতারণার পরিমাণ রয়েছে)? একটি মাল্টিপ্লেয়ার পরিবেশে, অপ্রাকৃত পরিবর্তনগুলি সনাক্ত করতে এবং তাদের মোকাবেলা করা সার্ভারের কাজ (সাধারণত হয় ইনপুটটিকে উপেক্ষা করে বা অপরাধীকে সার্ভার থেকে পুরোপুরি অবরুদ্ধ করে), তবে একক প্লেয়ারের পরিবেশে প্রতারক নিজেই কিছু করছে না এমন কিছুই ঘটছে না অপকার।

আইওডাব্লু, আপনি যদি কোনও মাল্টিপ্লেয়ার গেম তৈরি না করেন তবে এটি অর্থের অপচয় হবে এবং আপনি যদি ভুল জায়গাটিকে শক্ত করার কথা ভাবছেন।


2

পরিচিত প্রতারণামূলক সরঞ্জামগুলি অনুসন্ধান করুন - এবং প্রায়শই সাধারণ কোনও চলমান সনাক্ত হয়েছে কিনা তা প্রক্রিয়া পরীক্ষা করুন (প্রক্রিয়া নাম চেক করুন?)

যদি কোনও সনাক্ত হয়, প্লেয়ারটিকে প্রতারণা করা যাক (অফলাইনে থাকলে এটি নিরীহ) তবে নিশ্চিত হন যে কোনও স্কোর / অ্যাক্টিভমেন্টগুলি কোনও অনলাইন লিডারবোর্ড / অ্যাকাইভমেন্ট সিস্টেমটিতে পোস্ট করা হবে না - কেবল এটিকে নিঃশব্দে ব্যর্থ করে দিন?

আরও দৃ determined়প্রতিজ্ঞ হ্যাকারদের থামাবে না, তবে আপনার লিডারবোর্ডগুলিকে গোলমাল করার আরও নৈমিত্তিক প্রতারণার সম্ভাবনা হ্রাস পাবে।

(ক্ষতিকারক কোডারগুলি যা ডিভাইসগুলির জন্য কপিরাইটের উদ্দেশ্যে খোলা এবং কমিয়েছে এবং গেমিং বিরতি নিচ্ছে, যদিও ...)


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

1

আমি মনে করি এটির সহজ সমাধানটি একটি প্রতারণা বিকল্প বাস্তবায়ন করা। প্রতারণা বিকল্পের সময় স্কোরিং অক্ষম করুন Dis

আরেকটি ভাল ধারণা, আপনি কীভাবে প্রয়োগ করবেন তা আমার কোনও ধারণা নেই। হিমশীতল মেমরি ভেরিয়েবল বা এর মতো কিছু থাকলে গেমটি বন্ধ করে দেওয়া হয় :)

ভাল কপাল)


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