Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
jdvrif — أداة إخفاء البيانات في صور JPG | Kitploit
أدوات/GitHubGitHub/cleasbycode/jdvrif
أدوات التشفير/فك التشفيرتسريب البياناتالتحقيق الجنائي الرقميإخفاء المعلوماتالتشفيرالخصوصية
GitHubcleasbycode/jdvrif

jdvrif

أداة إخفاء البيانات في صور JPG

عرض المستودع
69136منذ 6 أيامتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
# jdvrif

***jdvrif*** (*JPG Data Vehicle*) هي أداة سطر أوامر سريعة وسهلة الاستخدام لإخفاء البيانات (steganography) تُستخدم لإخفاء واستخراج أي نوع من الملفات عبر صورة **JPG**. ***لينكس فقط***.

يتم ضغط ملف بياناتك باستخدام ***libdeflate/zlib***، ثم تشفيره باستخدام ***XChaCha20-Poly1305*** (***libsodium*** secretstream) بمفتاح مشتق بواسطة ***Argon2id*** من ***رمز استرداد PIN*** مُولَّد عشوائيًا، ثم يُضمَّن أخيرًا في صورة الغلاف. يُعرض رمز PIN مرة واحدة فقط، في نهاية عملية ***conceal***، ولا يُخزَّن في أي مكان على الإطلاق: فبدونه لا يمكن استرداد الملف المخفي.

باستخدام ***وضع الإخفاء الافتراضي***، يمكنك إخفاء أي نوع من الملفات، مع تحديد حجم الصورة النهائية بحد أقصى ***2GiB***. أما أوضاع الإخفاء الأخرى الخاصة بالمنصات ومواقع التواصل الاجتماعي المتوافقة (*المذكورة أدناه*) فلها حدود حجم خاصة بها ***أصغر بكثير*** ومتطلبات أخرى.

تتوفر [***نسخة ويب***](https://cleasbycode.co.uk/jdvrif/app/) من ***jdvrif***، يمكنك استخدامها فورًا كبديل مريح عن تنزيل شيفرة المصدر الخاصة بواجهة سطر الأوامر (CLI) وترجمتها. تقتصر عمليات رفع الملفات عبر الويب على **20MiB**.

تتوفر أيضًا نسخة تجريبية مكتوبة بلغة ***Rust*** [***jdvrif-rs***](https://github.com/CleasbyCode/jdvrif-rs) لمن يهتم بتلك اللغة. وهي متوافقة من حيث الصيغة: إذ يمكن لأي من البنيتين استرداد صور الأخرى.

تستند ***jdvrif*** جزئيًا إلى ***[التقنية المُنفَّذة](https://www.vice.com/en/article/bj4wxm/tiny-picture-twitter-complete-works-of-shakespeare-steganography)*** من قبل الباحث الأمني ***[David Buchanan](https://www.da.vidbuchanan.co.uk/).***

![Demo Image](https://raw.githubusercontent.com/CleasbyCode/jdvrif/main/demo_image/jrif_043b7c551.jpg)  
*صورة توضيحية: **"A place of concealment"** / ***PIN: 7912872750612437051****

## كيف تُخفي jdvrif البيانات

على عكس طريقة الإخفاء الشائعة [***LSB***](https://ctf101.org/forensics/what-is-stegonagraphy/) (*أقل بت دلالة*) التي تُخفي البيانات داخل بكسلات صورة الغلاف، فإن ***jdvrif*** تُخفي البيانات في الغالب داخل ***مقاطع التطبيقات*** (application segments) لصورة ***JPG*** (ICC، EXIF، XMP، إلخ).

| وضع الإخفاء | أين تذهب البيانات | مشاركة الصورة الناتجة على |
| --- | --- | --- |
| *(بدون خيار)* | مقاطع ملف التعريف APP2/ICC | X-Twitter، Tumblr، Mastodon، Pixelfed، PostImage، ImgBB، ImgPile، Flickr |
| ***-b*** | مقاطع EXIF / Photoshop / XMP المؤطَّرة | ***Bluesky*** فقط |
| ***-r*** | معاملات JPEG DCT (***QIM***) | ***Reddit*** فقط |
| ***-x*** | معاملات JPEG DCT (***J-UNIWARD/STC***) | ***X-Twitter*** فقط |

الاستثناءان الوحيدان من طريقة تخزين المقاطع الافتراضية هما ***Reddit*** و***X-Twitter***. فكلاهما له وضع إخفاء خاص به، ولا يستخدم أي من هذين الوضعين مقاطع البيانات الوصفية على الإطلاق: إذ تحمل ***-r*** و***-x*** الحمولة في معاملات DCT الخاصة بصورة ***JPG*** بدلًا من ذلك.

تُعيد ***Reddit*** ترميز الصور المرفوعة وتتجاهل مقاطع البيانات الوصفية التي يعتمد عليها الوضع الافتراضي، لذا فإن ***-r*** هو الوضع الوحيد الذي يعمل هناك. أما ***X-Twitter*** فتحتفظ بمقطع ICC واحد صغير، لذا لا يزال الوضع الافتراضي يعمل على تلك المنصة، لكن فقط لحمولة صغيرة جدًا.

بالنسبة لوضع الإخفاء الخاص بـ ***Reddit*** (***-r***)، نستخدم [***طريقة إخفاء QIM***](https://www.google.com/search?q=QIM+steganography+method&sourceid=chrome&ie=UTF-8&source=chrome.ctxt) (*تضمين مؤشر التكميم في نطاق JPEG DCT*)، إذ إنها طريقة التخزين الوحيدة التي تعمل حاليًا مع ***Reddit***. تُحوَّل صورة الغلاف إلى baseline Q75 4:2:0 وتُحمَل الحمولة في كتل DCT الخاصة بالإضاءة (luminance) لديها.

لتعظيم سعة التخزين لمنصة ***Reddit***، استخدم صورة غلاف بأبعاد كبيرة، مثل **2048x2048**، **4096x4096**، **8192x8192 (الحد الأقصى)**، إلخ.

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

في حين أن منصة ***X-Twitter*** يمكنها استخدام الطريقة الافتراضية التي توفرها ***jdvrif***، حيث تُخفى البيانات داخل مقاطع APP2/ICC، فإن ***X-Twitter*** تحدّ ذلك بمقطع ICC واحد بحد أقصى للحجم لا يتجاوز **~10KiB** فقط.

لحمل أكثر من **~10KiB**، استخدم وضع الإخفاء الخاص بمنصة ***X-Twitter*** (***-x***). يتخلى هذا الوضع عن مقاطع البيانات الوصفية بالكامل — فلا يُكتب أي شيء إلى ملف تعريف ICC — ويستخدم بدلاً من ذلك [***طريقة إخفاء المعلومات التكيفية J-UNIWARD مع ترميز Syndrome-Trellis (STC)***](https://www.google.com/search?q=adaptive+J-UNIWARD+steganography+method+with+Syndrome-Trellis+Coding+(STC)). يُعاد ترميز صورة الغلاف إلى 4:2:0 تدريجية بالجودة المستمدة من مصدرها (بحد أقصى **Q97**).

لتعظيم سعة التخزين لمنصة ***X-Twitter***، استخدم صورة غلاف عالية الجودة/غنية بالتفاصيل بأبعاد كبيرة، مثل **1024x1024**، **2048x2048**، **4096x4096 (الحد الأقصى)**، إلخ.

يقوم الحاملان ***-r*** و***-x*** بتشفير بياناتك وربط موقعها برمز الاسترداد PIN الخاص بك باستخدام ***Argon2id***، لكن التضمين لا يزال يغيّر إحصاءات DCT للصورة، لذا قد يكشف تحليل الإخفاء المتخصص أن الصورة تحمل بيانات مخفية.

تظل صور ***-r*** و***-x*** التي أُنشئت باستخدام ***jdvrif v9.0*** قابلة للاسترداد، لكن ***v9.0*** لا يمكنه استرداد صور ***-r*** أو ***-x*** التي أُنشئت باستخدام ***v9.1***.

يحمل كلا وضعي DCT بيانات أقل بكثير من الوضع الافتراضي، لذا استخدم ***capsize*** لقياس صورة الغلاف قبل اختيار الحمولة (انظر [التحقق من السعة](#checking-capacity-with-capsize)).

## المتطلبات والترجمة البرمجية (Linux)

تتطلب عملية البناء **CMake 3.20 أو أحدث**، و`flock` من **util-linux**، وإما **Ninja** (المفضّل) أو **Make**. يجب أن يكون المترجم **GCC 14 أو أحدث**، أو **Clang 18 أو أحدث** مقترنًا بمكتبة قياسية C++23 تنفّذ ميزات مثل `std::format` و`std::print`. المكتبات الأصلية المطلوبة هي **libsodium**، و**libjpeg-turbo** (*كل من واجهتي `turbojpeg` و`libjpeg`*)، و**zlib**، و**libdeflate**. **OpenMP** اختياري: عند توفره فإنه يوازي تمريرة حساب التكلفة الخاصة بـ J-UNIWARD في ***-x***.

```console
$ sudo apt update
$ sudo apt install g++ cmake ninja-build util-linux libsodium-dev libturbojpeg0-dev libjpeg-dev zlib1g-dev libdeflate-dev

$ g++ --version   # confirm the reported version is 14 or newer

$ chmod +x compile_jdvrif.sh
$ ./compile_jdvrif.sh

$ sudo cp jdvrif /usr/bin
```

إذا كانت توزيعتك توفّر GCC 14 كحزمة ذات إصدار محدد، فثبّت `g++-14` وابنِ باستخدام `CXX=g++-14 ./compile_jdvrif.sh`.

يحتفظ الغلاف بملفات الكائنات المتتبَّعة للاعتماديات تحت `src/build/`، لذا تعيد الاستدعاءات اللاحقة بناء ما تغيّر فقط، ولا يستبدل الملف التنفيذي `jdvrif` المنشور إلا بعد بناء كامل وناجح. اضبط `JDVRIF_JOBS=<count>` لتغيير حد التوازي (الافتراضي: عدد وحدات المعالجة المركزية، بحد أقصى 8)، أو `JDVRIF_BUILD_DIR=<path>` لاستخدام ذاكرة تخزين مؤقت منفصلة للبناء، أو `BUILD_MODE=sanitize` لبناء ASan/UBSan.

## الاستخدام

```console
$ jdvrif

Usage: jdvrif conceal [-b|-r|-x] <cover_image> <secret_file>
       jdvrif recover <cover_image>
       jdvrif capsize [-r|-x] <cover_image>
       jdvrif --info
```

شغّل `jdvrif --info` للحصول على الدليل المدمج الكامل للأوضاع وخيارات المنصات وحدود الحجم.

```console
$ jdvrif conceal your_cover_image.jpg your_secret_file.doc

Platform compatibility for output image:-

 ✓ X-Twitter
 ✓ Tumblr
 ✓ Mastodon
 ✓ Pixelfed
 ✓ PostImage
 ✓ ImgBB
 ✓ ImgPile
 ✓ Flickr

Recovery PIN: [***2166776980318349924***]

Important: Keep your PIN safe, so that you can extract the hidden file.


Saved "file-embedded" JPG image: jrif_4e87c566c.jpg (143029 bytes).

Complete!

$ jdvrif recover jrif_4e87c566c.jpg

PIN: *******************

Extracted hidden file: your_secret_file.doc (6165 bytes).

Complete! Please check your file.

```

jdvrif ***mode*** arguments:

  ***conceal*** - يضغط ويشفّر ويضمّن ملف بياناتك السري داخل صورة غلاف ***JPG***.  
  ***recover*** - يفكّ التشفير ويفكّ الضغط ويستخرج ملف البيانات المخفي من صورة غلاف ***JPG*** (*يتطلب رقم PIN للاستعادة*).  
  ***capsize*** - يبلّغ عن سعة الحمل لصورة غلاف من أجل الوضع ***-r*** أو ***-x***. لا يتم حفظ أي صورة.

متطلبات صورة الغلاف:

● JPEG فقط، بحجم **400x400** بكسل على الأقل، وبإحدى صيغتي التدرّج الرمادي أو ألوان YCbCr — يجب تحويل صور CMYK/YCCK إلى RGB أولاً.

● الأبعاد العليا الافتراضية وأبعاد ***-b*** هي **4096x4096px**؛ يستخدم ***-r*** حدّ **8192x8192px**، بينما يقتصر ***-x*** أيضاً على **4096x4096px**.

● يرفض الوضع الافتراضي (*بدون خيار*) أيضاً صور الغلاف التي تكون جودة JPEG المقدّرة لها أعلى من **Q97**؛ أعد حفظ الصورة بجودة أقل إذا رُفضت.

متطلبات ملف البيانات السري:

● يجب ألا يتجاوز اسم الملف المضمّن **20 بايت**، ويجب ألا يبدأ بـ `.` أو `-` أو ينتهي بمسافة أو `.`، ويجب أن يكون UTF-8 صالحاً دون أحرف تحكّم أو أحرف تنسيق ثنائية الاتجاه أو أي من `/ \ : * ? " < > |`. يُخزَّن الاسم في الصورة ويُستعاد عند ***recover***.

● يُضغط ملف بياناتك قبل التشفير، باستثناء أنواع الملفات المعروفة بأنها مضغوطة مسبقاً (`.zip`، `.7z`، `.mp4`، `.jpg`، `.png`، إلخ). في الوضعين الافتراضي و***-b*** تتخطى تلك الأنواع الضغط فقط عندما تكون أكبر من **10MiB**؛ أما في الوضعين ***-r*** و***-x*** فتتخطاه دائماً. لأي شيء آخر مخصّص لحدّ حجم صغير على منصة ما، فكّر في ضغطه بنفسك أولاً (*zip، rar، 7z، إلخ*) حتى تعرف حجمه المخزَّن بدقة.

## المنصات المتوافقة

\******************   
ملاحظة: ***Bluesky*** الآن يحفظ الصور بصيغة ***WEBP*** افتراضياً. 

لحفظ صورة بصيغة ***JPG***، حتى تتمكن من استعادة البيانات المخفية باستخدام ***jdvrif***:-  

انقر أولاً على الصورة في المنشور لفتحها، ثم انقر بزر الفأرة الأيمن على الصورة. من القائمة، اختر ***Open image in new tab***.  

اختر التبويب الجديد وفي شريط العنوان، انتقل إلى نهاية العنوان وأضف ***@jpg*** ثم اضغط Enter.  
انقر بزر الفأرة الأيمن على الصورة ومن القائمة اختر ***Save image...***  

يجب أن تُنزَّل صورتك الآن بصيغة ***JPG***، والتي ستعمل الآن مع ***jdvrif***.
         
إذا كنت تريد أداة لإخفاء البيانات باستخدام صور ***WEBP*** لنشرها على ***Bluesky***، يمكنك استخدام أداة إخفاء المعلومات عبر سطر الأوامر ***WEBP*** الخاصة بي ***[wbpdv](https://github.com/CleasbyCode/wbpdv)***  
\******************

*حدّ حجم النشر يُقاس بالحجم ***المجتمع*** لـ ***صورة الغلاف*** + ***ملف البيانات المضغوط:****  

● ***Flickr*** (**200MiB**)، ***ImgPile*** (**100MiB**)، ***ImgBB*** (**32MiB**)، ***PostImage*** (**32MiB**)، ***Pixelfed*** (**15MiB**).

*حدّ الحجم يُقاس ***فقط*** بـ ***حجم ملف البيانات المضغوط:****  

● ***Mastodon*** (**~6MiB**)، ***Tumblr*** (**~64KiB**)، ***X-Twitter*** (**~10KiB / الطريقة الافتراضية**).  

على سبيل المثال، مع ***Mastodon***، إذا كانت صورة غلافك **1MiB** فلا يزال بإمكانك تضمين ملف بيانات يصل إلى حدّ الحجم **~6MiB**.

**أخرى: منصات لها وضع إخفاء خاص بها:**

● ***Bluesky*** (***خيار -b***). يجب ألا يتجاوز ملف ***JPG*** النهائي "*المضمَّن فيه الملف*" **2,000,000 بايت (~1.9MiB)**، لذا تتقاسم صورة الغلاف وملف البيانات المضغوط ميزانية واحدة. يجب ألا يتجاوز ملف البيانات المضغوط وحده **~171KiB**. صورة الغلاف التي تبلغ بالفعل 2,000,000 بايت لا تترك أي مساحة على الإطلاق، لذا أبقِ الغلاف أصغر من الحدّ بمقدار حجم ملف بياناتك المضغوط على الأقل. يُشترط سكربت "***create_bsky_post.py***" لنشر هذه الصور على ***Bluesky***. *مزيد من المعلومات عن هذا السكربت في أسفل الصفحة.*

● ***Reddit*** (***خيار -r***). يجب ألا يزيد حجم صورة الغلاف وملف البيانات كلٌّ على حدة عن **20MiB**، لكن سعة الحمل الفعلية لصورة الغلاف ***أصغر بكثير*** وتعتمد على أبعادها. استخدم `jdvrif capsize -r` لقياسها.

● ***X-Twitter*** (***خيار -x***). يجب ألا يتجاوز حجم صورة الغلاف وملف البيانات **5MiB** لكل منهما، ويجب ألا تتجاوز أبعاد الغلاف **4096x4096** بكسل. سعة الناقل الفعلية ***أصغر بكثير*** وتعتمد على جودة الصورة وأبعادها. استخدم `jdvrif capsize -x` لقياسها.

في الوضع الافتراضي ووضع ***-b***، يتم أيضًا تحسين صورة الغلاف بلا فقدان قبل الاستخدام، ويجب ألا يتجاوز حجمها **4MiB** بعد تلك الخطوة.

بالنسبة للمنصات مثل ***X-Twitter*** و***Reddit*** و***Tumblr***، التي لديها حدود صغيرة لحجم البيانات، قد ترغب في التركيز على البيانات التي تُضغط جيدًا، مثل الملفات النصية وغيرها.

https://github.com/user-attachments/assets/af330d09-f65d-4f75-8290-883078be34b3

https://github.com/user-attachments/assets/fc454d42-0240-4864-b44b-ce5ef7cfd94c

## فحص السعة باستخدام capsize

تُجهّز ***capsize*** صورة الغلاف تمامًا كما تفعل ***conceal***، ثم تُبلّغ عن مقدار الحمولة المشفّرة التي يمكنها حملها. لا يُكتب أي شيء على القرص. استخدم ***-r*** لناقل ***Reddit*** و***-x*** لناقل ***X-Twitter*** (***-x*** هو الخيار الافتراضي إذا لم يُعطَ أي خيار).

```console
$ jdvrif capsize -r basic_img_large_dims.jpg

Reddit capacity check for conceal -r mode only.

Cover Image: 384KiB, 8192x8192, Baseline YCbCr 4:2:0, Standard Q75 quantization (C3).

Theoretical C3 capacity limit for this cover image:                    436906 bytes (~426KiB).
Conservative maximum compressed capacity with a 20-character filename: 436792 bytes (~426KiB).
Recommended  maximum compressed capacity with a 20-character filename: 435768 bytes (~425KiB).
```

الحجم المبلغ عنه هو سعة ***المغلّف*** المشفّر الإجمالية، وليس حدًا خامًا لملف السر: يستهلك اسم الملف وبيانات التشفير والاسترداد الوصفية من 95 إلى 114 بايتًا لحمولة أحادية الإطار، وتضيف الحمولات الأكبر عبئًا إضافيًا من التغليف. لا تستهدف الحد النظري — حيث تسمح السعة، أبقِ الحمولة المضغوطة أقل بـ **1KiB** على الأقل من الحد الأقصى المتحفظ. فحص الحجم الذي يُجريه ***conceal*** هو الفحص المعتمد.

## خيارات منصة وضع الإخفاء

لإنشاء صور ***JPG*** متوافقة "*ذات بيانات مخفية*" لنشرها على منصة ***Reddit***، يجب عليك استخدام الخيار ***-r*** مع وضع ***conceal***.
  ```console
  $ jdvrif conceal -r my_image.jpg hidden.doc
```

  هذه الصور متوافقة فقط للنشر على ***Reddit***. سيُفقد ملف البيانات المضمّن الخاص بك إذا نُشر على منصة مختلفة.  
  
عند حفظ/تنزيل صورة من ***Reddit*** تأكد من النقر على الصورة داخل المنشور لتوسيعها بالكامل قبل الحفظ.  

https://github.com/user-attachments/assets/ead3c34c-dd9a-4018-9ea3-0746fbdfdb8b

لإنشاء صور ***JPG*** متوافقة "*data-concealed*" للنشر على منصة ***X-Twitter*** باستخدام طريقة إخفاء المعلومات J-UNIWARD، يجب عليك استخدام الخيار ***-x*** مع وضع ***conceal***.
  ```console
  $ jdvrif conceal -x my_image.jpg hidden.doc
```

  هذه الصور متوافقة فقط للنشر على ***X-Twitter***. ستفقد ملف البيانات المضمّن إذا نُشرت على منصة مختلفة.

عند حفظ/تنزيل صورة من ***X-Twitter***، تأكد من النقر على الصورة داخل المنشور لتوسيعها بالكامل قبل الحفظ.

لإنشاء صور ***JPG*** متوافقة "*ذات ملف مضمّن*" للنشر على منصة ***Bluesky***، يجب عليك استخدام الخيار ***-b*** مع وضع ***conceal***.
  ```console
  $ jdvrif conceal -b my_image.jpg hidden.doc
```

  هذه الصور متوافقة فقط للنشر على ***Bluesky***. ستتم إزالة ملف البيانات المضمّن الخاص بك إذا نُشر على منصة مختلفة.
 
  يُطلب منك أيضًا استخدام سكربت Python ‏[create_bsky_post.py](https://github.com/CleasbyCode/jdvrif/blob/main/src/bsky/create_bsky_post.py) (الموجود في مجلد ***src/bsky*** في المستودع) لنشر الصورة على ***Bluesky***.
  لن يعمل إذا نشرت الصور على ***Bluesky*** عبر موقع المتصفح أو تطبيق الهاتف المحمول.  

  لاستخدام السكربت، ستحتاج إلى إنشاء [***app password***](https://bsky.app/settings/app-passwords) من حسابك على ***Bluesky***. مرّر بيانات اعتمادك عبر متغيرات البيئة بدلًا من سطر الأوامر، حيث ستكون مرئية للمستخدمين المحليين الآخرين عبر أدوات مثل `ps`:

  ```console
  $ pip install -r bsky/requirements.txt

  $ export ATP_AUTH_HANDLE='you.bsky.social'
  $ read -rsp 'Bluesky app password: ' ATP_AUTH_PASSWORD && export ATP_AUTH_PASSWORD

  $ python3 bsky/create_bsky_post.py \
      --image jrif_4e87c566c.jpg \
      --alt-text "alt-text here [optional]" \
      "standard post text here [required]"

  $ unset ATP_AUTH_PASSWORD
```

  راجع [src/bsky/README.md](https://github.com/CleasbyCode/jdvrif/blob/main/src/bsky/README.md) للاطلاع على مجموعة الخيارات الكاملة (*الصور المتعددة، والردود، ومنشورات الاقتباس، وبطاقات الروابط*) وللتعرف على ما تحمي منه النسخة المُحصّنة من السكربت.

https://github.com/user-attachments/assets/1daef508-d304-491f-bfe2-2cdbb5d62081

## الاختبارات

يأخذ كل سكربت اختبار في `src/tests` الملف التنفيذي المطلوب اختباره:

```console
$ bash tests/run_golden_tests.sh --bin ./jdvrif        # recover pre-built images with known PINs
$ bash tests/run_roundtrip_tests.sh --bin ./jdvrif     # fresh conceal/recover round-trips
$ bash tests/run_security_smoke.sh --bin ./jdvrif      # negative-path and boundary checks
$ bash tests/run_reddit_tests.sh --bin ./jdvrif        # -r QIM carrier
$ bash tests/run_twitter_tests.sh --bin ./jdvrif       # -x J-UNIWARD/STC carrier
$ bash tests/run_io_security_tests.sh --bin ./jdvrif   # input-size bounds, PIN signal/job-control handling
$ bash tests/run_jpeg_safety_tests.sh                  # JPEG parser/decoder safety (builds its own test binary)
$ bash tests/run_bsky_tests.sh                         # Bluesky posting helper
```

## برمجيات وأصول الطرف الثالث

  ### التطبيقات الأساسية

  - [libsodium](https://github.com/jedisct1/libsodium) — التوليد العشوائي التشفيري، واشتقاق مفاتيح Argon2id، وتدفقات الأسرار XChaCha20-Poly1305. مرتبطة ديناميكيًا كمكتبة نظام.
      
      الترخيص: [ISC License](https://github.com/jedisct1/libsodium/blob/master/LICENSE)
    
      حقوق النشر (c) 2013–2026 Frank Denis.
    
 - [libjpeg-turbo](https://github.com/libjpeg-turbo/libjpeg-turbo) — معالجة JPEG والتحويل بدون فقدان. مرتبطة ديناميكيًا كمكتبة نظام.

      يعتمد هذا البرنامج جزئيًا على عمل Independent JPEG Group.

      التراخيص: [Independent JPEG Group License, Modified BSD 3-Clause License,
      and zlib License](https://github.com/libjpeg-turbo/libjpeg-turbo/blob/2.1.5/LICENSE.md).

      حقوق النشر © 1991–2020 Thomas G. Lane وGuido Vollbeding.
   
      حقوق النشر © 2009–2023 D. R. Commander. جميع الحقوق محفوظة.
   
      حقوق النشر © 2015 Viktor Szathmáry. جميع الحقوق محفوظة.
   
  - [zlib](https://github.com/madler/zlib) — ضغط zlib وفك الضغط المتدفق. مرتبطة ديناميكيًا كمكتبة نظام.

    الترخيص: [zlib License](https://github.com/madler/zlib/blob/develop/LICENSE)
    
    حقوق النشر (C) 1995–2026 Jean-loup Gailly وMark Adler.

  - [libdeflate](https://github.com/ebiggers/libdeflate) — ضغط سريع لكامل المخزن المؤقت بصيغة zlib. مرتبطة ديناميكيًا كمكتبة نظام.

    الترخيص: [MIT](https://github.com/ebiggers/libdeflate/blob/master/COPYING)
    
    حقوق النشر 2016 Eric Biggers.
    
    حقوق النشر 2024 Google LLC.

  ### الشيفرة والأصول المضمّنة

  - [Compact ICC Profiles](https://github.com/saucecontrol/Compact-ICC-Profiles) — ملف تعريف ICC مضمّن متوافق مع Adobe.

    الترخيص: [CC0 1.0 Universal](https://github.com/saucecontrol/Compact-ICC-Profiles/blob/master/license)

  ### مساعد النشر الاختياري على Bluesky

  - Bryan Newbold / ATProto Hacker Cookbook — create_bsky_post.py — الأساس لمساعد النشر على Bluesky [المتفرّع](https://gist.github.com/CleasbyCode/1eb678ca1fa1975b1c1e20aeec33637e) (src/bsky/create_bsky_post.py). 
    للاطلاع، راجع [نسخة Cookbook](https://github.com/bluesky-social/cookbook/blob/main/python-bsky-post/create_bsky_post.py)

    الترخيص: [CC0 1.0 Universal](https://github.com/bluesky-social/cookbook/blob/main/LICENSE-CC0).

  - Requests — طلبات HTTP وواجهة Bluesky API.

    الترخيص: [Apache 2.0](https://github.com/psf/requests/blob/main/LICENSE) / [NOTICE](https://github.com/psf/requests/blob/main/NOTICE)
    
    حقوق النشر 2019 Kenneth Reitz.

  - Beautiful Soup 4 — تحليل بيانات HTML وOpen Graph الوصفية.

    الترخيص: [MIT](https://pypi.org/project/beautifulsoup4/)
    
    حقوق النشر (c) Leonard Richardson.

  - Pillow — التحقق من الصور وأبعادها ومعالجة نسبة العرض إلى الارتفاع.

    الترخيص: [MIT-CMU](https://github.com/python-pillow/Pillow/blob/main/LICENSE)
    
    حقوق نشر PIL © 1997–2011 Secret Labs AB و© 1995–2011 Fredrik Lundh والمساهمون.
    
    حقوق نشر Pillow © 2010 Jeffrey “Alex” Clark والمساهمون.
    
##
تنزيل الأداة