ما هي أفضل طريقة لمنع الأشخاص من اختراق جدول أعلى الدرجات المبنية على PHP في لعبة Flash


Answers

قد تسأل السؤال الخطأ. يبدو أنك تركّز على الأساليب التي يستخدمها الأشخاص للتوجه إلى قائمة أعلى النقاط ، لكن حظر طرق محددة لا يذهب إلا إلى هذا الحد. ليس لدي أي خبرة مع TamperData ، لذلك لا أستطيع التحدث إلى ذلك.

السؤال الذي يجب طرحه هو: "كيف يمكنني التحقق من أن النتائج المقدمة صحيحة وأصلية؟" الطريقة المحددة لفعل ذلك تعتمد على اللعبة. بالنسبة لألعاب الألغاز البسيطة للغاية ، يمكنك إرسال النقاط إلى جانب حالة البداية المحددة وتتابع الحركات التي أدت إلى حالة النهاية ، ثم إعادة تشغيل اللعبة على جانب الخادم باستخدام نفس الحركات. تأكد من أن النتيجة المذكورة هي نفس النتيجة المحسوبة ولا تقبل إلا النتيجة إذا كانت مطابقة.

Question

أنا أتحدث عن لعبة حركة بلا حدود درجة عليا ولا توجد طريقة للتحقق من النتيجة على الخادم من خلال إعادة تشغيل التحركات وما إلى ذلك.

ما أريده حقاً هو أقوى تشفير ممكن في Flash / PHP ، وطريقة لمنع الأشخاص الذين يتصلون بصفحة PHP بخلاف ملف فلاش الخاص بي. لقد جربت بعض الطرق البسيطة في الماضي لإجراء مكالمات متعددة للحصول على درجة واحدة وإكمال تسلسل المجموع الاختباري / فيبوناتشي الخ ، وكذلك تشويش SWF مع تشفير Amayeta SWF ، ولكن تم اختراقها جميعًا في النهاية.

بفضل ردود ، وجدت الآن بعض المعلومات الإضافية من Adobe - http://www.adobe.com/devnet/flashplayer/articles/secure_swf_apps_12.html و https://github.com/mikechambers/as3corelib - والتي أعتقد أنها يمكن استخدامها للتشفير. غير متأكد من هذا سوف يجلب لي حول CheatEngine رغم ذلك.

أحتاج إلى معرفة أفضل الحلول لكل من AS2 و AS3 ، إذا كانت مختلفة.

يبدو أن المشاكل الأساسية هي أشياء مثل رؤوس رسائل TamperData و LiveHTTP ، لكني أفهم أن هناك أدوات قرصنة أكثر تقدمًا - مثل CheatEngine (بفضل Mark Webster)




سيكون التشفير باستخدام مفتاح قابل للعكس (خاص) معروف هو أبسط طريقة. أنا لست جميعًا على AS لذا لست متأكدًا من أنواع مزودي التشفير هناك.

ولكن يمكنك تضمين متغيرات مثل طول اللعبة (مشفر ، مرة أخرى) وعدد النقرات.

يمكن إجراء هندسة عكسية لكل هذه الأشياء ، لذا ننصحك برمي مجموعة من البيانات غير المرغوبة لإبعاد الناس عن الرائحة.

تحرير: قد يكون من المفيد الرمي في بعض جلسات PHP أيضًا. ابدأ الجلسة عندما ينقرون على لعبة البداية و (كما يقول التعليق على هذا المنشور) سجل الوقت. عندما يرسلون النتيجة ، يمكنك التحقق من أن لديهم بالفعل لعبة مفتوحة وأنهم لا يقدمون نتيجة في وقت مبكر جدًا أو كبير جدًا.

قد يكون من المفيد وضع مقياس رقمي لترى ما هي الدرجة القصوى في الثانية / الدقيقة من اللعب.

لا يعتبر أي من هذه الأشياء غير قابل للتطبيق ، ولكنه سيساعد في الحصول على بعض المنطق وليس في Flash حيث يمكن للأشخاص رؤيته.




أعجبني ما قاله tpqf ، ولكن بدلاً من تعطيل حساب عند اكتشاف الغش ، قم بتطبيق مصيدة عندما يسجلون الدخول ، يرون نتائجهم المخترقة ولا يشكّون أبدًا في أنه تم وضع علامة عليها كمرونة. Google لـ "phpBB MOD Troll" وسترى منهجًا بارعًا.




من الممكن فقط من خلال الحفاظ على منطق اللعبة بالكامل من جانب الخادم والذي يخزن النتيجة داخليا بدون معرفة المستخدم. لأسباب اقتصادية وعلمية ، لا يمكن للبشرية تطبيق هذه النظرية على جميع أنواع الألعاب باستثناء الدور القائم. على سبيل المثال ، الحفاظ على الفيزياء على جانب الخادم أمر مكلف من الناحية الحسابية ومن الصعب الحصول على الاستجابة بسرعة اليد. حتى ممكن ، في حين أن لعب الشطرنج أي شخص يمكن أن تتطابق مع لعبة الشطرنج منظمة العفو الدولية إلى الخصم. لذلك ، يجب أن تحتوي الألعاب متعددة اللاعبين الأفضل أيضًا على الإبداع عند الطلب.




أنت تتحدث عن ما يسمى مشكلة "ثقة العميل". لأن العميل (في هذا النقد ، وهو SWF يعمل في متصفح) يقوم بشيء تم تصميمه للقيام به. حفظ درجة عالية.

المشكلة هي أنك تريد التأكد من أن طلبات "save score" تأتي من فيلم الفلاش ، وليس بعض طلبات HTTP التعسفية. يتمثل الحل المحتمل لهذا في تشفير رمز تم إنشاؤه بواسطة الخادم في SWF في وقت الطلب (باستخدام flasm ) الذي يجب أن يرافق طلب حفظ درجة عالية. بمجرد أن يحفظ الخادم هذه النتيجة ، تنتهي صلاحية الرمز المميز ولا يمكن استخدامه مرة أخرى للطلبات.

والجانب السلبي من هذا هو أن المستخدم لن يتمكن إلا من تقديم درجة عالية واحدة لكل تحميل لفيلم فلاش - يجب عليك إجبارهم على تحديث / إعادة تحميل SWF قبل أن يتمكنوا من اللعب مرة أخرى للحصول على درجة جديدة.




قد يكون من الجيد التواصل مع الخلفية عبر AMFPHP . يجب أن تثبط على الأقل تلك البطيئة من محاولة دفع النتائج عبر وحدة تحكم المستعرض.




لا تثق بأي بيانات يقوم العميل بإرجاعها. يجب إجراء التحقق من الصحة على جانب الخادم. أنا لست مطور ألعاب ، لكنني أقوم بعمل برمجيات الأعمال. في كلتا الحالتين ، يمكن أن تشارك الأموال ، ويكسر الناس تقنيات التشويش من جانب العميل.

ربما إرسال البيانات إلى الخادم بشكل دوري والقيام ببعض التحقق من الصحة. لا تركز على رمز العميل ، حتى إذا كان هذا هو المكان الذي تعيش فيه.




عندما يستند نظام النقاط العالية الخاص بك إلى حقيقة أن تطبيق الفلاش يرسل بيانات عالية الجودة غير مشفرة / غير موقعة عبر الشبكة ، يمكن اعتراضها والتلاعب بها / إعادة تشغيلها. الجواب يلي من ذلك: تشفير (لائق!) أو تشفير البيانات أعلى الدرجات التشفير. هذا ، على الأقل ، يجعل من الصعب على الأشخاص اختراق نظام أعلى الدرجات لأنهم سيحتاجون إلى استخراج المفتاح السري من ملف SWF الخاص بك. قد يتخلى كثير من الناس هناك. من ناحية أخرى ، كل ما يتطلبه الأمر هو شخص واحد لاستخراج المفتاح ونشره في مكان ما.

تتضمن الحلول الحقيقية المزيد من التواصل بين تطبيق الفلاش وقاعدة البيانات عالية الجودة حتى يتمكن الأخير من التحقق من أن درجة معينة واقعية. ربما يكون هذا معقدًا اعتمادًا على نوع اللعبة التي لديك.




الطريقة التي يقوم بها نظام arcade mod الجديد هو أنه يقوم بإرسال البيانات من الفلاش إلى php أو الرجوع إلى الفلاش (أو إعادة تحميلها) ، ثم العودة إلى php. يتيح لك ذلك القيام بأي شيء تريده لمقارنة البيانات بالإضافة إلى تجاوز ترحيلات البيانات / فك التشفير وما إلى ذلك. إحدى الطرق التي يفعلها هذا عن طريق تعيين قيمتين عشوائيتين من php إلى الفلاش (والتي لا يمكنك انتزاعها أو رؤيتها حتى في حالة تشغيل أداة التقاط بيانات الفلاش في الوقت الحقيقي) ، وذلك باستخدام صيغة رياضية لإضافة النقاط بقيم عشوائية ثم التحقق من ذلك باستخدام نفس الصيغة لعكسها لمعرفة ما إذا كانت النتيجة مطابقة لها عندما تذهب أخيرا إلى php في النهاية. هذه القيم العشوائية لا يمكن رؤيتها أبدًا ، كما أنها أيضًا أضعاف الوقت الذي تستغرقه المعاملة ، وإذا كانت أكثر من بضع ثوانٍ ، فإنها تعلل أيضًا بأنها غش لأنها تفترض أنك أوقفت إرسالها لمحاولة معرفة القيم العشوائية أو تشغيلها الأرقام من خلال بعض أنواع الشفرات لإرجاع القيم العشوائية الممكنة للمقارنة مع قيمة النتيجة.

هذا يبدو وكأنه حل جيد إذا سألتني ، هل هناك أي شخص يرى أي مشاكل في استخدام هذه الطريقة؟ أو الطرق الممكنة حوله؟




Related