أدوات وبرامجالمقال المثبتمواضيع عامةمواضيع ومقالات

مقال : برمجه سكربت بلغه البايثون لأخفاء النصوص في الصور والفيديوهات

تم أرشفة هذا المحتوى


سنتحدث اليوم عن أستخدام لغه البايثون في علم Steganography وهو علم يختص بأخفاء ملف,رساله,صوره,فيديو بملف أخر  ,  والفرق بينه وبين التشفير هو أننا نلجأ لاخفاء المعلومات داخل شئ أخر عوضا عن تشفيرها.

وفي مقاله اليوم سنتحدث عن أخفاء نص في صوره بتكنيك بسيط أكتشفته بينما كنت أتعلم الـimage processing

وقبل أن نبدأ في شرح برمجه السكربت هناك متطلبات لابد من وجودها :

 

  • بايثون أصدار 2.7
  • مكتبه Opencv وتستطيع تحميلها من هنا وأختيار النظام الذي تستخدمه
  • مكتبه Numpy وتستطيع تحميلها من هنا
  • صوره 😀

والأن نتأكد من نزول المكتبات لديك بشكل سليم عن طريق الأمر :

import numpy ,cv2

والأن في مكتبه opencv أذا أردت قراءه صوره لتفعل بها ماتريده بعدها تقوم بتطبيق الأمر الأتي

img = cv2.imread(image)

حيث المتغير image يكون هو أسم الصوره ولو أردت عرضها أمامك تقوم بالتالي

img = cv2.imread(image)
cv2.imshow('image show',img)
if cv2.waitKey(0)==ord("q"):
   cv2.destroyAllWindows()

في السطر الثاني قمت بعرض الصوره عن طريق imread ولكن لن تري شئ وبالتالي ستحتاج الي waitKey وهنا جعلناه ينتظر الضغط علي الحرف q لغلق الصوره عن طريق قيمه الـascii لحرف الـq

وهذه النتيجه علي جهازي

snip1

والأن لا داعي لذكر أي أساسيات أخري من أساسيات المكتبه ونبدأ في الأهم

كل صوره مما تراه أمامك علي الشاشه تتكون من (Pixels) وكتعريف سريع فا البكسل هو أصغر نقطه في الصوره أو هو الجزء الأصغر من الصوره القابل للتحكم وهو لا يري بالعين المجرده

كل صوره تراها تتكون من مئات بل وألاف البكسلز وكل بكسل منهم يحمل لون مما يكون الصوره واللون لكي يتكون يكون خليط من ثلاث ألوان وهو الأحمر والأخضر والأزرق وهذا يسمي بنظام الـRGB 

والأن كيف نستفيد من هذا لتخزين المعلومات ؟

كل لون من الألوان الثلاثه يستطيع أن يحمل قيمه عدديه من 0-255 ولكن أولا هل سمعت عن ascii ؟

الأسكي هو نظام يستبدل كل رمز برقم وهو يستخدم في التواصل ما بين الأجهزه ويمتد مدي أعداد الـascii من 0 الي 255 مقسمه الي ثلاث مجموعات أهمها المجموعه الثانيه وهي مجموعه الحروف القابله للكتابه وهي في المدي 32-127

والأن بعد أن لاحظت أن مدى أعداد الأسكي هو نفس المدى التي تستطيع أن تتحمله ألوان الـRGB وأن البكسل لا يري بالعين المجرده أذن لم لا نقوم بتغيير قيم ألوان بكسلز محدده بقيم الأسكي الخاص بالحروف 😀
ولمعلوماتك الصوره لن تتلف والقيم لن تتغير لأنك قمت بتغيير قيمه لون لا أكثر 😀 والأن لنبدأ العمل علي ذلك

لتعدل ألوان بكسل ما يجب أن تحدد مكانه ولعمل هذا يكون عن طريق تحديد العامود والصف الذي يوجد البكسل بتقاطعهما فمثلا أن أردنا فعلا هذا في البايثون يكون كالأتي

>>> import cv2
>>> import numpy as np
>>> img = cv2.imread('test.jpg')
>>> print img[100,100]
[ 60 186 234]

كما ترى فعند تحديد مكان البكسل تقوم بايثون بطباعه قيمه ألوان الـRGB الخاصه به الثلاثه ولو أردنا قيمه لون واحد منهم نقوم بالتالي

>>> print img[100,100,0]
60

او نستطيع القيام بالتالي

>>> print img.item(100,100,0)
60

والأن أذا أردنا تعديل قيمه لون ما خاص ببكسل

>>> img.itemset((100,100,0),120)
>>> print img.item(100,100,0)
120

كما ترى أصبحت قيمه اللون 120 والأن لنطبق هذا علي الحروف ولنأخذ كلمه isecurity كا مثال

img = cv2.imread( "test.png" )
n = 1
for i in "isecurity":
   try:
       img.itemset((0,n,0),ord(i))
       n += 1
   except:
       break
cv2.imwrite( "Stegano.png" , img )

الأن وضعنا كلمه isecurity بداخل الصوره فهذه الصوره الأصليه

test

وهذه بعد وضع الكلمه

test

كما ترى لا فرق 😀

الأن لنقوم بأستخراج الكلمه من الصوره مجددا نحن بحاجه لمعرفه طول الكلمه ولذلك عند أستخدام هذا السكربت في أرسال رسائل سريه أحرص علي أرسال طول الرساله أيضا مع الصوره للمستلم

الأن لنكتب كود أستخراج الرساله

>>> img = cv2.imread("stegano.png")
>>> length = len("isecurity")
>>> text = ""
>>> for i in range( 1 , length+1 ):
>>>      text += chr(img.item(0,i,0))
>>> print text
'isecurity'

كما تري أستخرجنا الرساله من الصوره سليمه 😀

والأن نكتب دالة (function) لأخفاء الصور وأخري لأستخراج الرساله من الصور لتصبح العمليه أسهل ووضعها في سكربت

def hide( text , image ):
      img = cv2.imread( image )
      to = image.split(".")[0] + "_stegano.png"
      n = 1
      for i in text:
            try:
                  img.itemset( ( 0 , n , 0 ) , ord( i ) )
                  n += 1
            except:
                  break
      cv2.imwrite( to , img )
      print " [+] Finished...written to " + to
      print " "*2 + "Text length : " + str( len( written ) )

def unhide( image ,length):
      img = cv2.imread( image )
      text = ""
      for i in range( 1 , length+1 ):
            text += chr( img.item( 0 , i , 0 ) )
      print " [+] Finished.."
      print " -Hidden msg : "
      print "\t" + str( text )

والأن أنهينا, السكربت والفكره التي أعتمدنا عليها بسيطه للغايه فهنالك سكربتات أخري تعمل بطرق أكثر تعقيدا فمثلا الأن أردنا تطوير الفكره ونخفي الرساله في فيديو فماذا نفعل ؟

ولكن أولا مما يتكون الفيديو ؟

يتكون الفيديو من عده فريمز (Frames) تتحدث بصوره مستمره في زمن قليل فلا تُرى العين المجرده تبدل الفريمز ودعني الأن أخبرك بمعلومه قيمه وهي أنه يمكن في مكتبه Opencv معالجه كل فريم وكأنه صوره 😀 أظن أنك فهمت الأن إلي ماذا أشير 😀

الأن بسرعه لنقوم بفتح ملف فيديو نقوم بالأتي

import cv2
vid = cv2.VideoCapture("test.mp4")

while(True):
    _, frame = vid.read()
    cv2.imshow('Video',frame)
    if cv2.waitKey(1) == ord('q'):
        break

vid.release()
cv2.destroyAllWindows()

والأن لنعدل الفريم بسرعه نقوم بتعديل بعمل فانشكن جديده تشبه hide ولكن للفريمز

def hide_in_frame( text , frame ):
      n = 1
      for i in text:
            try:
                  frame.itemset( ( 0 , n , 0 ) , ord( i ) )
                  n += 1
            except:
                  break
      print " [+] Finished..."
      print " "*2 + "Text length : " + str( len( text ) )
      return frame

import cv2
vid = cv2.VideoCapture("test.mp4")
frame_number = 1

while(True):
    _, frame = vid.read()
    if frame_number == 10:
        frame = hide_in_frame( "isecurity" , frame )
    frame_number +=1
    cv2.imshow('Video',frame)
    if cv2.waitKey(1) == ord('q'):
        break

vid.release()
cv2.destroyAllWindows()

وحتي لا أطيل المقاله أكثر ستقوم بنفس ما فعلت مع الصور مع فرق أنك تتعامل مع فيديو والأن لكي يقوم أحد بأستخراج الرساله يجب أن يعرف طول الرساله ورقم الفريم الموجوده فيه

أرجو أن تكونوا قد استفدتم من هذه المقالة، لا تترددوا في ترك أسئلتكم و إستفساراتكم إذا ما كان هناك جزئية غير واضحه .

مقالات اخرى عن Steganography :

مقال : علم Steganography ” ما لا تستطيع عيناك رؤيته”

مقال : تعريف بالـ Steganography 

Karim Shoair

كريم, عمري 21 سنه, هاكر أخلاقي ومطور أجيد العديد من اللغات وأكثرهم أستخداما هى البايثون ومهتم بالعديد من المجالات المتعلقه بالحمايه وعلوم الكومبيوتر بشكل عام. لي العديد من الأدوات المعروفه مثل Dr0p1t ,QRLJacker ,Cr3dOv3r , One-Lin3r و PasteJacker فأنا أحب برمجه أدوات أختبار الأختراق وأكتشاف الثغرات الأمنيه بشكل عام وما الى ذلك.

مقالات ذات صلة

‫8 تعليقات

  1. مقال مفيد كريم .

    ايضا يمكن ان نقوم باخفاء هاش لرساله في النص وتطوير السكربت اولا يقوم بتوليد الهاش ثم اخفائه والعكس في السكربت الي عند المستقبل .

    مشكور جدا

  2. ممكن دروس للبايثون من الصفر حتى الاحتراف و ما هي افضل النسخ اللي لازم اعمل عليها .. لاني كنت ابتديت عليه العمل من زمان ثم توقفت ..

  3. الاستاذ كريم شعير ارجو التواصل للضرورة اريد برمجة سكربت خاص مدفوع الثمن يقوم بإخفاء نص بالفيديو ولكن المشكلة بان النص يظهر في اماكن عشوائية و اوقات مختلفة.
    Skype: usa.rout

  4. لو تم رفع الصورة على الانترنت، فسيتم تقليل جودتها وحجمها، ألن يؤثر هذا على عدد البيكسلز؟ وبالتالي الكلمات المخبئة؟؟

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى