لقد قمت بدراسة تشويش الأسماء وقرأت مؤخرًا بعض الأشياء حول تشفير السلسلة.
توجد وظائف حماية تشفير السلسلة في حماية التشويش وقشرة التشفير.
بشكل عام، يمكن تقسيم تشفير السلسلة إلى فئتين:
الفئة الأولى هي تقنية تشفير السلسلة في الحماية من التشويش. الميزة الرئيسية هي تعديل مسار تنفيذ التعليمات البرمجية.
يندرج تشفير السلسلة الذي تستخدمه معظم أدوات الحماية من التشويش ضمن هذه الفئة.
الفئة الثانية هي تقنية تشفير السلسلة في أصداف التشفير. تقوم هذه الطريقة بتشفير السلسلة مباشرة في بيانات التعريف دون تعديل كود IL.
يتم تمثيل هذه الفئة بواسطة Remotesoft وMaxtocode.
دعونا نلقي نظرة على الفئة الأولى أولاً، ويكون تنفيذ التشفير على النحو التالي تقريبًا.
قبل التشفير:
messageBox.Show("مرحبا بالعالم!")
;
messageBox.Show(Helper.Decode("A34579dfbbeyu346563345/=="));
بكل بساطة، حيث تم استخدام السلاسل في الأصل، تم تغيير الاستخدام المباشر للسلاسل إلى الاستخدام غير المباشر للسلاسل.
هنا، يقوم برنامج الحماية بتشفير السلسلة "Hello World!" ويحصل على النتيجة "A34579dfbbeyu346563345/==".
Helper.Decode هي وظيفة فك تشفير يوفرها برنامج الحماية، والتي تعمل على استعادة "A34579dfbbeyu346563345/==" إلى "Hellow World!".
نظرًا لأنها حماية من التشويش، يمكننا تحليل الكود الذي تم فك تشفيره والحصول عليه. ثم استخدم رمز هذه الوظيفة مباشرةً لكتابة أداة صغيرة لاستعادة جميع السلاسل المشفرة في التجميع. إنشاء جدول مراسلات السلسلة. لتسهيل قراءة التعليمات البرمجية وتصحيح الأخطاء.
إذا تعمقت أكثر، يمكنك استعادة السلسلة تلقائيًا إلى التجميع الأصلي.
دعونا نلقي نظرة على رمز IL في المثال أعلاه.
قبل التشفير:
ldstr "مرحبًا بالعالم!"
استدعاء messageBox.Show(string)
بعد التشفير:
ldstr "A34579dfbbbeyu346563345/=="
استدعاء سلسلة Helper.Decode(سلسلة)
المكالمة messageBox.Show(string)
هي في الواقع بسيطة للغاية. نحن نعرف بالفعل رمز فك التشفير ويمكننا بالفعل فك تشفير السلسلة. يتم الحصول على جدول السلاسل المقابل.
قم بتغييرldstr "A34579dfbbbeyu346563345/=="
مباشرة
استدعاء سلسلة Helper.Decode(سلسلة)
استبداله بـ
ldstr "Hello World"
. ما عليك سوى كتابة أداة صغيرة تستخدم التعبيرات العادية للبحث والاستبدال.
النوع الثاني من حماية تشفير السلسلة:
يتمثل التنفيذ في تشفير دفق السلسلة مباشرة في البيانات التعريفية.
هذا النوع من الحماية به عيب بعد تشغيل البرنامج، سيتم فك تشفير دفق السلسلة في البيانات التعريفية واستعادته بالكامل في الذاكرة. في مقالتي السابقة، قدمت تفريغ البيانات الوصفية. لن أكررها هنا.
بالنسبة للنوع الأول من حماية تشفير السلسلة، هناك أشكال أخرى، على سبيل المثال، يمكن أن تكون وظيفة Helper.Decode وظيفة أصلية.
أو يتم مزجه مع هذه العملية.