
🔍 أداة Go لإخفاء البيانات باستخدام LSB steganography، قادرة على إخفاء أي ملف داخل صورة.
stegify هي أداة سطر أوامر بسيطة قادرة على إخفاء أي ملف بشكل شفاف تمامًا داخل صورة أو مجموعة من الصور. تُعرف هذه التقنية باسم LSB (البت الأقل أهمية) إخفاء المعلومات.
| الحامل | البيانات | النتيجة |
|---|---|---|
![]() | ![]() | ![]() |
يحتوي ملف النتيجة على ملف البيانات المخفي بداخله. وكما ترى، فهو شفاف تمامًا.
إذا تم توفير عدة ملفات حامل، سيتم تقسيم ملف البيانات إلى أجزاء، ويتم تشفير كل جزء في الحامل الخاص به.
| الحامل1 | الحامل2 | البيانات | النتيجة1 | النتيجة2 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
يحتوي ملف النتيجة1 على نصف ملف البيانات مخفيًا فيه، والنتيجة2 على النصف الآخر. وكالعادة، شفاف تمامًا.
go install github.com/DimitarPetrov/stegify@latest
brew tap DimitarPetrov/stegify
brew install stegify
أو يمكنك تنزيل ملف ثنائي مناسب لنظامك من هنا.
stegify encode --carrier <file-name> --data <file-name> --result <file-name>
stegify decode --carrier <file-name> --result <file-name>
عند التشفير، يتم إخفاء الملف الذي يحمل الاسم المُعطى للعلم --data داخل الملف الذي يحمل الاسم المُعطى للعلم
--carrier، ويُحفظ الملف الناتج في ملف جديد في دليل العمل الحالي تحت الاسم
المُعطى للعلم --result.
ملاحظة: لن يكون للملف الناتج أي امتداد، لذلك يجب تحديده صراحةً في العلم
--result.
عند فك التشفير، يتم استخراج البيانات من ملف حامل يحتوي على بيانات مشفرة مسبقًا باستخدام اسم الملف،
ويُحفظ في ملف جديد في دليل العمل الحالي تحت الاسم المُعطى للعلم --result.
ملاحظة: لن يكون للملف الناتج أي امتداد، لذلك يجب تحديده صراحةً في العلم
--result.
في كلتا الحالتين، يمكن حذف العلم --result وسيتم استخدام القيم الافتراضية.
stegify encode --carriers "<file-names...>" --data <file-name> --results "<file-names...>"
OR
stegify encode --carrier <file-name> --carrier <file-name> ... --data <file-name> --result <file-name> --result <file-name> ...
stegify decode --carriers "<file-names...>" --result <file-name>
OR
stegify decode --carrier <file-name> --carrier <file-name> ... --result <file-name>
عند تشفير ملف بيانات في أكثر من حامل واحد، يتم تقسيم ملف البيانات إلى عدد N من الأجزاء، حيث N هو عدد الحوامل المُقدمة. يتم بعد ذلك تشفير كل جزء في الحامل الخاص به.
ملاحظة: عند فك التشفير، يجب تقديم الحوامل بنفس الترتيب تمامًا لاستخراج النتيجة بشكل صحيح.
يوفر هذا النوع من التشفير طبقة إضافية من الأمان ومرونة أكبر فيما يتعلق بقيود الحجم.
في كلتا الحالتين، يمكن حذف العلم --result/--results وسيتم استخدام القيم الافتراضية.
ملاحظة: عند التشفير، يجب أن يكون عدد ملفات النتائج (إذا تم تقديمها) مساويًا لعدد ملفات الحامل. عند فك التشفير، يُتوقع نتيجة واحدة بالضبط.
عند تقديم عدة حوامل بأنواع مختلطة من الأعلام، يتم أخذ الأسماء المُقدمة عبر علم carrier أولاً، ثم عبر علم carriers/c ثانيًا. وينطبق الشيء نفسه على علم result/results.
يمكن استخدام stegify برمجيًا أيضًا، فهو يوفر دوال سهلة الاستخدام تعمل مع أسماء الملفات أو القارئات والكتّاب الأوليين. يمكنك زيارة godoc تحت حزمة steg للحصول على التفاصيل.
إذا كان ملف الحامل بتنسيق jpeg أو jpg، فبعد التشفير ستكون صورة الملف الناتج بتنسيق png (لذلك قد يكون حجمها أكبر) بغض النظر عن امتداد الملف المحدد في علم النتيجة.
تم استخدام stegify في أحد تحديات Capture The Flag في Codefest’19.
حصل المشاركون على صورة لمجموعة من القطط "البريئة". لا شيء مريب أليس كذلك؟ فكروا مجددًا!