البرامج النصية لاستعادة تعريفات السلسلة في ثنائيات GO مع تحليل P-Code. تم اختباره مع x86 ، x86-64 ، الذراع ، و ARM64.
يمكن العثور عليها في فئة Golang في مدير البرنامج النصي.
GoDynamicStrings.javaGoFuncCallStrings.javaGoStaticStrings.javaGoKnownStrings.javadata/known_strings.json .GoStringFiller.javago.string.* بعد التحليل الأولي ، بناءً على ترتيب طول تصاعدي لبيانات السلسلة.هناك أيضًا بعض الاختلافات الخاصة في البرنامج النصي لتحليل السلسلة الديناميكية:
GoDynamicStringsSingle.javaGoDynamicStrings.java ، ولكنه يستخدم عملية decompiler واحدة. استخدم هذا إذا كان تحليل ثنائي يؤدي إلى عمليات إلغاء التوازي المتوازية لذاكرة نظام العادم.GoDynamicStringsHigh.javaيمكن العثور على ذلك في فئة PCODE في مدير البرنامج النصي.
PrintHighPCode.javaإليك التدفق العام لاستخدام هذه البرامج النصية لاستعادة تعريفات السلسلة في GO Binary:
.rodata أو .rdata أو __rodata . ثم انقر بزر الماوس الأيمن في قائمة الكود واختر "Clear Code Bytes".GoKnownStrings.java للكشف عن بعض السلاسل القياسية.GoStaticStrings.java .GoFuncCallStrings.java (إذا كانت النسخة الثنائية Golang مدعومة بميزات Golang المدمجة في Ghidra) .GoDynamicStrings.java .GoStringFiller.java .go.string.* في سلسلة البايت الأولى.go.string.* ، وتحديد أي سلاسل بنقاط بداية ونهاية واضحة.GoStringFiller.java ، حدد أين تتغير أطوال السلسلة في بيانات السلسلة غير المحددة وتحديد السلاسل الأقرب إلى تلك الحدود. ثم أعد تشغيل GoStringFiller.java لملء البقع تلقائيًا حيث يمكنه تحديد طول السلاسل غير المحددة بشكل صحيح.في غددرا:
ل Eclipse مع البرنامج المساعد Ghidradev:
بناء مع الكسوف:
بناء مباشرة مع Gradle:
$ cd Ghostrings
$ gradle -PGHIDRA_INSTALL_DIR= < ghidra_install_dir > هناك مشكلة معروفة مع برامج GO Engineering العكسية هي أن الافتقار إلى أطراف الطرف الفارغ في GO-ONTRINGS يجعل تعريفات سلسلة استعادة من الثنائيات المترجمة صعبة. يتم تخزين العديد من قيم السلسلة الثابتة لبرنامج GO في نقطة واحدة عملاقة في البناء المترجم ، دون أي أحرف Terminator مدمجة في بيانات السلسلة لتحديد مكان تنتهي إحدى السلسلة وتبدأ أخرى. حتى برنامج بسيط يطبع فقط "Hello World!" لديه أكثر من 1500 سلاسل في تكنولوجيا المعلومات المتعلقة بنظام وقت التشغيل GO والمكتبات القياسية الأخرى. يمكن أن يتسبب ذلك في تطبيقات اكتشاف سلسلة ASCII النموذجية ، مثل تلك التي توفرها Ghidra ، لإنشاء تعريفات سلسلة إيجابية زائفة تتراوح بين عشرات الآلاف من الأحرف.
بدلاً من السلاسل الفارغة ، يستخدم GO بنية سلسلة تتكون من مؤشر وقيمة طول. يتم إنشاء العديد من هياكل السلسلة هذه على مكدس البرنامج في وقت التشغيل ، لذا فإن استرداد مواقع بدء السلسلة الفردية وقيم الطول يتطلب تحليل رمز الجهاز المترجم. هناك عدد قليل من البرامج النصية الموجودة التي تؤدي هذا التحليل عن طريق التحقق من أنماط معينة من تعليمات X86-64 ، لكنها تفوت الهياكل التي تم إنشاؤها مع اختلافات غير معطلة من التعليمات التي لها في نهاية المطاف نفس التأثير على المكدس ، وهي مقصورة أيضًا على ISA محددة.
يتجنب Ghostrings كلتا المشكلتين من خلال العمل مع عمليات P-Code المستقلة المبسطة والمستقلة التي تنتجها تحليل Ghidra's Decompiler.
حقوق الطبع والنشر 2022 NCC Group. تم إصداره بموجب ترخيص GPLV3 (انظر الترخيص).
المؤلف الرئيسي للمشروع: جيمس تشامبرز جيمس.