الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Steganography

مغلق
بدأه baha_ashour في 24 مارس 2006 · 24 رد · 5,325 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

من المعروف ان كل Pixel يتكون من ثلاثة الوان أساسية Red,Green,Blue

وكل لون عبارة عن 1 byte

// read 1 pixel and get the RGB that it consits from
Color c = myBitmap.GetPixel(i, j);
byte R = c.R; 
byte G = c.G; 
byte B = c.B;

ما نريد عمله هو أن نحول ال Text التي نريد أخفاءها الى مجموعة من ال bits

ووضع كل bit من هذه ال Text في ال bit الأولى من ال R وال G وال B

كما هو موضح في الصورة التالية :

steganography.jpg

طبعا هذه العملية ستؤدي إلى تغيير الالوان التي تتكون منها الصورة ... ولكن لا يمكن للعين المجردة ان تلاحظ الفرق.

ملاحظة:

عندما نريد استرجاع ال Text من الصورة ... ستواجههنا مشكلة وهي:

متى نتوقف؟!!

لذلك سوف نضع ال Size لل Text المراد اخفاؤها في أول Pixel من الصورة

لذلك سوف أقوم بوضع ال size في ال R دون التأثير على ال G وال B

Color c = GetPixel(0, 0);
byte R = (byte)MyStream.Length; // the size of my Text in bytes
byte G = c.G; // no change
byte B = c.B; // no change
b.SetPixel(0, 0, Color.FromArgb(R, G, B));

الآن نقوم بقراءة ال Pixels من الصورة بعدد الbits المراد اخفاؤها مقسوما على 3

==> لأنه في كل Pixel سوف نخفي 3 bits

من أهم ال Functions التي سوف نحتاجها :

//byte[] eMyStringBytes => my text after converting it to an array of bytes
//int index =>  in which byte i am
//int ePosition => in which bit i am
private bool GetBitFromMyString()
{
            byte b = eMyStringBytes[eIndex];
            bool myBit = (b & (byte)(1 << ePosition)) != 0;
            ePosition--;
            if (ePosition < 0)
            {
                ePosition = 7;
                eIndex++;
            }
            return myBit;
}

ملاحظة :

نخزن ال bit في متغير من نوع boolean

converting myText to array of bytes :
eMyStringBytes = Encoding.ASCII.GetBytes(myText);

//for storing bit in the "first bit" of a byte:
private byte SetBitEnc(byte b, bool newBitValue)
{
            byte mask = (byte)(1);
            if (newBitValue)
            {
                return (byte)(b | mask);
            }
            else
            {
                return (byte)(b & ~mask);
            }
}

في المرفقات مثال وهذه صورة عنه :

Encryption :

Enc.JPG

Decryption :

Dec.JPG

Enc_Dec.rar

#2

ما شاء الله عليك اخي بهاء انا فعلا كنت بدور علي دروس زي دي مشروحه بطريقه سهله وجميله

بس في واحد صاحبي متقدم عني في السي شارب قام باخفاء صوره داخل صوره فهل تتم بنفس الطريقه

Khaled_Tiger

النجاح الوحيد في الحياة هو أن تستطيع أن تحيا حياتك بالطريقة التي تريدها

يخاطبني السفيه بكل قبح *** فأكره أن أكون له مجيبا

يزيد سفاهة فأزيد حلمــا *** كعود زاده الإحراق طيبا

إذا نطق السفيه فلا تجبه *** فخير من إجابته السكوت

فإن كلَمته فرَجت عنــــه *** وإن خليته كمداً يـمـــوت

#3

السلام عليكم

والله يعطيك العافية اخي بهاء

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

يعطيك العافية عمي بهاء

ودايما ابعت هييك شغلات واعملنا الها فورورد على الايميل

lovelyprince4@hotmail.com

الضنضور :D :o :rolleyes: :^) 8-) (h) <_< :s :wacko: ;) B)

احنا والاوراكل والزمن طويل وراها وراها

هلا ال OCP واللي عنده عن ال OCM ما يبخل علينا

#4

وفقك الله لما يحبة ويرضاه

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#5

alloom :

عيوني الك :D

Ahmed H. Alawady :

تسلم أخي أحمد وبارك الله فيك

khaled_tiger :

طريقة اخفاء صورة داخل صورة.. تتبع نفس المبدأ

الفرق البسيط هو كيفية تحويل الصورة الى مصفوفة من ال bytes

//Bitmap myBitmap;
System.IO.MemoryStream myMemoryStream = new System.IO.MemoryStream();
myMemoryStream = myBitmap.Save(myMemoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] bitmapStream = myMemoryStream.GetBuffer();

للتحويل من []byte الى bitmap :

//byte[] bitmapStream;
myMemoryStream = new System.IO.MemoryStream(bitmapStream);
myBitmap = Bitmap.FromStream(myMemoryStream);

تحياتي ;)

#6

الف شكر اخي بهاء علي الرد وتوضيح السؤال وجزاك الله خيرا

Khaled_Tiger

النجاح الوحيد في الحياة هو أن تستطيع أن تحيا حياتك بالطريقة التي تريدها

يخاطبني السفيه بكل قبح *** فأكره أن أكون له مجيبا

يزيد سفاهة فأزيد حلمــا *** كعود زاده الإحراق طيبا

إذا نطق السفيه فلا تجبه *** فخير من إجابته السكوت

فإن كلَمته فرَجت عنــــه *** وإن خليته كمداً يـمـــوت

#7

السلام عليكم

الموضوع رائع وشيق جدا انا عملت هذه الفكرة في مشروع تخرجي بالجامعة حيث كان البرنامج يقوم باخفاء اي برنامج (حتى لو كان exe) داخل صورة من اي نوع وينتج الناتج صورة من نوع BMP .

ولكن اخي هناك Classs اسمها ArrayBit حاول ان تستعملها لتحول المدخل الى مصفوفة من البتس ليسهل التعامل معها

وهذا هو البرنامج:

http://lahlouh.8m.com/StegoSmart.part1.rar

http://lahlouh.8m.com/StegoSmart.part2.rar

حدد الصورة

حدد الملف المراد تشفيره

حدد الصورة الناتجة

حدد اذا كنت تريد ضغط ام لا

حدد طريقة التشفير والمفتاح (اذا كنت لا تعرف عن التشفير جرب RC4 او بدون)

اضغط Stego

*********************

لعكس الطريقة

اختار extract tab

وحدد الصورة والملف الناتج

قارن بين الناتج والاصل!!!!!!!!!!!!!!!!!!!!!!!!

ارجوا التعليق وارسال الملاحظات

محمد لحلوح

الاردن

عندما تولد يا ابن آدم يؤذن في اذنك من غير صلاة...

وعندما تموت.... يصلى عليك من غير آذان....

فكأن حياتك في الدنيا ليست سوى... الوقت الذي تمضيه بين الأذان والصلاة...

فلا تقضيه بما لاينفع

Mohammad Lahlouh

mohammadlahlouh.blogspot.com

Make money from your Website or Blog with BidVertiser

#8

بصراحة الموضوع رائع

يا أيها الناس قولو لا إله إلا الله تفلحوا وتملكوا بها العرب وتذل لكم العجم وإذا آمنتم كنتم ملوكا في الجنة

#9

اخي m_lahlouh رجاء ان تقوم برفع الملفات مره اخري لانني لم استطع تنزيلهم من الموقع الحالي

Khaled_Tiger

النجاح الوحيد في الحياة هو أن تستطيع أن تحيا حياتك بالطريقة التي تريدها

يخاطبني السفيه بكل قبح *** فأكره أن أكون له مجيبا

يزيد سفاهة فأزيد حلمــا *** كعود زاده الإحراق طيبا

إذا نطق السفيه فلا تجبه *** فخير من إجابته السكوت

فإن كلَمته فرَجت عنــــه *** وإن خليته كمداً يـمـــوت

#10

السلام عليكم

هذا العنوان الجديد:

http://lahlouh.8m.com/Files/StegoSmart.part1.rar

http://lahlouh.8m.com/Files/StegoSmart.part2.rar

طبعا تحتاج لـ .NET FrameWork

عندما تولد يا ابن آدم يؤذن في اذنك من غير صلاة...

وعندما تموت.... يصلى عليك من غير آذان....

فكأن حياتك في الدنيا ليست سوى... الوقت الذي تمضيه بين الأذان والصلاة...

فلا تقضيه بما لاينفع

Mohammad Lahlouh

mohammadlahlouh.blogspot.com

Make money from your Website or Blog with BidVertiser

#11

اين الردود

يا شباب

عندما تولد يا ابن آدم يؤذن في اذنك من غير صلاة...

وعندما تموت.... يصلى عليك من غير آذان....

فكأن حياتك في الدنيا ليست سوى... الوقت الذي تمضيه بين الأذان والصلاة...

فلا تقضيه بما لاينفع

Mohammad Lahlouh

mohammadlahlouh.blogspot.com

Make money from your Website or Blog with BidVertiser

#12

موضوع حلو جدا وشيق..........................

الله يبارك فيك م. بهاء

My_Sign.jpg
#13

شِكرا استاذ ابراهيم ;)

زلمتي :D

#14

ماشاء الله عليك اخي m_lahlouh علي البرنامج الرائع انا قمت بتجريبه وهو فعلا رائع جدا

Khaled_Tiger

النجاح الوحيد في الحياة هو أن تستطيع أن تحيا حياتك بالطريقة التي تريدها

يخاطبني السفيه بكل قبح *** فأكره أن أكون له مجيبا

يزيد سفاهة فأزيد حلمــا *** كعود زاده الإحراق طيبا

إذا نطق السفيه فلا تجبه *** فخير من إجابته السكوت

فإن كلَمته فرَجت عنــــه *** وإن خليته كمداً يـمـــوت

#15

شكرا اخي هذا كله بفضل جهودكم في هذا المنتدى الرائع

عندما تولد يا ابن آدم يؤذن في اذنك من غير صلاة...

وعندما تموت.... يصلى عليك من غير آذان....

فكأن حياتك في الدنيا ليست سوى... الوقت الذي تمضيه بين الأذان والصلاة...

فلا تقضيه بما لاينفع

Mohammad Lahlouh

mohammadlahlouh.blogspot.com

Make money from your Website or Blog with BidVertiser

#16

عمل جميل

لكنه لا يعمل مع العربي

زد اول بكسل في الثلاث قيم بمقدا واحد لكل لون حتي لا يظهر اختلاف في الزاوية

#17

سلام عليكم

أنا عملت الموضوع ده و أنا فى الصف الثالث فى المعهد و كان بالـVB6 و كان برنامج كبير

أسمه "Graphics maker and image stuff" :D ربنا يسهل و الاقى الكود و أحطه :D أصل ده بقال

البرنامج فيه أكثر من 60 Effect للصور ربنا يسهل و أحطه و يارب يعجبكم :D

على فكرة لو بصيت على النسق Bitmap سوف تلاحظ وجود Resrved Byte ده ممكن تستغله و هيشتغل معاك كويس جدا

كمان ممكن تطبق الموضوع ده على الـWAV و ده بيكون أحسن بكتير

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#18

موضوع جيد جدا

#19
m_lahlouh كتب:
السلام عليكم

هذا العنوان الجديد:

http://lahlouh.8m.com/Files/StegoSmart.part1.rar

http://lahlouh.8m.com/Files/StegoSmart.part2.rar

أو

http://m.lahlouh.googlepages.com/StegoSmart.rar

طبعا تحتاج لـ .NET FrameWork

عندما تولد يا ابن آدم يؤذن في اذنك من غير صلاة...

وعندما تموت.... يصلى عليك من غير آذان....

فكأن حياتك في الدنيا ليست سوى... الوقت الذي تمضيه بين الأذان والصلاة...

فلا تقضيه بما لاينفع

Mohammad Lahlouh

mohammadlahlouh.blogspot.com

Make money from your Website or Blog with BidVertiser

#20

السلام عليكم ورحمة الله وبركاتهانا عندي مشروع steganographyوالصراحة استفدت من الكودانا لقيت كود تاني يستخدم bmp file header لتخزين الرسالة المراد اخفائهاوحاولت اضيف على الكود كلمة مرور يعني اذا عملت اخفاء لنص في داخل صورة تعمله حماية بكلمة مرور بحيث انهما احد يفتح الرسالة الا اللي عنده كلمة المرور عشان تكون الرسالة سريةوللاسف مانجحت الفكرةوبعدين لقيت الكود هذا وفرحت واخذته وحاولت ابدأ فيه وبدأت لكن مافيه كلمة مروردمجت الكود اللي من اول عندي مع الكود اللي انت برمجتهبحيث انه الرسالة تتخزن في بكسلات الصورةوكلمة المرور تتخزن في ال file headerلكن واجهتني مشكلة انه الكودين يحتاجوا انهم يفتحوا الصورةوطبعا مش ممكن انه الصورة تنفتح مرتين ويطلع خطأ اثناء التشغيل انه الصورة مستخدمة ولايمكن فتحهافكرت اني اخلي الرسالة تتخزن وتتحفظ الصورة وبعدين في نفس الكود (بدون تدخل المستخدم وبدون اي حاجه تظهر على الفورما ) تنفتح الصورة اللي تم تخزينها حالياويشتغل عليها كود الfile headerويخزن الباسوورد وتنحفظ الصورة من جديد بنفس الاسم فوق الصورة الاخيرة اللي حفظها المستخدم لكن حتى الان لم اجد كود يفتح اخر صورة تم حفظهاايش رايكممكن تساعدني في محاولتي او تقولي طريقتي ممكنه اولاوياليت اذا عندك فكرة تانية في اضافة باسوورد ترسلها

تم تعديل هذه المشاركة بواسطة Ben_Laiid في 25 أكتوبر 2007 في 20:38

#21

السلام

اختي مبرمجة مبتدئه اعتذر اني لم استطع تغهم رسالتك جيدا، ربما لانني مشغول قليلا.

ولكن ان شاء الله اعدي كتابتها بتمهل وان شاء الله كل الامور محلوله.

عندما تولد يا ابن آدم يؤذن في اذنك من غير صلاة...

وعندما تموت.... يصلى عليك من غير آذان....

فكأن حياتك في الدنيا ليست سوى... الوقت الذي تمضيه بين الأذان والصلاة...

فلا تقضيه بما لاينفع

Mohammad Lahlouh

mohammadlahlouh.blogspot.com

Make money from your Website or Blog with BidVertiser

#22

السلام عليكم ورحمة الله وبركاته

اشكرك على اهتمامك

انا عندي مشروع steganographyوالصراحة استفدت من الكود

لكن الكود بدون كلمة مرور

وانا ابغى اعمل security

على الرسالة المخفية

بحيث اني لما ارسل الصورة الى شخص اخر لابد ان يكتب كلمة المرور علشان يشوف الرسالة المخفية في الصورة

وانا كان عندي كود لقيته في النت يستخدم bmp file header لتخزين الرسالة المراد اخفائها

لكنه بدون حماية بكلمة مرور

حاولت اني احط الكودين مع بعض

واخلي الرسالة تختفي في البكسلات

واحط كلمة المرور في الfile header

لكن للاسف لم تنجح الفكرة

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

#23

السلام عليكم

انا حاولت وسويت هذه الطريقة بس مايعمل decrypt :angry:

ممكن تشوفها وتقولي ايش الغلط

length = (int)b.GetPixel(0, 0).R;
					length_password = (int)b.GetPixel(0, 1).R;

					dMyStringBytes = new byte[length];
					dMyPasswordBytes=new byte[length_password];


					// start decrypting
					int i, j,x,y;
					for (i = 0; i < b.Width; i++)
					{
						for (j = 0; j < b.Height; j++)
						{
							x=i;
							y=j;
							if ((i == 0 && j == 0)||(i == 0 && j == 1))
							{
								j++;
							}
							if (eIndex < length)
							{
								if (eIndex == length_password)
								{
									dMyPasswordBytes=dMyStringBytes;
									dMyStringBytes = new byte[length];

								}
								Color c = b.GetPixel(i, j);
								Decrypt©;
							}
							if (dIndex == length)
							{
								i = b.Width;
								j = b.Height;
							}
						}
					}
#24

ياجماعة أحد يساعدني بليييييييييييييييييييييييييييييييز

#25

السلام عليكم

أختي الفاضلة جربي تعديل جزء ال Encrypt بالكيفية التالية

String Password = "mypasswordblabla";
  //get the plain text

 eMyStringBytes = Encoding.ASCII.GetBytes(Password + this.richTextBox1.Text);
 length = (int)eMyStringBytes.Length;

تعديل جزء ال Decrypt بالكيفية التالية

 //show the plain text
				 string Password = "mypasswordblabla";
				 string InsertedTextPlusPassword = Encoding.ASCII.GetString(dMyStringBytes);
				 if (InsertedTextPlusPassword.StartsWith(Password))
				 {richTextBox1.Text = Encoding.ASCII.GetString(dMyStringBytes);}
				 else {MessageBox.Show("Wrong password");}

هذا الموضوع مغلق.

مواضيع مشابهة