فائلوں کے ذریعے سٹیگنوگرافی: ڈیٹا کو براہ راست سیکٹرز میں چھپانا

ایک مختصر دیباچہ

سٹیگنوگرافی، اگر کسی کو یاد نہیں ہے، کچھ کنٹینرز میں معلومات چھپا رہی ہے۔ مثال کے طور پر، تصویروں میں ( زیر بحث یہاں и یہاں)۔ آپ فائل سسٹم کے سروس ٹیبلز میں بھی ڈیٹا چھپا سکتے ہیں (اس کے بارے میں لکھا گیا تھا۔ یہاں)، اور یہاں تک کہ TCP پروٹوکول سروس پیکٹ میں. بدقسمتی سے، ان تمام طریقوں میں ایک خرابی ہے: کسی کنٹینر میں معلومات کو غیر محسوس طریقے سے "داخل" کرنے کے لیے، آپ کو ہوشیار الگورتھم کی ضرورت ہے جو کنٹینر کی اندرونی ساخت کی خصوصیات کو مدنظر رکھتے ہیں۔ اور کنٹینر کی ہیرا پھیری کے خلاف مزاحمت کے ساتھ مسائل پیدا ہوتے ہیں: مثال کے طور پر، اگر آپ تصویر میں قدرے ترمیم کرتے ہیں، تو پوشیدہ معلومات ضائع ہو جاتی ہیں۔

کیا یہ ممکن ہے کہ ہوشیار الگورتھم اور ڈیٹا کے ساتھ ٹھیک ٹھیک ہیرا پھیری کے بغیر، اور پھر بھی کنٹینر کی فعالیت اور پوشیدہ ڈیٹا کی قابل قبول سطح کو یقینی بنائے؟ آگے دیکھتے ہوئے، میں کہوں گا - ہاں، آپ کر سکتے ہیں! میں آپ کو ایک افادیت بھی پیش کروں گا۔

طریقہ کار کی خونی تفصیلات

بنیادی خیال پیشانی پر دھچکا جتنا آسان ہے: ڈسک پر ایسے حصے ہیں جن پر آپریٹنگ سسٹم کبھی نہیں لکھتا (یا غیر معمولی معاملات میں لکھتا ہے)۔ ہوشیار الگورتھم کا استعمال کرتے ہوئے ان علاقوں کو تلاش کرنے کی ضرورت سے بچنے کے لیے، ہم فالتو پن کا استعمال کریں گے - یعنی ہم اپنی چھپی ہوئی معلومات کو ڈسک کے تمام شعبوں میں کئی بار نقل کریں گے۔ اس کے بعد، اس تمام شان کے اوپر، آپ ضروری پارٹیشنز بنا سکتے ہیں، فائل سسٹم کو فارمیٹ کر سکتے ہیں، فائلیں لکھ سکتے ہیں اور OS انسٹال کر سکتے ہیں - اسی طرح، خفیہ ڈیٹا کا کچھ حصہ محفوظ ہو جائے گا اور اسے بازیافت کیا جا سکے گا، اور بار بار ڈپلیکیشن ہماری مدد کرے گی۔ ٹکڑوں سے اصل مکمل ڈالیں.

اس طریقہ کار کا فائدہ واضح ہے: ہم فائل کی شکل پر انحصار نہیں کرتے، یا یہاں تک کہ استعمال شدہ فائل سسٹم کی قسم پر بھی۔

میرے خیال میں، نقصانات بھی واضح ہیں:

  • خفیہ ڈیٹا کو صرف پوری ڈسک کو مکمل طور پر دوبارہ لکھ کر تبدیل کیا جا سکتا ہے، اس کے بعد صارف کو نظر آنے والے مواد کو دوبارہ بنا کر۔ تاہم، آپ ایسا سافٹ ویئر استعمال نہیں کر سکتے جو تصویر سے ڈسک کو دوبارہ بناتا ہے: یہ پچھلے خفیہ ڈیٹا کو بھی دوبارہ بنا دے گا۔
  • خفیہ ڈیٹا کا حجم جتنا بڑا ہوگا، کچھ معلومات کے ضائع ہونے کا امکان اتنا ہی زیادہ ہوگا۔
  • ڈسک سے ڈیٹا کی بازیافت میں کافی وقت لگ سکتا ہے۔ کئی منٹ سے کئی دنوں تک (جدید ڈسکیں بڑی ہیں)۔

اب آئیے تفصیلات کی طرف۔

یہ واضح ہے کہ اگر آپ صرف خفیہ ڈیٹا کو پوری ڈسک میں سمیر کرتے ہیں، تو یہ صرف ننگی آنکھ سے پوشیدہ رہے گا۔ اگر آپ اپنی نگاہوں کو ایک ڈسک ایڈیٹر سے لیس کرتے ہیں تو ڈیٹا اپنی پوری شان کے ساتھ ظاہر ہوگا۔ لہذا، ڈیٹا کو خفیہ کرنا ایک اچھا خیال ہوگا تاکہ یہ ظاہر نہ ہو۔ ہم آسانی سے، لیکن ذائقہ کے ساتھ خفیہ کاری کریں گے: aes256-cbc الگورتھم کا استعمال کرتے ہوئے۔ ہم صارف سے انکرپشن کلید طلب کریں گے اور اسے ایک اچھا پاس ورڈ لے کر آنے دیں گے۔

اگلا سوال یہ ہے کہ ہم "اچھے" ڈیٹا کو خراب ڈیٹا سے کیسے الگ کر سکتے ہیں۔ یہاں ایک چیکسم ہماری مدد کرے گا، لیکن سادہ نہیں، بلکہ SHA1۔ اور کیا؟ یہ گٹ کے لیے کافی اچھا ہے، تو یہ ہمارے لیے بھی مناسب ہوگا۔ فیصلہ کیا گیا: ہم معلومات کے ہر ذخیرہ شدہ ٹکڑے کو چیکسم کے ساتھ فراہم کرتے ہیں، اور اگر ڈکرپشن کے بعد یہ میل کھاتا ہے، تو اس کا مطلب ہے کہ ڈکرپشن کامیاب رہی۔

آپ کو ٹکڑا نمبر اور خفیہ ڈیٹا کی کل لمبائی کی بھی ضرورت ہوگی۔ ٹکڑا نمبر - اس بات پر نظر رکھنے کے لیے کہ ہم نے کون سے ٹکڑوں کو پہلے ہی ڈکرپٹ کیا ہے اور کون سے باقی ہیں۔ آخری ٹکڑے پر کارروائی کرتے وقت کل لمبائی ہمارے لیے کارآمد ہوگی، تاکہ غیر ضروری ڈیٹا (یعنی پیڈنگ) کو نہ لکھا جائے۔ ٹھیک ہے، چونکہ ہمارے پاس اب بھی ایک ہیڈر ہے، ہم وہاں خفیہ فائل کا نام شامل کریں گے۔ یہ ڈکرپشن کے بعد کارآمد ہوگا، تاکہ اندازہ نہ لگا سکے کہ اسے کیسے کھولنا ہے۔

عملی طور پر طریقہ کی جانچ کرنا

چیک کرنے کے لیے، آئیے سب سے عام میڈیم لیں - ایک فلیش ڈرائیو۔ مجھے 1 جی بی کی گنجائش والا ایک پرانا ملا، جو تجربات کے لیے کافی موزوں ہے۔ اگر آپ، میری طرح، فزیکل میڈیا سے پریشان نہ ہونے کا خیال لے کر آئے ہیں، لیکن اسے فائل پر آزما رہے ہیں - ایک ڈسک امیج، تو میں فوراً کہوں گا: یہ کام نہیں کرے گا۔ اس طرح کی "ڈسک" کو فارمیٹ کرتے وقت، لینکس فائل کو دوبارہ بناتا ہے، اور تمام غیر استعمال شدہ شعبے زیرو سے بھر جائیں گے۔

لینکس کے ساتھ ایک مشین کے طور پر، بدقسمتی سے، مجھے بالکونی میں پڑے Raspberry Pi 3 پر ایک ویدر اسٹیشن استعمال کرنا پڑا۔ وہاں زیادہ میموری نہیں ہے، اس لیے ہم بڑی فائلوں کو نہیں چھپائیں گے۔ ہم خود کو 10 میگا بائٹس کے زیادہ سے زیادہ سائز تک محدود رکھتے ہیں۔ بہت چھوٹی فائلوں کو چھپانے کا بھی کوئی فائدہ نہیں ہے: یوٹیلیٹی 4 KB کلسٹرز میں ڈسک پر ڈیٹا لکھتی ہے۔ لہذا، ذیل میں ہم خود کو 3 kb فائل تک محدود رکھیں گے - یہ ایسے ہی ایک کلسٹر میں فٹ بیٹھتا ہے۔

ہم مراحل میں فلیش ڈرائیو کا مذاق اڑائیں گے، ہر مرحلے کے بعد یہ چیک کریں گے کہ آیا پوشیدہ معلومات پڑھنے کے قابل ہے:

  1. 16 KB کے کلسٹر سائز کے ساتھ FAT16 فارمیٹ میں تیز فارمیٹنگ۔ یہ وہی ہے جو ونڈوز 7 ایک فلیش ڈرائیو کے ساتھ کرنے کی پیش کش کرتا ہے جس میں فائل سسٹم نہیں ہے۔
  2. فلیش ڈرائیو کو ہر قسم کے کچرے سے 50% بھرنا۔
  3. فلیش ڈرائیو کو ہر قسم کے کچرے سے 100% بھرنا۔
  4. FAT16 فارمیٹ میں "لمبی" فارمیٹنگ (ہر چیز کو اوور رائٹ کرنا)۔

پہلے دو ٹیسٹ، جیسا کہ توقع کی گئی تھی، مکمل فتح کے ساتھ ختم ہوئے: یوٹیلیٹی فلیش ڈرائیو سے 10 میگا بائٹس کا خفیہ ڈیٹا کامیابی سے نکالنے میں کامیاب رہی۔ لیکن فلیش ڈرائیو کو فائلوں سے بھرنے کے بعد، ایک ناکامی واقع ہوئی:

Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile

جیسا کہ آپ دیکھ سکتے ہیں، صرف 158 کلسٹرز کو کامیابی کے ساتھ ڈکرپٹ کیا گیا تھا (632 کلو بائٹ خام ڈیٹا، جو 636424 بائٹس پے لوڈ دیتا ہے)۔ یہ واضح ہے کہ یہاں 10 میگا بائٹس حاصل کرنے کا کوئی طریقہ نہیں ہے، اور پھر بھی ان کلسٹرز میں واضح طور پر ڈپلیکیٹس موجود ہیں۔ آپ اس طرح 1 میگا بائٹ بھی بازیافت نہیں کر سکتے۔ لیکن ہم اس بات کی ضمانت دے سکتے ہیں کہ ہم ایک فلیش ڈرائیو سے 3 کلو بائٹ خفیہ ڈیٹا کو فارمیٹ کرنے اور صلاحیت کے مطابق لکھنے کے بعد بھی بازیافت کریں گے۔ تاہم تجربات سے پتہ چلتا ہے کہ اس طرح کی فلیش ڈرائیو سے 120 کلو بائٹ لمبی فائل نکالنا کافی ممکن ہے۔

آخری ٹیسٹ، بدقسمتی سے، ظاہر ہوا کہ پوری فلیش ڈرائیو کو اوور رائٹ کر دیا گیا تھا:

$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile

ایک بھی جھرمٹ نہیں بچا ہے... افسوسناک، لیکن افسوسناک نہیں! فارمیٹنگ سے پہلے، آئیے فلیش ڈرائیو پر ایک پارٹیشن بنانے کی کوشش کریں، اور اس میں پہلے سے ہی ایک فائل سسٹم موجود ہے۔ ویسے، یہ بالکل اسی فارمیٹنگ کے ساتھ فیکٹری سے آیا ہے، اس لیے ہم کوئی مشتبہ کام نہیں کر رہے۔
کافی توقع کی جاتی ہے کہ فلیش ڈرائیو پر دستیاب جگہ تھوڑی کم ہو گئی ہے۔

یہ بھی کافی توقع ہے کہ مکمل طور پر مکمل ڈسک پر 10 میگا بائٹس کو چھپایا نہیں جا سکتا۔ لیکن اب کامیابی سے ڈکرپٹ شدہ کلسٹرز کی تعداد دگنی سے بھی زیادہ ہو گئی ہے!

Total clusters read: 250752, decrypted: 405

بدقسمتی سے، ٹکڑوں سے ایک میگا بائٹ کو جمع کرنا ناممکن ہے، لیکن دو سو کلو بائٹ آسان ہیں۔

ٹھیک ہے، آخری، 4 ویں چیک کے بارے میں خبر، اس وقت خوشگوار ہے: اس طرح کی فلیش ڈرائیو کو مکمل طور پر فارمیٹ کرنے سے تمام معلومات کی تباہی نہیں ہوئی! 120 کلو بائٹ خفیہ ڈیٹا غیر استعمال شدہ جگہ میں بالکل فٹ بیٹھتا ہے۔

ٹیسٹ کا خلاصہ ٹیبل:

فائلوں کے ذریعے سٹیگنوگرافی: ڈیٹا کو براہ راست سیکٹرز میں چھپانا

تھوڑا سا نظریہ: خالی جگہ اور غیر استعمال شدہ شعبوں کے بارے میں

اگر آپ نے کبھی اپنی ہارڈ ڈرائیو کو پارٹیشنز میں تقسیم کیا ہے، تو آپ نے محسوس کیا ہوگا کہ ڈسک پر تمام خالی جگہ مختص کرنا ہمیشہ ممکن نہیں ہوتا ہے۔ پہلا سیکشن ہمیشہ کچھ انڈینٹیشن کے ساتھ شروع ہوتا ہے (عام طور پر 1 میگا بائٹ، یا 2048 سیکٹرز)۔ آخری حصے کے پیچھے، یہ بھی ہوتا ہے کہ غیر استعمال شدہ شعبوں کی ایک چھوٹی "دم" رہ جاتی ہے۔ اور بعض اوقات حصوں کے درمیان فرق ہوتا ہے، اگرچہ شاذ و نادر ہی ہوتا ہے۔

دوسرے لفظوں میں، ڈسک پر ایسے شعبے ہیں جن تک ڈسک کے ساتھ عام کام کے دوران رسائی حاصل نہیں کی جا سکتی، لیکن ان سیکٹرز پر ڈیٹا لکھا جا سکتا ہے! اور اس کا مطلب ہے کہ اسے بھی پڑھنا۔ اس حقیقت کے لئے ایڈجسٹ کیا گیا ہے کہ ایک پارٹیشن ٹیبل اور بوٹ لوڈر کوڈ بھی ہے، جو ڈسک کے شروع میں خالی جگہ پر واقع ہے۔

آئیے کچھ دیر کے لیے حصوں سے وقفہ لیں اور ڈسک کو برڈز آئی ویو سے دیکھیں، تو بات کریں۔ یہاں ہمارے پاس ڈسک پر ایک خالی پارٹیشن ہے۔ آئیے اس میں ایک فائل سسٹم بنائیں۔ کیا ہم کہہ سکتے ہیں کہ ڈسک پر کچھ سیکٹرز کو صاف نہیں کیا گیا؟

ای-ای-ڈرم رول! جواب تقریباً ہمیشہ ہاں میں ہوگا! درحقیقت، زیادہ تر صورتوں میں، فائل سسٹم بنانا ڈسک پر سروس کی معلومات کے صرف چند بلاکس لکھنے پر آتا ہے، اور بصورت دیگر پارٹیشن کا مواد تبدیل نہیں ہوتا ہے۔

اور یہ بھی - خالصتاً تجرباتی طور پر - ہم یہ فرض کر سکتے ہیں کہ فائل سسٹم ہمیشہ آخری سیکٹر تک اس کے لیے مختص تمام جگہ پر قبضہ نہیں کر سکتا۔ مثال کے طور پر، 16 کلو بائٹس کے کلسٹر سائز کے ساتھ FAT64 فائل سسٹم ظاہر ہے کہ 64 کلو بائٹس کے ایک سے زیادہ سائز کے ساتھ پارٹیشن پر مکمل طور پر قبضہ نہیں کر سکتا۔ اس طرح کے ایک حصے کے اختتام پر کئی شعبوں کی ایک "دم" ہونی چاہیے، جو صارف کے ڈیٹا کو ذخیرہ کرنے کے لیے ناقابل رسائی ہے۔ تاہم تجرباتی طور پر اس مفروضے کی تصدیق نہیں ہو سکی۔

لہذا، سٹیگنوگرام کے لیے دستیاب جگہ کو زیادہ سے زیادہ کرنے کے لیے، آپ کو ایک بڑے کلسٹر سائز کے ساتھ فائل سسٹم استعمال کرنے کی ضرورت ہے۔ آپ پارٹیشن بھی بنا سکتے ہیں، چاہے یہ ضروری نہ ہو (مثال کے طور پر فلیش ڈرائیو پر)۔ خالی حصے بنانے یا غیر مختص شدہ علاقوں کو چھوڑنے کی ضرورت نہیں ہے - یہ دلچسپی رکھنے والے شہریوں کی توجہ مبذول کرے گا۔

تجربات کے لیے افادیت

آپ یوٹیلیٹی کے سورس کوڈ کو چھو سکتے ہیں۔ یہاں

بنانے کے لیے، آپ کو Qt ورژن 5.0 یا اس سے زیادہ اور OpenSSL کی ضرورت ہوگی۔ اگر کچھ کام نہیں کرتا ہے، تو آپ کو steganodisk.pro فائل میں ترمیم کرنا پڑ سکتی ہے۔

آپ کلسٹر کا سائز 4 KB سے تبدیل کر سکتے ہیں، کہہ لیں، 512 بائٹس (secretfile.h میں)۔ اسی وقت، سروس کی معلومات کی قیمت بڑھ جائے گی: ہیڈر اور چیکسم ایک مقررہ 68 بائٹس پر قبضہ کرتے ہیں۔

آپ کو یوٹیلیٹی چلانے کی ضرورت ہے، یقیناً، روٹ یوزر کے حقوق کے ساتھ، اور احتیاط کے ساتھ۔ مخصوص فائل یا ڈیوائس کو اوور رائٹ کرنے سے پہلے کوئی سوال نہیں پوچھا جائے گا!

لطف اٹھائیں

ماخذ: www.habr.com

نیا تبصرہ شامل کریں