
ربما لاحظ أحدكم أنه في 1 أبريل ، أضافت Google اللعبة التفاعلية "Snake" إلى تطبيق خرائط Google لنظامي Android و iOS.
عادةً ما يكون اختصاصيو Check Point مشغولين بالبحث في أحدث التهديدات السيبرانية ، لكنهم كانوا مهتمين جدًا بهذه اللعبة ، على الرغم من أنهم كانوا منزعجين جدًا من الخسائر ... لذلك ، نشأت فكرة منطقية: لماذا لا نقضي عليها!
وهكذا ، بدأ موظفونا الأكثر ضررًا في التفكير في الهندسة العكسية للتطبيق باستخدام تصحيح الأخطاء عن بُعد. بشكل عام ، فعلوا ذلك ، وسرعان ما أكملنا مهمة عدم الخسارة - بل لقد أضفنا منظمة العفو الدولية البسيطة التي تلعب اللعبة نفسها.
في هذه المذكرة ، وصفنا بالتفصيل الاختراق.
أولاً ، قمنا بفتح التطبيق على الجهاز الظاهري من خلال Genymotion وأطلقنا "Snake" ، الموجود في القائمة في الزاوية اليمنى العليا.
يبدو أن اللعبة معروضة في WebView ، لذلك بدأنا في تصحيح الأخطاء عن بُعد في أدوات مطوّر برامج Chrome:

ثم ذهبوا إلى الموقع ووجدوا ملف v18.js في علامة تبويب المصدر ، وكان يحتوي على العديد من الوظائف المثيرة للاهتمام.
أولاً ، تبدأ الدالة
fa () في حقل 20 × 20:
this.height = this.width = 20;
هدفنا الرئيسي هو إيجاد وتغيير وظيفة تحدد متى تصطدم الثعبان بجدار أو في نفسها لتعطيل إمكانية الخسارة. تمثل متغيرات
العرض والارتفاع أبعاد ملعب التشغيل ، لذلك بحثنا عن
العرض والارتفاع داخل الكود المصدري ووجدنا الدالة
F (a ، b) :
يبدو أن
F (a ، b) يتحقق مما إذا كانت إحداثيات جسم الثعبان موجودة داخل الحقل. يتمثل أحد الخيارات في إزالة الشروط في الوظيفة تمامًا بحيث تقوم دائمًا بإرجاع الحقيقة ، وبالتالي نقلنا إلى "نظام الله" ، حيث يمكننا المرور عبر الجدران دون أن نموت.
للقيام بذلك ،
ضغطنا على زر
الفحص في وحدة التحكم عن بعد وقمنا بتغيير الوظيفة
F (a ، b) إلى ما يلي:
الآن يمكننا أن نذهب من خلال الجدران:
التين. 1. وضع اللهكل هذا جيد جدًا ، لكن لا يزال يتعين علينا اللعب ، والتقاط الأشخاص لأنفسنا لكسب النقاط. سوف الاختراق القادم حل هذه المشكلة.
هناك العديد من المكالمات إلى
wa (a) في مكدس الاستدعاءات. إذا درسنا هذه الوظيفة ، فسنرى أنها متكررة ومسؤولة عن الاستعلام عن إطارات الرسوم المتحركة.
wa (a) يستدعي الدالتين
xa (a، b) و
ya (a) ، اللذين يعرضان قطع اللعبة (تدريب ، أشخاص) والحقل ، على التوالي.
النظر في وظيفة
xa (أ ، ب) :
يستغرق حجتين: 'أ' و 'ب'. الأول هو جزء من المتغير العالمي Q ، الذي يحتوي على معلومات مثيرة للاهتمام حول لعبتنا ، بما في ذلك مجموعة تمثل ملعبًا (الشكل 2) ، حيث نرى قطارًا (M) والأشخاص والأشياء (K). تقوم الوظيفة أيضًا بحساب النتيجة وتخزينها في ci ، وهو ما يعادل أيضًا Qb
التين. 2. مجموعة من الملعبهذا الصفيف يتوافق مع هذا الحقل:
التين. 3. الملعبيشير
xa (a) أيضًا إلى الدالة
sa (a) في الشكل. 4 ، والذي يولد إحداثيات عشوائية في كل مرة يتم إنشاء شخص جديد. إذا قمت باستدعاء الوظيفة أكثر من مرة ، يمكنك إنشاء أكبر عدد تريده من الناس (الشكل 5).
التين. 4. استدعاء وظيفة سا (أ)مثل هنا:
التين. 5. وظيفة الدعوة مع إنشاء أي عدد من الناس على الخريطةيرجى ملاحظة أنه حتى إذا اتصلت بـ
sa (a) أكثر من مرة وأخذت الشخص ، فإن النتيجة لا تتغير. عند اختيار أحد الركاب ، تكون الوظيفة
ka (a، b) في الشكل. 6. وبالتالي ، يجب تغييرها بحيث تضيف 10 نقاط وتحديث النتيجة على الشاشة مع كل مكالمة.
التين. 6. ميزة محدثةيشار إلى إحداثيات كل جزء من القطار في Qbob ، حيث العنصر الأول هو أول مقطورة في القطار.
التين. 7. مجموعة من العرباتستكون هناك حاجة لإنشاء AI بسيط. لنبدأ بمنطقه:
التين. 8. منطق الذكاء الاصطناعىالأفعى عبارة عن آلة حكومية (آلة حكومية):
- في X = 19 ، نذهب إلى الأسفل حتى نصل إلى Y = 19.
- في X = 19 و Y = 19 ، انتقل إلى اليسار إلى X = 0.
- نمرر إلى آلة الدولة ل zigzags:
- لأعلى خلية واحدة وإلى اليمين إلى X = 18.
- لأعلى خلية واحدة واليسار إلى X = 0.
- العودة إلى الخطوة أ
- في Y = 0 ، انتقل إلى اليمين = X = 19.
- العودة إلى الخطوة 1.
يتم نشر الرمز الكامل
على جيثب .
فيديو: