الفريق العربي للهندسة العكسية

نسخة كاملة : الوحدة 5 والاخيرة - الترقيع الثنائي - Binary Patching
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الوحدة 5 - الترقيع الثنائي - Binary Patching

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

يمكن لـ Cycript و Frida التعامل مع أي مهمة تحتاجها لتعديل سلوك تطبيق iOS. لكن لديهما مشكلتين رئيسيتين:
  • جميع التغييرات على وقت التشغيل او runtime (لا تشمل الكتابة على أو تعديل الملفات على القرص) تعيش في الـmemory. هذا يعني أنه في كل مرة تريد فيها تعديل هذه الـmethods، يجب عليك إعادة تشغيل السكربت الخاصة بك.
  • كما رأيت مع كلتا الأداتين، تحتاج إلى تشغيل التطبيق على هاتفك قبل أن تتمكن من البدء في استخدامهما. هذا يعني أن كل المنطق الذي يتم تنفيذه عند تهيئة التطبيق قد حدث بالفعل ولا يمكن تعديله باستخدام أي من الأدوات. على سبيل المثال، في تطبيق CoinZa، تم الكشف عن الـjailbreak من خلال viewDidLoad method لوحدة التحكم الأولى التي أنشأها التطبيق، وبالتالي كان عليك إنشاء وحدة التحكم مرة أخرى وتقديمها.
في بعض الأحيان، تصبح هذه المشكلات مزعجة للغاية، وعندما تأتي الأداة الأخيرة في صندوق الأدوات. الـBinary patching يسمح لك بتعديل اكواد لغة الاسمبلي لأي تطبيق iOS ثم عمل repackage له وتثبيته على جهازك وسيتم تشغيل الإصدار المعدل (المرقع-patched) من التطبيق سيعمل natively على أجهزتك دون الحاجة إلى تحميل أي سكربت لتعديل سلوكه.
في هذا التمرين، سأستخدم Hopper حصريًا لأنني لا أعرف كيفية القيام بذلك في Ghidra حتى الآن (أو إذا كان ذلك ممكنًا). إذا اكتشفت ذلك لاحقًا ، فسوف أقوم بتحديث الدورة التدريبية بكلا الإصدارين.
  • تحميل ملف الـ binary لـ CoinZa في Hopper.
  • ابحث عن Utils class وحدد isJailbroken method.
  • إذا لم تكن هناك، فحدد علامة تبويب CFG mode لرؤية كود الاسمبلي بالـmethod.
  • و كمعظم طرق اكتشاف الـjailbreak، فهذه قائمة طويلة من عمليات الفحص ذات العوائد المبكرة في حالة نجاح أي من هذه الاختبارات. في الـflow graph، يمكننا أن نرى أن معظم عمليات الفحص لديها قفزة إلى label هذا loc_100009cc4 (قد يكون هذا العنوان مختلفًا من جهتك)، ولكن الجزء المهم هو أن التعليمات التي يتم تنفيذها عند الانتقال إلى هذا الـ label:
orr w20, wzr, #0x1
    • هذا هي عملية or بين مسجل wzr و 0x1، وهذا يعني أن النتيجة في المسجل w20 ستكون دائمًا 1 (أو true) لأن x أو 1 = 1. هذا يعيّن القيمة 1 إلى المسجل w20.
  • على الجانب الآخر يمكنك رؤية التعليمات التالية قيد التنفيذ قبل القفز:
cmp x8, #0x0
cset w20, eq
    • التعليمات الأولى تقارن القيمة الموجودة في المسجل x8 إلى 0x0 ثم يتم تعيين التعليمات الثانية بناءً على تلك المقارنة. (بناءً على توثيق ARM، يتم زيادة المسجل تقنيًا إذا كانت المقارنة صحيحة او true ).
  • هذه هي نقطتي الخروج للـmethod المسماة isJailbroken. كل ما عليك القيام به هو تعيين قيمة المسجل w20 إلى 0x0 (أو false) وستعيد الدالة false دائمًا.
  • لتعديل كود الاسمبلي
    • حدد التعليمة orr بالضغط عليها.
    • ا ضغط على ⌥ + A أو من القائمة العلوية حدد تعديل او Modify ، ثم تجميع التعليمات او Assemble instruction ...
    • برنامج Hopper سوف يظهر نافذة مع إدخال حقل النص:
movz w20, #0x0
      • هذا سيبدل التعليمات الحالية مع هذه التعليمات. ما تفعله هذه التعليمات هو تحميل القيمة 0x0 الى المسجل w20.
    • اتبع نفس الخطوات لتعليمة cset.
[صورة مرفقة: OaZT9F2.png]
  • بمجرد استبدال التعليمات، اضغط ⇧ + ⌘ + E أو من القائمة العلوية ، حدد ملف File ، ثم Produce New Executable ....
  • قم بتسمية CoinZa وانقر فوق حفظ.
  • استبدال الملف CoinZa الموجود في CoinZa.app.
  • قم بعمل Repackage للتطبيق:
zip -qry CoinZa-Frida.ipa Payload
  • يمكنك الآن اتباع نفس خطوات Cydia Impactor، تمامًا كما فعلت حتى الآن، وتثبيت التطبيق على جهازك.
  • قم بتشغيل التطبيق من خلال النقر على أيقونته.
  • لا يعرض التطبيق النافذة المنبثقة "Sorry not sorry" ويمكنك استخدام التطبيق كالمعتاد.
الاستنتاجات
  • يعد الترقيع الثنائي - Binary Patching تقنية قوية للغاية تتيح لك تعديل التطبيقات من مصدرها وإعادة تثبيتها على أجهزتك كما لو كانت تطبيقات تم تنزيلها من متجر التطبيقات.
  • من الناحية التقنية هذا ليس جزءًا من الهندسة العكسية للتطبيق حيث ربما تكون قد انتهيت من الهندسة العكسية بالفعل وتستخدم هذه المعرفة التي حصلت عليها من خلال الهندسة العكسية للتطبيق لصالحك.
  • هذه الخطوة أصعب قليلاً من معظم الخطوات السابقة لأنها تتطلب معرفة بلغة اسمبلي ARM.
-------------------------
لا تنسوني ووالدي من دعائكم
المصدر
https://github.com/ivRodriguezCA/RE-iOS-Apps/blob/master/Module-5/README.md