
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 ضرورية
لتجنب مشاكل الصلاحيات.