في المقالة السابقة، ناقشنا تقنيات شائعة لكيفية تحقق مطوري التطبيقات من “الأجهزة التي تحتوي على برمجية روت Rooted” ” ثم كيف يمكن للمهاجم تجاوز بعض التقنيات المستخدمة من قبل المطورين. في هذه المقالة، سوف نناقش طرق مختلفة تستخدم من قبل مطوري اجهزة الأندرويد لتخزين البيانات محليا، وبعد ذلك سوف نرى كيفية تأمين هذه الأساليب.

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

 

تقنيات الأندرويد لتخزين البيانات المحلية:


يمكن للمطورين تخزين البيانات في تطبيقات الأندرويد محليا بطرق مختلفة، كالتالي :

  • Shared Preferences

وهي عبارة عن ملفات XML لتخزين البيانات البدائية في قيم زوجية اساسية. وتشمل أنواع قيم البيانات المنطقية

Booleans, floats, ints, longs, and strings

 

  • SQLite Databases

هي قواعد بيانات مستندة إلىlightweight file-based databases . وعادة ما يكون امتدادها “db.” أو “sqlite. ” يوفر أندرويد الدعم الكامل في قواعد بيانات SQLite، قواعد البيانات التي ننشئها في التطبيقات تكون قادرة على الوصول الى أي فئة في التطبيق. لا يمكن للتطبيقات الأخرى الوصول إليها.

 

  • Internal Storage

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

 

  • External Storage

هو المكان الذي يمكنك استخدامه لحفظ الملفات. و يمكن أن يكون وسائط التخزين القابلة للإزالة (مثل بطاقة SD الخارجية) أو وسائط التخزين الداخلية (غير قابل للإزالة). بطاقات SD الخارجية قابلة للقراءة من جميع التطبيقات .

 

في الجزء التالي، دعونا نرى كيف يمكن للمطورين استخدام Shared preferences لتخزين البيانات على الجهاز، وبعد ذلك سوف نرى كيف يمكن للمهاجم الوصول إلى هذه البيانات من جهاز أيضاً

المتطلبات الأساسية لمتابعة خطوات:

  • جهاز كمبيوتر مثبت عليه برنامج Android SDK
  • جهاز محمول (rooted) بالإضافة الى emulator لتثبيت التطبيقات

اختبار وظائف التطبيق:


وقد قمنا بوضع تطبيق للاختبار لتوضيح هذه المشكلة. يمكنك تنزيل نموذج التطبيق من المقال الاصلي. بعد تحميل التطبيق، قم بتثبيته على Android rooted device أو emulator

يمكن تثبيت التطبيق باستخدام adb وأتباع الأوامر التاليه:

adb install <name of the apk>.apk

 

image1

جميع التطبيقات لديها ميزة لتخزين البيانات داخل التطبيق. عندما نقوم بتشغيلها، فإنها تبدو كما هو موضح في الشكل التالي ( Shared preferences app is used here)
image2

 

لنبدأ بتشغيل تطبيق shared preferences ثم ندخل بعض البيانات في حقل اسم المستخدم و حقل كلمة المرور.

يتم إنشاء Shared preferences في تطبيقات الأندرويد باستخدام فئة SharedPreferences وفيما يلي جزء من التعليمات البرمجية المستخدمة في نموذج التطبيق المعطى للتحميل.

image3
كما نرى في الشكل أعلاه، قمنا بإنشاء نموذج SharedPreferences وبعد ذلك قمنا باستخدامه لإدراج البيانات في ملف XML بإستخدام object Editor

الآن، دعونا نرى أين يتم تخزين هذه البيانات في التطبيق.

الموقع الشائع لتخزين SharedPreferences في apps Android هو:

/data/data/<package name>/shared_prefs/<filename.xml>

لذا، دعونا نتنقل ونتفقد المسار أعلاه لمعرفة ما إذا تم إنشاء ملف Shared preferences في هذا التطبيق

image4

كما نرى في الشكل أعلاه، هناك مجلد باسم “shared_prefs”. ويتم انشاء هذا المجلد اذا كان هناك تطبيق يستخدم Shared preferences  يمكننا تغيير الدليل إلى shared_prefs واستخدام أمر “cat” لإلقاء نظرة على محتويات هذا التطبيق على الفور.

إذا كنا نريد للحصول على ملف xml على الجهاز المحلي لدينا، يمكننا سحب الملف كما هو موضح أدناه.

image5

كما نرى في الشكل أعلاه، تم نسخ ملف “userdetails.xml” على الجهاز المحلي. يمكننا أن نرى الآن محتويات الملف كما هو موضح في الشكل التالي

image6

إختراق تطبيقات الألعاب لتعديل النقاط:


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

دعونا نذهب الى التطبيق الشائع المسمى cricket stick . هذه اللعبة تحظى بشعبية كبيرة على شبكة الإنترنت وشخصيا احبها بسبب الصعوبة في تحقيق نسبة عالية من النقاط. دعونا نرى كيف يمكننا تعديل النقاط في هذا التطبيق من الواجهة الخلفية
متطلبات :

  • جهاز يملك صلاحيات  root
  •  أداة Droid Explorer لتحليل نظام الملفات
  • ADB access on the device

عندما نشغل تطبيق cricket stick ، فإنه يمتلك نشاطاً يظهر افضل النقاط التي تم تسجيلها إلى الآن ، عموماً من الصعب تسجيل , من الصعب تحقيق 150 نقطه من لعب اللعبه خمس مرات فقط

image7

الآن، دعونا نرى كيف يمكننا اختراق هذا التطبيق لزيادة النقاط

دعونا ننتقل إلى نظام الملفات المحلي للتطبيق لمشاهدة الملفات حيث يخزن التطبيق بياناته . هذا مبين في الشكل التالي
image8

فتحنا adb shell على الجهاز ومن ثم قمنا برفع الامتيازات باستخدام أمر “su” . فإن كل التطبيقات المثبتة على جهاز الأندرويد ستكون جميع البيانات الخاصة بتطبيقاتها موجودة في “/ directory / data” data. لذلك، قمنا بالذهاب إلى

/data/data/com.sticksports.stickcricket/

إذا قمنا بتنفيذ أمر “ls” هنا، يمكننا أن نرى بعض الدلائل حيث يقوم التطبيق بتخزين البيانات الخاصة به. والدليل الذي يهمنا هنا هو “shared_prefs”. الآن دعونا ننتقل إلى الدليل shared_prefs لمعرفة ما إذا كان هناك أي ملفات مثيرة للاهتمام بداخله. وهذا مبين في الشكل أدناه

image9

 

لقد أنتقلنا إلى دليل shared_prefs وقمنا بوضع كافة الملفات داخل هذا الدليل. هناك ثلاثة ملفات XML داخل دليل shared_prefs اذا قمنا ببعض التحليل على هذه الملفات الثلاثة، من خلال النظر في المحتويات باستخدام أمر “cat” ، فمن الواضح أن “Cocos2dxPrefsFile.xml” هو الملف الذي يتم استخدامه لتخزين جميع النقاط. الآن سنستبدل النقاط الموجودة في هذا الملف إلى النقاط التي نتمنى الحصول عليها .

للقيام بذلك، قمنا باستخدام أداة تسمى “Droid Explorer ” في نظام التشغيل Windows

يمكن تحميل Droid Explorer من موقعه الرسمي على الانترنت .

Droid Explorer هو أداة للتفاعل مع الجهاز باستخدام Windows Explorer. واجهة المستخدم الرسومية (GUI) الموجودة فيه تجعل حياتنا أسهل لأداء المهام المختلفة مثل نقل الملفات من جهاز إلى آلة بالإضافة الى إلغاء تثبيت التطبيقات و إنشاء نسخة احتياطية، الخ.

وفيما يلي الخطوات

  • قم بتوصيل جهاز الأندرويد إلى الآلة .
  • تشغيل Explorer Droid وانتقل إلى الدليل المراد

image10

 

  • اسحب الملفات الى محرر النصوص

image11

  • احذف ملف Cocos2dxPrefsFile.xml من جهاز الأندرويد باستخدامDroid Explorer

image12

  • اضغط على تعديل ملف “Cocos2dxPrefsFile.xml” من الكمبيوتر  إلى الهاتف باستخدام DroidExplorer.
  • إبدأ اللعبة مرة أخرى. الآن يجب أن تكون قادرا على رؤية النتيجة المعدلة والمحدثة في التطبيق كما هو مبين أدناه.

image13

 

الخلاصة :


في هذه المقالة، رأينا كيف يتم تنفيذ Shared preferences في تطبيقات الأندرويد والقضايا الأمنية المرتبطة بها إذا لم يتم تنفيذها بشكل صحيح. لتأمين بيانات التطبيق، فمن المستحسن إستخدام crypto libraries المتاحة. سوف نناقش كيفية استخدام crypto libraries في تطبيقات الأندرويد في وقت لاحق في هذه السلسلة. في المقال القادم سوف نرى الطرق الأخرى لتخزين البيانات في تطبيقات الأندرويد والقضايا الأمنية المرتبطة بها .