العودة إلى التحديثات
New releaseAug 19, 2026

ghidra Ghidra_12.1.3_build

Ghidra هو إطار عمل لهندسة عكسية للبرمجيات (SRE)

مشاركة

Ghidra في حاوية دوكر

البناء

من الدليل الجذر لإصدار Ghidra الخاص بك، قم بتشغيل الأمر التالي.

./docker/build-docker-image.sh

سيؤدي هذا إلى بناء صورة دوكر لـ Ghidra بوسم (tag) يتوافق مع إصدار Ghidra.

متغير البيئة MODE

حاوية دوكر لـ Ghidra تدعم أوضاع التشغيل التالية MODE:

  • gui
  • headless
  • ghidra-server
  • bsim
  • bsim-server
  • pyghidra

متغير البيئة MODE يحدد أي نقطة دخول (entrypoint) لـ Ghidra سيتم تنفيذه.

يتم تنفيذ السكريبت entrypoint.sh عند بدء تشغيل الحاوية.

تكوين حاوية

يتم تكوين الحاوية تمامًا كما يتم تكوين أي حاوية دوكر أخرى. يمكن تركيب وحدات التخزين (volumes)، وتعيين متغيرات البيئة، وربط المنافذ من الحاوية إلى المضيف، وهكذا. تختلف خطوات التكوين كثيرًا اعتمادًا على الوضع (MODE) الذي تبدأ به الحاوية.

الدليل الأساسي لـ Ghidra داخل الحاوية موجود في /ghidra. جميع المواقع الافتراضية لـ Ghidra للملفات والإعدادات وما إلى ذلك هي نفسها داخله. يتم تشغيل Ghidra كمستخدم ghidra داخل الحاوية، مع uid 1001 و guid 1001.

المستخدم ghidra لديه صلاحيات فقط للدلائل التالية داخل الحاوية:

  • /ghidra
  • /home/ghidra

عندما لا تتلقى الحاوية أي وسائط (arguments) تمرر إليها باستخدام الأمر docker run، فإن واجهة سطر الأوامر (CLI) المقابلة للوضع MODE الذي يتم تنفيذه ستعرض بيان الاستخدام الخاص به.

تعيين وحدات تخزين محلية لحاوية

قد تواجه وحدات التخزين داخل الحاوية مشاكل في الصلاحيات إذا لم تكن الوحدات قابلة للوصول من قبل المستخدمين في المجموعة id 1001.

uid و guid الافتراضيان للحاوية هما 1001:1001. يجب أن تكون وحدات التخزين التي يتم تعيينها للحاوية قابلة للوصول من قبل هذا uid/guid.

إضافة مستخدم الجهاز المضيف إلى المجموعة 1001 على المضيف يساعد في إدارة وحدات التخزين التي ستستخدم في الحاوية. يمكن القيام بذلك بسهولة بتنفيذ sudo usermod -aG 1001 <user> على لينكس.

مثال لوضع Headless

docker run \
    --env MODE=headless \
    --rm \
    --volume /path/to/myproject:/home/ghidra/myproject \
    --volume /path/to/mybinary:/home/ghidra/mybinary \
    ghidra/ghidra:<version> \
    /home/ghidra/myproject programFolder -import /home/ghidra/mybinary

بالتحليل سطرًا سطرًا:

  • docker run سيبدأ حاوية دوكر باستخدام الصورة ghidra/ghidra<:<version>
  • --env MODE=headless يعين متغير البيئة MODE داخل الحاوية إلى القيمة headless
  • --rm يزيل الحاوية بعد اكتمال الأمر
  • --volume /path/to/myproject:/home/ghidra/myproject يقوم بتركيب وحدة التخزين المحلية /path/to/myproject على المضيف إلى /home/ghidra/myproject داخل الحاوية
  • --volume /path/to/mybinary:/home/ghidra/mybinary يقوم بتركيب وحدة التخزين المحلية /path/to/mybinary على المضيف إلى /home/ghidra/mybinary داخل الحاوية
  • ghidra/ghidra:<version> هو المرجع الكامل لصورة دوكر، حيث ghidra/ghidra هو المجموعة واسم الصورة، و <version> هو الوسم (tag).
  • /home/ghidra/myproject programFolder -import /home/ghidra/mybinary هي وسائط (arguments) يتم تمريرها لواجهة سطر الأوامر لمحلل Ghidra غير الرسومي (headless analyzer)

عدم تمرير أي وسائط سيؤدي إلى عرض استخدام المحلل غير الرسومي.

/path/to/myproject على المضيف يجب أن يكون قابلاً للوصول من قبل guid 1001 بصلاحيات rwx.

مثال لوضع Gui

تشغيل واجهة المستخدم الرسومية (GUI) لـ Ghidra في حاوية دوكر ليست طريقة موصى بها لتشغيل Ghidra. واجهات المستخدم الرسومية ليست حالة استخدام نموذجية للتطبيقات المحوسبة بحاوية دوكر.

docker run \
    --env MODE=gui \
    -it \
    --rm \
    --net host \
    --env DISPLAY \
    --volume "$HOME/.Xauthority:/home/ghidra/.Xauthority" \
    ghidra/ghidra:<version>

في هذا الوضع، تعتمد الحاوية على إعادة توجيه X11 لعرض واجهة المستخدم الرسومية. قد يختلف تكوين X11، ولكن في هذه الحالة، يتم تركيب ملف Xauthority الخاص بالمضيف داخل الحاوية، ويتم تكوين الحاوية لاستخدام شبكة المضيف، ويتم تمرير متغير البيئة DISPLAY إلى الحاوية. هذا يتيح إعادة توجيه واجهة المستخدم الرسومية إلى شاشة الجهاز المضيف. لا تزال وحدات التخزين التي تحتوي على الثنائيات (binaries) بحاجة إلى التركيب على الحاوية بالإضافة إلى وحدات التخزين لمشاريع Ghidra.

يجب أن يكون ملف .Xauthority الخاص بالمضيف له صلاحيات مناسبة - معينة للمجموعة :1001 مع صلاحيات rw للمجموعة.

مثال لوضع خادم Ghidra (Ghidra Server Mode)

docker run \
    --env MODE=ghidra-server \
    --rm \
    -it \
    --volume /path/to/my/repositories:/ghidra/repositories \
    --volume /path/to/my/configs/server.conf:/ghidra/server/server.conf \
    -p 13100:13100 \
    -p 13101:13101 \
    -p 13102:13102 \
    ghidra/ghidra:<version>

يجب تركيب وحدات التخزين على حاوية الخادم لحفظ المستودعات والمستخدمين، وكذلك لتكوين الخادم أيضًا.

لاستخدام svrAdmin، قم بتنفيذ exec في حاوية خادم Ghidra الجارية (docker exec -it <container-id> bash) للحصول على شل bash في الحاوية. بعد تنفيذ exec في الحاوية، تكون إدارة خادم Ghidra وإدارته هي نفسها خارج بيئة الحاوية.

لإيقاف الحاوية، نفذ الأمر docker stop <container-id>.

ملاحظة: المنافذ التي تقوم بتعيينها من المضيف إلى حاوية دوكر يجب أن تتطابق. يمكنك تغيير منفذ الخادم الأساسي الافتراضي (أي 13100) في ملف server.conf باستخدام الخيار -p<port>.

مثال لوضع خادم BSIM (BSIM Server Mode)

docker run \
    --env MODE=bsim-server \
    --rm \
    -it \
    --volume /path/to/my/datadir:/ghidra/bsim_datadir \
    -p 5432:5432 \
    ghidra/ghidra:<version> \
    /ghidra/bsim_datadir

/ghidra/bsim_datadir هو الدليل المستخدم لتخزين بيانات bsim في الحاوية. يمكن استخدام أدلة أخرى على الحاوية، ولكن تأكد من أن المجلد على الجهاز المضيف لديه الصلاحيات المناسبة، معينة للمجموعة :1001.

هذا المثال ببساطة يبدأ خادم bsim. يمكن تكوين خادم bsim وتعبئته بالبيانات بعد البدء داخل الحاوية بطريقة مماثلة لإدارة خادم Ghidra. سيتعين على المسؤول تنفيذ exec في حاوية خادم bsim الجارية (docker exec -it <container-id> bash)، وبعد تنفيذ exec في الحاوية، تكون إدارة خادم Bsim وإدارته هي نفسها خارج بيئة الحاوية.

لإيقاف الحاوية، نفذ الأمر docker stop <container-id>.

مثال لوضع واجهة سطر أوامر BSIM (BSIM CLI Mode)

docker run \
		--env MODE=bsim \
		--rm \
		 -it \
		 ghidra/ghidra:<version> \
		 generatesigs ghidra://ghidrasvr/demo /home/ghidra \
			 --bsim postgresql://bsimsvr/demo \
			 --commit --overwrite \
			 --user ghidra

في هذا المثال، يتم استخدام واجهة سطر أوامر bsim للاتصال بخادم Ghidra مستضاف على ghidrasvr، وتوليد تواقيع (signatures) لمستودع demo في خادم Ghidra ذلك وحفظها في /home/ghidra. ثم يتم إرسال التواقيع إلى خادم BSIM المستضاف على bsimsvr في قاعدة البيانات demo.

مثال لوضع Pyghidra الرسومي

تشغيل واجهة المستخدم الرسومية (GUI) لـ Ghidra في حاوية دوكر ليست طريقة موصى بها لتشغيل Ghidra. واجهات المستخدم الرسومية ليست حالة استخدام نموذجية للتطبيقات المحوسبة بحاوية دوكر.

docker run \
    --env MODE=pyghidra \
    -it \
    --rm \
    --net host \
    --env DISPLAY \
    --volume="$HOME/.Xauthority:/home/ghidra/.Xauthority:rw" \
    ghidra/ghidra:<version> -c

في هذا الوضع، تعتمد الحاوية على إعادة توجيه X11 لعرض واجهة المستخدم الرسومية. قد يختلف تكوين X11، ولكن في هذه الحالة، يتم تركيب ملف Xauthority الخاص بالمضيف داخل الحاوية، ويتم تكوين الحاوية لاستخدام شبكة المضيف، ويتم تمرير متغير البيئة DISPLAY إلى الحاوية. هذا يتيح إعادة توجيه واجهة المستخدم الرسومية إلى شاشة الجهاز المضيف. لا تزال وحدات التخزين التي تحتوي على الثنائيات (binaries) بحاجة إلى التركيب على الحاوية بالإضافة إلى وحدات التخزين لمشاريع Ghidra.

يجب أن يكون ملف .Xauthority الخاص بالمضيف له صلاحيات مناسبة - مملوك لـ :1001 بصلاحيات rw للمجموعة.

مثال لوضع Pyghidra غير الرسومي (Headless)

docker run \
    --env MODE=pyghidra \
    --rm \
    --volume /path/to/myproject:/myproject \
    --volume /path/to/mybinary:/mybinary \
    ghidra/ghidra:<version> -H \
    /myproject programFolder -import /mybinary

عدم تمرير أي وسائط (arguments) إلى المحلل غير الرسومي لـ pyghidra سيؤدي إلى عرض قائمة المساعدة، تمامًا كما في المحلل غير الرسومي.

حالة الاستخدام هذه مشابهة جدًا لمثال الوضع غير الرسومي مع الفائدة الإضافية المتمثلة في القدرة على استخدام python3 لسكريبتات Ghidra.

مرة أخرى، في هذا المثال، الصلاحيات المناسبة وتعيين المجموعة لـ /path/to/myproject و /path/to/mybinary ضرورية لتجنب مشاكل الصلاحيات.

الفئات