01-07-17, 10:16 AM
(آخر تعديل لهذه المشاركة : 01-07-17, 01:07 PM {2} بواسطة silverlight.)
الهدف:
في هذا الموضوع سأوضح كيف يتم تشفير الملفات التي لها امتداد مثل Exe أو Executable Files
أيضا سأجتهد أن اوضح كيف يتم تشفير ملفات dll او Data Linked Library Files
مقدمة:
بشكل مبدئي علينا ان نفهم أن عملية تشفير الملفات هي نوع من أنواع الفيروسات لذلك وعندما تقوم بتشفير ملف تنفيذي أو أي ملف أخر مهما كان نوعه
فإن بعض برامج مكافحة الفيروسات قد تعتبر الملف الخاص بك نوع من الفيروس
السبب في ذلك أنك وعند تشفير أي ملف فإنك تقوم بعمل تغييرات في البنية الأساسية لهذا الملف و بالتالي تخفي معالمه عن أنظمة التشغيل
وبدون الدخول في كلام نظري لنضع بعض الأمثلة
المثال الأول
هذا المثال بالفعل أن كتبته بشكل مبسط في قسم الأمثلة
و ستحدونه في اللينك التالي
حماية الملفات التنفيذية
اسمحوا لي فقط أن أعيد صياغة الكود الموجود في المثال حتي أوضح شيئا هاما
وهنا سوف أضيف الملف التنفيذي الي Resources المشروع و أجعل Build Action الخاص به Embedded Resource
حتي أضمن أنه لا يتم نسخ الملف الأصلي الي فهرس المشروع
جتي الأن نحن لم يتم نشفير اي شئ
المثال الثاني
نفس المثال و لكن بدلا من كتابة الملف بامتداد Exe سنكتبه باي امتداد علي الهارد ديسك
وهنا سوف أحفظه علي هيئة صورة
و أقرأه من علي الهارد ديسك ثم أقوم بتشغيله
قم بتشغيل الملف
ستلاحظ أن الكمبيوتر سيقوم بفتح الملف ببرنامج للصور و برنامج الصور هنا سوف يقوم بإظهار رسالة لك تقول We can't open this file اي لا نستطيع فتح هذا الملف
المثال الثالث:
حاول تحفظ الملف بامتدادات أخري مختلفة و سأختار هنا الامتداد txt
الملف سيفتح هنا ببرنامج NotePad و سوف تستطيع أن تري و تقرأ كل التكست الموجود داخل الملف و لكن بعض الكلمات ستكون غير مفهومة
لا تغلق الملف فقط انظر الي اول حرفان في ملف التكست ستجد أنهما MZ و هذان الحرفان و عند من يفهم برمجة هما يشيران الي الحروف الأولي الي اسم مبرمج مشهور في مايكروسوفت و هذان الحرفان لهم معني واحد أن الملف هو ملف تنفيذي EXE
تذكر أننا حتي الأن لم نقوم بتشفير الملف
عموما المسكلة التي يجب أن تتفهمها عزيزي القارئ أن المشكلة ليست في تشفير الملف فهذا هو الجزء السهل في الموضوع
لكن السؤال الذي يجب أن نسأله لأنفسنا
هل نحن في حاجة لحفظ الملف علي الهارد ديسك و هل نستطيع تحميل الملف مباشرة في ذاكرة الكمبيوتر
الإجابة نعم تستطيع ولكن لهذا حديث مختلف
المثال الرابع:
الأن لنقوم بتنفيذ ألأفكار أعلاه و لكن مع ملف يكون امتداده dll او من النوع Data Linked Library
و أنا كتبت ملف من النوع dll بسيط جدا حتي استخدمه
وهنا سوف أضيف الملف الي Resources المشروع و أجعل Build Action الخاص به Embedded Resource
حتي أضمن أنه لا يتم نسخ الملف الأصلي الي فهرس المشروع
و الكود التالي يوضح كيفية قراءة ملف dll
أيضا الكود التالي يوضح كيفية قراءة الملف باستخدام Application.Domain
يجب ملاحظة انك تستيطيع أن تضع الملف في اي فهرس تحدده أنت علي الكمبيوتر
أنا هنا اخترت فهرس المشروع
يتبقي عليك فقط أن تتعامل مع ملف dll الذي تم تحميله باستخدام Assembly Load او باستخدام Application.Domain.Load
وهذا يتم باستخدام Reflection
الكود التالي سيؤكد لك أن الاسمبلي تم بالفعل تحميله
وهذا ققط من أجل التوضيح
شئ أخير يجب أن تضعه في اعتبارك و هو عبارة عن سؤال أرجو أن تسأله لنفسك
الي متي سيظل الملف في ذاكرة الكمبيوتر؟
وهل سيقوم GC كلاس بحذفه من الذاكرة أم لا
الخلاصة التي يجب أن تخرج بها
هل أنت في حاجة للتشفير أم لا؟
أعتقد عليك أن تتعلم أين و كيف تخفي ملفاتك سواء قمت بتشفيرها أم لا
في هذا الموضوع سأوضح كيف يتم تشفير الملفات التي لها امتداد مثل Exe أو Executable Files
أيضا سأجتهد أن اوضح كيف يتم تشفير ملفات dll او Data Linked Library Files
مقدمة:
بشكل مبدئي علينا ان نفهم أن عملية تشفير الملفات هي نوع من أنواع الفيروسات لذلك وعندما تقوم بتشفير ملف تنفيذي أو أي ملف أخر مهما كان نوعه
فإن بعض برامج مكافحة الفيروسات قد تعتبر الملف الخاص بك نوع من الفيروس
السبب في ذلك أنك وعند تشفير أي ملف فإنك تقوم بعمل تغييرات في البنية الأساسية لهذا الملف و بالتالي تخفي معالمه عن أنظمة التشغيل
وبدون الدخول في كلام نظري لنضع بعض الأمثلة
المثال الأول
هذا المثال بالفعل أن كتبته بشكل مبسط في قسم الأمثلة
و ستحدونه في اللينك التالي
حماية الملفات التنفيذية
اسمحوا لي فقط أن أعيد صياغة الكود الموجود في المثال حتي أوضح شيئا هاما
وهنا سوف أضيف الملف التنفيذي الي Resources المشروع و أجعل Build Action الخاص به Embedded Resource
حتي أضمن أنه لا يتم نسخ الملف الأصلي الي فهرس المشروع
PHP كود :
' نقرأ الملف من الريسورس
Dim fileBytes As Byte() = My.Resources.KittyCat
' نحدد اسما و مسارا للملف
Dim fileNameandPath As String = ".\Kitty.Exe"
' نخفظ الملف التنفيذي بالاسم و في المسار المحدد
IO.File.WriteAllBytes(fileNameandPath, fileBytes)
' نقوم بتشغيل الملف
Using p As Process = Process.Start(New ProcessStartInfo(fileNameandPath))
Me.Close()
End Using
جتي الأن نحن لم يتم نشفير اي شئ
المثال الثاني
نفس المثال و لكن بدلا من كتابة الملف بامتداد Exe سنكتبه باي امتداد علي الهارد ديسك
وهنا سوف أحفظه علي هيئة صورة
و أقرأه من علي الهارد ديسك ثم أقوم بتشغيله
PHP كود :
' نقرأ الملف من الريسورس
Dim fileBytes As Byte() = My.Resources.KittyCat
' نحدد اسما و مسارا للملف
Dim fileNameandPath As String = ".\Kitty.png"
' نخفظ الملف التنفيذي بالاسم و في المسار المحدد
IO.File.WriteAllBytes(fileNameandPath, fileBytes)
' نقوم بتشغيل الملف
Using p As Process = Process.Start(New ProcessStartInfo(fileNameandPath))
Me.Close()
End Using
قم بتشغيل الملف
ستلاحظ أن الكمبيوتر سيقوم بفتح الملف ببرنامج للصور و برنامج الصور هنا سوف يقوم بإظهار رسالة لك تقول We can't open this file اي لا نستطيع فتح هذا الملف
المثال الثالث:
حاول تحفظ الملف بامتدادات أخري مختلفة و سأختار هنا الامتداد txt
PHP كود :
' نقرأ الملف من الريسورس
Dim fileBytes As Byte() = My.Resources.KittyCat
' نحدد اسما و مسارا للملف
Dim fileNameandPath As String = ".\Kitty.txt"
' نخفظ الملف التنفيذي بالاسم و في المسار المحدد
IO.File.WriteAllBytes(fileNameandPath, fileBytes)
' نقوم بتشغيل الملف
Using p As Process = Process.Start(New ProcessStartInfo(fileNameandPath))
Me.Close()
End Using
الملف سيفتح هنا ببرنامج NotePad و سوف تستطيع أن تري و تقرأ كل التكست الموجود داخل الملف و لكن بعض الكلمات ستكون غير مفهومة
لا تغلق الملف فقط انظر الي اول حرفان في ملف التكست ستجد أنهما MZ و هذان الحرفان و عند من يفهم برمجة هما يشيران الي الحروف الأولي الي اسم مبرمج مشهور في مايكروسوفت و هذان الحرفان لهم معني واحد أن الملف هو ملف تنفيذي EXE
تذكر أننا حتي الأن لم نقوم بتشفير الملف
عموما المسكلة التي يجب أن تتفهمها عزيزي القارئ أن المشكلة ليست في تشفير الملف فهذا هو الجزء السهل في الموضوع
لكن السؤال الذي يجب أن نسأله لأنفسنا
هل نحن في حاجة لحفظ الملف علي الهارد ديسك و هل نستطيع تحميل الملف مباشرة في ذاكرة الكمبيوتر
الإجابة نعم تستطيع ولكن لهذا حديث مختلف
المثال الرابع:
الأن لنقوم بتنفيذ ألأفكار أعلاه و لكن مع ملف يكون امتداده dll او من النوع Data Linked Library
و أنا كتبت ملف من النوع dll بسيط جدا حتي استخدمه
وهنا سوف أضيف الملف الي Resources المشروع و أجعل Build Action الخاص به Embedded Resource
حتي أضمن أنه لا يتم نسخ الملف الأصلي الي فهرس المشروع
و الكود التالي يوضح كيفية قراءة ملف dll
PHP كود :
Dim dllFileBytes As Byte() = My.Resources.SimpleDll
' الكود التالي يوضح الأسلوب الأول لتتشغيل الملف
Dim simpleDll As Assembly = Assembly.Load(dllFileBytes)
أيضا الكود التالي يوضح كيفية قراءة الملف باستخدام Application.Domain
يجب ملاحظة انك تستيطيع أن تضع الملف في اي فهرس تحدده أنت علي الكمبيوتر
أنا هنا اخترت فهرس المشروع
PHP كود :
' الكود التالي يوضح الأسلوب الثاني لتتشغيل الملف
Dim dllFileBytes As Byte() = My.Resources.SimpleDll
Dim filePath As String = Application.StartupPath & "\" & "SimpleDll.dll"
Using fs As IO.FileStream = IO.File.Create(filePath)
fs.Write(dllFileBytes, 0, dllFileBytes.Length)
End Using
Dim dom As AppDomain = AppDomain.CreateDomain("SimpleDll", Nothing)
Dim assemblyName As New AssemblyName()
assemblyName.CodeBase = filePath
Dim dllassembly As Assembly = dom.Load(assemblyName)
يتبقي عليك فقط أن تتعامل مع ملف dll الذي تم تحميله باستخدام Assembly Load او باستخدام Application.Domain.Load
وهذا يتم باستخدام Reflection
الكود التالي سيؤكد لك أن الاسمبلي تم بالفعل تحميله
وهذا ققط من أجل التوضيح
PHP كود :
Dim cairoType As Type = dllassembly.GetType("SimpleDll.Cairo")
Me.Text = cairoType.IsPublic
شئ أخير يجب أن تضعه في اعتبارك و هو عبارة عن سؤال أرجو أن تسأله لنفسك
الي متي سيظل الملف في ذاكرة الكمبيوتر؟
وهل سيقوم GC كلاس بحذفه من الذاكرة أم لا
الخلاصة التي يجب أن تخرج بها
هل أنت في حاجة للتشفير أم لا؟
أعتقد عليك أن تتعلم أين و كيف تخفي ملفاتك سواء قمت بتشفيرها أم لا