سلاسل مشفرة وقت التشغيل

سنتناول اليوم أساسيات السلاسل المشفرة في وقت التشغيل ، فلماذا نحتاج إلى تشفير سلاسلنا ومعرفة كيفية إنشاء سلاسلنا الخاصة.

في هذه المقالة سوف تفهم وتتعلم:

  • ما هو تشفير وقت التشغيل وفك التشفير
  • لماذا تحتاج إلى تشفير الجمل الخاصة بك
  • شاهد كيف يمكن لأي شخص رؤية بياناتك الحساسة
  • إنشاء التشفير المخصص الخاص بك

ما هو تشفير وقت التشغيل وفك التشفير

يشير هذا إلى البيانات المشفرة و / أو المفكوكة أثناء وقت تشغيل البرنامج (البرنامج ، التطبيق). يمكن أن تكون البيانات من أي نوع من كتل الذاكرة وحركة مرور الشبكة والسلاسل وما إلى ذلك.

من أكثر الطرق شيوعًا المستخدمة لهذا الغرض التشويش (أساسي). تتضمن الآليات الأخرى (المتقدمة) طفرة / افتراضية للشفرة المترجمة.

سنركز اليوم على آلية تستخدم تشويش XOR .

لماذا تشفير الجمل؟

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

من أول الأشياء التي سيفعلها المهاجم هو البحث عن سلاسل داخل برنامجك. سيسمح له ذلك بفهم كل شيء عن برنامجك بأقل جهد.

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

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

دعونا نلقي نظرة على مثال بسيط باستخدام تطبيق وحدة التحكم:

عينة غير مشفرة 1

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

اختبار التحليل الساكن

في التحليل الثابت ، لا يحتاج البرنامج إلى التنفيذ. مع ذلك ، فلنفتح العينة في Ghidra .

من لقطة الشاشة أدناه ، يمكنك أن ترى أن النموذج قد تم تجميعه بدون أي معلومات تصحيح:

عينة غير مشفرة 1-1

إذا بحثنا عن سلاسل يمكنك أن ترى أن جميع معلوماتنا الحساسة مرئية:

عينة غير مشفرة 1-2

بمجرد تمييز السلسلة ، يمكنك فتح عرض decompiler ورؤية جميع التعليمات البرمجية ذات الصلة:

عينة غير مشفرة 1-3

حزين جدا ايه؟ 😕 تخيل أنك عملت على برنامجك المذهل لأشهر ، وأنت على استعداد لبيعه.

أعتقد أن الباقي لا يحتاج إلى شرح ، لكنني متأكد من أنك تفهم هذه النقطة.

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

اختبار تحليل وقت التشغيل

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

ومع ذلك ، فإن المصحح ليس مطلوبًا حقًا لهذا الغرض. يمكننا ببساطة تنزيل أداة مجانية مثل Process Hacker وفتح العملية:

عينة غير مشفرة 2

كان ذلك بسيطًا إلى حد ما ، أليس كذلك؟ وتذكر أننا لم نرفق حتى مصحح أخطاء. سيستخدم الفرد الماهر والعزم مصحح أخطاء.

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

إنشاء سلاسل مشفرة في وقت التشغيل

هناك طرق عديدة لتحقيق ذلك:

  • استخدام برنامج طرف ثالث مثل VMProtect , Themida .
  • تجميع تشفير السلسلة الزمنية مثل xorstr .
  • استخدام الطرق المخصصة

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

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

طور معظم الناس أداة ضد أداتك. إنها فقط الطريقة التي تسير بها الأمور. يفعلون ذلك من أجل التحدي ، أو لسرقة عملك ، لكنهم يفعلون ذلك.

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

الخطة

  • إنشاء حل سهل الاستخدام
  • حافظ على السلاسل مشفرة في جميع الأوقات
  • فك التشفير فقط عند الحاجة إليه
  • ضع الخيوط في مكان عشوائي (اختياري - غير مغطى)
  • تدمير الخيوط بعد استخدامها (اختياري - غير مغطى)

الحل

ابدأ بتعريف السلاسل واحدًا تلو الآخر كمصفوفة:

الخطوة 1

يمكن أن تحتوي المصفوفة على عدد غير محدود من السلاسل بحد 256 طول.

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

الفكرة هي تشفير كل حرف من السلسلة. سأستخدم تشفير XOR بسيطًا لهذا الغرض.

أدناه يمكنك مشاهدة مثال على كيفية عمل ذلك:

الخطوة 2

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

بعد التجميع والتشغيل ، تكون النتيجة وحدات بايت غير قابلة للقراءة للعين البشرية:

الخطوه 3

يوجد لديك ، برنامجك الصغير لإنشاء سلاسل مشفرة لوقت التشغيل. 😏

النتائج

لقد حان الوقت لتطبيق الحل الذي نقدمه. دعنا ننشئ نموذجًا آخر لهذا الغرض ونضيف الكود الخاص بنا:

الخطوة 4

لاحظ شيئين مهمين:

  • لقد تركت بعض السلاسل في نص عادي حتى تتمكن من رؤية الفرق
  • تحتاج وظائف فك التشفير إلى الطول (المزيد حول هذا لاحقًا)

نقوم بتجميع ما سبق في وضع الإصدار وتشغيله. النموذج الجديد يعمل بشكل طبيعي:

الخطوة الخامسة

إذا فتحنا نموذج البرنامج الجديد في IDA (أو Ghidra) ، فلن تكون السلاسل التي قمنا بتشفيرها مرئية:

الخطوة 6

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

الخطوة 7

اضطررت إلى التمرير لأسفل للوصول إلى النص الموجود في الصورة أعلاه. يمكنك أن ترى مدى اختلاف الكود المترجم.

لقد حللنا مشكلة التحليل الثابت ، فلننتقل إلى وقت التشغيل.

افتحه في Process Hacker:

الخطوة 8

هاهو! لقد قمنا بحل مشكلة تحليل وقت التشغيل أيضًا 😎

المزيد عن السلاسل المشفرة

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

من الناحية المثالية ، سنحتاج إلى ما يلي:

  • قراءة ملف نصي للسلاسل
  • كتابة السلاسل الناتجة في ملف نصي
  • إضافة Escape Sequences إلى السلاسل لتجنب تحديد الطول في كل مرة.
  • أضف XOR أكثر تعقيدًا أو أي طريقة أخرى (اختياري)
  • ضع الخيوط في مواقع عشوائية (اختياري)

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

يشمل 4 مشاريع:

  • ** RuntimeStringEcryptor ** الذي يقرأ من سلاسل ملف نصي ، ويشفرها ثم يكتبها في ملف نصي آخر.
  • ** النموذج ** هو وحدة التحكم البسيطة البسيطة المستخدمة للتوضيح مع IDA.
  • ** SampleEncryptedStrings ** هي وحدة التحكم البسيطة ذات السلاسل المشفرة التي يتم عرضها باستخدام IDA.
  • ** SimpleRuntimeStringEncryption ** هو الملعب الأولي حيث يمكنك اختبار هذه الطريقة.

ملحوظات:

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

تحميل

لتنزيل الحل الجاهز للاستخدام ، يرجى التفكير في دعم هذه المدونة.

كن راعيا