تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
إخفاء المعلومات Stegnography مجرد وجهة نظر
#2
في المشاركة السابقة تم توضيح كيفية تحويل مصفوفة بايت الي صورة
وفي هذا الجزء من الموضوع سأوضح كيفية استرداد البيانات من الصورة

استرداد البيانات:  

استرجاع البيانات عملية بسيطة و تتلخص في الخطوات التالية:
1- نقرأ الصورة
2- تحويل الصورة الي مصفوفة بايت
3- التعامل مع مصفوفة البايت و استرجاع المعلومات منها

ملحوظة :
في الصور بشكل عام فإن مصفوفة البايت او مصفوفة الألون يتم تخزينها بالشكل {Red Green Blue Alpha} 
لذلك قمت بتعديل بسيط علي الكود السابق حتي اقوم بتحويل كل بايت منفردة الي مصفوفة صغيرة بالشكل  {Red Green Blue Alpha}

الكود:
1- نقرأ الصورة التي تم تخزينها بأي طريقة تريدها

PHP كود :
       Dim file As String ".\stegnoText.jpg" 



PHP كود :
       Dim img As Bitmap Image.FromFile(file


2- باستخدام الدالة التالية نقوم بتحويل الصورة الي مصفوفة بايت

PHP كود :
   Private Function ConvertBitmapToBytes(bmp As Bitmap) As Byte()
 
       Dim data As Imaging.BitmapData bmp.LockBits(New Rectangle(00bmp.Widthbmp.Height), Imaging.ImageLockMode.ReadOnlyImaging.PixelFormat.Format32bppArgb)
 
       Dim buffer As Byte() = New Byte(data.Stride data.Height 1) {}
 
       Runtime.InteropServices.Marshal.Copy(data.Scan0buffer0buffer.Length)
 
       bmp.UnlockBits(data)
 
       Return buffer
    End 
Function 

نحصل علي مصفوفة البايت او مصفوفة الألوان

PHP كود :
Dim buffer As Byte() = ConvertBitmapToBytes(img


لو حاولت ان تفتخ الصورة التي تم بناؤها مسبقا في الجزء الأول بأي برنامج للصور
ستلاحظ ان الصورة بها منطقة بيضاء هذه المنطقة كل بكسل فيها عبارة عن {0 0 0 0} وتلك القيم تعبر عن الجزء الخالي من ألوان في الصورة
لذلك كل ما نحتاجه هو ان نقوم بعمل Loop و نفرأ الألوان التي لها قيمة اكبر من صفر
أو نقرا الألوان التي قيمة Alpha أكبر من صفر
أو نقرأ قيمة الألوان التي لها قيمة Alpha محددة أي نحن قمنا بتحديدها عند بناء الصورة

أحد الأفكار لتنفيذ الكود ستكون كالتالي
PHP كود :
       Dim toRawData As List(Of Byte) = New List(Of Byte)()
 
       Dim i As Integer 0
        
' loop thru byte array and read color values with non zero alpha
        While i < buffer.Length
            Dim alpha As Byte = buffer(i + 3)
            If alpha = 255 Then
                toRawData.Add(buffer(i))
            End If
            i += 4
        End While 

و بما أن مصفوفة البايت الأصلية التي تم تخزينها في الجزء الأول من الموضوع هي عبارة عن مصفوفة بايت خاصة ب تكست
هنا يتبقي فقط تحويل تلك المصفوفة الي تكست مرة ثانية
والكود التالي يوضح ذلك
PHP كود :
     Dim result As String System.Text.Encoding.UTF8.GetString(toRawData.ToArray()) 

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

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

أتمني ان الموضوع كان مفيدا للبعض منكم

الكود كاملا بالمرفقات


الملفات المرفقة
.rar   Test_Stegnography_vb4Arab.rar (الحجم : 63.97 ك ب / التحميلات : 55)
Retired
الرد }}}
تم الشكر بواسطة: محمد كريّم , sendbad100 , sniperjawadino , ابو ليلى


الردود في هذا الموضوع
RE: إخفاء المعلومات Stegnography مجرد وجهة نظر - بواسطة silverlight - 20-04-18, 07:29 PM


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


يقوم بقرائة الموضوع: