
jdvrif — Updated!
أداة إخفاء البيانات في صور JPG
jdvrif
jdvrif هي أداة سطر أوامر سريعة وسهلة الاستخدام لإخفاء البيانات (Steganography) واستخراج أي نوع ملف عبر صورة JPG.
تتوفر أيضًا نسخة ويب، يمكنك استخدامها فورًا كبديل مناسب لتنزيل وتجميع الكود المصدري لسطر الأوامر. يقتصر رفع الملفات عبر الويب على 20 ميجابايت.
يتوفر إصدار تجريبي بلغة Rust باسم jdvrif-rs لمن يهتمون بتلك اللغة.

صورة تجريبية: "مكان للإخفاء" / رقم التعريف الشخصي: 2190398302048725932
على عكس طريقة إخفاء البيانات LSB الشائعة التي تخفي البيانات داخل وحدات البكسل في صورة الغلاف، فإن jdvrif يخفي البيانات في الغالب داخل مقاطع التطبيقات لصورة JPG (ICC، EXIF، XMP، إلخ).
الاستثناء من ذلك هو وضع الإخفاء لمنصة Reddit (الخيار -r)، حيث نستخدم طريقة إخفاء البيانات QIM (تعديل مؤشر التكميم في نطاق DCT لـ JPEG)، لأن هذه هي طريقة التخزين الوحيدة التي تعمل حاليًا مع Reddit.
يمكنك إخفاء أي نوع ملف يصل حجمه إلى 2 جيجابايت في وضع الإخفاء الافتراضي، على الرغم من أن أوضاع الإخفاء للمنصات الأخرى والمواقع المتوافقة (المذكورة أدناه) لها حدود حجم أصغر بكثير ومتطلبات أخرى.
لزيادة سعة التخزين وتحسين الأمان، يتم ضغط ملف البيانات المضمّن باستخدام libdeflate/zlib — ما لم يكن بالفعل نوع ملف مضغوط يزيد حجمه عن 10 ميجابايت — ويتم تشفيره باستخدام XChaCha20-Poly1305 عبر مكتبة التشفير libsodium.
يستمد jdvrif جزئيًا من التقنية المنفذة بواسطة باحث الأمن David Buchanan.
التجميع والاستخدام (لينكس)
$ sudo apt update
$ sudo apt install g++ cmake ninja-build util-linux libsodium-dev libturbojpeg0-dev zlib1g-dev libdeflate-dev
$ chmod +x compile_jdvrif.sh
$ ./compile_jdvrif.sh
$ sudo cp jdvrif /usr/bin
$ jdvrif
Usage: jdvrif conceal [-b] <cover_image> <secret_file>
jdvrif recover <cover_image>
jdvrif --info
$ jdvrif conceal your_cover_image.jpg your_secret_file.doc
Platform compatibility for output image:-
✓ X-Twitter
✓ Tumblr
✓ Mastodon
✓ Pixelfed
✓ PostImage
✓ ImgBB
✓ ImgPile
✓ Flickr
Saved "file-embedded" JPG image: jrif_4e87c566c.jpg (143029 bytes).
Recovery PIN: [***2166776980318349924***]
Important: Keep your PIN safe, so that you can extract the hidden file.
Complete!
$ jdvrif recover jrif_4e87c566c.jpg
PIN: *******************
Extracted hidden file: your_secret_file.doc (6165 bytes).
Complete! Please check your file.
المنصات المتوافقة
******************
ملاحظة: يحفظ Bluesky الآن الصور بتنسيق WEBP افتراضيًا.
لحفظ صورة بتنسيق JPG، بحيث يمكنك استخراج البيانات المخفية باستخدام jdvrif.
أولاً، انقر على الصورة في المنشور لفتحها، ثم انقر بزر الماوس الأيمن على الصورة. من القائمة، اختر فتح الصورة في علامة تبويب جديدة.
حدد علامة التبويب الجديدة وفي شريط العناوين، انتقل إلى نهاية العنوان وأضف @jpg ثم اضغط Enter.
انقر بزر الماوس الأيمن على الصورة ومن القائمة اختر حفظ الصورة...
يجب الآن تنزيل صورتك بتنسيق JPG، والتي ستعمل الآن مع jdvrif.
إذا كنت تريد أداة لإخفاء البيانات باستخدام صور WEBP لنشرها على Bluesky، يمكنك استخدام أداة إخفاء البيانات WEBP الخاصة بي لسطر الأوامر wbpdv
******************
*يُقاس حد حجم النشر بالحجم المجمع لـ صورة الغلاف + ملف البيانات المضغوط:
● Flickr (200 ميجابايت)، ImgPile (100 ميجابايت)، ImgBB (32 ميجابايت)،
● PostImage (32 ميجابايت)، Pixelfed (15 ميجابايت).
*يُقاس حد الحجم فقط بحجم ملف البيانات المضغوط:
● Mastodon (~6 ميجابايت)، Tumblr (~64 كيلوبايت)، X-Twitter (~10 كيلوبايت).
على سبيل المثال، مع Mastodon، إذا كانت صورة الغلاف لديك 1 ميجابايت، فلا يزال بإمكانك تضمين ملف بيانات يصل إلى حد الحجم ~6 ميجابايت.
**أخرى: منصة Bluesky لديها حدود حجم منفصلة لـ صورة الغلاف و ملف البيانات المخفي المضغوط:
● Bluesky (الخيار -b). الحد الأقصى لحجم صورة الغلاف (2,000,000 بايت / ~1.9 ميجابايت). الحد الأقصى لحجم ملف البيانات المخفي المضغوط (الحمولة) (~171 كيلوبايت).
يجب ألا يتجاوز حجم صورة الغلاف النهائية المضمّنة (صورة الغلاف + الملف المخفي) 2,000,000 بايت (~1.9 ميجابايت). البرنامج النصي "create_bsky_post.py" مطلوب لنشر الصور على Bluesky. مزيد من المعلومات حول هذا البرنامج النصي في أسفل الصفحة.
● Reddit (الخيار -r). بينما تمتلك منصة Reddit حدًا أقصى لرفع الصور يبلغ 20 ميجابايت، فإن سعة تخزين البيانات لصورة الغلاف أصغر بكثير وتعتمد على أبعاد الصورة.
على سبيل المثال، يمكن لصورة غلاف بأبعاد 1024x1024 تخزين ~6 كيلوبايت فقط من البيانات، ويمكن لصورة بأبعاد 4096x4096 تخزين ~109 كيلوبايت، ويمكن لصورة بأبعاد قصوى 6324×6324 تخزين ~254 كيلوبايت.
بالنسبة لمنصات مثل X-Twitter وReddit وTumblr، التي لديها حدود حجم بيانات صغيرة، قد ترغب في التركيز على البيانات التي تنضغط جيدًا، مثل الملفات النصية، إلخ.
https://github.com/user-attachments/assets/c8c38e6d-ea23-4d67-98d9-cebdcd82b449
https://github.com/user-attachments/assets/88aaa5f7-3272-4d0c-aa59-1a5bfe2f08dc
وسائط mode في jdvrif:
conceal - يضغط ويشفر ويضمّن ملف بياناتك السري داخل صورة غلاف JPG.
recover - يفك تشفير ويفك ضغط ويستخرج ملف البيانات المخفي من صورة غلاف JPG.
خيارات platform لوضع conceal في jdvrif:
"-r" لإنشاء صور JPG "مضمّن بها ملف" متوافقة للنشر على منصة Reddit، يجب استخدام الخيار -r مع وضع conceal.
$ jdvrif conceal -r my_image.jpg hidden.doc
هذه الصور متوافقة فقط للنشر على Reddit. سيتم إزالة ملف البيانات المضمّن إذا تم نشره على منصة مختلفة.
عند حفظ/تنزيل صورة من Reddit، تأكد من النقر على الصورة داخل المنشور لتوسيعها بالكامل قبل الحفظ.
https://github.com/user-attachments/assets/9f1b4607-e7f1-4c5f-8929-b42c1a85bb88
"-b" لإنشاء صور JPG "مضمّن بها ملف" متوافقة للنشر على منصة Bluesky، يجب استخدام الخيار -b مع وضع conceal.
$ jdvrif conceal -b my_image.jpg hidden.doc
هذه الصور متوافقة فقط للنشر على Bluesky. سيتم إزالة ملف البيانات المضمّن إذا تم نشره على منصة مختلفة.
يُطلب منك أيضًا استخدام البرنامج النصي بايثون create_bsky_post.py (الموجود في مجلد src/bsky بالمستودع) لنشر الصورة على Bluesky. لن يعمل إذا قمت بنشر الصور على Bluesky عبر موقع المتصفح أو تطبيق الجوال.
لاستخدام البرنامج النصي، ستحتاج إلى إنشاء كلمة مرور تطبيق من حساب Bluesky الخاص بك.
راجع البرنامج النصي create_bsky_post.py في مجلد src/bsky للحصول على بعض أمثلة الاستخدام الأساسية.
https://github.com/user-attachments/assets/b4c72ea7-40e3-49b0-89aa-ae2dd8ccccb9
البرامج والأصول من جهات خارجية
التطبيقات الأساسية
-
libsodium — التوليد العشوائي للتشفير، واشتقاق المفاتيح Argon2id وتدفقات XChaCha20-Poly1305 السرية. مرتبط ديناميكيًا كمكتبة نظام.
الترخيص: رخصة ISC
حقوق النشر (c) 2013–2026 Frank Denis.
-
libjpeg-turbo — معالجة JPEG والتحويل بدون فقدان البيانات. مرتبط ديناميكيًا كمكتبة نظام.
يعتمد هذا البرنامج جزئيًا على عمل مجموعة JPEG المستقلة.
التراخيص: رخصة مجموعة JPEG المستقلة، رخصة BSD المعدلة 3-شروط، ورخصة zlib.
حقوق النشر © 1991–2020 Thomas G. Lane و Guido Vollbeding.
حقوق النشر © 2009–2023 D. R. Commander. جميع الحقوق محفوظة.
حقوق النشر © 2015 Viktor Szathmáry. جميع الحقوق محفوظة.
-
zlib — ضغط وفك ضغط zlib بالتدفق. مرتبط ديناميكيًا كمكتبة نظام.
الترخيص: رخصة zlib
حقوق النشر (C) 1995–2026 Jean-loup Gailly و Mark Adler.
-
libdeflate — ضغط سريع بتنسيق zlib لكامل المخزن المؤقت. مرتبط ديناميكيًا كمكتبة نظام.
الترخيص: MIT
حقوق النشر 2016 Eric Biggers.
حقوق النشر 2024 Google LLC.
الكود والأصول المدمجة
-
base64simd — مُرمّز AVX2 Base64 مقتبس من تنفيذ Wojciech Muła المتجهي لـ Base64.
الترخيص: BSD 2-Clause
حقوق النشر (c) 2015–2018, Wojciech Muła. جميع الحقوق محفوظة.
-
ملفات ICC المضغوطة — ملف ICC مدمج متوافق مع Adobe.
الترخيص: CC0 1.0 Universal
مساعد نشر Bluesky الاختياري
-
Bryan Newbold / ATProto Hacker Cookbook — create_bsky_post.py — أساس المشتق لمساعد نشر Bluesky (src/bsky/bsky_post.py). للمرجع، راجع نسخة Cookbook
الترخيص: CC0 1.0 Universal.
-
Requests — طلبات HTTP وواجهة برمجة تطبيقات Bluesky.
الترخيص: Apache 2.0 / NOTICE
حقوق النشر 2019 Kenneth Reitz.
-
Beautiful Soup 4 — تحليل HTML وبيانات Open Graph الوصفية.
الترخيص: MIT
حقوق النشر (c) Leonard Richardson.
-
Pillow — التحقق من الصور والأبعاد ومعالجة نسبة العرض إلى الارتفاع.
الترخيص: MIT-CMU
حقوق نشر PIL © 1997–2011 Secret Labs AB و © 1995–2011 Fredrik Lundh والمساهمون.
حقوق نشر Pillow © 2010 Jeffrey "Alex" Clark والمساهمون.