بسم الله الرحمن الرحيم
والصلاة والسلام على أشرف المرسلين
سيدنا محمد وعلى آله وصحبه أجمعين
خطأ شائع بين العديد من مطوري التطبيقات المبتدئين وهو نشر التطبيقات بدون تأمينها ، فقد يفاجأ المطور بإستخدام الهكر لمصادر أكواد تطبيقاته ويعدل عليها وينسبها لنفسه دون مراعاة أى حقوق ملكية ، يتم ذلك للأسف بسهولة بإستخدام تقنية الهندسة العكسية ، لذلك سأناقش معكم فى هذا الموضوع بعض النقاط:
- فكرة سريعة عن الهندسة العكسية
- كيف يستخدم الهاكر الهندسة العكسية لمعرفة مصدر كود تطبيقك؟
- ما هى الأدوات التى يمكن استخدامها لحماية تطبيقاتك ؟
ما هى الهندسة العكسية Reverse Engineering ؟
بإختصار هى عملية تحليل أى برنامج أو تطبيق للعناصر التى يتكون منها ، فيتم بذلك معرفة آلية عمله و تتم غالبًا بغرض محاكاة هذا البرنامج أو إعادة هيكلته بطريقة مختلفة وذلك من خلال العمل على ملف APK مباشرة دون الحاجة إلى كود المصدر للتطبيق ، وهذا يختلف عن مفهوم الرسكين Reskin الذى يعتمد على كود مصدر التطبيق Source .
مدى قانونية الهندسة العكسية:
هناك الكثير من الجدل حول مشروعية هذه التقنية ، حيث أن بعض الأهداف التى تستخدم من أجلها الهندسة العكسية تكون بغرض إصلاح مشاكل بعض البرامج أو إضافة بعض الميزات لها، ولكن يعتبر الشائع فى إستخدامها هو إنتهاك لحقوق الملكية .
كيف يستخدم الهاكر الهندسة العكسية لمعرفة مصدر كود تطبيقك؟
أدوات حماية التطبيقات من الهندسة العكسية:
الحل لتفادى مشكلة إختراق التطبيقات ، هو تشفير أكواد تطبيقك بحيث تكون معقدة ويصعب قراءتها أوالتعديل عليها ، من أشهر هذه الأدوات التى تقوم بهذه المهمة هى أداة ProGuard وهى أداة مجانية جاهزة من ضمن Android SDK ، هناك أدوات أخرى غير مجانية مثل DexGuard التي توفر حماية أعلى.
آلية عمل أداة ProGuard :
تقوم هذه الأداة بتغيير أسماء الـ Classes , methods وإستبدالها برموز غير مفهومة يصعب قراءتها ، ليس ذلك فقط ولكن هناك ميزة أخرى لهذه الأداة وهى تقليل حجم التطبيق وذلك عن طريق حذف الأكواد الغير مستخدمة فى التطبيق.
كيفية إستخدام Proguard ببرنامج أندرويد ستوديو
- توجه الى ملف build.gradle وقم بتغير قيمة
minifyEnabled
الىtrue
android { buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } ... }
- إذا أردت اضافة ميزة تصغير حجم الكود ، قم بإضافة هذا السطر أيضا بعد minifyEnabled true
shrinkResources true
لاحظ فى الكود أعلاه ملف proguard-android.txt ، هذا الملف موجود فى SDK وهو المسئول عن التشفير وستجده فى هذا المسار :
tools/proguard/proguard-android-optimize.txt
- إذا أردت منع تشفير Class معين داخل مشروعك يمكنك التعديل على ملف proguard-android.txt و تقوم بإضافة هذا السطر:
-keep public class <myclass>
مع إستبدال myclass بإسم الكلاس الذى لا تريد تشفيره أو يمكنك أيضًا إضافة بعض القواعد إلى ملف
proguard-rules.pro
وذلك لتفادى مشكلة حذف الأكواد المهمة التى يحتاجها تطبيقك.
-keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.view.View { public <init>(android.content.Context); public void set*(...); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); }
فى النهاية:
ليس هناك ما يعرف بالحماية الكاملة أى أنه من الصعب أن تؤمن التطبيق بنسبة 100% ، لكن هذه الطرق تصعب على الهكر عملية القرصنة ، وتحمى تطبيقك بنسبة كبيرة من السرقة.
مصادر : 1 , 2 , 3تنبيه : المرجو عدم نسخ الموضوع بدون ذكر مصدره المرفق بالرابط المباشر للموضوع الأصلي وإسم المدونة وشكرا
جزاكِ الله خيرا
ردحذف