Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
ghostrings — نصوص برمجية لـ Ghidra لاستعادة تعريفات السلاسل النصية في ملفات Go الثنائية | Kitploit
أدوات/GitHubGitHub/nccgroup/ghostrings
تحليل الكودالهندسة العكسيةتحليل الملفات الثنائية
GitHubnccgroup/ghostrings

ghostrings

نصوص برمجية لـ Ghidra لاستعادة تعريفات السلاسل النصية في ملفات Go الثنائية

عرض المستودعالموقع الإلكتروني
1389منذ 8 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

Ghostrings

نصوص برمجية لاستعادة تعريفات السلاسل في ثنائيات Go باستخدام تحليل P-Code. تم اختبارها مع x86 وx86-64 وARM وARM64.

النصوص البرمجية

Golang

يمكن العثور عليها في فئة Golang في Script Manager.

  • GoDynamicStrings.java
    • يحلل P-Code للعثور على بنى السلاسل النصية المنشأة على المكدس. يستخدم تحليل نمط "register" منخفض المستوى.
  • GoFuncCallStrings.java
    • يحلل P-Code للعثور على بنى السلاسل النصية الممررة مباشرة إلى استدعاءات الدوال عبر المسجلات، دون كتابتها على المكدس. يستخدم تحليل نمط "normalize" مع دعم Golang المدمج الجديد في Ghidra (راجع ملاحظات إصدار Ghidra لإصدارات Golang المدعومة).
  • GoStaticStrings.java
    • يعثر على بنى السلاسل النصية في Go المخصصة بشكل ثابت في الذاكرة للقراءة فقط.
  • GoKnownStrings.java
    • يبحث عن السلاسل النصية الفريدة القياسية ويعرّفها. يتم تحميل بيانات السلاسل من data/known_strings.json.
  • GoStringFiller.java
    • يملأ الفجوات في go.string.* بعد التحليل الأولي، بناءً على الترتيب التصاعدي لطول بيانات السلاسل.

هناك أيضًا نسختان خاصتان من نص تحليل السلاسل الديناميكية:

  • GoDynamicStringsSingle.java
    • ينفذ نفس التحليل الذي يقوم به GoDynamicStrings.java، لكنه يستخدم عملية مفكك واحدة. استخدم هذا إذا كان تحليل ثنائي يؤدي إلى استنفاد عمليات المفكك المتوازية لذاكرة النظام.
  • GoDynamicStringsHigh.java
    • تجريبي، يستخدم مخرجات P-Code من تحليل نمط "normalize" عالي المستوى. يعتمد حاليًا على اختراق يوقف إزالة الشيفرة الميتة في المفكك (انظر https://research.nccgroup.com/2022/05/20/earlyremoval-in-the-conservatory-with-the-wrench/). هذا الاختراق يتعطل في Ghidra 10.2.

P-Code

يمكن العثور عليه في فئة PCode في Script Manager.

  • PrintHighPCode.java
    • يطبع مخرجات P-Code عالية المستوى للدالة المحددة حاليًا إلى وحدة التحكم، مع محدد لنمط تبسيط المفكك الذي سيتم استخدامه. يُستخدم أساسًا لتطوير نصوص تحليل P-Code.

تدفق استعادة السلاسل

إليك التدفق العام لاستخدام هذه النصوص لاستعادة تعريفات السلاسل في ثنائي Go:

  1. امسح جميع السلاسل غير الصحيحة أو المعرفة تلقائيًا في كتلة ذاكرة البيانات للقراءة فقط.
    • في نافذة "Defined Strings"، فعّل عمود "Mem Block" وصفِّ حسب كتلة الذاكرة لتحديد جميع السلاسل في .rodata أو .rdata أو __rodata. ثم انقر بزر الماوس الأيمن في قائمة الشيفرة واختر "Clear Code Bytes".
  2. (اختياري) شغّل GoKnownStrings.java لاكتشاف بعض السلاسل القياسية.
  3. شغّل GoStaticStrings.java.
  4. شغّل GoFuncCallStrings.java (إذا كان إصدار ثنائي Golang مدعومًا بميزات Golang المدمجة في Ghidra).
  5. شغّل GoDynamicStrings.java.
  6. شغّل GoStringFiller.java.
    • إذا اكتشف انتهاكًا للترتيب التصاعدي لطول بيانات السلاسل، فامسح أي تعريفات سلاسل موجبة كاذبة في تلك المنطقة وأعد تشغيل النص. هناك خيار للقيام بذلك تلقائيًا.
    • إذا كان الثنائي مجردًا (stripped)، فحدد موقع منطقة السلاسل ذات البايت الواحد التي عثر عليها نص السلاسل الديناميكية. تأكد من أنها بداية السلاسل المجمعة معًا غير المنتهية بـ null (يجب تعريف المزيد من السلاسل بعدها بترتيب تصاعدي للطول). أنشئ التسمية go.string.* عند أول سلسلة ذات بايت واحد.
  7. تحقق من الفجوات المتبقية في go.string.*، وعرّف أي سلاسل ذات نقاط بداية ونهاية واضحة.

الإعداد

التثبيت

في Ghidra:

  1. File -> Install Extensions -> Add extension
  2. حدد ملف ZIP الخاص بالإضافة

التطوير

لـ Eclipse مع إضافة GhidraDev:

  1. استنسخ المستودع
  2. File -> Import -> Projects from Folder or Archive
  3. حدد مجلد المستودع
  4. GhidraDev -> Link Ghidra...
  5. حدد المشروع المستورد

البناء

البناء باستخدام Eclipse:

  • GhidraDev -> Export -> Ghidra Module Extension...

البناء مباشرة باستخدام Gradle:

root@kitploit:~
$ cd Ghostrings
$ gradle -PGHIDRA_INSTALL_DIR=<ghidra_install_dir>

خلفية

من المشكلات المعروفة في الهندسة العكسية لبرامج Go أن غياب مُنهيات null في سلاسل Go يجعل استعادة تعريفات السلاسل من الثنائيات المترجمة أمرًا صعبًا. يتم تخزين العديد من قيم السلاسل الثابتة لبرنامج Go معًا في كتلة ضخمة واحدة في البناء المترجم، دون أي أحرف إنهاء مدمجة في بيانات السلاسل لتحديد مكان انتهاء سلسلة وبدء أخرى. حتى البرنامج البسيط الذي يطبع "Hello world!" فقط يحتوي على أكثر من 1,500 سلسلة مرتبطة بنظام وقت تشغيل Go والمكتبات القياسية الأخرى. يمكن أن يتسبب هذا في قيام تطبيقات اكتشاف سلاسل ASCII النموذجية، مثل تلك التي يوفرها Ghidra، بإنشاء تعريفات سلاسل موجبة كاذبة يبلغ طولها عشرات الآلاف من الأحرف.

بدلاً من السلاسل المنتهية بـ null، يستخدم Go بنية سلسلة تتكون من مؤشر وقيمة طول. يتم إنشاء العديد من بنى السلاسل هذه على مكدس البرنامج في وقت التشغيل، لذا فإن استعادة مواقع بدء السلاسل الفردية وقيم أطوالها تتطلب تحليل الشيفرة الآلية المترجمة. توجد بعض النصوص البرمجية الحالية التي تؤدي هذا التحليل من خلال فحص أنماط معينة من تعليمات x86-64، لكنها تفوت البنى التي تم إنشاؤها باختلافات غير معالجة من التعليمات التي لها في النهاية التأثير نفسه على المكدس، كما أنها مقيدة ببنية تعليمات محددة (ISA).

تتجنب Ghostrings هاتين المشكلتين من خلال العمل مع عمليات P-Code المبسطة والمستقلة عن البنية التي ينتجها تحليل مفكك Ghidra.

معلومات الإصدار

حقوق النشر 2022 NCC Group. صدرت بموجب ترخيص GPLv3 (انظر LICENSE).

المؤلف الرئيسي للمشروع: James Chambers [email protected]

تنزيل الأداة
  • للاستفادة القصوى من GoStringFiller.java، حدد الأماكن التي تتغير فيها أطوال السلاسل في بيانات السلاسل غير المعرفة وعرّف السلاسل الأقرب إلى تلك الحدود. ثم أعد تشغيل GoStringFiller.java لملء المواضع تلقائيًا حيث يمكنه تحديد طول السلاسل المتبقية غير المعرفة بشكل صحيح.
  • (اختياري) أعد تشغيل أداة تحليل ASCII String المدمجة في Ghidra.
    • عطّل استبدال السلاسل الموجودة. شغّلها مع شرط مُنهي null ثم بدونه.