تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تشفير الملفات التنفيذية
#1
الهدف:

في هذا الموضوع سأوضح كيف يتم تشفير الملفات التي لها امتداد مثل 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 كلاس بحذفه من الذاكرة أم لا


الخلاصة التي يجب أن تخرج بها
هل أنت في حاجة للتشفير أم لا؟
أعتقد عليك أن تتعلم أين و كيف تخفي ملفاتك سواء قمت بتشفيرها أم لا


الملفات المرفقة
.rar   SimpleDll.rar (الحجم : 28.7 ك ب / التحميلات : 219)
.rar   Test_ThinkBytes_Part4.rar (الحجم : 71.7 ك ب / التحميلات : 135)
.rar   Test_ThinkBytes_Part3.rar (الحجم : 96.77 ك ب / التحميلات : 125)
.rar   Test_ThinkBytes_Part2.rar (الحجم : 97.73 ك ب / التحميلات : 130)
.rar   Test_ThinkBytes_Part1.rar (الحجم : 98.24 ك ب / التحميلات : 153)
الرد
#2
السلام عليكم ورحمة الله وبركاته
جزاك الله خيرا وبارك في على الموضوع والشرح
كان لي إستفسار بعد إذن حضرتك

في المثال الرابع الخاص بالمكتبة dll
كيف أستطيع الوصول  لدوال المكتبة من داخل المشروع 
كمثال لدي مكتبة خاصة بالتفعيل البرنامج مثلا
وقمت بتطبيق الشرح عليها 
ولكن وقفت  عند اوامر استدعاء دوالها  فلم تظهر في المشروع 
فرجاء ممكن التوضيح 
وأسف إن كان سؤالي يدل على قلة خبرة مني فلازلت مبتدأ وأحاول التعلم 
وجزاك الله خيرا


بعد البحث في المنتدى وجدت الشرح بالتفصيل من الأخ silverlight في الموضوع التالي
http://vb4arb.com/vb/showthread.php?tid=25436
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد
تم الشكر بواسطة: alsouf , alsouf , asemshahen5
#3
السلام عليكم

جزاك الله الف خير
الرد
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مقدمة الي تشفير الحروف الأبجدية العربية silverlight 2 5,429 12-10-21, 04:48 PM
آخر رد: Miloud
  ابسط كود لرفع الملفات عن طريق سيرفر FTP Basil Abdallah 2 2,855 20-11-20, 07:21 PM
آخر رد: walihn
Lightbulb [مقال] التعامل مع اختصارات الملفات Shortcuts Magic Sword 2 3,219 01-10-20, 11:36 AM
آخر رد: abomo3ath
  [VB.NET] عمل برنامج تشفير بخوارزمية base64 alking-0999 2 4,219 31-01-19, 07:28 PM
آخر رد: khalil7547
  [مقال] تشفير الكونكشن استرنج mero5000 7 2,371 04-12-18, 12:14 PM
آخر رد: dametucorazon
  شرح انشاء برنامج تحويل صيغ الملفات الصوتيه CLARO 10 5,124 16-11-18, 04:41 PM
آخر رد: anassss
  التعامل مع الملفات الصوتية ........دردشة برمجية RaggiTech 8 8,755 28-11-17, 11:23 PM
آخر رد: ahmed4240
  الملفات المؤقتة silverlight 1 1,729 05-10-17, 03:54 PM
آخر رد: sendbad100
Star [VB.NET] شرح عمل امتداد خاص لبرامجك وجعل برنامجك يقرأ هذة الملفات mohammed_gamal381 22 16,003 01-06-16, 02:55 PM
آخر رد: ابراهيم كركوكي
  [VB.NET] برنامج تشفير خوارزمية rsa مضغوط ببرنامج winrar alking-0999 2 3,362 08-07-15, 01:49 PM
آخر رد: alking-0999

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم