محلل ثنائيات Go آخر لـ IDAPro
English | 中文
ملاحظة:
الفرع الرئيسي الحالي (master) هو إصدار Python3. تم تغيير الفرع الرئيسي القديم إلى فرع py2، وهو غير مدعوم مؤقتًا.
تعليمات لفرع Python3
تم تطوير هذا الإصدار واختباره على macOS/Windows و IDA7.4+ و Python3.8.x.
إذا كانت هناك مشاكل على منصات أو إصدارات أخرى، نرحب بتقديم تقرير خطأ (issue) أو طلب سحب (Pull Request).
بالإضافة إلى ذلك، يجب ملاحظة أن IDA7.4 على macOS تستخدم Python3 المثبتة افتراضيًا، مما قد يتسبب في فشل تحميل المكتبات الخارجية التي قمت بتثبيتها بنفسك. تحتاج إلى التبديل إلى Python المثبتة عبر brew. يرجى الرجوع إلى هذا السكريبت لمعرفة طريقة التبديل المحددة.
مستوحى من golang_loader_assist و jeb-golang-analyzer، قمت بكتابة أداة تحليل أكثر اكتمالاً لملفات Go الثنائية لبرنامج IDAPro.
الميزات الرئيسية:
- تحديد وتحليل هيكل firstmoduledata في ملف Go الثنائي، وإضافة تعليق لكل حقل؛
- تحديد pclntab (جدول خطوط PC) بناءً على firstmoduledata وتحليله. ثم البحث عن أسماء الدوال ومسارات ملفات المصدر في pclntab وتحليلها واستعادتها. سيتم طباعة مسارات ملفات المصدر في نافذة الإخراج في IDAPro؛
- تحليل السلاسل النصية ومؤشرات السلاسل، وإضافة تعليق لكل سلسلة نصية، وإنشاء dref (مرجع بيانات) لكل مؤشر سلسلة؛
- وفقًا لـ firstmoduledata، البحث عن كل type وتحليله، وإضافة تعليق لكل سمة من سمات type، مما سيكون مفيدًا جدًا لباحثي البرامج الضارة لتحليل تعريف نوع معقد أو هيكل بيانات؛
- تحليل itab (جدول الواجهات).
معلومات مفيدة لعمل الهندسة العكسية لملفات Go الثنائية:

وهناك ميزتان مفيدتان في go_parser:
- تعمل بشكل جيد أيضًا مع الملفات الثنائية التي تحتوي على معلومات رأس ملف (File Header) غير صحيحة، خاصة معلومات رؤوس الأقسام (Section Headers) غير الصحيحة؛
- جميع الميزات المذكورة أعلاه صالحة للملفات الثنائية التي تم بناؤها باستخدام buildmode=pie.
نتيجة تحليل هيكل بيانات تكوين (config data structure) في DDGMiner v5029 (MD5: 95199e8f1ab987cd8179a60834644663) كما هو موضح أدناه:

وقائمة مسارات ملفات المصدر المعرفة من قبل المستخدم:

ملفات المشروع:
- go_parser.py: ملف الإدخال، اضغط [Alt+F7]، واختر هذا الملف وقم بتنفيذه؛
- common.py: تعريف المتغيرات والدوال المشتركة؛
- pclntbl.py: تحليل pclntab (جدول خطوط PC)؛
- strings.py: تحليل السلاسل النصية ومؤشرات السلاسل؛
- moduldata.py: تحليل firstmoduledata؛
- types_builder.py: تحليل types؛
- itab.py: تحليل itab (جدول الواجهات)؛
بالإضافة إلى ذلك، سيقوم str_ptr.py بتحليل مؤشرات السلاسل عن طريق تحديد عنوان البداية وعنوان النهاية لمؤشرات السلاسل يدويًا.
ملاحظة
- هذه الأداة مكتوبة بلغة Python3، وتم اختبارها على IDA7.4+؛
- تم ترحيل وحدة تحليل السلاسل النصية من golang_loader_assist، وأضفت ميزة تحليل مؤشرات السلاسل. وهي تدعم فقط بنية x86 (32 بت و 64 بت) في الوقت الحالي.
مراجع
- Analyzing Golang Executables
- Reversing GO binaries like a pro
- Reconstructing Program Semantics from Go binaries.pdf
- Go二进制文件逆向分析从基础到进阶——综述
- Go二进制文件逆向分析从基础到进阶——MetaInfo、函数符号和源码文件路径列表
- Go二进制文件逆向分析从基础到进阶——数据类型
- Go二进制文件逆向分析从基础到进阶——itab与strings
- Go二进制文件逆向分析从基础到进阶——Tips与实战案例