
دمج عميق لمفكك Ghidra ومفكك تجميع Sleigh لـ rizin
هذا تكامل لمفكك الشيفرة Ghidra ومفكك التجميع Sleigh لـ Rizin. هو مبني فقط على جزء مفكك الشيفرة من Ghidra، وهو مكتوب بالكامل بلغة C++، لذا فإن Ghidra نفسه غير مطلوب على الإطلاق ويمكن بناء الإضافة بشكل مستقل. تم تقديم هذا المشروع، في البداية لـ radare2، في r2con 2019 كجزء من محاضرة Cutter: https://youtu.be/eHtMiezr7l8?t=950
Usage: pdg # Native Ghidra decompiler plugin
| pdg # Decompile current function with the Ghidra decompiler
| pdgd # Dump the debug XML Dump
| pdgx # Dump the XML of the current decompiled function
| pdgj # Dump the current decompiled function as JSON
| pdgo # Decompile current function side by side with offsets
| pdgs # Display loaded Sleigh Languages
| pdg* # Decompiled code is returned to rizin as comment
يمكن استخدام متغيرات التهيئة التالية (لأمر e) لضبط سلوك rz-ghidra:
ghidra.cmt.cpp: C++ comment style
ghidra.cmt.indent: Comment indent
ghidra.indent: Indent increment
ghidra.lang: Custom Sleigh ID to override auto-detection (e.g. x86:LE:32:default)
ghidra.linelen: Max line length
ghidra.nl.brace: Newline before opening '{'
ghidra.nl.else: Newline before else
ghidra.sleighhome: SLEIGHHOME
هنا، يجب أن يشير ghidra.sleighhome إلى مجلد يحتوي على ملفات *.sla و *.lspec و ... للبنى التي يجب أن يدعمها مفكك الشيفرة. ومع ذلك، يتم إعداد ذلك تلقائياً عند استخدام حزمة rz-pm أو التثبيت كما هو موضح أدناه.
أولاً، تأكد من جلب الوحدة الفرعية الموجودة في هذا المستودع وتحديثها:
git submodule init
git submodule update
ثم، يمكن بناء إضافة Rizin وتثبيتها كما يلي:
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
هنا، قم بتعيين CMAKE_INSTALL_PREFIX إلى موقع يمكن لـ Rizin تحميل الإضافة منه. خطوة التثبيت ضرورية لعمل الإضافة لأنها تتضمن تثبيت ملفات Sleigh الضرورية. إذا كنت تستخدم Rizin من git، فقم أيضاً بتعيين CMAKE_PREFIX_PATH إلى دليل تثبيت Rizin.
لبناء إضافة Cutter أيضاً، يجب أن يكون Cutter مثبتاً من المصدر تحت مسار بادئة معين، ويمكن تحديده اختيارياً باستخدام -DCMAKE_PREFIX_PATH=<path>، ثم قم بتمرير -DBUILD_CUTTER_PLUGIN=ON إلى cmake لتفعيل الإضافة:
/my/path/rz-ghidra> mkdir build && cd build
/my/path/rz-ghidra/build> cmake -DBUILD_CUTTER_PLUGIN=ON -DCMAKE_PREFIX_PATH=/path/to/cutter/prefix -DCMAKE_INSTALL_PREFIX=~/.local ..
/my/path/rz-ghidra/build> make && make install
بشكل افتراضي، يتم تثبيت إضافة Cutter في مسار يتم اختياره تلقائياً في دليل المستخدم الحالي. يمكن تجاوز هذا المسار باستخدام -DCUTTER_INSTALL_PLUGDIR.
يمتلك Rizin واجهة برمجة تطبيقات C تتطور بسرعة، لذا من الضروري التوضيح حول أي إصدارات من rz-ghidra متوافقة مع أي إصدارات من Rizin:
عند استخدام Rizin و rz-ghidra من git:
dev لـ rz-ghidra يتبع فرع dev لـ Rizin.stable لـ rz-ghidra يتبع فرع stable لـ Rizin.بخصوص الإصدارات، يتم إصدار rz-ghidra بشكل عام بالتزامن مع Rizin وغالباً ما يستخدم نفس أرقام الإصدارات (ولكن هذا غير مضمون، لا تعتمد على هذه الأرقام!). أيضاً، مع كل إصدار من Rizin يتم إنشاء وسم مثل rz-0.1.2 على rz-ghidra، والذي يشير بالضبط إلى إصدار rz-ghidra ويوضح أن هذا الإصدار متوافق مع إصدار Rizin المحدد. يمكن لمُديري التوزيعات استخدام هذه الوسوم للبحث عن كيفية إعداد التبعيات.
يرجى ملاحظة أن هذه الإضافة متاحة تحت LGPLv3، وهو أكثر تشدداً من ترخيص Ghidra!
هذا البرنامج هو برنامج حر: يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة GNU Lesser General Public License كما نشرتها مؤسسة البرمجيات الحرة، إما الإصدار 3 من الترخيص، أو (حسب رغبتك) أي إصدار لاحق.
يتم توزيع هذا البرنامج على أمل أن يكون مفيداً، ولكن دون أي ضمان؛ حتى دون الضمان الضمني للتسويق أو الملاءمة لغرض معين. راجع رخصة GNU Lesser General Public License لمزيد من التفاصيل.
يجب أن تكون قد تلقيت نسخة من رخصة GNU Lesser General Public License مع هذا البرنامج. إذا لم يكن الأمر كذلك، راجع https://www.gnu.org/licenses/.