কোনও ফ্ল্যাশ গেমের পিএইচপি-ভিত্তিক হাইস্কোর টেবিল হ্যাক করা লোকদের থামানোর সর্বোত্তম উপায় কী


212

আমি এমন একটি অ্যাকশন গেমের কথা বলছি যা কোনও উচ্চ স্কোরের সীমা নেই এবং সার্ভারে স্ক্রিগুলি পুনরায় চালনা ইত্যাদি দ্বারা যাচাইয়ের কোনও উপায় নেই with

আমার আসলে যা দরকার তা হ'ল ফ্ল্যাশ / পিএইচপি-তে সম্ভব সবচেয়ে শক্তিশালী এনক্রিপশন এবং আমার ফ্ল্যাশ ফাইলের চেয়ে পিএইচপি পৃষ্ঠায় কল করা লোকদের রোধ করার একটি উপায়। আমি একক স্কোরের জন্য একাধিক কল করা এবং একটি চেকসাম / ফাইবোনাকির সিকোয়েন্স ইত্যাদি সম্পন্ন করার আগে এবং আমাইয়েতা এসডাব্লুএফ এনক্রিপ্টের সাথে এসডাব্লুএফকে অবলম্বন করার আগে কিছু সহজ পদ্ধতি চেষ্টা করেছি, তবে সেগুলি শেষ পর্যন্ত হ্যাক হয়েছিল।

স্ট্যাকওভারফ্লো প্রতিক্রিয়াগুলির জন্য ধন্যবাদ আমি এখন অ্যাডোব থেকে আরও কিছু তথ্য পেয়েছি - http://www.adobe.com/devnet/flashplayer/articles/secure_swf_apps_12.html এবং https://github.com/mikechabers/as3corelib - যা আমি মনে করি আমি এনক্রিপশন জন্য ব্যবহার করতে পারেন। নিশ্চিত না যদিও এটি আমাকে চিটজিনির আশেপাশে পেয়ে যাবে।

এএস 2 এবং এএস 3 উভয়ের জন্য আমার সবচেয়ে ভাল সমাধানগুলি জানতে হবে, যদি তারা আলাদা হয়।

প্রধান সমস্যাগুলি টেম্পারডাটা এবং লাইভএইচটিটিপি শিরোনামের মতো জিনিসগুলি বলে মনে হচ্ছে তবে আমি বুঝতে পেরেছি আরও উন্নত হ্যাকিংয়ের সরঞ্জামগুলিও রয়েছে - চিটজিনাইনের মতো (ধন্যবাদ মার্ক ওয়েবস্টার)


আপনার স্কোর সীমাবদ্ধ করা উচিত, মোটেও, প্রতিটি স্তরের হিসাবে আপনি এটি করতে না পারার কোনও কারণ নেই ...
এমএমএম

প্রথম লিঙ্কটি আর উপলভ্য নয়
মাইকে

উত্তর:


415

এটি ইন্টারনেট গেমস এবং প্রতিযোগিতাগুলির সাথে একটি ক্লাসিক সমস্যা। আপনার ফ্ল্যাশ কোড একটি গেমের স্কোর স্থির করতে ব্যবহারকারীদের সাথে কাজ করে। তবে ব্যবহারকারীরা বিশ্বাসযোগ্য নয় এবং ফ্ল্যাশ কোডটি ব্যবহারকারীর কম্পিউটারে চলে। আপনি SOL। আক্রমণকারীকে উচ্চ স্কোর জাল করা থেকে বিরত রাখতে আপনি কিছুই করতে পারবেন না:

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

  • আক্রমণকারীরা ফ্ল্যাশ ইন্টারপ্রেটারের রানটাইম মেমরিটিকে নিয়ন্ত্রণ করে, যাতে যে কেউ প্রোগ্রামযোগ্য ডিবাগারটি ব্যবহার করতে জানেন তিনি যে কোনও সময়ে যে কোনও চলক (বর্তমান স্কোর সহ) পরিবর্তন করতে পারেন বা প্রোগ্রামটি নিজেই পরিবর্তন করতে পারেন।

আপনার সিস্টেমের বিরুদ্ধে সবচেয়ে সহজতম আক্রমণ হ'ল একটি প্রক্সি মাধ্যমে গেমের জন্য এইচটিটিপি ট্র্যাফিক চালানো, উচ্চ-স্কোর সেভকে ধরা এবং এটি একটি উচ্চতর স্কোর দিয়ে পুনরায় খেলুন।

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

hex-encoding( AES(secret-key-stored-only-on-server, timestamp, user-id, random-number))

(আপনি একই প্রভাবের জন্য একটি সেশন কুকি ব্যবহার করতে পারেন)।

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

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

hex-encoding( AES(key-hardcoded-in-flash-game, random-128-bit-key))

গেমটি উচ্চ স্কোর পোস্ট করার আগে এটি উচ্চ স্কোর-এনক্রিপ্টিং-সেশন কীটি ডিক্রিপ্ট করে যা এটি করতে পারে কারণ আপনি ফ্ল্যাশ বাইনারিতে উচ্চ-স্কোর-এনক্রিপ্টিং-সেশন-কী-ডিক্রিপ্টিং-কে হার্ডকড করেছেন। আপনি উচ্চ স্কোরের এসএএএ 1 হ্যাশ সহ এই ডিক্রিপ্টড কী দিয়ে উচ্চ স্কোরটি এনক্রিপ্ট করেছেন:

hex-encoding( AES(random-128-bit-key-from-above, high-score, SHA1(high-score)))

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

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

আপনি এখন সেই মুহূর্তে রয়েছেন যেখানে বেশিরভাগ বিকাশকারীরা হাল ছেড়ে দেয় --- আক্রমণকারীদের সাথে কয়েক মাস গণ্ডগোলের মাধ্যমে দিন বা নিন:

  • এক্সওর ক্রিয়াকলাপ সহ এইএস কীগুলি স্ক্র্যাম্বলিং

  • কী গণনা করে এমন ফাংশনগুলির সাথে কী বাইট অ্যারেগুলি প্রতিস্থাপন করা

  • বাইনারি জুড়ে জাল কী এনক্রিপশন এবং উচ্চ স্কোর পোস্টিং ছড়িয়ে দেওয়া।

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

এখানে এমন কিছু জিনিস রয়েছে যা আসলে উচ্চ স্কোর জালিয়াতি হ্রাস করতে পারে:

  • গেমটি খেলতে লগইন প্রয়োজন, লগইনটিতে একটি সেশন কুকি তৈরি করা উচিত এবং একই সেশনে একাধিক অসামান্য গেমের প্রবর্তন বা একই ব্যবহারকারীর জন্য একাধিক সমকালীন সেশনের অনুমতি দেবেন না।

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

  • লগইনগুলি যা কেবল একবার বা দু'বার কেবল গেমটি খেলেছে সেগুলি থেকে প্রত্যাখাত বা কোয়ারানটাইন উচ্চ স্কোর, যাতে আক্রমণকারীরা তাদের তৈরি প্রতিটি লগইনের জন্য যুক্তিসঙ্গত চেহারা গেম খেলার একটি "পেপার ট্রেইল" তৈরি করতে হয়।

  • গেম প্লে চলাকালীন "হার্টবিট" স্কোরগুলি, যাতে আপনার সার্ভারটি একটি গেম খেলার জীবনকালে স্কোর বৃদ্ধি দেখে। উচ্চতর স্কোরগুলি প্রত্যাখ্যান করুন যা যুক্তিসঙ্গত স্কোর বক্ররেখার অনুসরণ করে না (উদাহরণস্বরূপ, 0 থেকে 999999 এ ঝাঁপিয়ে পড়া)।

  • গেম প্লে চলাকালীন "স্ন্যাপশট" গেমের অবস্থা (উদাহরণস্বরূপ, গোলাবারুদের পরিমাণ, স্তরে অবস্থান ইত্যাদি), যা আপনি পরে রেকর্ডকৃত অন্তর্বর্তী স্কোরগুলির বিরুদ্ধে পুনর্মিলন করতে পারেন। এমনকি শুরু করার জন্য আপনার এই ডেটাতে অসঙ্গতিগুলি সনাক্ত করার উপায়ও নেই; আপনাকে কেবল এটি সংগ্রহ করতে হবে, এবং তারপরে আপনি জিনিস ফিরে দেখতে দেখতে বিশ্লেষণ করতে পারেন।

  • আপনার সুরক্ষা চেকগুলির মধ্যে যে কোনও একটি ব্যর্থ হয়েছে এমন কোনও ব্যবহারকারীর অ্যাকাউন্টটি অক্ষম করুন (উদাহরণস্বরূপ, কোনও এনক্রিপ্ট করা উচ্চ স্কোর যা বৈধকরণে ব্যর্থ হয় তা জমা দিয়ে)।

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


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

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

3
আমি অনুমান করি যে কেউ একজনও সমস্ত ব্যবহারকারীর ক্রিয়া লগ করতে পারে এবং উচ্চ স্কোরটি যাচাই / নির্ধারণ করতে সার্ভারে এগুলি পুনরায় খেলতে পারে
I3ck

25

আপনি ভুল প্রশ্ন জিজ্ঞাসা করা হতে পারে। উচ্চতর স্কোরের তালিকার জন্য লোকেরা যে পদ্ধতিগুলি ব্যবহার করছে তাদের দিকে আপনি মনোনিবেশিত বলে মনে করছেন, তবে নির্দিষ্ট পদ্ধতিগুলি অবরুদ্ধ করা কেবল এতদূর চলে। ট্যাম্পারডাটার সাথে আমার কোনও অভিজ্ঞতা নেই, তাই আমি এর সাথে কথা বলতে পারি না।

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


2
এটি এমন একটি কৌশল যা আমি অতীতেও ভোটদান ব্যবস্থার জন্য ব্যবহার করেছি। লোকদের প্রতারণা থেকে বিরত রাখতে পারে এমন কোনও উপায় নেই, তবে আপনি যা করতে পারেন তা হ'ল তাদের আচরণ রেকর্ড করা যাতে কোনও প্রতারণা রয়েছে কিনা তা আপনি পরীক্ষা করতে পারেন। আমাদের ভোটদান ব্যবস্থার জন্য আমরা সময় স্ট্যাম্প এবং আইপি ঠিকানাগুলি সঞ্চয় করতাম to [অবিরত]
লুক

1
এইভাবে আমরা অন্তত প্রতারণামূলক আচরণের নিদর্শনগুলি দেখতে এবং প্রয়োজনে লোককে অযোগ্য ঘোষণা করতে পারি। আমরা এটি বেশ কয়েকবার সাফল্যের সাথে ব্যবহার করেছি।
লুক 21

19

এটি করার একটি সহজ উপায় হ'ল এটি নিজের স্কোর সহ আপনার হাইস্কোর মানের একটি ক্রিপ্টোগ্রাফিক হ্যাশ সরবরাহ করে। উদাহরণস্বরূপ, HTTP GET এর মাধ্যমে ফলাফল পোস্ট করার সময়: http://example.com/highscores.php?score=500&checksum=0a16df3dc0301a36a34f9065c3ff8095

এই চেকসাম গণনা করার সময়, একটি ভাগ করা গোপন ব্যবহার করা উচিত; এই গোপনীয়তাটি কখনই নেটওয়ার্কের মাধ্যমে প্রেরণ করা উচিত নয়, তবে পিএইচপি ব্যাকএন্ড এবং ফ্ল্যাশ সম্মুখভাগ উভয়ের মধ্যেই হার্ড কোডিং করা উচিত। উপরের চেকসামটি " 500 " স্কোরের গোপন স্ট্রিংটি তৈরি করে এবং এটি এমডি 5সামের মাধ্যমে চালিত করে তৈরি করা হয়েছিল।

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

যে কোনও রিপ্লে আক্রমণ থেকে রোধ করতে , এক ধরণের চ্যালেঞ্জ-প্রতিক্রিয়া সিস্টেম তৈরি করতে হবে, যেমন নীচের:

  1. ফ্ল্যাশ গেম ("ক্লায়েন্ট") কোনও পরামিতি ছাড়াই http://example.com/highscores.php এর একটি HTTP GET সম্পাদন করে । এই পৃষ্ঠাটি দুটি মান প্রদান করে: এলোমেলোভাবে উত্পন্ন লবণের মান এবং ভাগ করা গোপনীয়তার সাথে মিলিত সেই লবণের মানের একটি ক্রিপ্টোগ্রাফিক হ্যাশ। এই লবণের মানটি স্থানীয় জিজ্ঞাসাবাদের স্থানীয় ডাটাবেসে সংরক্ষণ করা উচিত এবং এর সাথে একটি টাইমস্ট্যাম্প যুক্ত হওয়া উচিত যাতে এটি সম্ভবত এক মিনিটের পরে "মেয়াদ শেষ" হতে পারে।
  2. ফ্ল্যাশ গেমটি ভাগ করা গোপনের সাথে লবণের মানকে একত্রিত করে এবং এটি সার্ভারের সরবরাহিত মানের সাথে মিলে যায় কিনা তা যাচাই করতে একটি হ্যাশ গণনা করে। ব্যবহারকারীগণের দ্বারা লবণের মূল্যগুলির সাথে হস্তক্ষেপ রোধ করতে এই পদক্ষেপটি প্রয়োজনীয়, কারণ এটি যাচাই করে যে লবণের মানটি সার্ভারের দ্বারা উত্পন্ন হয়েছিল।
  3. ফ্ল্যাশ গেমটি ভাগ করা গোপন, উচ্চ স্কোর মান এবং অন্যান্য যে কোনও প্রাসঙ্গিক তথ্য (ডাক নাম, আইপি, টাইমস্ট্যাম্প) এর সাথে লবণের মানকে একত্রিত করে এবং একটি হ্যাশ গণনা করে। এরপরে এই তথ্যটি পিএইচপি ব্যাকএন্ডে HTTP GET বা POST এর মাধ্যমে লবণের মান, উচ্চ স্কোর এবং অন্যান্য তথ্যের সাথে প্রেরণ করে।
  4. সার্ভারটি ক্লায়েন্টের মতো একইভাবে প্রাপ্ত তথ্যগুলিকে একত্রিত করে এবং এটি ক্লায়েন্টের সরবরাহিত তথ্যের সাথে মেলে কিনা তা যাচাই করতে একটি হ্যাশ গণনা করে। এরপরে এটিও যাচাই করে যে লন্ডনের মানটি মুলতুবি থাকা ক্যোয়ারী তালিকায় তালিকাভুক্ত হিসাবে এখনও বৈধ। যদি এই উভয় শর্তটি সত্য হয় তবে এটি উচ্চ স্কোরটি উচ্চ স্কোরের টেবিলে লেখায় এবং ক্লায়েন্টকে স্বাক্ষরিত "সাফল্য" বার্তা দেয়। এটি মুলতুবি থাকা ক্যোয়ারী তালিকা থেকে লবণের মান সরিয়ে দেয়।

দয়া করে মনে রাখবেন যে যদি ভাগ করা গোপন ব্যবহারকারীর কাছে সর্বদা অ্যাক্সেস থাকে তবে উপরের যে কোনও কৌশলগুলির সুরক্ষার সাথে আপস করা হয়েছে

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


11

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


1
এই পদ্ধতির সাথে সমস্যাটি হ'ল এই চিটগুলি মেসেজ বোর্ড ইত্যাদিতে একে অপরের কাছে দাম্ভিকতা পোষণ করে, তাই এটি তাদের সত্যই বাধা দেয় না।
আয়ান

7
আমি একমত নই এটি খুব চালাক পদ্ধতির মতো শোনাচ্ছে।
bzlm

4

গৃহীত উত্তরে টিকিবিএফ উল্লেখ করেছে যে আপনি কেবল স্কোর ভেরিয়েবলের জন্য একটি মেমরি অনুসন্ধান করতে পারেন ("আমার স্কোর 6 is so তাই আমি স্মৃতিতে 6 66 number নম্বর খুঁজছি")।

এই কাছাকাছি একটি উপায় আছে। আমার এখানে একটি ক্লাস রয়েছে: http://divlysausages.com/blog/safenumber_and_safeint

মূলত, আপনার স্কোর সংরক্ষণ করার জন্য আপনার একটি অবজেক্ট রয়েছে। সেটারে এটি যে মানটিকে আপনি এলোমেলো সংখ্যার (+ এবং -) দিয়ে পাস করেন তার গুনটি করে এবং গিটারে আপনি আসল ফিরে পেতে র্যান্ডম গুণক দ্বারা সংরক্ষিত মানকে বিভক্ত করেন। এটি সহজ, তবে মেমরি অনুসন্ধান বন্ধ করতে সহায়তা করে।

এছাড়াও, পুশ বাটন ইঞ্জিনের পিছনে কয়েকজন লোকের কাছ থেকে ভিডিওটি দেখুন যাঁরা আপনি হ্যাকিংয়ের বিরুদ্ধে লড়াই করতে পারেন এমন কয়েকটি উপায় সম্পর্কে কথা বলেন: http://zaa.tv/2010/12/the-art-of-hacking-flash- গেমস / । তারা ক্লাস পিছনে অনুপ্রেরণা ছিল।


4

আমি এক ধরণের কাজ করেছি ... স্কোর বাড়িয়ে দেওয়া হয়েছে (আপনি সর্বদা +1 স্কোর পাবেন)। প্রথমত, আমি এলোমেলো নাম্বার থেকে গণনা শুরু করেছি (আসুন ১৪ বলে দিন) এবং আমি যখন স্কোরগুলি প্রদর্শন করি, তখন কেবল স্কোরগুলি বিয়োগ বিয়োগ 14 দেখিয়েছি This এটি তাই যদি ক্র্যাকাররা 20 এর জন্য উদাহরণস্বরূপ সন্ধান করে তবে তারা এটি খুঁজে পাবে না (এটি এটি রয়েছে) স্মৃতি 34 হবে)। দ্বিতীয়ত, যেহেতু আমি জানি যে পরবর্তী পয়েন্টটি কী হওয়া উচিত ... আমি অ্যাডোব ক্রিপ্টো লাইব্রেরি ব্যবহার করেছি, পরবর্তী পয়েন্টটি কী হওয়া উচিত তা তৈরি করার জন্য। যখন আমাকে স্কোরগুলি বাড়িয়ে তুলতে হবে, আমি যাচাই করেছিলাম যে বর্ধিত স্কোরগুলির হ্যাশ হ্যাশের সমান হয় কিনা। যদি ক্র্যাকার স্মৃতিতে পয়েন্টগুলি পরিবর্তন করে, হ্যাশগুলি সমান হয় না। আমি কিছু সার্ভার-সাইড যাচাই করি এবং যখন আমি গেম এবং পিএইচপি থেকে বিভিন্ন পয়েন্ট পেয়েছি, আমি জানি যে প্রতারণা জড়িত ছিল। এখানে আমার কোড স্নিপেট রয়েছে (আমি অ্যাডোব ক্রিপ্টো লিবার্টি এমডি 5 ক্লাস এবং র্যান্ডম ক্রিপ্টোগ্রাফি লবণ ব্যবহার করছি using কল পিএইচপি () আমার সার্ভার সাইডের বৈধতা আছে)

private function addPoint(event:Event = null):void{
            trace("expectedHash: " + expectedHash + "  || new hash: " + MD5.hash( Number(SCORES + POINT).toString() + expectedHashSalt) );
            if(expectedHash == MD5.hash( Number(SCORES + POINT).toString() + expectedHashSalt)){
                SCORES +=POINT;
                callPhp();
                expectedHash = MD5.hash( Number(SCORES + POINT).toString() + expectedHashSalt);
            } else {
                //trace("cheat engine usage");
            }
        }

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

package  {

    import bassta.utils.Hash;

    public class ScoresEncoder {

        private static var ranChars:Array;
        private static var charsTable:Hash;

        public function ScoresEncoder() {

        }

        public static function init():void{

            ranChars = String("qwertyuiopasdfghjklzxcvbnm").split("")

            charsTable = new Hash({
                "0": "x",
                "1": "f",
                "2": "q",
                "3": "z",
                "4": "a",
                "5": "o",
                "6": "n",
                "7": "p",
                "8": "w",
                "9": "y"

            });

        }

        public static function encodeScore(_s:Number):String{

            var _fin:String = "";

            var scores:String = addLeadingZeros(_s);
            for(var i:uint = 0; i< scores.length; i++){
                //trace( scores.charAt(i) + " - > " + charsTable[ scores.charAt(i) ] );
                _fin += charsTable[ scores.charAt(i) ];
            }

            return _fin;

        }

        public static function decodeScore(_s:String):String{

            var _fin:String = "";

            var decoded:String = _s;

            for(var i:uint = 0; i< decoded.length; i++){
                //trace( decoded.charAt(i) + " - > "  + charsTable.getKey( decoded.charAt(i) ) );
                _fin += charsTable.getKey( decoded.charAt(i) );
            }

            return _fin;

        }

        public static function encodeScoreRand(_s:Number):String{
            var _fin:String = "";

            _fin += generateRandomChars(10) + encodeScore(_s) + generateRandomChars(3)

            return _fin;
        }

        public static function decodeScoreRand(_s:String):Number{

            var decodedString:String = _s;
            var decoded:Number;

            decodedString = decodedString.substring(10,13);         
            decodedString = decodeScore(decodedString);

            decoded = Number(decodedString);

            return decoded;
        }

        public static function generateRandomChars(_length:Number):String{

            var newRandChars:String = "";

            for(var i:uint = 0; i< _length; i++){
                newRandChars+= ranChars[ Math.ceil( Math.random()*ranChars.length-1 )];
            }

            return newRandChars;
        }

        private static function addLeadingZeros(_s:Number):String{

            var _fin:String;

            if(_s < 10 ){
                 _fin = "00" + _s.toString();
            }

            if(_s >= 10 && _s < 99 ) {
                 _fin = "0" + _s.toString();
            }

            if(_s >= 100 ) {
                _fin = _s.toString();
            }           

            return _fin;
        }


    }//end
}

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

চিয়ার্স, Ico


3

পরিচিত (ব্যক্তিগত) বিপরীত কী ব্যবহার করে এনক্রিপ্ট করা সহজ পদ্ধতি হবে। আমি সব এএস-তে নেই তাই আমি নিশ্চিত নই যে সেখানে কী ধরণের এনক্রিপশন সরবরাহকারী রয়েছে।

তবে আপনি গেম-দৈর্ঘ্যের মতো ভেরিয়েবল (আবার এনক্রিপ্ট করা) এবং একটি ক্লিক গণনা অন্তর্ভুক্ত করতে পারেন।

এর মতো সমস্ত জিনিস উল্টো ইঞ্জিনিয়ার করা যেতে পারে তাই লোকজনকে সুগন্ধ ছুঁড়ে ফেলার জন্য একগুচ্ছ জাঙ্ক ডেটা ফেলে দেওয়ার বিষয়টি বিবেচনা করুন।

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

খেলার প্রতি সেকেন্ডে / মিনিটে সর্বাধিক স্কোরটি কী তা বলতে পারা কোনও স্কেলারের কাজ করার উপযুক্ত হতে পারে।

এই জিনিসগুলির কোনওটিই আপত্তিহীন নয় তবে এটি এমন কিছু যুক্তি রাখতে সহায়তা করবে যেখানে লোকেরা এটি দেখতে পারে not


এই পদ্ধতির অনুসরণকারী যে কোনও ব্যক্তিকে অবশ্যই একটি সময় অবশ্যই অন্তর্ভুক্ত করতে হবে এবং সময়টিকে বৈধতা দিতে হবে, অন্যথায় আপনি আক্রমণ পুনরায় খেলতে ঝুঁকিপূর্ণ।
টম রিটার

3

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


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

3

ক্লায়েন্ট ফিরিয়ে দেয় এমন কোনও ডেটা আপনি বিশ্বাস করতে পারবেন না। বৈধতা সার্ভার সাইডে সম্পাদন করা প্রয়োজন। আমি গেম ডেভেলপার নই, তবে আমি ব্যবসায়ের সফটওয়্যার তৈরি করি। উভয় ক্ষেত্রে অর্থ জড়িত হতে পারে এবং লোকেরা ক্লায়েন্টের পক্ষের অবজ্ঞা কৌশলগুলি ভেঙে ফেলবে।

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


2

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

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


2

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

আপনি যদি কেবল ট্যাম্পারডাটার মতো সাধারণ সরঞ্জাম ব্যবহার করে বাচ্চাদের প্রতারণা বন্ধ করতে চান তবে আপনি প্রারম্ভকালে এসডাব্লুএফ-এ পাস হওয়া একটি এনক্রিপশন কী তৈরি করতে পারেন। তারপরে পিএইচপি কোডে ফেরত দেওয়ার আগে উচ্চ স্কোরটিকে এনক্রিপ্ট করতে http://code.google.com/p/as3crypto/ এর মতো কিছু ব্যবহার করুন । তারপরে এটি ডাটাবেসে সঞ্চয় করার আগে এটি সার্ভারের শেষে ডিক্রিপ্ট করুন।


2

"ক্লায়েন্ট বিশ্বাস" সমস্যা বলা হচ্ছে এমন বিষয়ে আপনি কথা বলছেন। কারণ ক্লায়েন্ট (এই নগদে, একটি ব্রাউজারে চলমান একটি SWF) এটি করার জন্য ডিজাইন করা কিছু করছে। একটি উচ্চ স্কোর সংরক্ষণ করুন।

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

এর নেতিবাচক দিকটি হ'ল কোনও ব্যবহারকারী কেবল ফ্ল্যাশ চলচ্চিত্রের লোডের জন্য একটি উচ্চ স্কোর জমা দিতে সক্ষম হবে - আপনাকে নতুন স্কোরের জন্য আবার খেলতে পারার আগে আপনাকে তাদের পুনরায় রিফ্রেশ / পুনরায় লোড করতে বাধ্য করতে হবে।


2

আমি সাধারণত হাইস্কোর এন্ট্রি সহ গেম সেশনের "ভুতের ডেটা" অন্তর্ভুক্ত করি। সুতরাং যদি আমি কোনও রেসিং গেম তৈরি করি তবে আমি রিপ্লে ডেটা অন্তর্ভুক্ত করি। আপনার প্রায়শই রিপ্লে ডেটা থাকে ইতিমধ্যে রিপ্লে কার্যকারিতা বা ভূত দৌড় কার্যকারিতা (আপনার শেষ দৌড়ের বিরুদ্ধে খেলতে, বা লিডারবোর্ডে ছেলে # 14 এর ভূতের বিরুদ্ধে খেলতে)।

এগুলি চেক করা খুব ম্যানুয়াল শ্রম, তবে যদি প্রতিযোগিতায় শীর্ষ 10 প্রবেশিকা বৈধ হয় কিনা তা লক্ষ্য করা যদি লক্ষ্য হয়, তবে অন্যরা ইতিমধ্যে উল্লিখিত সুরক্ষা ব্যবস্থাগুলির অস্ত্রাগারগুলিতে এটি একটি দরকারী সংযোজন হতে পারে।

যদি লক্ষ্য হ'ল হাইস্কোর তালিকাকে অনলাইনে সময় না শেষ পর্যন্ত কারও দিকে নজর না দেওয়া থাকে তবে এটি আপনাকে খুব বেশি আনবে না।


2

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

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


Wireshark। ওয়্যারশার্ক সবসময় গর্ত হয়।
এহিলার্স

হ্যাঁ, ive এই সঠিক পদ্ধতিটি চেষ্টা করে ... ভাল ... আমি একরকম বৈধ ব্যবহারকারীদের ঠকাই হিসাবে লগইন করে পেয়েছি (ফাংশনটি আমার কম্পিউটারে সমস্ত সময় কাজ করে, তবে এটি অন্য কয়েকটি কম্পিউটারে কাজ করে না) ... এখন আমি কেবল প্রতারণার জন্য অনুমতি দেওয়া হয়েছে ... আমি লোকেদের লগ করি যারা উপরের চেকটি পাস করে না এবং আমি উচ্চতর স্কোর সহ লোকদের লগ করি এবং তারপরে তাদের ম্যানুয়ালি আপত্তি করি ... তাদের স্কোর তৈরি করে * -1: পি তারা সাধারণত রসিকতা ভাল করে নেয়।
সিগত্রান

1
"এটি করার একটি উপায় হ'ল পিএইচপি থেকে ফ্ল্যাশ-এ দুটি র্যান্ডমাইজড মান নির্ধারণ করে (যা আপনি ধরতে পারবেন না বা রিয়েলটাইম ফ্ল্যাশ ডেটা গ্র্যাবার চালিয়েও দেখতে পারবেন না)" - দয়া করে আমাকে আলোকিত করুন, পিএইচপি থেকে মানগুলি পাস করার কোনও উপায় কি? ফায়ারব্যাগ বা অন্য কোনও সরঞ্জাম দ্বারা তদারকি না করে ফ্ল্যাশ করবেন?
mkto

2

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


2

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


1

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


1

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

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